diff --git a/hsweb-authorization/hsweb-authorization-api/pom.xml b/hsweb-authorization/hsweb-authorization-api/pom.xml index d7bdc7e7e..7a8681a31 100644 --- a/hsweb-authorization/hsweb-authorization-api/pom.xml +++ b/hsweb-authorization/hsweb-authorization-api/pom.xml @@ -5,7 +5,7 @@ hsweb-authorization org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-authorization/hsweb-authorization-basic/pom.xml b/hsweb-authorization/hsweb-authorization-basic/pom.xml index 1f5bb409b..40729307b 100644 --- a/hsweb-authorization/hsweb-authorization-basic/pom.xml +++ b/hsweb-authorization/hsweb-authorization-basic/pom.xml @@ -5,7 +5,7 @@ hsweb-authorization org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/handler/access/OwnCreatedDataAccessHandler.java b/hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/handler/access/OwnCreatedDataAccessHandler.java index 4f70701cf..c532a4118 100644 --- a/hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/handler/access/OwnCreatedDataAccessHandler.java +++ b/hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/handler/access/OwnCreatedDataAccessHandler.java @@ -3,6 +3,7 @@ package org.hswebframework.web.authorization.basic.handler.access; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.beanutils.PropertyUtilsBean; import org.hswebframework.ezorm.core.param.Term; +import org.hswebframework.ezorm.core.param.TermType; import org.hswebframework.utils.ClassUtils; import org.hswebframework.web.authorization.Permission; import org.hswebframework.web.authorization.access.DataAccessConfig; @@ -86,7 +87,7 @@ public class OwnCreatedDataAccessHandler implements DataAccessHandler { Class entityType = ClassUtils.getGenericType(controller.getClass(), 0); if (ClassUtils.instanceOf(entityType, RecordCreationEntity.class)) { QueryService queryService = - ((QueryController) controller).getService(); + ((QueryController) controller).getService(); RecordCreationEntity oldData = queryService.selectByPk(id); if (oldData != null && !context.getAuthentication().getUser().getId().equals(oldData.getCreatorId())) { return false; @@ -119,7 +120,7 @@ public class OwnCreatedDataAccessHandler implements DataAccessHandler { queryParamEntity.setTerms(new ArrayList<>()); //添加一个查询条件 queryParamEntity - .where(RecordCreationEntity.creatorId, userId) + .and(RecordCreationEntity.creatorId, TermType.eq, userId) //客户端提交的参数 作为嵌套参数 .nest().setTerms(oldParam); } else if (entity instanceof RecordCreationEntity) { diff --git a/hsweb-authorization/hsweb-authorization-jwt/pom.xml b/hsweb-authorization/hsweb-authorization-jwt/pom.xml index d5cc9432c..d437df19c 100644 --- a/hsweb-authorization/hsweb-authorization-jwt/pom.xml +++ b/hsweb-authorization/hsweb-authorization-jwt/pom.xml @@ -5,7 +5,7 @@ hsweb-authorization org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-auth-server/pom.xml b/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-auth-server/pom.xml index b028a49f2..f1420ee09 100644 --- a/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-auth-server/pom.xml +++ b/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-auth-server/pom.xml @@ -23,7 +23,7 @@ hsweb-authorization-oauth2 org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/pom.xml b/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/pom.xml index 811623df1..864a70e14 100644 --- a/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/pom.xml +++ b/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/pom.xml @@ -23,7 +23,7 @@ hsweb-authorization-oauth2 org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-core/pom.xml b/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-core/pom.xml index c1ca252d4..028260782 100644 --- a/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-core/pom.xml +++ b/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-core/pom.xml @@ -23,7 +23,7 @@ hsweb-authorization-oauth2 org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-authorization/hsweb-authorization-oauth2/pom.xml b/hsweb-authorization/hsweb-authorization-oauth2/pom.xml index be69ed90a..179767bd1 100644 --- a/hsweb-authorization/hsweb-authorization-oauth2/pom.xml +++ b/hsweb-authorization/hsweb-authorization-oauth2/pom.xml @@ -5,7 +5,7 @@ hsweb-authorization org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-authorization/pom.xml b/hsweb-authorization/pom.xml index 9022e8084..42a599028 100644 --- a/hsweb-authorization/pom.xml +++ b/hsweb-authorization/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-boost/hsweb-boost-aop/pom.xml b/hsweb-boost/hsweb-boost-aop/pom.xml index 52617141a..2c7df8e4c 100644 --- a/hsweb-boost/hsweb-boost-aop/pom.xml +++ b/hsweb-boost/hsweb-boost-aop/pom.xml @@ -23,7 +23,7 @@ hsweb-boost org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-boost/hsweb-boost-excel/pom.xml b/hsweb-boost/hsweb-boost-excel/pom.xml index 95243d88c..bb024e7c3 100644 --- a/hsweb-boost/hsweb-boost-excel/pom.xml +++ b/hsweb-boost/hsweb-boost-excel/pom.xml @@ -5,7 +5,7 @@ hsweb-boost org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-boost/hsweb-boost-ftp/pom.xml b/hsweb-boost/hsweb-boost-ftp/pom.xml index 00f533916..8f8f9c87f 100644 --- a/hsweb-boost/hsweb-boost-ftp/pom.xml +++ b/hsweb-boost/hsweb-boost-ftp/pom.xml @@ -5,7 +5,7 @@ hsweb-boost org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-boost/pom.xml b/hsweb-boost/pom.xml index 6333fc5eb..728c82a02 100644 --- a/hsweb-boost/pom.xml +++ b/hsweb-boost/pom.xml @@ -23,7 +23,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-commons/hsweb-commons-bean/pom.xml b/hsweb-commons/hsweb-commons-bean/pom.xml index 903211e4d..2c6ea19d3 100644 --- a/hsweb-commons/hsweb-commons-bean/pom.xml +++ b/hsweb-commons/hsweb-commons-bean/pom.xml @@ -5,7 +5,7 @@ hsweb-commons org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-commons/hsweb-commons-controller/pom.xml b/hsweb-commons/hsweb-commons-controller/pom.xml index 0ddebbc17..79fd5a038 100644 --- a/hsweb-commons/hsweb-commons-controller/pom.xml +++ b/hsweb-commons/hsweb-commons-controller/pom.xml @@ -23,7 +23,7 @@ hsweb-commons org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/CrudController.java b/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/CrudController.java index 789b405a1..dfb72d763 100644 --- a/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/CrudController.java +++ b/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/CrudController.java @@ -34,8 +34,8 @@ import org.hswebframework.web.service.CrudService; * @see CrudService * @since 3.0 */ -public interface CrudController - extends QueryController +public interface CrudController + extends QueryController , UpdateController , CreateController , DeleteController { diff --git a/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/GenericEntityController.java b/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/GenericEntityController.java index 98e2429a8..141193cf7 100644 --- a/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/GenericEntityController.java +++ b/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/GenericEntityController.java @@ -32,7 +32,7 @@ import org.hswebframework.web.service.CrudService; * @see CrudService */ public interface GenericEntityController, PK, Q extends Entity, M> - extends CrudController { + extends CrudController { @Override @Authorize(ignore = true) diff --git a/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/QueryController.java b/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/QueryController.java index 8f2fe97b9..d16097d7b 100644 --- a/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/QueryController.java +++ b/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/QueryController.java @@ -40,12 +40,11 @@ import static org.hswebframework.web.controller.message.ResponseMessage.ok; * * @param 实体类型 * @param 主键类型 - * @param 查询条件实体类型,默认提供{@link QueryParamEntity}实现 * @author zhouhao * @see QueryParamEntity * @see 3.0 */ -public interface QueryController { +public interface QueryController { /** * 获取实现了{@link QueryByEntityService}和{@link QueryService}的服务类 @@ -69,24 +68,22 @@ public interface QueryController { @Authorize(action = Permission.ACTION_QUERY) @GetMapping @ApiOperation(value = "根据动态条件查询", responseReference = "get") - default ResponseMessage> list(Q param) { + default ResponseMessage> list(QueryParamEntity param) { return ok(getService().selectPager(param)); } @Authorize(action = Permission.ACTION_QUERY) @GetMapping("/no-paging") @ApiOperation(value = "不分页动态查询", responseReference = "get") - default ResponseMessage> listNoPaging(Q param) { - if (param instanceof QueryParamEntity) { - ((QueryParamEntity) param).setPaging(false); - } + default ResponseMessage> listNoPaging(QueryParamEntity param) { + return ok(getService().select(param)); } @Authorize(action = Permission.ACTION_QUERY) @GetMapping("/count") @ApiOperation(value = "根据动态条件统计", responseReference = "get") - default ResponseMessage count(Q param) { + default ResponseMessage count(QueryParamEntity param) { return ok(getService().count(param)); } diff --git a/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/SimpleCrudController.java b/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/SimpleCrudController.java index b0ab97b4b..1bb5712e1 100644 --- a/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/SimpleCrudController.java +++ b/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/SimpleCrudController.java @@ -34,8 +34,8 @@ import org.springframework.beans.BeanUtils; * @see CrudService * @since 3.0 */ -public interface SimpleCrudController - extends QueryController +public interface SimpleCrudController + extends QueryController , UpdateController , CreateController , DeleteController { diff --git a/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/SimpleGenericEntityController.java b/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/SimpleGenericEntityController.java index 963d9516d..cd9dfbe36 100644 --- a/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/SimpleGenericEntityController.java +++ b/hsweb-commons/hsweb-commons-controller/src/main/java/org/hswebframework/web/controller/SimpleGenericEntityController.java @@ -21,6 +21,7 @@ package org.hswebframework.web.controller; import org.hswebframework.web.authorization.annotation.Authorize; import org.hswebframework.web.commons.entity.Entity; import org.hswebframework.web.commons.entity.GenericEntity; +import org.hswebframework.web.commons.entity.param.QueryParamEntity; import org.hswebframework.web.service.CrudService; /** @@ -32,7 +33,7 @@ import org.hswebframework.web.service.CrudService; * @see CrudService */ public interface SimpleGenericEntityController, PK, Q extends Entity> - extends SimpleCrudController { + extends SimpleCrudController { @Override @Authorize(ignore = true) diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-api/pom.xml b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-api/pom.xml index 004071f18..d8b4f7a5d 100644 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-api/pom.xml +++ b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-api/pom.xml @@ -23,7 +23,7 @@ hsweb-commons-dao org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/README.md b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/README.md deleted file mode 100644 index 3d8c0bc2b..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/README.md +++ /dev/null @@ -1,224 +0,0 @@ -# 基于mybatis的通用crud实现 - -使用myabtis和easy-orm对`hsweb-commons-dao-api`进行了实现,提供动态条件对crud支持. - -# 使用 -在pom.xml中引入: - -```xml - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${hsweb.framework.version} - -``` - -# 配置 -application.yml - -```yaml -mybatis: - # 扫描myabtis mapper xml的路径 - mapper-locations: classpath*:com/company/app/**/*Mapper.xml - # 这里需要配置扫描枚举,才能支持对实现了EnumDict接口的枚举进行序列化和反序列化 - type-handlers-package: com.company.app.enums - # 是否开启动态数据源,开启后才能支持在同一个dao中切换数据源 - dynamic-datasource: false - # 排除扫描xml配置,用于需要拓展无法修改的mapper xml时,通过此配置不加载对应的xml,然后通过mapper-locations配置加载新的xml. - mapper-location-excludes: classpath*:com/company/app/x/y/*Mapper.xml -``` - -# 使用通用Mapper XMl - -目前仅支持xml的方式,例如: - -```xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -``` - -⚠️注意:query(count),update,delete方法的参数目前仅实现了: - -`org.hswebframework.web.commons.entity.param.QueryParamEntity` - -`org.hswebframework.web.commons.entity.param.UpdateParamEntity` - -`org.hswebframework.web.commons.entity.param.DeleteParamEntity` - -因此在实际调用都时候,目前只能接收对应以上参数. -但是在接口中仍然使用`org.hswebframework.web.commons.entity.Entity`作为参数,用于预留给以后提供更多都参数实现. - -# 动态条件 -此模块使用hsweb-easyorm项目来进行动态SQL条件的生成,主要是通过:在上述的`**ParamEntity`类中的属性 `List terms;` -进行处理,`Term`为一个SQL条件,例如一个简单的嵌套条件: -```text - [{ - column:"name", - termType:"eq", #SQL条件类型 = - value:"张三", - terms:[ - { - column:"address", - termType:"like", //SQL条件类型 like - value:"北京%" - }, - { - column:"address", - type:"or" //和前面的条件成or关系,如果不指定,默认为and - termType:"like", //SQL条件类型 like - value:"上海%" - } - ] - }] -``` -对应的sql条件为: where name = ? and (address like ? or address lke ?) - -条件构造方式看上去过于复杂? 可以使用DSL方式的构建工具类:`org.hswebframework.ezorm.core.dsl.Query`来进行构建. -在[hsweb-commons-service-api](../../hsweb-commons-service/hsweb-commons-service-api)模块也会提供便捷的条件创建方式. - -如果参数来自客户端请求,可封装一个通用的js进行构建, 你可以在前端放心的构建参数,所有的条件都使用参数化预编译的方式拼接SQL,不存在SQL注入问题. - -## 默认支持的动态条件列表 -| termType | 对应SQL | 说明 | -| ------------- |:-------------:| ----| -|eq|=?| 等于| -|not |!=?| 不等于| -|gt|>?| 大于| -|gte|>= ?| 大于等于| -|lt|< ?| 小于| -|lte| <= ?| 小于等于| -|like|like ?| 模糊匹配,如果需要统配符,请自行拼接value,如: value+"%" | -|nlike|not like ?| 同like | -|in|in(?,?)| value 可使用半角逗号(,)分隔,或者数组或者`Collection`接口的实现 | -|nin|not in(?,?)| value 可使用半角逗号(,)分隔,或者数组或者`Collection`接口的实现 | -|isnull| is null | value为任意不为空的值即可 | -|notnull| not null | value为任意不为空的值即可 | -|empty| ='' | value为任意不为空的值即可 | -|nempty| !='' | value为任意不为空的值即可 | -|bwt|between ? and ? | value 可使用半角逗号(,)分隔,或者使用数组或者Collection接口的实现| -|nbwt|not between ? and ? | value 可使用半角逗号(,)分隔,或者使用数组或者Collection接口的实现| - -## 拓展动态条件 -在某些需要自定义查询条件的场景,比如关联条件,可通过实现`SqlTermCustomer`接口并注入到spring来进行自定义SQL条件的拼接, -例如: -```java -//AbstractSqlTermCustomer提供了一些便利的方法 -@org.springframework.stereotype.Component -public class MyTerm extends AbstractSqlTermCustomer{ - - @Override - public String getTermType() { - //对应Term参数中的属性termType - return "my-term"; - } - - @Override - public Dialect[] forDialect() { - //对特定对数据库类型生效,返回null时对全部支持对数据库类型生效 - return null; - } - - - @Override - public SqlAppender accept(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) { - //当传入了my-term条件对时候,会调用此方法进行拼接 - //对传入对参数进行转换,此步骤为必须的 - ChangedTermValue termValue =createChangedValue(term); - - //转换参数,将参数转为集合,以支持in查询. - List idList = BoostTermTypeMapper.convertList(column, termValue.getOld()); - - SqlAppender appender= new SqlAppender(); - - appender.add(createColumnName(column,tableAlias),"in (select id from my_table where t_id"); - - //根据参数的数量,构造对应的=或者in条件 - Object newValue= appendCondition(idList,wherePrefix,appender); - - appender.add(")"); - //设置新的值到条件中 - termValue.setValue(newValue); - - return appender; - } -} -``` - -使用: 在查询的时候,将`Term`的`termType`属性值设置为`my-term`即可. diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/pom.xml b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/pom.xml deleted file mode 100644 index 9feebe34c..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/pom.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - hsweb-commons-dao - org.hswebframework.web - 3.0.10-SNAPSHOT - ../pom.xml - - 4.0.0 - - hsweb-commons-dao-mybatis - - 通用增删改查-通用Dao的mybatis实现 - - - - org.hswebframework.web - hsweb-commons-dao-api - ${project.version} - - - org.hswebframework.web - hsweb-core - ${project.version} - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 1.1.1 - - - org.hswebframework.web - hsweb-datasource-api - ${project.version} - - - org.hibernate.javax.persistence - hibernate-jpa-2.1-api - 1.0.0.Final - true - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - com.alibaba - druid - 1.0.26 - test - - - - - - - - com.h2database - h2 - test - - - org.glassfish - javax.el - test - - - - \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/EnumDictHandlerRegister.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/EnumDictHandlerRegister.java deleted file mode 100644 index 4d5659712..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/EnumDictHandlerRegister.java +++ /dev/null @@ -1,158 +0,0 @@ -package org.hswebframework.web.dao.mybatis; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.type.JdbcType; -import org.apache.ibatis.type.MappedJdbcTypes; -import org.apache.ibatis.type.TypeHandler; -import org.apache.ibatis.type.TypeHandlerRegistry; -import org.hswebframework.web.dict.EnumDict; -import org.hswebframework.web.dict.defaults.DefaultDictDefineRepository; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.core.io.support.ResourcePatternResolver; -import org.springframework.core.type.classreading.CachingMetadataReaderFactory; -import org.springframework.core.type.classreading.MetadataReader; -import org.springframework.core.type.classreading.MetadataReaderFactory; -import org.springframework.util.ClassUtils; - -import java.io.IOException; -import java.lang.reflect.Array; -import java.sql.CallableStatement; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; - -import static org.springframework.util.StringUtils.tokenizeToStringArray; - -@Slf4j -public class EnumDictHandlerRegister { - - static TypeHandlerRegistry typeHandlerRegistry; - - private static MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(); - - private static ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); - - - public static void register(String packages) { - register(tokenizeToStringArray(packages, - ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS)); - } - - @SuppressWarnings("all") - public static void register(String[] packages) { - if (typeHandlerRegistry == null) { - log.error("请在spring容器初始化后再调用此方法!"); - return; - } - for (String basePackage : packages) { - String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + - ClassUtils.convertClassNameToResourcePath(basePackage) + "/**/*.class"; - try { - Resource[] resources = resourcePatternResolver.getResources(packageSearchPath); - for (Resource resource : resources) { - try { - MetadataReader reader = metadataReaderFactory.getMetadataReader(resource); - Class enumType = Class.forName(reader.getClassMetadata().getClassName()); - if (enumType.isEnum() && EnumDict.class.isAssignableFrom(enumType)) { - log.debug("register enum dict:{}", enumType); - DefaultDictDefineRepository.registerDefine(DefaultDictDefineRepository.parseEnumDict(enumType)); - //注册枚举类型 - typeHandlerRegistry.register(enumType, new EnumDictHandler(enumType)); - - //注册枚举数组类型 - typeHandlerRegistry.register(Array.newInstance(enumType, 0).getClass(), new EnumDictArrayHandler(enumType)); - } - } catch (Exception | Error ignore) { - - } - } - } catch (IOException e) { - log.warn("register enum dict error", e); - } - } - } - - @Getter - @Setter - @AllArgsConstructor - @MappedJdbcTypes({JdbcType.NUMERIC, JdbcType.TINYINT, JdbcType.INTEGER, JdbcType.BIGINT}) - static class EnumDictArrayHandler implements TypeHandler { - - private Class type; - - @Override - public void setParameter(PreparedStatement ps, int i, Object[] parameter, JdbcType jdbcType) throws SQLException { - T[] ts = ((T[]) parameter); - ps.setLong(i, EnumDict.toMask(ts)); - } - - @Override - public Object[] getResult(ResultSet rs, String columnName) throws SQLException { - return toArray(rs.getLong(columnName)); - } - - @Override - public Object[] getResult(ResultSet rs, int columnIndex) throws SQLException { - return toArray(rs.getLong(columnIndex)); - } - - @Override - public Object[] getResult(CallableStatement cs, int columnIndex) throws SQLException { - return toArray(cs.getLong(columnIndex)); - } - - private Object[] toArray(Long value) { - if (null == value) { - return null; - } - List ts = EnumDict.getByMask(getType(), value); - return ts.toArray((Object[]) Array.newInstance(type, ts.size())); - } - } - - @Getter - @Setter - @AllArgsConstructor - @MappedJdbcTypes({JdbcType.VARCHAR, JdbcType.BIT, - JdbcType.BOOLEAN, JdbcType.NUMERIC, - JdbcType.TINYINT, JdbcType.INTEGER, - JdbcType.BIGINT, JdbcType.DECIMAL, - JdbcType.CHAR}) - static class EnumDictHandler implements TypeHandler { - - private Class type; - - @Override - public void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { - if (parameter == null) { - ps.setNull(i, jdbcType.TYPE_CODE); - } else { - ps.setObject(i, parameter.getValue()); - } - } - - @Override - public T getResult(ResultSet rs, String columnName) throws SQLException { - Object val = rs.getObject(columnName); - return EnumDict.findByValue(getType(), val).orElse(null); - } - - @Override - public T getResult(ResultSet rs, int columnIndex) throws SQLException { - Object val = rs.getObject(columnIndex); - return EnumDict.findByValue(getType(), val).orElse(null); - } - - @Override - public T getResult(CallableStatement cs, int columnIndex) throws SQLException { - Object val = cs.getObject(columnIndex); - return EnumDict.findByValue(getType(), val).orElse(null); - } - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MyBatisAutoConfiguration.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MyBatisAutoConfiguration.java deleted file mode 100644 index 072f7d455..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MyBatisAutoConfiguration.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis; - -import org.apache.ibatis.mapping.DatabaseIdProvider; -import org.apache.ibatis.plugin.Interceptor; -import org.apache.ibatis.session.SqlSessionFactory; -import org.apache.ibatis.session.TransactionIsolationLevel; -import org.apache.ibatis.transaction.Transaction; -import org.hswebframework.web.commons.entity.factory.EntityFactory; -import org.hswebframework.web.dao.mybatis.builder.EasyOrmSqlBuilder; -import org.hswebframework.web.dao.mybatis.dynamic.DynamicDataSourceSqlSessionFactoryBuilder; -import org.hswebframework.web.dao.mybatis.dynamic.DynamicSpringManagedTransaction; -import org.mybatis.spring.SqlSessionFactoryBean; -import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; -import org.mybatis.spring.transaction.SpringManagedTransactionFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; -import org.springframework.core.io.DefaultResourceLoader; -import org.springframework.core.io.ResourceLoader; -import org.springframework.util.StringUtils; - -import javax.sql.DataSource; - -@Configuration -@EnableConfigurationProperties(MybatisProperties.class) -public class MyBatisAutoConfiguration { - - @Autowired(required = false) - private Interceptor[] interceptors; - - @Autowired - private ResourceLoader resourceLoader = new DefaultResourceLoader(); - - @Autowired(required = false) - private DatabaseIdProvider databaseIdProvider; - - @Autowired(required = false) - private EntityFactory entityFactory; - - @Bean - @Primary - @ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX) - public MybatisProperties mybatisProperties() { - return new MybatisProperties(); - } - - @Bean(name = "sqlSessionFactory") - @Primary - public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { - SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); - MybatisProperties mybatisProperties = this.mybatisProperties(); - if (null != entityFactory) { - factory.setObjectFactory(new MybatisEntityFactory(entityFactory)); - } - factory.setVfs(SpringBootVFS.class); - if (mybatisProperties().isDynamicDatasource()) { - factory.setSqlSessionFactoryBuilder(new DynamicDataSourceSqlSessionFactoryBuilder()); - factory.setTransactionFactory(new SpringManagedTransactionFactory() { - @Override - public Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit) { - return new DynamicSpringManagedTransaction(); - } - }); - } - factory.setDataSource(dataSource); - if (StringUtils.hasText(mybatisProperties.getConfigLocation())) { - factory.setConfigLocation(this.resourceLoader.getResource(mybatisProperties - .getConfigLocation())); - } - if (mybatisProperties.getConfiguration() != null) { - factory.setConfiguration(mybatisProperties.getConfiguration()); - } - if (this.interceptors != null && this.interceptors.length > 0) { - factory.setPlugins(this.interceptors); - } - if (this.databaseIdProvider != null) { - factory.setDatabaseIdProvider(this.databaseIdProvider); - } - factory.setTypeAliasesPackage(mybatisProperties.getTypeAliasesPackage()); - String typeHandlers = "org.hswebframework.web.dao.mybatis.handler"; - if (mybatisProperties.getTypeHandlersPackage() != null) { - typeHandlers = typeHandlers + ";" + mybatisProperties.getTypeHandlersPackage(); - } - factory.setTypeHandlersPackage(typeHandlers); - factory.setMapperLocations(mybatisProperties.resolveMapperLocations()); - - SqlSessionFactory sqlSessionFactory = factory.getObject(); - MybatisUtils.sqlSession = sqlSessionFactory; - - EnumDictHandlerRegister.typeHandlerRegistry = sqlSessionFactory.getConfiguration().getTypeHandlerRegistry(); - EnumDictHandlerRegister.register("org.hswebframework.web;" + mybatisProperties.getTypeHandlersPackage()); - - try { - Class.forName("javax.persistence.Table"); - EasyOrmSqlBuilder.getInstance().useJpa = mybatisProperties.isUseJpa(); - } catch (@SuppressWarnings("all") Exception ignore) { - } - EasyOrmSqlBuilder.getInstance().entityFactory = entityFactory; - - return sqlSessionFactory; - } - - -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisDaoAutoConfiguration.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisDaoAutoConfiguration.java deleted file mode 100644 index c0033fda8..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisDaoAutoConfiguration.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis; - -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.web.dao.Dao; -import org.hswebframework.web.dao.mybatis.mapper.SqlTermCustomizer; -import org.hswebframework.web.dao.mybatis.mapper.dict.DictInTermTypeMapper; -import org.hswebframework.web.dao.mybatis.mapper.dict.DictTermTypeMapper; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -import java.util.Arrays; -import java.util.List; - -@Configuration -@ComponentScan("org.hswebframework.web.dao.mybatis") -@MapperScan(value = "org.hswebframework.web.dao" - , markerInterface = Dao.class - , sqlSessionFactoryRef = "sqlSessionFactory") -@AutoConfigureAfter(MyBatisAutoConfiguration.class) -@EnableConfigurationProperties(MybatisProperties.class) -public class MybatisDaoAutoConfiguration { - @Bean - public DictTermTypeMapper dictTermTypeMapper() { - return new DictTermTypeMapper(false); - } - - @Bean - public DictTermTypeMapper dictNotTermTypeMapper() { - return new DictTermTypeMapper(true); - } - - @Bean - public DictInTermTypeMapper dictInTermTypeMapper() { - return new DictInTermTypeMapper(false); - } - - @Bean - public DictInTermTypeMapper dictNotInTermTypeMapper() { - return new DictInTermTypeMapper(true); - } - - @Bean - public BeanPostProcessor sqlTermCustomizerRegister() { - - List dialects = Arrays.asList( - Dialect.H2 - , Dialect.MYSQL - , Dialect.ORACLE - , Dialect.POSTGRES - , Dialect.MSSQL); - - return new BeanPostProcessor() { - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - return bean; - } - - @Override - public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - if (bean instanceof SqlTermCustomizer) { - SqlTermCustomizer customizer = ((SqlTermCustomizer) bean); - if (customizer.forDialect() != null) { - for (Dialect dialect : customizer.forDialect()) { - dialect.setTermTypeMapper(customizer.getTermType(), customizer); - } - } else { - dialects.forEach(dialect -> dialect.setTermTypeMapper(customizer.getTermType(), customizer)); - } - } - return bean; - } - }; - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisEntityFactory.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisEntityFactory.java deleted file mode 100644 index 495710efa..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisEntityFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.hswebframework.web.dao.mybatis; - -import org.apache.ibatis.reflection.factory.DefaultObjectFactory; -import org.hswebframework.web.commons.entity.factory.EntityFactory; - -import java.util.*; - -/** - * 使用EntityFactory来拓展mybatis实体 - * - * @author zhouhao - */ -public class MybatisEntityFactory extends DefaultObjectFactory { - - private static final long serialVersionUID = -7388760632000329910L; - - private transient EntityFactory entityFactory; - - public MybatisEntityFactory(EntityFactory entityFactory) { - this.entityFactory = entityFactory; - } - - @Override - protected Class resolveInterface(Class type) { - Class classToCreate; - if (type == List.class || type == Collection.class || type == Iterable.class) { - classToCreate = ArrayList.class; - } else if (type == Map.class) { - classToCreate = HashMap.class; - } else if (type == SortedSet.class) { // issue #510 Collections Support - classToCreate = TreeSet.class; - } else if (type == Set.class) { - classToCreate = HashSet.class; - } else { - // entity interface - classToCreate = entityFactory.getInstanceType(type); - } - return classToCreate; - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisMapperCustomizer.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisMapperCustomizer.java deleted file mode 100644 index 14f969a08..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisMapperCustomizer.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.hswebframework.web.dao.mybatis; - -/** - * 排除不需要加载的mapper.xml - * - * @author zhouhao - * @since 3.0 - */ -public interface MybatisMapperCustomizer { - String[] getExcludes(); - - String[] getIncludes(); -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisProperties.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisProperties.java deleted file mode 100644 index 1fd4d85dd..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisProperties.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis; - -import org.hswebframework.web.datasource.DataSourceHolder; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; - -import java.io.IOException; -import java.util.*; -import java.util.stream.Collectors; - -/** - * mybatis配置,继承官方配置类,增加一些属性以拓展更多功能 - *
    - *
  • 是否启用动态数据源{@link this#dynamicDatasource}
  • - *
  • 可设置不加载的配置{@link this#mapperLocationExcludes}
  • - *
- * - * @author zhouhao - * @see org.mybatis.spring.boot.autoconfigure.MybatisProperties - * @since 3.0 - */ -public class MybatisProperties extends org.mybatis.spring.boot.autoconfigure.MybatisProperties { - /** - * 默认支持的hsweb mapper - */ - private static final String defaultMapperLocation = "classpath*:org/hswebframework/web/dao/mybatis/mappers/**/*.xml"; - /** - * 是否启用动态数据源 - * 启用后调用{@link DataSourceHolder#switcher()},mybatis也会进行数据源切换 - * - * @see DataSourceHolder#switcher() - */ - private boolean dynamicDatasource = false; - /** - * 排除加载的mapper.xml - * 想自定义mapper并覆盖原始mapper的场景下,通过设置此属性来排除配置文件。 - * 排除使用{@link Resource#getURL()#toString()}进行对比 - */ - private String[] mapperLocationExcludes = null; - /** - * 使用jpa注解来解析表结构,动态生成查询条件 - */ - private boolean useJpa = true; - - private List mybatisMappers; - - @Autowired(required = false) - public void setMybatisMappers(List mybatisMappers) { - this.mybatisMappers = mybatisMappers; - } - - public String[] getMapperLocationExcludes() { - return mapperLocationExcludes; - } - - public void setMapperLocationExcludes(String[] mapperLocationExcludes) { - this.mapperLocationExcludes = mapperLocationExcludes; - } - - public boolean isDynamicDatasource() { - return dynamicDatasource; - } - - public void setDynamicDatasource(boolean dynamicDatasource) { - this.dynamicDatasource = dynamicDatasource; - } - - public void setUseJpa(boolean useJpa) { - this.useJpa = useJpa; - } - - public boolean isUseJpa() { - return useJpa; - } - - @Override - public Resource[] resolveMapperLocations() { - Map resources = new HashMap<>(); - Set locations; - - if (this.getMapperLocations() == null) { - locations = new HashSet<>(); - } else { - locations = Arrays.stream(getMapperLocations()).collect(Collectors.toSet()); - } - - locations.add(defaultMapperLocation); - - if (mybatisMappers != null) { - mybatisMappers.stream() - .map(MybatisMapperCustomizer::getIncludes) - .flatMap(Arrays::stream) - .forEach(locations::add); - } - - for (String mapperLocation : locations) { - Resource[] mappers; - try { - mappers = new PathMatchingResourcePatternResolver().getResources(mapperLocation); - for (Resource mapper : mappers) { - resources.put(mapper.getURL().toString(), mapper); - } - } catch (IOException e) { - } - } - Set excludes = new HashSet<>(); - if (mybatisMappers != null) { - mybatisMappers.stream() - .map(MybatisMapperCustomizer::getExcludes) - .flatMap(Arrays::stream) - .forEach(excludes::add); - } - if (mapperLocationExcludes != null && mapperLocationExcludes.length > 0) { - for (String exclude : mapperLocationExcludes) { - excludes.add(exclude); - } - } - PathMatchingResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); - //排除不需要的配置 - for (String mapperLocationExclude : excludes) { - try { - Resource[] excludesMappers = resourcePatternResolver.getResources(mapperLocationExclude); - for (Resource excludesMapper : excludesMappers) { - resources.remove(excludesMapper.getURL().toString()); - } - } catch (IOException e) { - } - } - Resource[] mapperLocations = new Resource[resources.size()]; - mapperLocations = resources.values().toArray(mapperLocations); - return mapperLocations; - } - -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisUtils.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisUtils.java deleted file mode 100644 index 7daf31415..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisUtils.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis; - -import org.apache.ibatis.mapping.ResultMap; -import org.apache.ibatis.session.SqlSessionFactory; - -import java.util.concurrent.CountDownLatch; - -/** - * @since 2.0 - */ -public class MybatisUtils { - volatile static SqlSessionFactory sqlSession; - - public static ResultMap getResultMap(String id) { - return getSqlSession().getConfiguration().getResultMap(id); - } - - public static SqlSessionFactory getSqlSession() { - if (sqlSession == null) { - throw new UnsupportedOperationException("sqlSession is null"); - } - return sqlSession; - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/EasyOrmSqlBuilder.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/EasyOrmSqlBuilder.java deleted file mode 100644 index b819435d3..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/EasyOrmSqlBuilder.java +++ /dev/null @@ -1,546 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.builder; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.beanutils.BeanUtilsBean; -import org.apache.commons.beanutils.PropertyUtilsBean; -import org.apache.ibatis.mapping.ResultMap; -import org.apache.ibatis.mapping.ResultMapping; -import org.hswebframework.ezorm.core.ValueConverter; -import org.hswebframework.ezorm.core.param.*; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.meta.RDBDatabaseMetaData; -import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; -import org.hswebframework.ezorm.rdb.meta.converter.BooleanValueConverter; -import org.hswebframework.ezorm.rdb.meta.converter.DateTimeConverter; -import org.hswebframework.ezorm.rdb.meta.converter.NumberValueConverter; -import org.hswebframework.ezorm.rdb.render.Sql; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.SqlRender; -import org.hswebframework.ezorm.rdb.render.dialect.*; -import org.hswebframework.ezorm.rdb.render.support.simple.CommonSqlRender; -import org.hswebframework.ezorm.rdb.render.support.simple.SimpleWhereSqlBuilder; -import org.hswebframework.web.BusinessException; -import org.hswebframework.web.bean.FastBeanCopier; -import org.hswebframework.web.commons.entity.Entity; -import org.hswebframework.web.commons.entity.factory.EntityFactory; -import org.hswebframework.web.dao.mybatis.builder.jpa.JpaAnnotationParser; -import org.hswebframework.web.dao.mybatis.handler.NumberBooleanTypeHandler; -import org.hswebframework.web.dao.mybatis.plgins.pager.Pager; -import org.hswebframework.web.dao.mybatis.MybatisUtils; -import org.hswebframework.utils.StringUtils; -import org.hswebframework.web.datasource.DataSourceHolder; -import org.hswebframework.web.datasource.DatabaseType; - -import java.sql.JDBCType; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - - -/** - * 使用easyorm 动态构建 sql - * - * @author zhouhao - * @since 2.0 - */ -@Slf4j -public class EasyOrmSqlBuilder { - - public volatile boolean useJpa = false; - - public EntityFactory entityFactory; - - private static final EasyOrmSqlBuilder instance = new EasyOrmSqlBuilder(); - protected static final Map simpleName = new HashMap<>(); - - protected PropertyUtilsBean propertyUtils = BeanUtilsBean.getInstance().getPropertyUtils(); - - public static EasyOrmSqlBuilder getInstance() { - return instance; - } - - private EasyOrmSqlBuilder() { - } - - static { - simpleName.put(Integer.class, "int"); - simpleName.put(Byte.class, "byte"); - simpleName.put(Double.class, "double"); - simpleName.put(Float.class, "float"); - simpleName.put(Boolean.class, "boolean"); - simpleName.put(Long.class, "long"); - simpleName.put(Short.class, "short"); - simpleName.put(Character.class, "char"); - simpleName.put(String.class, "string"); - simpleName.put(int.class, "int"); - simpleName.put(double.class, "double"); - simpleName.put(float.class, "float"); - simpleName.put(boolean.class, "boolean"); - simpleName.put(long.class, "long"); - simpleName.put(short.class, "short"); - simpleName.put(char.class, "char"); - simpleName.put(byte.class, "byte"); - } - - public static String getJavaType(Class type) { - String javaType = simpleName.get(type); - if (javaType == null) { - javaType = type.getName(); - } - return javaType; - } - - public static final RDBDatabaseMetaData mysql = new MysqlMeta(); - public static final RDBDatabaseMetaData oracle = new OracleMeta(); - public static final RDBDatabaseMetaData h2 = new H2Meta(); - public static final RDBDatabaseMetaData postgresql = new PGMeta(); - public static final RDBDatabaseMetaData mssql = new MSSQLMeta(); - - private final ConcurrentMap> metaCache = new ConcurrentHashMap<>(); - - public RDBDatabaseMetaData getActiveDatabase() { - DatabaseType type = DataSourceHolder.currentDatabaseType(); - switch (type) { - case mysql: - return mysql; - case oracle: - return oracle; - case postgresql: - return postgresql; - case h2: - return h2; - case jtds_sqlserver: - case sqlserver: - return mssql; - default: - log.warn("不支持的数据库类型:[{}]", type); - return h2; - } - } - - private String getRealTableName(String tableName) { - - String newTable = DataSourceHolder.tableSwitcher().getTable(tableName); - - if (!tableName.equals(newTable)) { - log.debug("use new table [{}] for [{}]", newTable, tableName); - } - return newTable; - - } - - private List createColumn(String prefix, String columnName, ResultMapping resultMapping) { - List metaData = new ArrayList<>(); - if (resultMapping.getNestedQueryId() == null) { - - if (resultMapping.getNestedResultMapId() != null) { - ResultMap nests = MybatisUtils.getResultMap(resultMapping.getNestedResultMapId()); - Set resultMappings = new HashSet<>(nests.getResultMappings()); - resultMappings.addAll(nests.getIdResultMappings()); - for (ResultMapping mapping : resultMappings) { - metaData.addAll(createColumn(resultMapping.getProperty(), - org.springframework.util.StringUtils.hasText(resultMapping.getColumn()) - ? resultMapping.getColumn() - : resultMapping.getProperty(), - mapping)); - } - return metaData; - } - - JDBCType jdbcType = JDBCType.VARCHAR; - try { - jdbcType = JDBCType.valueOf(resultMapping.getJdbcType().name()); - } catch (Exception e) { - log.warn("can not parse jdbcType:{}", resultMapping.getJdbcType()); - } - RDBColumnMetaData column = new RDBColumnMetaData(); - column.setJdbcType(jdbcType); - column.setName(org.springframework.util.StringUtils.hasText(columnName) - ? columnName.concat(".").concat(resultMapping.getColumn()) : resultMapping.getColumn()); - - if (resultMapping.getTypeHandler() != null) { - column.setProperty("typeHandler", resultMapping.getTypeHandler().getClass().getName()); - } - if (!StringUtils.isNullOrEmpty(resultMapping.getProperty())) { - column.setAlias(org.springframework.util.StringUtils.hasText(prefix) - ? prefix.concat(".").concat(resultMapping.getProperty()) : resultMapping.getProperty()); - - } - column.setJavaType(resultMapping.getJavaType()); - column.setProperty("resultMapping", resultMapping); - metaData.add(column); - } - return metaData; - } - - protected RDBTableMetaData createMeta(String tableName, String resultMapId) { -// tableName = getRealTableName(tableName); - RDBDatabaseMetaData active = getActiveDatabase(); - String cacheKey = tableName.concat("-").concat(resultMapId); - Map cache = metaCache.computeIfAbsent(active, k -> new ConcurrentHashMap<>()); - - RDBTableMetaData cached = cache.get(cacheKey); - if (cached != null) { - return cached; - } - - RDBTableMetaData rdbTableMetaData = new RDBTableMetaData() { - @Override - public String getName() { - //动态切换表名 - return getRealTableName(tableName); - } - }; - ResultMap resultMaps = MybatisUtils.getResultMap(resultMapId); - rdbTableMetaData.setName(tableName); - rdbTableMetaData.setDatabaseMetaData(active); - - List resultMappings = new ArrayList<>(resultMaps.getResultMappings()); - resultMappings.addAll(resultMaps.getIdResultMappings()); - - resultMappings.stream() - .map(mapping -> this.createColumn(null, null, mapping)) - .flatMap(Collection::stream) - .forEach(rdbTableMetaData::addColumn); - - if (useJpa) { - Class type = entityFactory == null ? resultMaps.getType() : entityFactory.getInstanceType(resultMaps.getType()); - RDBTableMetaData parseResult = JpaAnnotationParser.parseMetaDataFromEntity(type); - if (parseResult != null) { - for (RDBColumnMetaData columnMetaData : parseResult.getColumns()) { - if (rdbTableMetaData.findColumn(columnMetaData.getName()) == null) { - columnMetaData = columnMetaData.clone(); - columnMetaData.setProperty("fromJpa", true); - rdbTableMetaData.addColumn(columnMetaData); - } - } - } - } - for (RDBColumnMetaData column : rdbTableMetaData.getColumns()) { - //时间 - if (column.getJdbcType() == JDBCType.DATE || column.getJdbcType() == JDBCType.TIMESTAMP) { - ValueConverter dateConvert = new DateTimeConverter("yyyy-MM-dd HH:mm:ss", column.getJavaType()) { - @Override - public Object getData(Object value) { - if (value instanceof Number) { - return new Date(((Number) value).longValue()); - } - return super.getData(value); - } - }; - column.setValueConverter(dateConvert); - } else if (column.getJavaType() == boolean.class || column.getJavaType() == Boolean.class) { - column.setValueConverter(new BooleanValueConverter(column.getJdbcType())); - column.setProperty("typeHandler", NumberBooleanTypeHandler.class.getName()); - } else if (TypeUtils.isNumberType(column)) { //数字 - //数字 - column.setValueConverter(new NumberValueConverter(column.getJavaType())); - } - } - cache.put(cacheKey, rdbTableMetaData); - return rdbTableMetaData; - } - - public String buildUpdateFields(String resultMapId, String tableName, UpdateParam param) { - Pager.reset(); - param.excludes("id"); - RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId); - RDBDatabaseMetaData databaseMetaDate = getActiveDatabase(); - Dialect dialect = databaseMetaDate.getDialect(); - CommonSqlRender render = (CommonSqlRender) databaseMetaDate.getRenderer(SqlRender.TYPE.SELECT); - List columns = render.parseOperationField(tableMetaData, param); - SqlAppender appender = new SqlAppender(); - Object data = param.getData(); - Map mapData = FastBeanCopier.copy(data, HashMap::new); - - columns.forEach(column -> { - - RDBColumnMetaData columnMetaData = column.getRDBColumnMetaData(); - if (columnMetaData == null) { - return; - } - if (columnMetaData.getName().contains(".")) { - return; - } - if (columnMetaData.getProperty("read-only").isTrue()) { - return; - } - Object value = mapData.get(columnMetaData.getAlias()); - - if (value == null) { - return; - } - - if (value instanceof Sql) { - appender.add(",", encodeColumn(dialect, columnMetaData.getName()), "=", ((Sql) value).getSql()); - } else { - value = columnMetaData.getValueConverter().getData(value); - - if (columnMetaData.getOptionConverter() != null) { - value = columnMetaData.getOptionConverter().converterData(value); - } - - mapData.put(columnMetaData.getAlias(), value); - - String typeHandler = columnMetaData.getProperty("typeHandler").getValue(); - - appender.add(",", encodeColumn(dialect, columnMetaData.getName()) - , "=", "#{data.", columnMetaData.getAlias(), - ",javaType=", EasyOrmSqlBuilder.getJavaType(columnMetaData.getJavaType()), - ",jdbcType=", columnMetaData.getJdbcType(), - typeHandler != null ? ",typeHandler=" + typeHandler : "", - "}"); - } - }); - if (!appender.isEmpty()) { - appender.removeFirst(); - } else { - throw new UnsupportedOperationException("没有列被修改"); - } - return appender.toString(); - } - - public String encodeColumn(Dialect dialect, String field) { - if (field.contains(".")) { - String[] tmp = field.split("[.]"); - return tmp[0] + "." + dialect.getQuoteStart() + (dialect.columnToUpperCase() ? (tmp[1].toUpperCase()) : tmp[1]) + dialect.getQuoteEnd(); - } else { - return dialect.getQuoteStart() + (dialect.columnToUpperCase() ? (field.toUpperCase()) : field) + dialect.getQuoteEnd(); - } - } - - public String buildInsertSql(String resultMapId, String tableName, Object param) { - Pager.reset(); - InsertParam insertParam; - if (param instanceof InsertParam) { - insertParam = ((InsertParam) param); - } else { - insertParam = new InsertParam<>(param); - } - RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId); - SqlRender render = tableMetaData.getDatabaseMetaData().getRenderer(SqlRender.TYPE.INSERT); - return render.render(tableMetaData, insertParam).getSql(); - } - - public String buildUpdateSql(String resultMapId, String tableName, UpdateParam param) { - Pager.reset(); - RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId); - SqlRender render = tableMetaData.getDatabaseMetaData().getRenderer(SqlRender.TYPE.UPDATE); - return render.render(tableMetaData, param).getSql(); - } - - public String buildSelectFields(String resultMapId, String tableName, Object arg) { - QueryParam param = null; - if (arg instanceof QueryParam) { - param = ((QueryParam) arg); - if (param.isPaging()) { - if (Pager.get() == null) { - Pager.doPaging(param.getPageIndex(), param.getPageSize()); - } - } else { - Pager.reset(); - } - } - if (param == null) { - return "*"; - } - - RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId); - RDBDatabaseMetaData databaseMetaDate = getActiveDatabase(); - Dialect dialect = databaseMetaDate.getDialect(); - CommonSqlRender render = (CommonSqlRender) databaseMetaDate.getRenderer(SqlRender.TYPE.SELECT); - List columns = render.parseOperationField(tableMetaData, param); - SqlAppender appender = new SqlAppender(); - columns.forEach(column -> { - RDBColumnMetaData columnMetaData = column.getRDBColumnMetaData(); - if (columnMetaData == null) { - return; - } - String cname = columnMetaData.getName(); - if (!cname.contains(".")) { - cname = tableMetaData.getName().concat(".").concat(cname); - } - boolean isJpa = columnMetaData.getProperty("fromJpa", false).isTrue(); - - appender.add(",", encodeColumn(dialect, cname) - , " AS " - , dialect.getQuoteStart() - , isJpa ? columnMetaData.getAlias() : columnMetaData.getName() - , dialect.getQuoteEnd()); - }); - param.getIncludes().remove("*"); - if (appender.isEmpty()) { - return "*"; - } - appender.removeFirst(); - return appender.toString(); - } - - public String buildOrder(String resultMapId, String tableName, Object arg) { - QueryParam param = null; - if (arg instanceof QueryParam) { - param = ((QueryParam) arg); - } - if (param == null) { - return ""; - } - - RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId); - SqlAppender appender = new SqlAppender(" order by "); - param.getSorts() - .forEach(sort -> { - RDBColumnMetaData column = tableMetaData.getColumn(sort.getName()); - if (column == null) { - column = tableMetaData.findColumn(sort.getName()); - } - if (column == null) { - return; - } - String cname = column.getName(); - if (!cname.contains(".")) { - cname = tableMetaData.getName().concat(".").concat(cname); - } - appender.add(encodeColumn(tableMetaData.getDatabaseMetaData().getDialect(), cname), " ", sort.getOrder(), ","); - }); - if (appender.isEmpty()) { - return ""; - } - appender.removeLast(); - return appender.toString(); - } - - public String buildWhereForUpdate(String resultMapId, String tableName, List terms) { - String where = buildWhere(resultMapId, tableName, terms); - if (where.trim().isEmpty()) { - throw new BusinessException("禁止执行无条件的更新操作"); - } - return where; - } - - public String buildWhereForUpdate(String resultMapId, String tableName, Object param) { - String where = buildWhere(resultMapId, tableName, param); - if (where.trim().isEmpty()) { - throw new BusinessException("禁止执行无条件的更新操作"); - } - return where; - } - - public String buildWhere(String resultMapId, String tableName, Object param) { - List terms; - if (param instanceof Param) { - terms = ((Param) param).getTerms(); - } else if (param instanceof Entity) { - terms = SqlParamParser.parseQueryParam(param).getTerms(); - } else { - terms = new ArrayList<>(); - } - if (param instanceof QueryParam) { - QueryParam queryParam = ((QueryParam) param); - if (queryParam.isPaging()) { - if (Pager.get() == null) { - Pager.doPaging(queryParam.getPageIndex(), queryParam.getPageSize()); - } - } else { - Pager.reset(); - } - } - return buildWhere(resultMapId, tableName, terms); - } - - public String buildWhere(String resultMapId, String tableName, List terms) { - RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId); - RDBDatabaseMetaData databaseMetaDate = getActiveDatabase(); - SimpleWhereSqlBuilder builder = new SimpleWhereSqlBuilder() { - @Override - public Dialect getDialect() { - return databaseMetaDate.getDialect(); - } - }; - SqlAppender appender = new SqlAppender(); - builder.buildWhere(tableMetaData, "", terms, appender, new HashSet<>()); - return appender.toString(); - } - - static class MysqlMeta extends MysqlRDBDatabaseMetaData { - MysqlMeta() { - super(); - renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder()); - renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.MYSQL)); - } - - @Override - public String getDatabaseName() { - return DataSourceHolder.databaseSwitcher().currentDatabase(); - } - } - - static class OracleMeta extends OracleRDBDatabaseMetaData { - OracleMeta() { - super(); - renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder()); - renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.ORACLE)); - } - - @Override - public String getDatabaseName() { - return DataSourceHolder.databaseSwitcher().currentDatabase(); - } - } - - static class H2Meta extends H2RDBDatabaseMetaData { - H2Meta() { - super(); - renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder()); - renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.H2)); - } - - @Override - public String getDatabaseName() { - return DataSourceHolder.databaseSwitcher().currentDatabase(); - } - } - - static class PGMeta extends PGRDBDatabaseMetaData { - PGMeta() { - super(); - renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder()); - renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.POSTGRES)); - } - - @Override - public String getDatabaseName() { - return DataSourceHolder.databaseSwitcher().currentDatabase(); - } - } - - static class MSSQLMeta extends MSSQLRDBDatabaseMetaData { - MSSQLMeta() { - super(); - renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder()); - renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.MSSQL)); - } - - @Override - public String getDatabaseName() { - return DataSourceHolder.databaseSwitcher().currentDatabase(); - } - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/InsertSqlBuilder.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/InsertSqlBuilder.java deleted file mode 100644 index cc6a7476f..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/InsertSqlBuilder.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.builder; - -import org.hswebframework.ezorm.core.param.InsertParam; -import org.hswebframework.ezorm.rdb.executor.SQL; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.support.simple.SimpleInsertSqlRender; - -/** - * @author zhouhao - */ -public class InsertSqlBuilder extends SimpleInsertSqlRender { - @Override - public SQL render(RDBTableMetaData metaData, InsertParam param) { - RDBTableMetaData metaDataNew = metaData.clone(); - metaDataNew.setDatabaseMetaData(metaData.getDatabaseMetaData()); - metaDataNew.getColumns().stream() - .filter(column -> column.getName().contains(".")) - .map(RDBColumnMetaData::getName) - .forEach(metaDataNew::removeColumn); - return super.render(metaDataNew, param); - } - - @Override - protected SqlAppender getParamString(String prefix, String paramName, RDBColumnMetaData rdbColumnMetaData) { - String typeHandler = rdbColumnMetaData.getProperty("typeHandler") - .getValue(); - - return new SqlAppender().add("#{", paramName, - ",javaType=", EasyOrmSqlBuilder.getJavaType(rdbColumnMetaData.getJavaType()), - ",jdbcType=", rdbColumnMetaData.getJdbcType(), - typeHandler != null ? ",typeHandler=" + typeHandler : "", - "}"); - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/SqlBuilder.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/SqlBuilder.java deleted file mode 100644 index 70fe1f167..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/SqlBuilder.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.builder; - -/** - * @author zhouhao - */ -public class SqlBuilder { - public static final Object current() { - return EasyOrmSqlBuilder.getInstance(); - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/SqlParamParser.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/SqlParamParser.java deleted file mode 100644 index 073552d9d..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/SqlParamParser.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.hswebframework.web.dao.mybatis.builder; - -import org.hswebframework.ezorm.core.dsl.Query; -import org.hswebframework.ezorm.core.param.Term; -import org.hswebframework.utils.StringUtils; -import org.hswebframework.web.bean.FastBeanCopier; -import org.hswebframework.web.commons.entity.Entity; -import org.hswebframework.web.commons.entity.param.QueryParamEntity; - -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.function.BiConsumer; - -/** - * @author zhouhao - * @since 3.0 - */ -public class SqlParamParser { - - public static QueryParamEntity parseQueryParam(Object param) { - return new QueryParamParser().parse(param).get(); - } - - private static class QueryParamParser { - private Query query = Query.empty(new QueryParamEntity()); - - private BiConsumer consumer = (k, v) -> { - if (k.endsWith("$or")) { - k = k.substring(0, k.length() - 3); - query.or(k, v); - } else { - query.and(k, v); - } - }; - - private QueryParamParser parse(Object obj) { - if (obj instanceof Map) { - ((Map) obj).forEach((k, v) -> { - String key = String.valueOf(k); - if ("pageIndex".equals(key)) { - query.getParam().setPageIndex(StringUtils.toInt(v)); - } - if ("pageSize".equals(key)) { - query.getParam().setPageSize(StringUtils.toInt(v)); - } - if (v != null) { - if (v instanceof Entity || v instanceof Map) { - List terms = new QueryParamParser().parse(v).get().getTerms(); - Term term = new Term(); - term.setType(key.equalsIgnoreCase("or") ? Term.Type.or : Term.Type.and); - term.setTerms(terms); - query.getParam().getTerms().add(term); - } else { - consumer.accept(String.valueOf(key), v); - } - } - }); - } else { - parse(FastBeanCopier.copy(obj, new LinkedHashMap<>())); - } - return this; - } - - private QueryParamEntity get() { - return query.getParam(); - } - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/TypeUtils.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/TypeUtils.java deleted file mode 100644 index fedb2e6cf..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/TypeUtils.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.hswebframework.web.dao.mybatis.builder; - -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.sql.JDBCType; -import java.util.Arrays; -import java.util.List; - -/** - * @author zhouhao - * @since 3.0.3 - */ -public class TypeUtils { - private static final List numberType = Arrays.asList( - byte.class, Byte.class - , short.class, Short.class - , int.class, Integer.class - , float.class, Float.class - , double.class, Double.class - , long.class, Long.class - , BigDecimal.class, BigInteger.class - ); - - private static final List numberJdbcType = Arrays.asList( - JDBCType.TINYINT, JDBCType.DECIMAL, JDBCType.NUMERIC, - JDBCType.BIGINT, JDBCType.SMALLINT, JDBCType.INTEGER, - JDBCType.DECIMAL, JDBCType.BIT - ); - - public static boolean isNumberType(RDBColumnMetaData columnMetaData) { - return numberType.contains(columnMetaData.getJavaType()) - || Number.class.isAssignableFrom(columnMetaData.getJavaType()) - || numberJdbcType.contains(columnMetaData.getJdbcType()); - } - -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/UpdateSqlBuilder.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/UpdateSqlBuilder.java deleted file mode 100644 index 1404091eb..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/UpdateSqlBuilder.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.builder; - -import org.hswebframework.ezorm.core.param.UpdateParam; -import org.hswebframework.ezorm.rdb.executor.SQL; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.ezorm.rdb.render.support.simple.SimpleUpdateSqlRender; - -/** - * @author zhouhao - */ -public class UpdateSqlBuilder extends SimpleUpdateSqlRender { - public UpdateSqlBuilder(Dialect dialect) { - super(dialect); - } - - @Override - public SQL render(RDBTableMetaData metaData, UpdateParam param) { - RDBTableMetaData metaDataNew = metaData.clone(); - metaDataNew.setDatabaseMetaData(metaData.getDatabaseMetaData()); - - metaDataNew.getColumns().stream() - .filter(column -> column.getName().contains(".")) - .map(RDBColumnMetaData::getName) - .forEach(metaDataNew::removeColumn); - return super.render(metaDataNew, param); - } - - @Override - protected SqlAppender getParamString(String paramName, RDBColumnMetaData rdbColumnMetaData) { - String typeHandler = rdbColumnMetaData.getProperty("typeHandler") - .getValue(); - - return new SqlAppender().add("#{", paramName, - ",javaType=", EasyOrmSqlBuilder.getJavaType(rdbColumnMetaData.getJavaType()), - ",jdbcType=", rdbColumnMetaData.getJdbcType(), - typeHandler != null ? ",typeHandler=" + typeHandler : "", "}"); - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/jpa/JpaAnnotationParser.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/jpa/JpaAnnotationParser.java deleted file mode 100644 index 0da0dfece..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/jpa/JpaAnnotationParser.java +++ /dev/null @@ -1,194 +0,0 @@ -package org.hswebframework.web.dao.mybatis.builder.jpa; - - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.beanutils.BeanUtilsBean; -import org.hswebframework.ezorm.core.ValueConverter; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; -import org.hswebframework.ezorm.rdb.meta.converter.BooleanValueConverter; -import org.hswebframework.ezorm.rdb.meta.converter.DateTimeConverter; -import org.hswebframework.ezorm.rdb.meta.converter.NumberValueConverter; -import org.hswebframework.utils.ClassUtils; -import org.hswebframework.web.dao.mybatis.builder.TypeUtils; -import org.hswebframework.web.dict.EnumDict; -import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.util.StringUtils; - -import javax.persistence.*; -import java.beans.PropertyDescriptor; -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.sql.JDBCType; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.BiFunction; -import java.util.function.Function; - -/** - * jpa 注解解析器 - * - * @author zhouhao - * @since 3.0 - */ -@Slf4j -public class JpaAnnotationParser { - - private static final Map jdbcTypeMapping = new HashMap<>(); - - private static final List> jdbcTypeConvert = new ArrayList<>(); - - static { - jdbcTypeMapping.put(String.class, JDBCType.VARCHAR); - - jdbcTypeMapping.put(Byte.class, JDBCType.TINYINT); - jdbcTypeMapping.put(byte.class, JDBCType.TINYINT); - - jdbcTypeMapping.put(Short.class, JDBCType.INTEGER); - jdbcTypeMapping.put(short.class, JDBCType.INTEGER); - - jdbcTypeMapping.put(Integer.class, JDBCType.INTEGER); - jdbcTypeMapping.put(int.class, JDBCType.INTEGER); - - jdbcTypeMapping.put(Character.class, JDBCType.CHAR); - jdbcTypeMapping.put(char.class, JDBCType.CHAR); - - jdbcTypeMapping.put(Long.class, JDBCType.BIGINT); - jdbcTypeMapping.put(long.class, JDBCType.BIGINT); - - jdbcTypeMapping.put(Double.class, JDBCType.DECIMAL); - jdbcTypeMapping.put(double.class, JDBCType.DECIMAL); - - jdbcTypeMapping.put(Float.class, JDBCType.DECIMAL); - jdbcTypeMapping.put(float.class, JDBCType.DECIMAL); - - jdbcTypeMapping.put(Boolean.class, JDBCType.BIT); - jdbcTypeMapping.put(boolean.class, JDBCType.BIT); - - jdbcTypeMapping.put(byte[].class, JDBCType.BLOB); - - jdbcTypeMapping.put(BigDecimal.class, JDBCType.DECIMAL); - jdbcTypeMapping.put(BigInteger.class, JDBCType.INTEGER); - - jdbcTypeMapping.put(Date.class, JDBCType.TIMESTAMP); - jdbcTypeMapping.put(java.sql.Date.class, JDBCType.TIMESTAMP); - jdbcTypeMapping.put(java.sql.Timestamp.class, JDBCType.TIMESTAMP); - - jdbcTypeMapping.put(Object.class, JDBCType.VARCHAR); - - jdbcTypeConvert.add((type, property) -> { - Enumerated enumerated = getAnnotation(type, property, Enumerated.class); - return enumerated != null ? JDBCType.VARCHAR : null; - }); - jdbcTypeConvert.add((type, property) -> { - Lob enumerated = getAnnotation(type, property, Lob.class); - return enumerated != null ? JDBCType.CLOB : null; - }); - - jdbcTypeConvert.add((type, property) -> { - boolean isArray = type.isArray(); - if (isArray) { - type = type.getComponentType(); - - } - if (type.isEnum() && EnumDict.class.isAssignableFrom(type)) { - Class genType = ClassUtils.getGenericType(type); - if (isArray) { - return JDBCType.BIGINT; - } - return jdbcTypeMapping.getOrDefault(genType, JDBCType.VARCHAR); - } - return null; - }); - } - - - private static List parseColumnMeta(String prefix, String columnName, Class entityClass) { - - PropertyDescriptor[] descriptors = BeanUtilsBean.getInstance() - .getPropertyUtils() - .getPropertyDescriptors(entityClass); - List columnMetaDataList = new ArrayList<>(); - - for (PropertyDescriptor descriptor : descriptors) { - Column columnAnn = getAnnotation(entityClass, descriptor, Column.class); - CollectionTable collectionTable = getAnnotation(entityClass, descriptor, CollectionTable.class); - - if (columnAnn == null) { - if (collectionTable != null) { - columnMetaDataList.addAll(parseColumnMeta(descriptor.getName(), collectionTable.name(), descriptor.getPropertyType())); - continue; - } - continue; - } - - String realName = StringUtils.hasText(columnAnn.name()) ? columnAnn.name() : descriptor.getName(); - String realAlias = StringUtils.hasText(prefix) ? prefix.concat(".").concat(descriptor.getName()) : descriptor.getName(); - - RDBColumnMetaData column = new RDBColumnMetaData(); - column.setName(StringUtils.hasText(columnName) ? columnName.concat(".").concat(realName) : realName); - column.setAlias(realAlias); - column.setLength(columnAnn.length()); - column.setPrecision(columnAnn.precision()); - column.setJavaType(descriptor.getPropertyType()); - if (!columnAnn.updatable()) { - column.setProperty("read-only", true); - } - if (!columnAnn.nullable()) { - column.setNotNull(true); - } - if (StringUtils.hasText(columnAnn.columnDefinition())) { - column.setColumnDefinition(columnAnn.columnDefinition()); - } - Class propertyType = descriptor.getPropertyType(); - - JDBCType type = jdbcTypeMapping.get(propertyType); - if (type == null) { - type = jdbcTypeConvert.stream() - .map(func -> func.apply(entityClass, descriptor)) - .filter(Objects::nonNull) - .findFirst() - .orElse(JDBCType.OTHER); - } - column.setJdbcType(type); - columnMetaDataList.add(column); - } - return columnMetaDataList; - } - - public static RDBTableMetaData parseMetaDataFromEntity(Class entityClass) { - Table table = AnnotationUtils.findAnnotation(entityClass, Table.class); - if (table == null) { - return null; - } - RDBTableMetaData tableMetaData = new RDBTableMetaData(); - tableMetaData.setName(table.name()); - parseColumnMeta(null, null, entityClass).forEach(tableMetaData::addColumn); - return tableMetaData; - } - - - private static T getAnnotation(Class entityClass, PropertyDescriptor descriptor, Class type) { - T ann = null; - try { - Field field = entityClass.getDeclaredField(descriptor.getName()); - ann = AnnotationUtils.findAnnotation(field, type); - } catch (@SuppressWarnings("all") NoSuchFieldException ignore) { - if (entityClass.getSuperclass() != Object.class) { - return getAnnotation(entityClass.getSuperclass(), descriptor, type); - } - } - Method read = descriptor.getReadMethod(), - write = descriptor.getWriteMethod(); - if (null == ann && read != null) { - ann = AnnotationUtils.findAnnotation(read, type); - } - if (null == ann && write != null) { - ann = AnnotationUtils.findAnnotation(write, type); - } - return ann; - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/dynamic/DynamicDataSourceSqlSessionFactoryBuilder.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/dynamic/DynamicDataSourceSqlSessionFactoryBuilder.java deleted file mode 100644 index f3436ee90..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/dynamic/DynamicDataSourceSqlSessionFactoryBuilder.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.dynamic; - -import org.apache.ibatis.session.Configuration; -import org.apache.ibatis.session.SqlSessionFactory; -import org.apache.ibatis.session.SqlSessionFactoryBuilder; - -public class DynamicDataSourceSqlSessionFactoryBuilder extends SqlSessionFactoryBuilder { - @Override - public SqlSessionFactory build(Configuration config) { - return new DynamicSqlSessionFactory(config); - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/dynamic/DynamicSpringManagedTransaction.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/dynamic/DynamicSpringManagedTransaction.java deleted file mode 100644 index ed5bda268..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/dynamic/DynamicSpringManagedTransaction.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.dynamic; - -import org.apache.ibatis.logging.Log; -import org.apache.ibatis.logging.LogFactory; -import org.apache.ibatis.transaction.Transaction; -import org.hswebframework.web.datasource.DataSourceHolder; -import org.mybatis.spring.transaction.SpringManagedTransaction; -import org.springframework.jdbc.datasource.ConnectionHolder; -import org.springframework.jdbc.datasource.DataSourceUtils; -import org.springframework.transaction.support.TransactionSynchronizationManager; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import static org.hswebframework.web.datasource.DataSourceHolder.switcher; - -/** - * mybatis 同一事务,同一个mapper,动态数据源切换支持 - * - * @author zhouhao - */ -public class DynamicSpringManagedTransaction implements Transaction { - - private static final Log LOGGER = LogFactory.getLog(SpringManagedTransaction.class); - - private Map connectionMap = new HashMap<>(); - - /** - * 当前数据源对应的事务代理 - * - * @return {@link TransactionProxy} - */ - protected TransactionProxy getProxy() { - return connectionMap.get(switcher().currentDataSourceId()); - } - - /** - * 添加一个事务代理 - * - * @param proxy - */ - protected void addProxy(TransactionProxy proxy) { - connectionMap.put(switcher().currentDataSourceId(), proxy); - } - - /** - * 获取所有代理 - * - * @return - */ - protected Collection getAllProxy() { - return connectionMap.values(); - } - - @Override - public Connection getConnection() throws SQLException { - TransactionProxy proxy = getProxy(); - if (proxy != null) { - return proxy.getConnection(); - } - //根据当前激活的数据源 获取jdbc链接 - DataSource dataSource = DataSourceHolder.currentDataSource().getNative(); - String dsId = switcher().currentDataSourceId(); - Connection connection = DataSourceUtils.getConnection(dataSource); - proxy = new TransactionProxy(dsId, connection, dataSource); - addProxy(proxy); - - if (LOGGER.isDebugEnabled()) { - LOGGER.debug( - "DataSource (" + (dsId == null ? "default" : dsId) + ") JDBC Connection [" - + connection - + "] will" - + (proxy.isConnectionTransactional ? " " : " not ") - + "be managed by Spring"); - } - - return connection; - } - - @Override - public void commit() throws SQLException { - for (TransactionProxy proxy : getAllProxy()) { - proxy.commit(); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void rollback() throws SQLException { - for (TransactionProxy proxy : getAllProxy()) { - proxy.rollback(); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void close() throws SQLException { - SQLException tmp = null; - for (TransactionProxy proxy : getAllProxy()) { - try { - proxy.close(); - //保证每个链接都能被释放 - } catch (SQLException e) { - tmp = e; - } - } - connectionMap.clear(); - if (null != tmp) { - throw tmp; - } - } - - @Override - public Integer getTimeout() throws SQLException { - return getProxy().getTimeout(); - } - - class TransactionProxy implements Transaction { - Connection connection; - DataSource dataSource; - boolean isConnectionTransactional; - boolean autoCommit; - String dataSourceId; - - public TransactionProxy(String dataSourceId, Connection connection, DataSource dataSource) { - this.connection = connection; - this.dataSource = dataSource; - this.dataSourceId = dataSourceId; - this.isConnectionTransactional = DataSourceUtils.isConnectionTransactional(connection, dataSource); - try { - this.autoCommit = connection.getAutoCommit(); - } catch (SQLException e) { - } - } - - @Override - public Connection getConnection() throws SQLException { - return connection; - } - - /** - * {@inheritDoc} - */ - @Override - public void commit() throws SQLException { - if (this.connection != null && !this.isConnectionTransactional && !this.autoCommit) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Committing DataSource (" + (dataSourceId == null ? "default" : dataSourceId) + ") JDBC Connection [" + this.connection + "]"); - } - this.connection.commit(); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void rollback() throws SQLException { - if (this.connection != null && !this.isConnectionTransactional && !this.autoCommit) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Rolling back DataSource (" + dataSourceId + ") JDBC Connection [" + this.connection + "]"); - } - this.connection.rollback(); - } - } - - @Override - public void close() throws SQLException { - DataSourceUtils.releaseConnection(connection, dataSource); - } - - @Override - public Integer getTimeout() throws SQLException { - ConnectionHolder holder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource); - if (holder != null && holder.hasTimeout()) { - return holder.getTimeToLiveInSeconds(); - } - return null; - } - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/dynamic/DynamicSqlSessionFactory.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/dynamic/DynamicSqlSessionFactory.java deleted file mode 100644 index dcfe50382..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/dynamic/DynamicSqlSessionFactory.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.dynamic; - -import org.apache.ibatis.exceptions.ExceptionFactory; -import org.apache.ibatis.executor.ErrorContext; -import org.apache.ibatis.executor.Executor; -import org.apache.ibatis.mapping.Environment; -import org.apache.ibatis.session.*; -import org.apache.ibatis.session.defaults.DefaultSqlSession; -import org.apache.ibatis.transaction.Transaction; -import org.apache.ibatis.transaction.TransactionFactory; -import org.apache.ibatis.transaction.managed.ManagedTransactionFactory; -import org.hswebframework.web.datasource.DataSourceHolder; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.SQLException; - -/** - * @author zhouhao - */ -public class DynamicSqlSessionFactory implements SqlSessionFactory { - private final Configuration configuration; - - public DynamicSqlSessionFactory(Configuration configuration) { - this.configuration = configuration; - } - - @Override - public SqlSession openSession() { - return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false); - } - - @Override - public SqlSession openSession(boolean autoCommit) { - return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, autoCommit); - } - - @Override - public SqlSession openSession(ExecutorType execType) { - return openSessionFromDataSource(execType, null, false); - } - - @Override - public SqlSession openSession(TransactionIsolationLevel level) { - return openSessionFromDataSource(configuration.getDefaultExecutorType(), level, false); - } - - @Override - public SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level) { - return openSessionFromDataSource(execType, level, false); - } - - @Override - public SqlSession openSession(ExecutorType execType, boolean autoCommit) { - return openSessionFromDataSource(execType, null, autoCommit); - } - - @Override - public SqlSession openSession(Connection connection) { - return openSessionFromConnection(configuration.getDefaultExecutorType(), connection); - } - - @Override - public SqlSession openSession(ExecutorType execType, Connection connection) { - return openSessionFromConnection(execType, connection); - } - - @Override - public Configuration getConfiguration() { - return configuration; - } - - @SuppressWarnings("all") - private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) { - Transaction tx = null; - try { - final Environment environment = getConfiguration().getEnvironment(); - final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment); - DataSource ds = DataSourceHolder.currentDataSource().getNative(); - if (ds == null) { - ds = environment.getDataSource(); - } - tx = transactionFactory.newTransaction(ds, level, autoCommit); - final Executor executor = getConfiguration().newExecutor(tx, execType); - return new DefaultSqlSession(getConfiguration(), executor, autoCommit); - } catch (Exception e) { - closeTransaction(tx); // may have fetched a connection so lets call close() - throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e); - } finally { - ErrorContext.instance().reset(); - } - } - - private SqlSession openSessionFromConnection(ExecutorType execType, Connection connection) { - try { - boolean autoCommit; - try { - autoCommit = connection.getAutoCommit(); - } catch (SQLException e) { - // Failover to true, as most poor drivers - // or databases won't support transactions - autoCommit = true; - } - final Environment environment = configuration.getEnvironment(); - final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment); - final Transaction tx = transactionFactory.newTransaction(connection); - final Executor executor = configuration.newExecutor(tx, execType); - return new DefaultSqlSession(configuration, executor, autoCommit); - } catch (Exception e) { - throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e); - } finally { - ErrorContext.instance().reset(); - } - } - - private TransactionFactory getTransactionFactoryFromEnvironment(Environment environment) { - if (environment == null || environment.getTransactionFactory() == null) { - return new ManagedTransactionFactory(); - } - return environment.getTransactionFactory(); - } - - private void closeTransaction(Transaction tx) { - if (tx != null) { - try { - tx.close(); - } catch (SQLException ignore) { - // Intentionally ignore. Prefer previous error. - } - } - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/JsonArrayHandler.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/JsonArrayHandler.java deleted file mode 100644 index 6cd01d27a..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/JsonArrayHandler.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.handler; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.serializer.SerializerFeature; -import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.type.*; -import org.springframework.util.StringUtils; - -import java.sql.CallableStatement; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -@Alias("jsonArrayHandler") -@MappedTypes({List.class}) -@MappedJdbcTypes({JdbcType.VARCHAR, JdbcType.CLOB}) -@Slf4j -public class JsonArrayHandler extends BaseTypeHandler> { - - private List parseArray(String json) { - if (!StringUtils.hasText(json)) { - return null; - } - return JSON.parseArray(json); - } - - @Override - public List getResult(ResultSet rs, int columnIndex) throws SQLException { - return parseArray(rs.getString(columnIndex)); - } - - @Override - public List getResult(ResultSet rs, String columnName) throws SQLException { - return parseArray(rs.getString(columnName)); - } - - @Override - public List getResult(CallableStatement cs, int columnIndex) throws SQLException { - return parseArray(cs.getString(columnIndex)); - } - - @Override - public void setParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { - ps.setString(i, JSON.toJSONString(parameter, SerializerFeature.WriteClassName)); - } - - @Override - public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { - ps.setString(i, "[]"); - } - - @Override - public List getNullableResult(ResultSet rs, String columnName) throws SQLException { - return new ArrayList<>(); - } - - @Override - public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { - return new ArrayList<>(); - } - - @Override - public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { - return new ArrayList<>(); - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/JsonMapHandler.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/JsonMapHandler.java deleted file mode 100644 index f77bceeff..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/JsonMapHandler.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.handler; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.serializer.SerializerFeature; -import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.type.*; -import org.springframework.util.StringUtils; - -import java.sql.CallableStatement; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.*; - -@Alias("jsonMapHandler") -@MappedTypes({Map.class}) -@MappedJdbcTypes({JdbcType.VARCHAR, JdbcType.CLOB}) -@Slf4j -public class JsonMapHandler extends BaseTypeHandler> { - private Map parseObject(String json) { - if (!StringUtils.hasText(json)) { - return null; - } - return JSON.parseObject(json); - } - - @Override - public Map getResult(ResultSet rs, int columnIndex) throws SQLException { - return parseObject(rs.getString(columnIndex)); - } - - @Override - public Map getResult(ResultSet rs, String columnName) throws SQLException { - return parseObject(rs.getString(columnName)); - } - - @Override - public Map getResult(CallableStatement cs, int columnIndex) throws SQLException { - return parseObject(cs.getString(columnIndex)); - } - - @Override - public void setParameter(PreparedStatement ps, int i, Map parameter, JdbcType jdbcType) throws SQLException { - ps.setString(i, JSON.toJSONString(parameter, SerializerFeature.WriteClassName)); - } - - @Override - public void setNonNullParameter(PreparedStatement ps, int i, Map parameter, JdbcType jdbcType) throws SQLException { - ps.setString(i, "{}"); - } - - @Override - public Map getNullableResult(ResultSet rs, String columnName) throws SQLException { - return new HashMap<>(); - } - - @Override - public Map getNullableResult(ResultSet rs, int columnIndex) throws SQLException { - return new HashMap<>(); - } - - @Override - public Map getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { - return new HashMap<>(); - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/JsonSetHandler.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/JsonSetHandler.java deleted file mode 100644 index e2d5bf41f..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/JsonSetHandler.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ - -package org.hswebframework.web.dao.mybatis.handler; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.serializer.SerializerFeature; -import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.type.*; -import org.springframework.util.StringUtils; - -import java.sql.CallableStatement; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.*; - -@Alias("jsonSetHandler") -@MappedTypes({Set.class}) -@MappedJdbcTypes({JdbcType.VARCHAR, JdbcType.CLOB}) -@Slf4j -public class JsonSetHandler extends BaseTypeHandler { - - @SuppressWarnings("unchecked") - private Set parseSet(String json) { - if (!StringUtils.hasText(json)) { - return null; - } - return (Set) JSON.parseObject(json, Set.class); - } - - @Override - public Set getResult(ResultSet rs, int columnIndex) throws SQLException { - return parseSet(rs.getString(columnIndex)); - } - - @Override - public Set getResult(ResultSet rs, String columnName) throws SQLException { - return parseSet(rs.getString(columnName)); - } - - @Override - public Set getResult(CallableStatement cs, int columnIndex) throws SQLException { - return parseSet(cs.getString(columnIndex)); - } - - @Override - public void setParameter(PreparedStatement ps, int i, Set parameter, JdbcType jdbcType) throws SQLException { - ps.setString(i, JSON.toJSONString(parameter, SerializerFeature.WriteClassName)); - } - - @Override - public void setNonNullParameter(PreparedStatement ps, int i, Set parameter, JdbcType jdbcType) throws SQLException { - ps.setString(i, "[]"); - } - - @Override - public Set getNullableResult(ResultSet rs, String columnName) throws SQLException { - return new HashSet<>(); - } - - @Override - public Set getNullableResult(ResultSet rs, int columnIndex) throws SQLException { - return new HashSet<>(); - } - - @Override - public Set getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { - return new HashSet<>(); - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/NumberBooleanTypeHandler.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/NumberBooleanTypeHandler.java deleted file mode 100644 index 5480ba9e9..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/handler/NumberBooleanTypeHandler.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.hswebframework.web.dao.mybatis.handler; - -import org.apache.ibatis.type.*; - -import java.sql.CallableStatement; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -@Alias("numberBooleanTypeHandler") -@MappedTypes({Boolean.class}) -@MappedJdbcTypes({JdbcType.NUMERIC, JdbcType.BOOLEAN}) -public class NumberBooleanTypeHandler implements TypeHandler { - @Override - public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { - if (parameter == null) { - ps.setNull(i, jdbcType.TYPE_CODE); - return; - } - if(parameter instanceof Number){ - if (jdbcType == JdbcType.BOOLEAN) { - ps.setBoolean(i, ((Number) parameter).intValue()==1); - }else{ - ps.setInt(i,((Number) parameter).intValue()); - } - }else{ - if (jdbcType == JdbcType.BOOLEAN) { - ps.setBoolean(i, Boolean.TRUE.equals(parameter)); - } else { - ps.setInt(i, Boolean.TRUE.equals(parameter) ? 1 : 0); - } - } - } - - @Override - public Object getResult(ResultSet rs, String columnName) throws SQLException { - return rs.getBoolean(columnName); - } - - @Override - public Object getResult(ResultSet rs, int columnIndex) throws SQLException { - return rs.getBoolean(columnIndex); - } - - @Override - public Object getResult(CallableStatement cs, int columnIndex) throws SQLException { - return cs.getBoolean(columnIndex); - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/AbstractSqlTermCustomizer.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/AbstractSqlTermCustomizer.java deleted file mode 100644 index 1b76996f8..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/AbstractSqlTermCustomizer.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.hswebframework.web.dao.mybatis.mapper; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import org.hswebframework.ezorm.core.param.Term; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.springframework.util.StringUtils; - -import java.util.List; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@AllArgsConstructor -public abstract class AbstractSqlTermCustomizer implements SqlTermCustomizer { - - @Getter - protected final String termType; - - @Override - public Dialect[] forDialect() { - return null; - } - - protected String createColumnName(RDBColumnMetaData column, String tableAlias) { - if (StringUtils.isEmpty(tableAlias)) { - tableAlias = column.getTableMetaData().getAlias(); - } - return column.getTableMetaData() - .getDatabaseMetaData() - .getDialect() - .buildColumnName(tableAlias, column.getName()); - } - - - protected ChangedTermValue createChangedTermValue(Term term) { - if (term.getValue() instanceof ChangedTermValue) { - return ((ChangedTermValue) term.getValue()); - } else { - ChangedTermValue termValue = new ChangedTermValue(term.getValue(), term.getValue()); - term.setValue(termValue); - return termValue; - } - } - - protected Object appendCondition(List values, String wherePrefix, SqlAppender appender) { - int len = values.size(); - if (len == 1) { - appender.add("=#{", wherePrefix, ".value.value[0]}"); - } else { - appender.add("in("); - for (int i = 0; i < len; i++) { - if (i > 0) { - appender.add(","); - } - appender.add("#{", wherePrefix, ".value.value[" + i + "]}"); - } - appender.add(")"); - } - return values; - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/ChangedTermValue.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/ChangedTermValue.java deleted file mode 100644 index bae74c7ae..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/ChangedTermValue.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.hswebframework.web.dao.mybatis.mapper; - -import lombok.AllArgsConstructor; -import lombok.Data; - -import java.io.Serializable; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@Data -@AllArgsConstructor -public class ChangedTermValue implements Serializable { - private static final long serialVersionUID = 6373611532663483048L; - - private Object old; - - private Object value; -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/SqlTermCustomizer.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/SqlTermCustomizer.java deleted file mode 100644 index 4d67cedb1..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/SqlTermCustomizer.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.hswebframework.web.dao.mybatis.mapper; - -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -public interface SqlTermCustomizer extends Dialect.TermTypeMapper { - String getTermType(); - - Dialect[] forDialect(); -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/TreeStructureSqlTermCustomizer.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/TreeStructureSqlTermCustomizer.java deleted file mode 100644 index 754c91018..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/TreeStructureSqlTermCustomizer.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.hswebframework.web.dao.mybatis.mapper; - -import lombok.extern.slf4j.Slf4j; -import org.hswebframework.ezorm.core.param.Term; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.ezorm.rdb.render.dialect.RenderPhase; -import org.hswebframework.ezorm.rdb.render.dialect.function.SqlFunction; -import org.hswebframework.ezorm.rdb.render.dialect.term.BoostTermTypeMapper; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@Slf4j -public abstract class TreeStructureSqlTermCustomizer extends AbstractSqlTermCustomizer { - protected boolean not; - - protected boolean parent; - - public TreeStructureSqlTermCustomizer(String termType, boolean not, boolean parent) { - super(termType); - this.not = not; - this.parent = parent; - } - - protected abstract String getTableName(); - - protected abstract List getTreePathByTerm(List termValue); - - @Override - public SqlAppender accept(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) { - ChangedTermValue termValue = createChangedTermValue(term); - Dialect dialect = column.getTableMetaData().getDatabaseMetaData().getDialect(); - List paths; - if (termValue.getOld() == termValue.getValue()) { - List value = BoostTermTypeMapper.convertList(column, termValue.getOld()); - paths = getTreePathByTerm(value) - .stream() - .map(path -> path.concat("%")) - .collect(Collectors.toList()); - termValue.setValue(paths); - } else { - paths = ((List) termValue.getValue()); - } - - SqlAppender termCondition = new SqlAppender(); - - termCondition.add(not ? "not " : "", "exists(select 1 from ", getTableName(), " tmp where tmp.u_id = ", createColumnName(column, tableAlias)); - int len = paths.size(); - - if (len > 0) { - termCondition.add(" and ("); - } - for (int i = 0; i < len; i++) { - if (i > 0) { - termCondition.addSpc(" or"); - } - if (parent) { - SqlFunction function = dialect.getFunction(SqlFunction.concat); - String concat; - if (function == null) { - concat = getTableName() + ".path"; - log.warn("数据库方言未支持concat函数,你可以调用Dialect.installFunction进行设置!"); - } else { - concat = function.apply(SqlFunction.Param.of(RenderPhase.where, Arrays.asList("tmp.path", "'%'"))); - } - termCondition.add("#{", wherePrefix, ".value.value[", i, "]}", " like ", concat); - } else { - termCondition.add("tmp.path like #{", wherePrefix, ".value.value[", i, "]}"); - } - } - if (len > 0) { - termCondition.add(")"); - } - termCondition.add(")"); - - return termCondition; - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/dict/DictInTermTypeMapper.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/dict/DictInTermTypeMapper.java deleted file mode 100644 index 81fb221b8..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/dict/DictInTermTypeMapper.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.hswebframework.web.dao.mybatis.mapper.dict; - -import org.hswebframework.ezorm.core.OptionConverter; -import org.hswebframework.ezorm.core.param.Term; -import org.hswebframework.ezorm.core.param.TermType; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.ezorm.rdb.render.dialect.RenderPhase; -import org.hswebframework.ezorm.rdb.render.dialect.function.SqlFunction; -import org.hswebframework.ezorm.rdb.render.dialect.term.BoostTermTypeMapper; -import org.hswebframework.web.dao.mybatis.mapper.AbstractSqlTermCustomizer; -import org.hswebframework.web.dao.mybatis.mapper.ChangedTermValue; -import org.hswebframework.web.dict.EnumDict; - -import java.sql.JDBCType; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -public class DictInTermTypeMapper extends AbstractSqlTermCustomizer { - - private boolean not; - - public static final String USE_DICT_MASK_FLAG = "dict-mask"; - - public DictInTermTypeMapper(boolean not) { - super(not ? TermType.nin : TermType.in); - this.not = not; - } - - private boolean support(RDBColumnMetaData column) { - if(column.getJdbcType()== JDBCType.VARCHAR){ - return false; - } - Class type = column.getJavaType(); - if (type != null && type.isArray()) { - type = type.getComponentType(); - } - - return ((type != null && type.isEnum() - && EnumDict.class.isAssignableFrom(type) - && column.getJavaType().isArray()) - || - (column.getProperty(USE_DICT_MASK_FLAG).isTrue() - && column.getOptionConverter() != null)); - } - - @SuppressWarnings("all") - private List getAllOption(RDBColumnMetaData column) { - Class type = column.getJavaType(); - if (null != type) { - if (type.isArray()) { - type = type.getComponentType(); - } - if (type.isEnum() && EnumDict.class.isAssignableFrom(type)) { - return (List) Arrays.asList(type.getEnumConstants()); - } - } - - OptionConverter converter = column.getOptionConverter(); - if (converter == null) { - return new ArrayList<>(); - } - - return (List) converter.getOptions(); - } - - @Override - public SqlAppender accept(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) { - //不支持数据字典 - if (!support(column)) { - return buildNotSupport(wherePrefix, term, column, tableAlias); - } - ChangedTermValue changedValue = createChangedTermValue(term); - - boolean any = term.getOptions().contains("any"); - - List list = BoostTermTypeMapper.convertList(column, changedValue.getOld()); - - EnumDict[] dicts = getAllOption(column) - .stream() - .filter(d -> d.eq(list)) - .toArray(EnumDict[]::new); - - changedValue.setValue(EnumDict.toMask(dicts)); - Dialect dialect = column.getTableMetaData().getDatabaseMetaData().getDialect(); - - String columnName = dialect.buildColumnName(tableAlias, column.getName()); - String where = "#{" + wherePrefix + ".value.value}"; - SqlFunction sqlFunction = dialect.getFunction(SqlFunction.bitand); - - if (sqlFunction == null) { - throw new UnsupportedOperationException("数据库不支持[BITAND]函数"); - } - String bitAnd = sqlFunction.apply(SqlFunction.Param.of(RenderPhase.where, Arrays.asList(columnName, where))); - - String n; - if (any) { - n = not ? "=" : "!="; - } else { - n = not ? "!=" : "="; - } - return new SqlAppender().add(bitAnd, n, any ? "0" : columnName); - - } - - protected SqlAppender buildNotSupport(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) { - ChangedTermValue changedValue = createChangedTermValue(term); - Dialect dialect = column.getTableMetaData().getDatabaseMetaData().getDialect(); - - List values = BoostTermTypeMapper.convertList(column, changedValue.getOld()); - - changedValue.setValue(values); - - String columnName = dialect.buildColumnName(tableAlias, column.getName()); - SqlAppender appender = new SqlAppender(); - appender.add(columnName, not ? " NOT " : " ").add("IN("); - for (int i = 0; i < values.size(); i++) { - appender.add("#{", wherePrefix, ".value.value[", i, "]}", ","); - } - appender.removeLast(); - appender.add(")"); - return appender; - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/dict/DictTermTypeMapper.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/dict/DictTermTypeMapper.java deleted file mode 100644 index b55db0f4f..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/dict/DictTermTypeMapper.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.hswebframework.web.dao.mybatis.mapper.dict; - -import org.hswebframework.ezorm.core.OptionConverter; -import org.hswebframework.ezorm.core.param.Term; -import org.hswebframework.ezorm.core.param.TermType; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.ezorm.rdb.render.dialect.term.BoostTermTypeMapper; -import org.hswebframework.web.dao.mybatis.mapper.AbstractSqlTermCustomizer; -import org.hswebframework.web.dao.mybatis.mapper.ChangedTermValue; -import org.hswebframework.web.dict.EnumDict; - -import java.sql.JDBCType; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.hswebframework.web.dao.mybatis.mapper.dict.DictInTermTypeMapper.USE_DICT_MASK_FLAG; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -public class DictTermTypeMapper extends AbstractSqlTermCustomizer { - - private boolean not; - - public DictTermTypeMapper(boolean not) { - super(not ? TermType.not : TermType.eq); - this.not = not; - } - - private boolean support(RDBColumnMetaData column) { - if (column.getJdbcType() == JDBCType.VARCHAR) { - return false; - } - Class type = column.getJavaType(); - if (type != null && type.isArray()) { - type = type.getComponentType(); - } - return ((type != null && type.isEnum() - && EnumDict.class.isAssignableFrom(type) - && column.getJavaType().isArray()) - || - (column.getProperty(USE_DICT_MASK_FLAG).isTrue() && column.getOptionConverter() != null)); - } - - - @SuppressWarnings("all") - private List getAllOption(RDBColumnMetaData column) { - Class type = column.getJavaType(); - if (null != type) { - if (type.isArray()) { - type = type.getComponentType(); - } - if (type.isEnum() && EnumDict.class.isAssignableFrom(type)) { - return (List) Arrays.asList(type.getEnumConstants()); - } - } - - OptionConverter converter = column.getOptionConverter(); - if (converter == null) { - return new ArrayList<>(); - } - - return (List) converter.getOptions(); - } - - @Override - public SqlAppender accept(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) { - //不支持数据字典 - if (!support(column)) { - return buildNotSupport(wherePrefix, term, column, tableAlias); - } - ChangedTermValue changedValue = createChangedTermValue(term); - - List list = BoostTermTypeMapper.convertList(column, changedValue.getOld()); - - EnumDict[] dicts = getAllOption(column) - .stream() - .filter(d -> d.eq(list)) - .toArray(EnumDict[]::new); - - changedValue.setValue(EnumDict.toMask(dicts)); - Dialect dialect = column.getTableMetaData().getDatabaseMetaData().getDialect(); - String columnName = dialect.buildColumnName(tableAlias, column.getName()); - return new SqlAppender().add(columnName, not ? " != " : "=", "#{", wherePrefix, ".value.value}"); - } - - protected SqlAppender buildNotSupport(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) { - ChangedTermValue termValue = createChangedTermValue(term); - // fix https://github.com/hs-web/hsweb-framework/issues/102 - Object newValue = BoostTermTypeMapper.convertValue(column, termValue.getOld()); - termValue.setValue(newValue); - - Dialect dialect = column.getTableMetaData().getDatabaseMetaData().getDialect(); - String columnName = dialect.buildColumnName(tableAlias, column.getName()); - SqlAppender appender = new SqlAppender(); - appender.add(columnName, not ? " != " : "=", "#{", wherePrefix, ".value.value}"); - return appender; - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/plgins/pager/Pager.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/plgins/pager/Pager.java deleted file mode 100644 index 2b538df7d..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/plgins/pager/Pager.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.plgins.pager; - - -import org.hswebframework.web.ThreadLocalUtils; - -/** - * 分页插件,通过此接口进行分页操作 - * - * @author zhouhao - * @see PagerInterceptor - */ -public interface Pager { - int pageIndex(); - - int pageSize(); - - String threadLocalKey = "nowPager"; - - static Pager getAndReset() { - try { - return get(); - } finally { - reset(); - } - } - - static Pager get() { - return ThreadLocalUtils.get(threadLocalKey); - } - - static void reset() { - ThreadLocalUtils.remove(threadLocalKey); - } - - static void doPaging(int pageIndex, int pageSize) { - ThreadLocalUtils.put(threadLocalKey, new Pager() { - @Override - public int pageIndex() { - return pageIndex; - } - - @Override - public int pageSize() { - return pageSize; - } - }); - } - - static void doPaging(int pageIndex, int pageSize, int total) { - doPaging(pageIndex, pageSize); - rePaging(total); - } - - static void rePaging(int total) { - Pager pager = get(); - if (pager != null) { - // 当前页没有数据后跳转到最后一页 - if (pager.pageIndex() != 0 && (pager.pageIndex() * pager.pageSize()) >= total) { - int tmp = total / pager.pageSize(); - int pageIndex = total % pager.pageSize() == 0 ? tmp - 1 : tmp; - doPaging(pageIndex, pager.pageSize()); - } - } - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/plgins/pager/PagerInterceptor.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/plgins/pager/PagerInterceptor.java deleted file mode 100644 index 7d23c02dc..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/plgins/pager/PagerInterceptor.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.mybatis.plgins.pager; - -import org.apache.ibatis.executor.Executor; -import org.apache.ibatis.executor.statement.StatementHandler; -import org.apache.ibatis.mapping.MappedStatement; -import org.apache.ibatis.plugin.*; -import org.apache.ibatis.reflection.MetaObject; -import org.apache.ibatis.reflection.SystemMetaObject; -import org.apache.ibatis.session.ResultHandler; -import org.apache.ibatis.session.RowBounds; -import org.hswebframework.ezorm.core.param.QueryParam; -import org.hswebframework.web.dao.mybatis.builder.EasyOrmSqlBuilder; -import org.springframework.stereotype.Component; - -import java.util.Properties; - -@Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, - RowBounds.class, ResultHandler.class})}) -@Component -public class PagerInterceptor implements Interceptor { - - @Override - public Object intercept(Invocation target) throws Throwable { - return target.proceed(); - } - - @Override - public Object plugin(Object target) { - if (target instanceof StatementHandler) { - StatementHandler statementHandler = (StatementHandler) target; - MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler); - String sql = statementHandler.getBoundSql().getSql(); - Pager pager = Pager.getAndReset(); - - String lower = sql.trim(); - - if (lower.startsWith("select")) { - if (lower.contains("count(")) { - return Plugin.wrap(target, this); - } - String newSql = sql; - if (pager != null) { - newSql = EasyOrmSqlBuilder.getInstance() - .getActiveDatabase().getDialect() - .doPaging(sql, pager.pageIndex(), pager.pageSize()); - } - Object queryEntity = statementHandler.getParameterHandler().getParameterObject(); - if (queryEntity instanceof QueryParam && ((QueryParam) queryEntity).isForUpdate()) { - newSql = newSql + " for update"; - } - metaStatementHandler.setValue("delegate.boundSql.sql", newSql); - } - - } - return Plugin.wrap(target, this); - } - - @Override - public void setProperties(Properties properties) { - } -} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/resources/META-INF/spring-configuration-metadata.json b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/resources/META-INF/spring-configuration-metadata.json deleted file mode 100644 index 0c42a4686..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/resources/META-INF/spring-configuration-metadata.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "groups": [ - { - "name": "mybatis", - "type": "org.hswebframework.web.dao.mybatis.MybatisProperties", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - } - ], - "properties": [ - { - "name": "mybatis.dynamic-datasource", - "type": "java.lang.Boolean", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties", - "description": "enable dynamicDatasource." - }, - { - "name": "mybatis.mapper-location-excludes", - "type": "java.lang.String[]", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties", - "description": "exclude mapperLocations." - }, - { - "name": "mybatis.check-config-location", - "type": "java.lang.Boolean", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.check-config-location", - "type": "java.lang.Boolean", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.check-config-location", - "type": "java.lang.Boolean", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.check-config-location", - "type": "java.lang.Boolean", - "description": "Check the config file exists.", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties", - "defaultValue": false - }, - { - "name": "mybatis.config", - "type": "java.lang.String", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.config", - "type": "java.lang.String", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.config", - "type": "java.lang.String", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.config", - "type": "java.lang.String", - "description": "Config file path.", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.executor-type", - "type": "org.apache.ibatis.session.ExecutorType", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.executor-type", - "type": "org.apache.ibatis.session.ExecutorType", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.executor-type", - "type": "org.apache.ibatis.session.ExecutorType", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.executor-type", - "type": "org.apache.ibatis.session.ExecutorType", - "description": "Execution mode.", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.mapper-locations", - "type": "java.lang.String[]", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.mapper-locations", - "type": "java.lang.String[]", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.mapper-locations", - "type": "java.lang.String[]", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.mapper-locations", - "type": "java.lang.String[]", - "description": "Location of mybatis mapper files.", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.type-aliases-package", - "type": "java.lang.String", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.type-aliases-package", - "type": "java.lang.String", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.type-aliases-package", - "type": "java.lang.String", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.type-aliases-package", - "type": "java.lang.String", - "description": "Package to scan domain objects.", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.type-handlers-package", - "type": "java.lang.String", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.type-handlers-package", - "type": "java.lang.String", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.type-handlers-package", - "type": "java.lang.String", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - }, - { - "name": "mybatis.type-handlers-package", - "type": "java.lang.String", - "description": "Package to scan handlers.", - "sourceType": "org.hswebframework.web.dao.mybatis.MybatisProperties" - } - ], - "hints": [] -} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/resources/META-INF/spring.factories b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/resources/META-INF/spring.factories deleted file mode 100644 index aa564c655..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,3 +0,0 @@ -# Auto Configure -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.hswebframework.web.dao.mybatis.MybatisDaoAutoConfiguration \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/basic/BasicMapper.xml b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/basic/BasicMapper.xml deleted file mode 100644 index 7979303ae..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/basic/BasicMapper.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - ${@org.hswebframework.web.dao.mybatis.builder.SqlBuilder@current().buildWhere(resultMapId,tableName,#this['_parameter'])} - - - ${@org.hswebframework.web.dao.mybatis.builder.SqlBuilder@current().buildWhereForUpdate(resultMapId,tableName,#this['_parameter'])} - - - - ${@org.hswebframework.web.dao.mybatis.builder.SqlBuilder@current().buildSelectFields(resultMapId,tableName,#this['_parameter'])} - - - - - - ${@org.hswebframework.web.dao.mybatis.builder.SqlBuilder@current().buildUpdateFields(resultMapId,tableName,#this['_parameter'])} - - - - - - ${@org.hswebframework.web.dao.mybatis.builder.SqlBuilder@current().buildOrder(resultMapId,tableName,#this['_parameter'])} - - - - - - - - - - - - - - - - - - - - - - - - - - - - select - - from ${_fullTableName} - - - - - - - - - - - - delete from ${_fullTableName} - - - - - - - - - ${@org.hswebframework.web.dao.mybatis.builder.SqlBuilder@current().buildInsertSql(resultMapId,tableName,#this['_parameter'])} - - - - - - - update ${_fullTableName} - - - - - - - - - - - - select count(0) as total from ${_fullTableName} - - - - - - diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/DataType.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/DataType.java deleted file mode 100644 index 62bdec10c..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/DataType.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.hswebframework.web.dao.crud; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import org.hswebframework.web.dict.EnumDict; - -@Getter -@AllArgsConstructor -public enum DataType implements EnumDict { - TYPE1((byte) 1, "类型1"), - TYPE2((byte) 2, "类型2"), - TYPE3((byte) 3, "类型3"), - TYPE4((byte) 4, "类型4"); - - private Byte value; - - private String text; -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/NestEntity.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/NestEntity.java deleted file mode 100644 index 7d76b52f8..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/NestEntity.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.hswebframework.web.dao.crud; - -import lombok.Data; - -import javax.persistence.Column; - -/** - * - * @author zhouhao - * @since - */ -@Data -public class NestEntity { - - @Column - private String name; -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestApplication.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestApplication.java deleted file mode 100644 index 280edc12d..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestApplication.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.hswebframework.web.dao.crud; - -import org.apache.ibatis.session.SqlSessionFactory; -import org.apache.ibatis.session.TransactionIsolationLevel; -import org.apache.ibatis.transaction.Transaction; -import org.hswebframework.web.dao.Dao; -import org.hswebframework.web.dao.mybatis.EnumDictHandlerRegister; -import org.hswebframework.web.dao.mybatis.MybatisEntityFactory; -import org.hswebframework.web.dao.mybatis.MybatisProperties; -import org.hswebframework.web.dao.mybatis.MybatisUtils; -import org.hswebframework.web.dao.mybatis.builder.EasyOrmSqlBuilder; -import org.hswebframework.web.dao.mybatis.dynamic.DynamicDataSourceSqlSessionFactoryBuilder; -import org.hswebframework.web.dao.mybatis.dynamic.DynamicSpringManagedTransaction; -import org.mybatis.spring.SqlSessionFactoryBean; -import org.mybatis.spring.annotation.MapperScan; -import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; -import org.mybatis.spring.transaction.SpringManagedTransactionFactory; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Primary; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.springframework.util.StringUtils; - -import javax.sql.DataSource; -import java.util.Arrays; - -@SpringBootApplication -//@EntityScan("org.hswebframework.web.dao") - -public class TestApplication { - - @Bean - public SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource") DataSource dataSource) throws Exception { - SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); - factory.setVfs(SpringBootVFS.class); - factory.setDataSource(dataSource); - String typeHandlers = "org.hswebframework.web.dao.mybatis.handler"; - factory.setTypeHandlersPackage(typeHandlers); - factory.setMapperLocations(new Resource[]{new ClassPathResource("org/hswebframework/web/dao/test/TestDao.xml")}); - - SqlSessionFactory sqlSessionFactory = factory.getObject(); - return sqlSessionFactory; - } - -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestCrud.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestCrud.java deleted file mode 100644 index a6f1c00f1..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestCrud.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.hswebframework.web.dao.crud; - -import lombok.SneakyThrows; -import org.apache.ibatis.session.SqlSessionFactory; -import org.hswebframework.ezorm.core.param.QueryParam; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.web.commons.entity.param.DeleteParamEntity; -import org.hswebframework.web.commons.entity.param.QueryParamEntity; -import org.hswebframework.web.commons.entity.param.UpdateParamEntity; -import org.hswebframework.web.datasource.DataSourceHolder; -import org.hswebframework.web.dict.EnumDict; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; -import org.springframework.test.context.junit4.SpringRunner; - -import java.sql.SQLException; -import java.util.Arrays; -import java.util.List; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = TestApplication.class) -public class TestCrud extends AbstractTransactionalJUnit4SpringContextTests { - - @Autowired - private TestDao testDao; - - @Autowired - private SqlExecutor sqlExecutor; - - - @Autowired - @Qualifier("sqlSessionFactory2") - SqlSessionFactory sqlSessionFactory2; - - @Autowired - @Qualifier("sqlSessionFactory") - SqlSessionFactory sqlSessionFactory; - - @Before - public void init() throws SQLException { - sqlExecutor.exec("\n" + - "create table h_test(\n" + - " id BIGINT AUTO_INCREMENT PRIMARY KEY,\n" + - " name VARCHAR(32) ,\n" + - " create_time DATETIME,\n" + - " data_type SMALLINT,\n" + - " data_types BIGINT\n" + - ")"); - sqlExecutor.exec("\n" + - "create table h_nest_table(\n" + - " id BIGINT PRIMARY KEY,\n" + - " name VARCHAR(32)\n" + - ")"); - } - - @Test - @SneakyThrows - public void testCRUD() { - - DataSourceHolder.databaseSwitcher().use("PUBLIC"); - - TestEntity entity = new TestEntity(); - entity.setName("测试"); - entity.setDataType(DataType.TYPE1); - entity.setDataTypes(new DataType[]{DataType.TYPE1, DataType.TYPE3}); - testDao.insert(entity); - Assert.assertNotNull(entity.getId()); - sqlExecutor.insert("insert into h_nest_table (id,name) values(#{id},'1234')",entity); - - QueryParamEntity query = new QueryParamEntity(); - //any in - query.where("dataTypes$in$any", Arrays.asList(DataType.TYPE1, DataType.TYPE2)); - - //#102 - //query.where("createTime", "2017-11-10"); - - -// DataSourceHolder.tableSwitcher().use("h_test", "h_test2"); - List entities = testDao.queryNest(query); - query.includes("name"); - testDao.count(query); - testDao.query(query); - - query.includes("nest.name", "*"); - testDao.countNest(query); - - UpdateParamEntity.newUpdate() - .set("name","测试") - .set(entity::getDataType) - .where("id",entity.getId()) - .exec(testDao::update); - - DeleteParamEntity.newDelete() - .where("id", "1234") - .exec(testDao::delete); - System.out.println(entities); - } - - -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestDao.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestDao.java deleted file mode 100644 index ed1917f35..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestDao.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.hswebframework.web.dao.crud; - -import org.hswebframework.web.commons.entity.Entity; -import org.hswebframework.web.dao.CrudDao; - -import java.util.List; - -public interface TestDao extends CrudDao { - List queryNest(Entity queryEntity); - - int countNest(Entity queryEntity); - -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestEntity.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestEntity.java deleted file mode 100644 index 370a33da8..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestEntity.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.hswebframework.web.dao.crud; - -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; - -import javax.persistence.*; -import java.util.Date; - -@Entity -@Table(name = "h_test") -@Getter -@Setter -@ToString -public class TestEntity implements org.hswebframework.web.commons.entity.Entity { - - @Id - @GeneratedValue( - strategy = GenerationType.IDENTITY - ) - private Long id; - - @Column( - name = "name", - columnDefinition = "varchar COMMENT '创建时间'" - ) - private String name; - - @Column( - name = "create_time", - columnDefinition = "timestamp COMMENT '创建时间'" - ) - private Date createTime; - - @Column( - name = "data_type", - columnDefinition = "bigint COMMENT '类型'" - ) - private DataType dataType; - - @Column( - name = "data_types", - columnDefinition = "bigint COMMENT '多个类型'" - ) - private DataType[] dataTypes; - - @CollectionTable(name = "nest_table") - private NestEntity nest; - - @CollectionTable(name = "nest_table2") - private NestEntity nest2; - -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/SqlParamParserTest.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/SqlParamParserTest.java deleted file mode 100644 index dc2537ffb..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/SqlParamParserTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.hswebframework.web.dao.mybatis.builder; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.serializer.SerializerFeature; -import lombok.*; -import org.hswebframework.ezorm.core.param.Term; -import org.hswebframework.web.commons.entity.QueryEntity; -import org.hswebframework.web.commons.entity.param.QueryParamEntity; -import org.junit.Assert; -import org.junit.Test; -import org.springframework.asm.ClassReader; - -import java.lang.invoke.LambdaMetafactory; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.function.Function; - -import static org.junit.Assert.*; - -/** - * @author zhouhao - * @since 1.0 - */ -public class SqlParamParserTest { - @SneakyThrows - public static void test(Function function) { - Class t=function.getClass(); - - System.out.println(t); - } - - public static void main(String[] args) { - test(TestQueryEntity::getName$like); - } - - - @Test - public void testParseQueryParam() { - Map queryParam = new LinkedHashMap<>(); - queryParam.put("name", "张三"); - queryParam.put("name$like$or", "王五"); - queryParam.put("and", TestQueryEntity - .builder() - .name$like("李四%").age$gt(1) - .or(TestQueryEntity.builder().name$like("王五").age$gt(10).build()) - .build()); - - QueryParamEntity entity = SqlParamParser.parseQueryParam(queryParam); - - Assert.assertTrue(!entity.getTerms().isEmpty()); - Assert.assertEquals(entity.getTerms().get(0).getColumn(), "name"); - Assert.assertEquals(entity.getTerms().get(0).getType(), Term.Type.and); - - Assert.assertEquals(entity.getTerms().get(1).getColumn(), "name"); - Assert.assertEquals(entity.getTerms().get(1).getTermType(), "like"); - Assert.assertEquals(entity.getTerms().get(1).getType(), Term.Type.or); - - - Assert.assertEquals(entity.getTerms().get(2).getType(), Term.Type.and); - Assert.assertTrue(!entity.getTerms().get(2).getTerms().isEmpty()); - Assert.assertEquals(entity.getTerms().get(2).getTerms().get(0).getTermType(), "like"); - - Assert.assertEquals(entity.getTerms().get(2).getTerms().get(1).getTermType(), "gt"); - - Assert.assertTrue(!entity.getTerms().get(2).getTerms().get(2).getTerms().isEmpty()); - Assert.assertEquals(entity.getTerms().get(2).getTerms().get(2).getTerms().get(0).getTermType(), "like"); - Assert.assertEquals(entity.getTerms().get(2).getTerms().get(2).getTerms().get(1).getTermType(), "gt"); - - System.out.println(JSON.toJSONString(entity, SerializerFeature.PrettyFormat)); - } - - -} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/TestQueryEntity.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/TestQueryEntity.java deleted file mode 100644 index 2eb277680..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/TestQueryEntity.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.hswebframework.web.dao.mybatis.builder; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hswebframework.web.commons.entity.QueryEntity; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class TestQueryEntity implements QueryEntity { - - private String name$like; - - private int age$gt; - - private TestQueryEntity or; -} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/AbstractEntity.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/AbstractEntity.java deleted file mode 100644 index 60d97d385..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/AbstractEntity.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.hswebframework.web.dao.mybatis.builder.jpa; - -import lombok.Getter; -import lombok.Setter; - -import javax.persistence.Column; - -/** - * TODO 完成注释 - * - * @author zhouhao - * @since - */ -@Getter -@Setter -public class AbstractEntity { - - @Column(name = "id") - private Long id; -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/JpaAnnotationParserTest.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/JpaAnnotationParserTest.java deleted file mode 100644 index 4f106b074..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/JpaAnnotationParserTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.hswebframework.web.dao.mybatis.builder.jpa; - -import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; -import org.junit.Assert; -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * TODO 完成注释 - * - * @author zhouhao - * @since - */ -public class JpaAnnotationParserTest { - - - @Test - public void testParse() { - RDBTableMetaData metaData = JpaAnnotationParser.parseMetaDataFromEntity(TestEntity.class); - - Assert.assertNotNull(metaData); - Assert.assertEquals(metaData.getColumns().size(), 5); - } -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/TestEntity.java b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/TestEntity.java deleted file mode 100644 index a67e004e3..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/TestEntity.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.hswebframework.web.dao.mybatis.builder.jpa; - -import lombok.Data; -import org.hswebframework.web.dict.defaults.TrueOrFalse; - -import javax.persistence.Column; -import javax.persistence.Table; - -/** - * @author zhouhao - * @since 3.0 - */ -@Table(name = "s_test") -@Data -public class TestEntity extends AbstractEntity { - - @Column(name = "name") - private String name; - - @Column(name = "age") - private Integer age; - - @Column(name = "role_id") - private String roleId; - - @Column(name = "enabled") - private TrueOrFalse enabled; - -} diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/resources/application.yml b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/resources/application.yml deleted file mode 100644 index 428f11190..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/resources/application.yml +++ /dev/null @@ -1,26 +0,0 @@ -logging: - level: - org.hswebframework: DEBUG - org.hswebframework.expands: ERROR - com.ruiqi: DEBUG - access-logger: INFO - com.netflix: ERROR -spring: - aop: - auto: true - proxy-target-class: true - profiles: - active: dev - datasource: - url: jdbc:h2:mem:test - username : sa - password : - type: com.alibaba.druid.pool.DruidDataSource - jpa: - generate-ddl: true - show-sql: true - hibernate: - ddl-auto: update -mybatis: - mapper-locations: org/hswebframework/web/dao/test/*.xml - dynamic-datasource: true \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/resources/org/hswebframework/web/dao/test/TestDao.xml b/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/resources/org/hswebframework/web/dao/test/TestDao.xml deleted file mode 100644 index 7972d3e0b..000000000 --- a/hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/resources/org/hswebframework/web/dao/test/TestDao.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-dao/pom.xml b/hsweb-commons/hsweb-commons-dao/pom.xml index 6252aa364..3abfc4c78 100644 --- a/hsweb-commons/hsweb-commons-dao/pom.xml +++ b/hsweb-commons/hsweb-commons-dao/pom.xml @@ -23,7 +23,7 @@ hsweb-commons org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 @@ -34,7 +34,6 @@ pom hsweb-commons-dao-api - hsweb-commons-dao-mybatis diff --git a/hsweb-commons/hsweb-commons-entity/pom.xml b/hsweb-commons/hsweb-commons-entity/pom.xml index d78430547..d23638a5e 100644 --- a/hsweb-commons/hsweb-commons-entity/pom.xml +++ b/hsweb-commons/hsweb-commons-entity/pom.xml @@ -23,7 +23,7 @@ hsweb-commons org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/param/QueryParamEntity.java b/hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/param/QueryParamEntity.java index df2ea77e5..59101f3aa 100644 --- a/hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/param/QueryParamEntity.java +++ b/hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/param/QueryParamEntity.java @@ -52,7 +52,6 @@ public class QueryParamEntity extends QueryParam implements QueryEntity { * @param field 参数名称 * @param value 参数值 * @return 单个条件的参数实体 - * @see QueryParam#where(String, Object) */ public static QueryParamEntity single(String field, Object value) { return of(field, value); @@ -62,21 +61,21 @@ public class QueryParamEntity extends QueryParam implements QueryEntity { * @see this#single(String, Object) */ public static QueryParamEntity of(String field, Object value) { - return empty().where(field, value); + return of(field, value); } /** * @since 3.0.4 */ public static Query newQuery() { - return Query.empty(new QueryParamEntity()); + return Query.of(new QueryParamEntity()); } /** * @since 3.0.4 */ public Query toQuery() { - return Query.empty(this); + return Query.of(this); } /** diff --git a/hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/param/UpdateParamEntity.java b/hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/param/UpdateParamEntity.java index f8afd1d65..b2526b76b 100644 --- a/hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/param/UpdateParamEntity.java +++ b/hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/param/UpdateParamEntity.java @@ -2,10 +2,13 @@ package org.hswebframework.web.commons.entity.param; import org.hswebframework.ezorm.core.dsl.Query; import org.hswebframework.ezorm.core.dsl.Update; +import org.hswebframework.ezorm.core.param.TermType; import org.hswebframework.ezorm.core.param.UpdateParam; import org.hswebframework.web.commons.entity.Entity; import org.hswebframework.web.commons.entity.QueryEntity; +import java.util.HashMap; + /** * 修改参数实体,使用easyorm进行动态参数构建 * @@ -18,6 +21,7 @@ public class UpdateParamEntity extends UpdateParam implements QueryEntity private static final long serialVersionUID = -4074863219482678510L; public UpdateParamEntity() { + super((T) new HashMap()); } public UpdateParamEntity(T data) { @@ -26,7 +30,7 @@ public class UpdateParamEntity extends UpdateParam implements QueryEntity /** * 创建一个无任何条件并指定数据的更新参数实体 - * 创建后需自行指定条件({@link UpdateParamEntity#where(String, Object)}) + * 创建后需自行指定条件({@link UpdateParamEntity#and(String, String, Object)} ) * 否则可能无法执行更新(dao实现应该禁止无条件的更新) * * @param data 要更新的数据 @@ -53,14 +57,14 @@ public class UpdateParamEntity extends UpdateParam implements QueryEntity * @return 更新参数实体 */ public static UpdateParamEntity build(T data, String field, Object value) { - return new UpdateParamEntity<>(data).where(field, value); + return new UpdateParamEntity<>(data).and(field, TermType.eq, value); } /** * @since 3.0.4 */ public static Update> newUpdate() { - return new Update<>(new UpdateParamEntity<>()); + return Update.of(new UpdateParamEntity<>()); } @Override diff --git a/hsweb-commons/hsweb-commons-model/pom.xml b/hsweb-commons/hsweb-commons-model/pom.xml index 0948fdddc..4079b91c5 100644 --- a/hsweb-commons/hsweb-commons-model/pom.xml +++ b/hsweb-commons/hsweb-commons-model/pom.xml @@ -23,7 +23,7 @@ hsweb-commons org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-api/pom.xml b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-api/pom.xml index f3e8ec1cb..b58ad8e3e 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-api/pom.xml +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-api/pom.xml @@ -23,7 +23,7 @@ hsweb-commons-service org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-api/src/main/java/org/hswebframework/web/service/QueryByEntityService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-api/src/main/java/org/hswebframework/web/service/QueryByEntityService.java index 776a6d76a..8ba104930 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-api/src/main/java/org/hswebframework/web/service/QueryByEntityService.java +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-api/src/main/java/org/hswebframework/web/service/QueryByEntityService.java @@ -20,6 +20,7 @@ package org.hswebframework.web.service; import org.hswebframework.web.commons.entity.Entity; import org.hswebframework.web.commons.entity.PagerResult; +import org.hswebframework.web.commons.entity.param.QueryParamEntity; import java.util.List; @@ -39,7 +40,7 @@ public interface QueryByEntityService extends Service { * @param param 参数 * @return 分页查询结果 */ - PagerResult selectPager(Entity param); + PagerResult selectPager(QueryParamEntity param); /** * 直接查询 @@ -47,7 +48,7 @@ public interface QueryByEntityService extends Service { * @param param 查询参数 * @return 查询结果 */ - List select(Entity param); + List select(QueryParamEntity param); /** * 查询总数 @@ -55,7 +56,7 @@ public interface QueryByEntityService extends Service { * @param param 查询参数 * @return 总数 */ - int count(Entity param); + int count(QueryParamEntity param); /** * 查询单条数据,如果存在多条数据,则返回第一条 @@ -63,5 +64,5 @@ public interface QueryByEntityService extends Service { * @param param 查询参数 * @return 查询结果 */ - E selectSingle(Entity param); + E selectSingle(QueryParamEntity param); } diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-oauth2/pom.xml b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-oauth2/pom.xml index 85c306400..3e515c38b 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-oauth2/pom.xml +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-oauth2/pom.xml @@ -5,7 +5,7 @@ hsweb-commons-service org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/pom.xml b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/pom.xml index 15344f026..bbd674e90 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/pom.xml +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/pom.xml @@ -23,7 +23,7 @@ hsweb-commons-service org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/AbstractService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/AbstractService.java index df60a9568..03fb1c161 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/AbstractService.java +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/AbstractService.java @@ -1,5 +1,6 @@ package org.hswebframework.web.service; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.utils.ClassUtils; import org.hswebframework.web.NotFoundException; import org.hswebframework.web.commons.entity.Entity; @@ -48,6 +49,14 @@ public abstract class AbstractService implements CreateEnt this.logicPrimaryKeyValidator = logicPrimaryKeyValidator; } + @Autowired + private SyncRepository repository; + + public SyncRepository getDao() { + return repository; + } + + protected Class entityType; protected Class primaryKeyType; diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/AbstractTreeSortService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/AbstractTreeSortService.java index 618b0a3a7..3b28576a3 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/AbstractTreeSortService.java +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/AbstractTreeSortService.java @@ -39,6 +39,7 @@ import java.util.stream.Collectors; public abstract class AbstractTreeSortService, PK> extends GenericEntityService implements TreeService { + @Override @Transactional(readOnly = true) public List selectParentNode(PK childId) { @@ -51,7 +52,7 @@ public abstract class AbstractTreeSortService extends DefaultDeleteService { - DeleteByEntityDao getDao(); + SyncRepository getDao(); - default Delete createDelete() { - Delete delete = new Delete<>(new DeleteParamEntity()); - delete.setExecutor(getDao()::delete); - return delete; + default SyncDelete createDelete() { + return getDao().createDelete(); } - static Delete createDelete(DeleteByEntityDao deleteDao) { - Delete update = new Delete<>(new DeleteParamEntity()); - update.setExecutor(deleteDao::delete); - return update; + static SyncDelete createDelete(SyncRepository deleteDao) { + return deleteDao.createDelete(); } - /** - * 自定义一个删除执行器。创建dsl数据删除操作对象 - * - * @param executor 执行器 - * @return {@link Delete} - * @since 3.0 - */ - static Delete createDelete(Delete.Executor executor) { - Delete update = new Delete<>(new DeleteParamEntity()); - update.setExecutor(executor); - return update; - } } diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultDSLQueryService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultDSLQueryService.java index 261c03719..32c80e34a 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultDSLQueryService.java +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultDSLQueryService.java @@ -19,6 +19,8 @@ package org.hswebframework.web.service; import org.hswebframework.ezorm.core.dsl.Query; +import org.hswebframework.ezorm.rdb.mapping.SyncQuery; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.commons.entity.param.QueryParamEntity; import org.hswebframework.web.dao.dynamic.QueryByEntityDao; @@ -29,33 +31,29 @@ public interface DefaultDSLQueryService @Override default List select() { - return createQuery().noPaging().list(); + return createQuery().fetch(); } @Override default int count() { - return createQuery().total(); + return createQuery().count(); } /** * 创建本服务的dsl查询操作对象 * 可通过返回的Query对象进行dsl方式操作如:
* - * createQuery().where("id",1).single(); + * createQuery().where("id",1).fetch(); * * * @return {@link Query} * @see Query * @see org.hswebframework.ezorm.core.Conditional - * @since 3.0 + * @since 3.1 */ - default Query createQuery() { - Query query = Query.empty(new QueryParamEntity()); - query.setListExecutor(this::select); - query.setTotalExecutor(this::count); - query.setSingleExecutor(this::selectSingle); - query.noPaging(); - return query; + default SyncQuery createQuery() { + + return getDao().createQuery(); } /** @@ -65,27 +63,14 @@ public interface DefaultDSLQueryService * createQuery(userMapper).where("id",1).single(); * * - * @param dao dao接口 - * @param PO泛型 + * @param dao dao接口 * @return {@link Query} * @see Query * @see org.hswebframework.ezorm.core.Conditional - * @since 3.0 + * @since 3.1 */ - static Query createQuery(QueryByEntityDao dao) { - Query query = new Query<>(new QueryParamEntity()); - query.setListExecutor(dao::query); - query.setTotalExecutor(dao::count); - query.setSingleExecutor((param) -> { - param.doPaging(0, 1); - List list = dao.query(param); - if (null == list || list.isEmpty()) { - return null; - } else { - return list.get(0); - } - }); - query.noPaging(); - return query; + static SyncQuery createQuery(SyncRepository dao) { + + return dao.createQuery(); } } diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultDSLUpdateService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultDSLUpdateService.java index 3a53948ed..290a854f9 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultDSLUpdateService.java +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultDSLUpdateService.java @@ -18,7 +18,8 @@ package org.hswebframework.web.service; -import org.hswebframework.ezorm.core.dsl.Update; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; +import org.hswebframework.ezorm.rdb.mapping.SyncUpdate; import org.hswebframework.web.dao.dynamic.UpdateByEntityDao; import org.hswebframework.web.commons.entity.param.UpdateParamEntity; @@ -29,21 +30,21 @@ import org.hswebframework.web.commons.entity.param.UpdateParamEntity; */ public interface DefaultDSLUpdateService extends UpdateService { - UpdateByEntityDao getDao(); + SyncRepository getDao(); - default Update> createUpdate(E data) { - return createUpdate(getDao(), data); + default SyncUpdate createUpdate(E data) { + return getDao().createUpdate().set(data); } - default Update> createUpdate() { - return createUpdate(getDao()); + default SyncUpdate createUpdate() { + return getDao().createUpdate(); } - static Update> createUpdate(UpdateByEntityDao dao) { - return Update.build(dao::update, new UpdateParamEntity<>()); + static SyncUpdate createUpdate(SyncRepository dao) { + return dao.createUpdate(); } - static Update> createUpdate(UpdateByEntityDao dao, E data) { - return Update.build(dao::update, new UpdateParamEntity<>(data)); + static SyncUpdate createUpdate(SyncRepository dao, E data) { + return dao.createUpdate().set(data); } } diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultLogicPrimaryKeyValidator.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultLogicPrimaryKeyValidator.java index f5a43b986..4b8a61a80 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultLogicPrimaryKeyValidator.java +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultLogicPrimaryKeyValidator.java @@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.hswebframework.ezorm.core.dsl.Query; import org.hswebframework.ezorm.core.param.TermType; +import org.hswebframework.ezorm.rdb.mapping.SyncQuery; import org.hswebframework.web.bean.FastBeanCopier; import org.hswebframework.web.commons.entity.param.QueryParamEntity; import org.hswebframework.web.validator.LogicPrimaryKey; @@ -41,7 +42,7 @@ public class DefaultLogicPrimaryKeyValidator implements LogicPrimaryKeyValidator return Result.passed(); }; - public static void registerQuerySuppiler(Class type, Function> querySupplier) { + public static void registerQuerySuppiler(Class type, Function> querySupplier) { validatorCache.computeIfAbsent(type, instrance::createValidator) .values() .stream() @@ -160,7 +161,7 @@ public class DefaultLogicPrimaryKeyValidator implements LogicPrimaryKeyValidator private Class targetType; - private volatile Function> querySupplier; + private volatile Function> querySupplier; public Result doValidate(T bean) { if (querySupplier == null) { @@ -173,7 +174,7 @@ public class DefaultLogicPrimaryKeyValidator implements LogicPrimaryKeyValidator return Result.passed(); } - Query query = querySupplier.apply(bean); + SyncQuery query = querySupplier.apply(bean); //转为map Map mapBean = FastBeanCopier.copy(bean, new HashMap<>()); @@ -220,16 +221,14 @@ public class DefaultLogicPrimaryKeyValidator implements LogicPrimaryKeyValidator properties.put(info.getField(), value); } - T result = query.single(); - - if (result != null) { - Result validateResult = new Result(); - validateResult.setError(true); - validateResult.setData(result); - validateResult.setProperties(properties); - return validateResult; - } - return Result.passed(); + return query.fetchOne() + .map(result->{ + Result validateResult = new Result(); + validateResult.setError(true); + validateResult.setData(result); + validateResult.setProperties(properties); + return validateResult; + }).orElseGet(Result::passed); } } diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultQueryByEntityService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultQueryByEntityService.java index 668af39e1..5639eaa79 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultQueryByEntityService.java +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/DefaultQueryByEntityService.java @@ -19,6 +19,7 @@ package org.hswebframework.web.service; import org.hswebframework.ezorm.core.dsl.Query; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.commons.entity.Entity; import org.hswebframework.web.commons.entity.PagerResult; import org.hswebframework.web.commons.entity.param.QueryParamEntity; @@ -30,46 +31,39 @@ import java.util.List; public interface DefaultQueryByEntityService extends QueryByEntityService { - QueryByEntityDao getDao(); + SyncRepository getDao(); /** * 分页进行查询数据,查询条件同 {@link DefaultQueryByEntityService#select} * - * @param param 查询参数 + * @param entity 查询参数 * @return 分页查询结果 * @see QueryParamEntity * @see QueryParamEntity#newQuery() */ @Override - default PagerResult selectPager(Entity param) { + default PagerResult selectPager(QueryParamEntity entity) { PagerResult pagerResult = new PagerResult<>(); - if (param instanceof QueryParamEntity) { - QueryParamEntity entity = ((QueryParamEntity) param); - //不分页,不进行count - if (!entity.isPaging()) { - pagerResult.setData(getDao().query(param)); - pagerResult.setTotal(pagerResult.getData().size()); - pagerResult.setPageIndex(entity.getThinkPageIndex()); - pagerResult.setPageSize(pagerResult.getData().size()); - return pagerResult; - } + //不分页,不进行count + if (!entity.isPaging()) { + pagerResult.setData(getDao().createQuery().setParam(entity).fetch()); + pagerResult.setTotal(pagerResult.getData().size()); + pagerResult.setPageIndex(entity.getThinkPageIndex()); + pagerResult.setPageSize(pagerResult.getData().size()); + return pagerResult; } - int total = getDao().count(param); + int total = getDao().createQuery().setParam(entity).count(); pagerResult.setTotal(total); - //根据实际记录数量重新指定分页参数 - if (param instanceof QueryParamEntity) { - QueryParamEntity paramEntity = (QueryParamEntity) param; - paramEntity.rePaging(total); - pagerResult.setPageSize(paramEntity.getPageSize()); - pagerResult.setPageIndex(paramEntity.getThinkPageIndex()); - } + entity.rePaging(total); + pagerResult.setPageSize(entity.getPageSize()); + pagerResult.setPageIndex(entity.getThinkPageIndex()); if (total == 0) { pagerResult.setData(new java.util.ArrayList<>()); } else { - pagerResult.setData(select(param)); + pagerResult.setData(select(entity)); } return pagerResult; } @@ -84,11 +78,11 @@ public interface DefaultQueryByEntityService */ @Override @Transactional(readOnly = true) - default List select(Entity param) { + default List select(QueryParamEntity param) { if (param == null) { param = QueryParamEntity.empty(); } - return getDao().query(param); + return getDao().createQuery().setParam(param).fetch(); } @@ -102,11 +96,11 @@ public interface DefaultQueryByEntityService */ @Override @Transactional(readOnly = true) - default int count(Entity param) { + default int count(QueryParamEntity param) { if (param == null) { param = QueryParamEntity.empty(); } - return getDao().count(param); + return getDao().createQuery().setParam(param).count(); } /** @@ -119,16 +113,9 @@ public interface DefaultQueryByEntityService */ @Override @Transactional(readOnly = true) - default E selectSingle(Entity param) { - if (param instanceof QueryParamEntity) { - ((QueryParamEntity) param).doPaging(0, 1); - } - List list = this.select(param); - if (list.isEmpty()) { - return null; - } else { - return list.get(0); - } + default E selectSingle(QueryParamEntity param) { + + return getDao().createQuery().setParam(param).fetchOne().orElse(null); } } diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/GenericEntityService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/GenericEntityService.java index 8ae200e6a..cda0f26ce 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/GenericEntityService.java +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/GenericEntityService.java @@ -53,6 +53,7 @@ public abstract class GenericEntityService, PK> super(); } + /** * 获取ID生成器,在insert的时候,如果ID为空,则调用生成器进行生成 * @@ -89,7 +90,7 @@ public abstract class GenericEntityService, PK> .set(deleteEntity::getDeleted) .set(deleteEntity::getDeleteTime) .where(GenericEntity.id, pk) - .exec(); + .execute(); } else { if (!physicalDeleteByPk(pk)) { logger.warn("物理删除数据失败,主键:{}", pk); @@ -98,10 +99,11 @@ public abstract class GenericEntityService, PK> return old; } + @SuppressWarnings("all") protected boolean physicalDeleteByPk(PK pk) { //createDelete().where(GenericEntity.id,pk).exec()>0; - return getDao().deleteByPk(pk) > 0; + return getDao().deleteById(pk) > 0; } protected boolean pushModifyEvent() { @@ -130,7 +132,7 @@ public abstract class GenericEntityService, PK> .when(entity instanceof RecordCreationEntity, update -> update.and().excludes(((RecordCreationEntity) entity).getCreatorIdProperty(), RecordCreationEntity.createTime)) .where(GenericEntity.id, pk) - .exec(); + .execute(); } protected int updateByPk(E entity) { @@ -194,7 +196,7 @@ public abstract class GenericEntityService, PK> if (StringUtils.isEmpty(pk)) { return null; } - return createQuery().where(GenericEntity.id, pk).single(); + return getDao().findById(pk).orElse(null); } @Override @@ -203,7 +205,7 @@ public abstract class GenericEntityService, PK> if (CollectionUtils.isEmpty(id)) { return new ArrayList<>(); } - return createQuery().where().in(GenericEntity.id, id).listNoPaging(); + return getDao().findById(id); } } diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/GenericService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/GenericService.java index 1be091792..f0063213e 100644 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/GenericService.java +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/GenericService.java @@ -18,6 +18,7 @@ package org.hswebframework.web.service; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.dao.CrudDao; /** @@ -35,5 +36,5 @@ public interface GenericService extends DefaultDSLDeleteService, CrudService { @Override - CrudDao getDao(); + SyncRepository getDao(); } diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/terms/AbstractSqlTermCustomizer.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/terms/AbstractSqlTermCustomizer.java new file mode 100644 index 000000000..c5c331739 --- /dev/null +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/terms/AbstractSqlTermCustomizer.java @@ -0,0 +1,77 @@ +package org.hswebframework.web.service.terms; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.PrepareSqlFragments; + +import java.util.*; + +/** + * @author zhouhao + * @since 3.1.0 + */ +@AllArgsConstructor +public abstract class AbstractSqlTermCustomizer implements SqlTermCustomizer { + + @Getter + protected final String termType; + + @SuppressWarnings("unchecked") + protected List convertList(Object value) { + if (value == null) return new ArrayList<>(); + if (value instanceof List) return (List) value; + if (value instanceof Collection) return new ArrayList<>(((Collection) value)); + if (value instanceof String) { + String[] arr = ((String) value).split("[,]"); + Object[] objArr = new Object[arr.length]; + for (int i = 0; i < arr.length; i++) { + String str = arr[i]; + Object val = str; + objArr[i] = val; + } + return new ArrayList<>(Arrays.asList(objArr)); + } else if (value.getClass().isArray()) { + return new ArrayList<>(Arrays.asList(((Object[]) value))); + } else { + return new ArrayList<>(Collections.singletonList(value)); + } + } + + @SuppressWarnings("unchecked") + protected List convertList(RDBColumnMetadata column, Object value) { + if (value == null) return new ArrayList<>(); + if (value instanceof List) return (List) value; + if (value instanceof Collection) return new ArrayList<>(((Collection) value)); + if (value instanceof String) { + String[] arr = ((String) value).split("[,]"); + Object[] objArr = new Object[arr.length]; + for (int i = 0; i < arr.length; i++) { + String str = arr[i]; + Object val = str; + objArr[i] = column.encode(val); + } + return new ArrayList<>(Arrays.asList(objArr)); + } else if (value.getClass().isArray()) { + return new ArrayList<>(Arrays.asList(((Object[]) value))); + } else { + return new ArrayList<>(Collections.singletonList(value)); + } + } + + protected void appendCondition(PrepareSqlFragments appender,RDBColumnMetadata columnMetadata, List values) { + int len = values.size(); + if (len == 1) { + appender.addSql("=?").addParameter(values); + } else { + appender.addSql("in("); + for (int i = 0; i < len; i++) { + if (i > 0) { + appender.addSql(","); + } + appender.addSql("?"); + } + appender.addSql(")").addParameter(values); + } + } +} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/terms/SqlTermCustomizer.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/terms/SqlTermCustomizer.java new file mode 100644 index 000000000..fd1fc362c --- /dev/null +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/terms/SqlTermCustomizer.java @@ -0,0 +1,14 @@ +package org.hswebframework.web.service.terms; + + +import org.hswebframework.ezorm.rdb.operator.builder.fragments.TermFragmentBuilder; + +/** + * @author zhouhao + * @since 3.0.0-RC + */ +public interface SqlTermCustomizer extends TermFragmentBuilder { + + String getTermType(); + +} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/terms/TreeStructureSqlTermCustomizer.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/terms/TreeStructureSqlTermCustomizer.java new file mode 100644 index 000000000..c782f33ea --- /dev/null +++ b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/terms/TreeStructureSqlTermCustomizer.java @@ -0,0 +1,83 @@ +package org.hswebframework.web.service.terms; + +import lombok.extern.slf4j.Slf4j; +import org.hswebframework.ezorm.core.param.Term; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.PrepareSqlFragments; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.function.FunctionFragmentBuilder; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author zhouhao + * @since 3.0.0-RC + */ +@Slf4j +public abstract class TreeStructureSqlTermCustomizer extends AbstractSqlTermCustomizer { + public TreeStructureSqlTermCustomizer(String termType) { + super(termType); + } + + protected abstract String getTableName(); + + protected abstract List getTreePathByTerm(List termValue); + + @Override + public SqlFragments createFragments(String columnFullName, RDBColumnMetadata column, Term term) { + + List listValue = convertList(term.getValue()); + List paths = getTreePathByTerm(listValue) + .stream() + .map(path -> path.concat("%")) + .collect(Collectors.toList()); + List options = term.getOptions(); + + boolean parent = options.contains("parent"); + boolean not = options.contains("not"); + + PrepareSqlFragments fragments = PrepareSqlFragments.of() + .addSql(not ? "not " : "", "exists(select 1 from ", getTableName(), " tmp where tmp.u_id = ", columnFullName); + + int len = paths.size(); + + if (len > 0) { + fragments.addSql(" and ("); + } + for (int i = 0; i < len; i++) { + if (i > 0) { + fragments.addSql(" or"); + } + if (parent) { + FunctionFragmentBuilder function = column.findFeature(FunctionFragmentBuilder.createFeatureId("concat")).orElse(null); + + String concat; + if (function == null) { + concat = getTableName() + ".path"; + log.warn("数据库不支持concat函数(FunctionFragmentBuilder)!"); + fragments.addSql("? like ", paths.get(i)).addSql("like", concat); + } else { + Map param = new HashMap<>(); + param.put("0", "'tmp.path'"); + param.put("1", "'%'"); + + //? like concat(tmp.path,'%') + fragments.addSql("? like ", paths.get(i)).addSql("like").addFragments(function.create("tmp.path", column, param)); + } + + } else { + fragments.addSql("tmp.path like ?", paths.get(i)); + } + } + if (len > 0) { + fragments.addSql(")"); + } + fragments.addSql(")"); + + return fragments; + } + +} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/AbstractTreeSortServiceTests.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/AbstractTreeSortServiceTests.java deleted file mode 100644 index 132f930cf..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/AbstractTreeSortServiceTests.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.hswebframework.web.service; - -import com.alibaba.fastjson.JSON; -import org.hswebframework.web.commons.entity.factory.MapperEntityFactory; -import org.hswebframework.web.commons.entity.param.QueryParamEntity; -import org.hswebframework.web.dao.CrudDao; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.runners.MockitoJUnitRunner; -import org.mockito.stubbing.Answer; - -import javax.validation.Validation; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.*; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.when; - -/** - * @author zhouhao - * @since 3.0 - */ -@RunWith(MockitoJUnitRunner.class) -public class AbstractTreeSortServiceTests { - - @InjectMocks - private TestTreeEntityService entityService = new TestTreeEntityService(); - - @Mock - private CrudDao dao; - - private List entities = new ArrayList<>(); - - @Before - public void init() { - entityService.setEntityFactory(new MapperEntityFactory()); - - TestEntity entity = TestEntity.builder() - .age((byte) 10) - .enabled(true) - .name("test") - .build(); - entity.setId("testId"); - - when(dao.query(any())) - .thenReturn(new ArrayList<>()); - - when(dao.count(any())).thenReturn(1); - -// when(dao.update(any())).thenReturn(1); - - when(dao.delete(any())).thenReturn(1); - when(dao.deleteByPk("test")).thenReturn(1); - - // doNothing().when(dao).insert(anyObject()); - doAnswer(invocationOnMock -> { - TestEntity t = invocationOnMock.getArgumentAt(0, TestEntity.class); - entities.add(t); - return t.getId(); - }).when(dao).insert(anyObject()); - - doAnswer(invocationOnMock -> { - TestEntity t = invocationOnMock.getArgumentAt(0, TestEntity.class); - entities.add(t); - return t.getId(); - }).when(dao).update(anyObject()); - } - - @Test - public void testBatchInsert() { - String treeJson = "{'id':'1','parentId':'-1','name':'父节点','children':[" + - "{'id':'101','parentId':'1','name':'子节点1'}," + - "{'id':'102','parentId':'1','name':'子节点2'}" + - "]}"; - TestEntity entity = JSON.parseObject(treeJson, TestEntity.class); - - entityService.insert(entity); - - Assert.assertEquals(entities.size(), 3); - entities.clear(); - - entityService.updateByPk(entity); - Assert.assertEquals(entities.size(), 3); - entities.clear(); - - entityService.updateBatch(Arrays.asList(entity)); - Assert.assertEquals(entities.size(), 3); - } -} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/DefaultLogicPrimaryKeyValidatorTest.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/DefaultLogicPrimaryKeyValidatorTest.java deleted file mode 100644 index 0781c9dce..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/DefaultLogicPrimaryKeyValidatorTest.java +++ /dev/null @@ -1,145 +0,0 @@ -package org.hswebframework.web.service; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import org.hswebframework.ezorm.core.dsl.Query; -import org.hswebframework.web.commons.entity.param.QueryParamEntity; -import org.hswebframework.web.validator.LogicPrimaryKey; -import org.hswebframework.web.validator.group.CreateGroup; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -public class DefaultLogicPrimaryKeyValidatorTest { - DefaultLogicPrimaryKeyValidator validator = new DefaultLogicPrimaryKeyValidator(); - - @Test - public void testSimple() { - DefaultLogicPrimaryKeyValidator.registerQuerySuppiler(TestBean.class, bean -> - Query.empty(QueryParamEntity.empty()) - .setSingleExecutor(param -> { - Assert.assertNotNull(param.getTerms()); - Assert.assertEquals(param.getTerms().size(), 2); - return new TestBean("test", "1"); - })); - - TestBean bean = new TestBean("test", "1"); - Assert.assertTrue(validator.validate(bean).isError()); - } - - - @Test - public void testClassAnn() { - DefaultLogicPrimaryKeyValidator.registerQuerySuppiler(ClassAnnTestBean.class, bean -> - Query.empty(QueryParamEntity.empty()) - .setSingleExecutor(param -> { - Assert.assertNotNull(param.getTerms()); - Assert.assertEquals(param.getTerms().size(), 2); - return new ClassAnnTestBean("test", "1"); - })); - - ClassAnnTestBean bean = new ClassAnnTestBean("test", "1"); - Assert.assertTrue(validator.validate(bean).isError()); - } - - - @Test - public void testGroupAnn() { - DefaultLogicPrimaryKeyValidator.registerQuerySuppiler(GroupAnnTestBean.class, bean -> - Query.empty(QueryParamEntity.empty()) - .setSingleExecutor(param -> { - Assert.assertNotNull(param.getTerms()); - Assert.assertEquals(param.getTerms().size(), 2); - return new GroupAnnTestBean("test", "1"); - })); - - GroupAnnTestBean bean = new GroupAnnTestBean("test", "1"); - Assert.assertTrue(validator.validate(bean).isPassed()); - - Assert.assertTrue(validator.validate(bean, TestGroup.class).isError()); - } - - - @Test - public void testNestProperty() { - NestTestBean nestTestBean=new NestTestBean(new TestBean("test","1"),"test"); - - DefaultLogicPrimaryKeyValidator.registerQuerySuppiler(NestTestBean.class, bean -> - Query.empty(QueryParamEntity.empty()) - .setSingleExecutor(param -> { - Assert.assertNotNull(param.getTerms()); - Assert.assertEquals(param.getTerms().size(), 2); - return nestTestBean; - })); - - Assert.assertTrue(validator.validate(nestTestBean).isError()); - } - - - @Getter - @Setter - @AllArgsConstructor - @LogicPrimaryKey(groups = TestGroup.class) - public class GroupAnnTestBean { - - private String name; - - private String org; - - } - - @Getter - @Setter - @AllArgsConstructor - @LogicPrimaryKey({"name", "org"}) - public class ClassAnnTestBean { - - private String name; - - private String org; - - } - - @Getter - @Setter - @AllArgsConstructor - public class GroupTestBean { - - @LogicPrimaryKey(groups = CreateGroup.class) - private String name; - - @LogicPrimaryKey - private String org; - - } - - @Getter - @Setter - @AllArgsConstructor - public class NestTestBean { - @LogicPrimaryKey("nest.name") - private TestBean nest; - - @LogicPrimaryKey - private String org; - } - @Getter - @Setter - @AllArgsConstructor - public class TestBean { - @LogicPrimaryKey - private String name; - - @LogicPrimaryKey - private String org; - } - - @LogicPrimaryKey(value = {"name", "org"}, groups = TestGroup.class) - public interface TestGroup { - - } -} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheAllEvictTestService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheAllEvictTestService.java deleted file mode 100644 index 4454886de..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheAllEvictTestService.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.id.IDGenerator; -import org.springframework.cache.annotation.CacheConfig; - -/** - * @author zhouhao - * @since 1.0 - */ -@CacheConfig(cacheNames = "test-2-entity") -public class EnableCacheAllEvictTestService extends EnableCacheAllEvictGenericEntityService { - private CrudDao dao; - - @Override - protected IDGenerator getIDGenerator() { - return IDGenerator.MD5; - } - - @Override - public CrudDao getDao() { - return dao; - } - - public void setDao(CrudDao dao) { - this.dao = dao; - } - -} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheAllEvictTreeTestService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheAllEvictTreeTestService.java deleted file mode 100644 index 4ab3ac106..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheAllEvictTreeTestService.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.id.IDGenerator; -import org.springframework.cache.annotation.CacheConfig; - -/** - * @author zhouhao - * @since 1.0 - */ -@CacheConfig(cacheNames = "test-2-tree-entity") -public class EnableCacheAllEvictTreeTestService extends EnableCacheAllEvictTreeSortService { - private CrudDao dao; - - @Override - protected IDGenerator getIDGenerator() { - return IDGenerator.MD5; - } - - @Override - public CrudDao getDao() { - return dao; - } - - public void setDao(CrudDao dao) { - this.dao = dao; - } - -} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheTestService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheTestService.java deleted file mode 100644 index 3adfe8082..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheTestService.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.id.IDGenerator; -import org.springframework.cache.annotation.CacheConfig; - -/** - * @author zhouhao - * @since 1.0 - */ -@CacheConfig(cacheNames = "test-entity") -public class EnableCacheTestService extends EnableCacheGenericEntityService { - private CrudDao dao; - - @Override - protected IDGenerator getIDGenerator() { - return IDGenerator.MD5; - } - - @Override - public CrudDao getDao() { - return dao; - } - - public void setDao(CrudDao dao) { - this.dao = dao; - } -} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheTests.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheTests.java deleted file mode 100644 index f6358bda6..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheTests.java +++ /dev/null @@ -1,150 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.commons.entity.factory.MapperEntityFactory; -import org.hswebframework.web.dao.CrudDao; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.experimental.theories.suppliers.TestedOn; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.runners.MockitoJUnitRunner; -import org.mockito.stubbing.Answer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.ApplicationContext; -import org.springframework.test.context.junit4.SpringRunner; - -import javax.validation.Validation; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; - -/** - * @author zhouhao - * @since 3.0 - */ -@SpringBootTest(classes = SpringTestApplication.class) -@RunWith(value = SpringRunner.class) -public class EnableCacheTests { - - @Autowired - private EnableCacheTestService enableCacheTestService; - - @Autowired - private EnableCacheAllEvictTestService enableCacheAllEvictTestService; - @Autowired - private EnableCacheTreeTestService enableCacheTreeTestService; - @Autowired - private EnableCacheAllEvictTreeTestService enableCacheAllEvictTreeTestService; - - private AtomicInteger counter = new AtomicInteger(); - - @Before - public void init() { - CrudDao dao = Mockito.mock(CrudDao.class); - enableCacheTestService.setEntityFactory(new MapperEntityFactory()); - - TestEntity entity = TestEntity.builder() - .age((byte) 10) - .enabled(true) - .name("test") - .build(); - entity.setId("testId"); - - when(dao.query(any())) - .then((Answer>) invocationOnMock -> { - //模拟命中数据库 - counter.incrementAndGet(); - return new ArrayList<>(Arrays.asList(entity)); - }); - - when(dao.count(any())).then((Answer) invocationOnMock -> { - //模拟命中数据库 - counter.incrementAndGet(); - return 1; - }); - - when(dao.update(any())).thenReturn(1); - - when(dao.delete(any())).thenReturn(1); - when(dao.deleteByPk(anyString())).thenReturn(1); - - doNothing().when(dao).insert(anyObject()); - - enableCacheTestService.setDao(dao); - - enableCacheAllEvictTestService.setDao(dao); - - enableCacheTreeTestService.setDao(dao); - - enableCacheAllEvictTreeTestService.setDao(dao); - } - - @Test - public void testSimpleCacheEnableService() { - doTest(enableCacheTestService); - } - - @Test - public void testEnableCacheAllEvictTestService() { - doTest(enableCacheAllEvictTestService); - } - - @Test - public void testEnableCacheTreeTestService() { - doTest(enableCacheTreeTestService); - } - - @Test - public void testEnableCacheAllEvictTreeTestService() { - doTest(enableCacheAllEvictTreeTestService); - } - - - - public void doTest(CrudService service) { - service.selectByPk("testId"); //db 1 - service.selectByPk("testId");//cache - Assert.assertEquals(counter.get(), 1); - - service.select(); //db 2 - service.select();//cache - Assert.assertEquals(counter.get(), 2); - - service.count(); //db 3 - service.count(); //cache - Assert.assertEquals(counter.get(), 3); - - service.updateByPk("testId", new TestEntity()); //evict cache - - service.select(); //db 4 - service.selectByPk("testId");//db 5 - service.count();//db 6 - - service.select(); //cache - service.selectByPk("testId");//cache - service.count();//cache - Assert.assertEquals(counter.get(), 6); - - service.deleteByPk("testId"); //evict cache - //删除前会查询 - counter.decrementAndGet(); - service.select(); //db 7 - service.selectByPk("testId");//db 8 - service.count();//db 9 - - service.select(); //cache - service.selectByPk("testId");//cache - service.count();//cache - Assert.assertEquals(counter.get(), 9); - - } - - -} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheTreeTestService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheTreeTestService.java deleted file mode 100644 index fa865932a..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/EnableCacheTreeTestService.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.id.IDGenerator; -import org.springframework.cache.annotation.CacheConfig; - -/** - * @author zhouhao - * @since 1.0 - */ -@CacheConfig(cacheNames = "test-tree-entity") -public class EnableCacheTreeTestService extends EnableCacheTreeSortService { - private CrudDao dao; - - @Override - protected IDGenerator getIDGenerator() { - return IDGenerator.MD5; - } - - @Override - public CrudDao getDao() { - return dao; - } - - public void setDao(CrudDao dao) { - this.dao = dao; - } -} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/GenericEntityServiceTest.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/GenericEntityServiceTest.java deleted file mode 100644 index c716ca1f6..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/GenericEntityServiceTest.java +++ /dev/null @@ -1,126 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.commons.entity.PagerResult; -import org.hswebframework.web.commons.entity.factory.MapperEntityFactory; -import org.hswebframework.web.commons.entity.param.QueryParamEntity; -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.validate.ValidationException; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; -import org.mockito.stubbing.Answer; -import org.springframework.context.ApplicationEvent; -import org.springframework.context.ApplicationEventPublisher; - -import javax.validation.Validation; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.mockito.Mockito.*; - -/** - * @author zhouhao - * @since 3.0 - */ -@RunWith(MockitoJUnitRunner.class) -public class GenericEntityServiceTest { - - @InjectMocks - private TestEntityService entityService = new TestEntityService(); - - @Mock - private CrudDao dao; - - private QueryParamEntity queryParamEntity = new QueryParamEntity(); - - @Before - public void init() { - entityService.setEntityFactory(new MapperEntityFactory()); - entityService.setValidator(Validation.buildDefaultValidatorFactory().getValidator()); - TestEntity entity = TestEntity.builder() - .age((byte) 10) - .enabled(true) - .name("test") - .build(); - entity.setId("testId"); - - when(dao.query(any())) - .then((Answer>) invocationOnMock -> new ArrayList<>(Arrays.asList(entity))); - - when(dao.count(any())).thenReturn(1); - - when(dao.update(any())).thenReturn(1); - - when(dao.delete(any())).thenReturn(1); - when(dao.deleteByPk("test")).thenReturn(1); - - doNothing().when(dao).insert(anyObject()); - - } - - @Test - public void testSimple() { - Assert.assertEquals(entityService.getEntityType(), TestEntity.class); - - Assert.assertEquals(entityService.getEntityInstanceType(), TestEntity.class); - - Assert.assertEquals(entityService.getPrimaryKeyType(), String.class); - } - - @Test - public void testQuery() { - PagerResult result = entityService.selectPager(queryParamEntity); - Assert.assertEquals(result.getTotal(), 1); - Assert.assertEquals(result.getData().size(), 1); - - TestEntity entity = entityService.selectByPk(result.getData().get(0).getId()); - Assert.assertNotNull(entity); - - List testEntities = entityService.selectByPk(Arrays.asList(result.getData().get(0).getId())); - Assert.assertTrue(!testEntities.isEmpty()); - } - - - @Test - public void testInsert() { - TestEntity testEntity = TestEntity.builder() - .age((byte) 1) - .enabled(true) -// .name("测试") - .build(); - try { - entityService.insert(testEntity); - Assert.assertFalse(true); - } catch (ValidationException e) { - Assert.assertFalse(e.getResults().isEmpty()); - Assert.assertEquals(e.getResults().get(0).getField(), "name"); - testEntity.setId(null); - } - testEntity.setName("测试"); - String id = entityService.insert(testEntity); - Assert.assertNotNull(id); - } - - @Test - public void testUpdate() { - TestEntity testEntity = TestEntity.builder() - .age((byte) 1) - .enabled(true) - .name("测试") - .build(); - testEntity.setId("testEntity"); - - int i = entityService.updateByPk("testEntity", testEntity); - entityService.updateByPk(testEntity); - entityService.updateByPk(Arrays.asList(testEntity)); - String id = entityService.saveOrUpdate(testEntity); - Assert.assertEquals(id, testEntity.getId()); - Assert.assertEquals(i, 1); - } - -} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/ModifyEventTests.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/ModifyEventTests.java deleted file mode 100644 index 3f4240d2d..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/ModifyEventTests.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.commons.entity.events.EntityModifyEvent; -import org.hswebframework.web.commons.entity.factory.MapperEntityFactory; -import org.hswebframework.web.dao.CrudDao; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.stubbing.Answer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Component; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -import static org.mockito.Mockito.*; - -/** - * @author zhouhao - * @since 3.0 - */ -@SpringBootTest(classes = SpringTestApplication.class) -@RunWith(value = SpringRunner.class) -@Component -public class ModifyEventTests { - - @Autowired - private TestModifyEntityService modifyEntityService; - - private AtomicInteger counter = new AtomicInteger(); - - @Before - public void init() { - CrudDao dao = Mockito.mock(CrudDao.class); - modifyEntityService.setEntityFactory(new MapperEntityFactory()); - modifyEntityService.setDao(dao); - TestModifyEntity entity = TestModifyEntity.builder() - .age((byte) 10) - .enabled(true) - .name("test") - .build(); - entity.setId("testId"); - - when(dao.query(any())) - .then((Answer>) invocationOnMock -> { - //模拟命中数据库 - counter.incrementAndGet(); - return new ArrayList<>(Arrays.asList(entity)); - }); - - when(dao.count(any())).then((Answer) invocationOnMock -> { - //模拟命中数据库 - counter.incrementAndGet(); - return 1; - }); - - when(dao.update(any())).thenReturn(1); - - when(dao.delete(any())).thenReturn(1); - when(dao.deleteByPk(anyString())).thenReturn(1); - - doNothing().when(dao).insert(anyObject()); - - } - - - @Test - public void modifyTest() { - TestModifyEntity entity = new TestModifyEntity(); - entity.setId("testId"); - entity.setAge((byte) 10); - - modifyEntityService.updateByPk("test", entity); - Assert.assertTrue(TestModifyEntityService.eventCounter.get() != 0); - } - - -} \ No newline at end of file diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/SpringTestApplication.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/SpringTestApplication.java deleted file mode 100644 index 8fe2be968..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/SpringTestApplication.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.dao.CrudDao; -import org.junit.Before; -import org.mockito.Mockito; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.EnableAspectJAutoProxy; - -/** - * @author zhouhao - * @since 3.0 - */ -@SpringBootApplication -@EnableCaching -@Configuration -@EnableAspectJAutoProxy(proxyTargetClass = true) -public class SpringTestApplication { - - @Bean - public EnableCacheTestService enableCacheTestService() { - return new EnableCacheTestService(); - } - - @Bean - public EnableCacheAllEvictTestService enableCacheAllEvictTestService() { - return new EnableCacheAllEvictTestService(); - } - - @Bean - public EnableCacheTreeTestService enableCacheTreeTestService() { - return new EnableCacheTreeTestService(); - } - - @Bean - public EnableCacheAllEvictTreeTestService enableCacheAllEvictTreeTestService() { - return new EnableCacheAllEvictTreeTestService(); - } -} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestEntity.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestEntity.java deleted file mode 100644 index 2286ff8d9..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.hswebframework.web.service; - -import lombok.*; -import org.hibernate.validator.constraints.NotBlank; -import org.hswebframework.web.commons.entity.RecordModifierEntity; -import org.hswebframework.web.commons.entity.SimpleGenericEntity; -import org.hswebframework.web.commons.entity.SimpleTreeSortSupportEntity; -import org.hswebframework.web.validator.LogicPrimaryKey; -import org.hswebframework.web.validator.group.CreateGroup; - -import java.util.List; - -/** - * @author zhouhao - * @since 1.0 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class TestEntity extends SimpleTreeSortSupportEntity -// implements RecordModifierEntity -{ - - @NotBlank(groups = CreateGroup.class) - private String name; - - private Byte age; - - private Boolean enabled; - - private List children; - - private String modifierId; - - private Long modifyTime; - -} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestEntityService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestEntityService.java deleted file mode 100644 index 6e5d8accc..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestEntityService.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.id.IDGenerator; - -/** - * @author zhouhao - * @since 3.0 - */ -public class TestEntityService extends GenericEntityService { - - private CrudDao dao; - - @Override - protected IDGenerator getIDGenerator() { - return IDGenerator.MD5; - } - - @Override - public CrudDao getDao() { - return dao; - } - - public void setDao(CrudDao dao) { - this.dao = dao; - } -} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestModifyEntity.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestModifyEntity.java deleted file mode 100644 index f5b9ae923..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestModifyEntity.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.hswebframework.web.service; - -import lombok.*; -import org.hibernate.validator.constraints.NotBlank; -import org.hswebframework.web.commons.entity.RecordModifierEntity; -import org.hswebframework.web.commons.entity.SimpleTreeSortSupportEntity; -import org.hswebframework.web.validator.group.CreateGroup; - -import java.util.List; - -/** - * @author zhouhao - * @since 1.0 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class TestModifyEntity extends SimpleTreeSortSupportEntity - implements RecordModifierEntity -{ - - @NotBlank(groups = CreateGroup.class) - private String name; - - private Byte age; - - private Boolean enabled; - - private List children; - - private String modifierId; - - private Long modifyTime; - -} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestModifyEntity2.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestModifyEntity2.java deleted file mode 100644 index 19c9d50f3..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestModifyEntity2.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.hswebframework.web.service; - -import lombok.*; -import org.hibernate.validator.constraints.NotBlank; -import org.hswebframework.web.commons.entity.RecordModifierEntity; -import org.hswebframework.web.commons.entity.SimpleTreeSortSupportEntity; -import org.hswebframework.web.validator.group.CreateGroup; - -import java.util.List; - -/** - * @author zhouhao - * @since 1.0 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class TestModifyEntity2 extends SimpleTreeSortSupportEntity - implements RecordModifierEntity -{ - - @NotBlank(groups = CreateGroup.class) - private String name; - - private Byte age; - - private Boolean enabled; - - private List children; - - private String modifierId; - - private Long modifyTime; - -} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestModifyEntityService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestModifyEntityService.java deleted file mode 100644 index 679f8e002..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestModifyEntityService.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.commons.entity.RecordModifierEntity; -import org.hswebframework.web.commons.entity.events.EntityModifyEvent; -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.id.IDGenerator; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; - -import java.util.concurrent.atomic.AtomicLong; - -/** - * @author zhouhao - * @since 3.0 - */ -@Service -public class TestModifyEntityService extends GenericEntityService { - - private CrudDao dao; - - public static AtomicLong eventCounter = new AtomicLong(); - - @Override - protected IDGenerator getIDGenerator() { - return IDGenerator.MD5; - } - - @Override - public CrudDao getDao() { - return dao; - } - - public void setDao(CrudDao dao) { - this.dao = dao; - } - - @EventListener - public void handleEvent(EntityModifyEvent modifyEvent){ - eventCounter.incrementAndGet(); - System.out.println(modifyEvent); - } - -} diff --git a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestTreeEntityService.java b/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestTreeEntityService.java deleted file mode 100644 index 83940bfe0..000000000 --- a/hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/test/java/org/hswebframework/web/service/TestTreeEntityService.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.hswebframework.web.service; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.id.IDGenerator; - -/** - * @author zhouhao - * @since 3.0 - */ -public class TestTreeEntityService extends AbstractTreeSortService { - - private CrudDao dao; - - @Override - protected IDGenerator getIDGenerator() { - return IDGenerator.MD5; - } - - @Override - public CrudDao getDao() { - return dao; - } - - public void setDao(CrudDao dao) { - this.dao = dao; - } -} diff --git a/hsweb-commons/hsweb-commons-service/pom.xml b/hsweb-commons/hsweb-commons-service/pom.xml index 440d8efdb..0d95913f2 100644 --- a/hsweb-commons/hsweb-commons-service/pom.xml +++ b/hsweb-commons/hsweb-commons-service/pom.xml @@ -23,7 +23,7 @@ hsweb-commons org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml diff --git a/hsweb-commons/hsweb-commons-utils/pom.xml b/hsweb-commons/hsweb-commons-utils/pom.xml index 691e84fce..da1489515 100644 --- a/hsweb-commons/hsweb-commons-utils/pom.xml +++ b/hsweb-commons/hsweb-commons-utils/pom.xml @@ -23,7 +23,7 @@ hsweb-commons org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-commons/hsweb-commons-utils/src/test/java/org/hswebframework/web/HttpParameterConverterTests.java b/hsweb-commons/hsweb-commons-utils/src/test/java/org/hswebframework/web/HttpParameterConverterTests.java index f74d178cf..cf0004f21 100644 --- a/hsweb-commons/hsweb-commons-utils/src/test/java/org/hswebframework/web/HttpParameterConverterTests.java +++ b/hsweb-commons/hsweb-commons-utils/src/test/java/org/hswebframework/web/HttpParameterConverterTests.java @@ -59,7 +59,7 @@ public class HttpParameterConverterTests { @Test public void testConvertObject() { - QueryParam param = Query.empty(new QueryParam()) + QueryParam param = Query.of() .where("name", "张三") .and().like("address", "%重庆%") .nest() diff --git a/hsweb-commons/pom.xml b/hsweb-commons/pom.xml index be4368c20..f48806ddd 100644 --- a/hsweb-commons/pom.xml +++ b/hsweb-commons/pom.xml @@ -23,7 +23,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-async-job/pom.xml b/hsweb-concurrent/hsweb-concurrent-async-job/pom.xml index 90573592c..aa1191c6b 100644 --- a/hsweb-concurrent/hsweb-concurrent-async-job/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-async-job/pom.xml @@ -5,7 +5,7 @@ hsweb-concurrent org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-cache/pom.xml b/hsweb-concurrent/hsweb-concurrent-cache/pom.xml index f64fae708..e846166c7 100644 --- a/hsweb-concurrent/hsweb-concurrent-cache/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-cache/pom.xml @@ -22,7 +22,7 @@ hsweb-concurrent org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-api/pom.xml b/hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-api/pom.xml index 747596602..77af81a88 100644 --- a/hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-api/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-api/pom.xml @@ -22,7 +22,7 @@ hsweb-concurrent-counter org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-redis/pom.xml b/hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-redis/pom.xml index 78e094384..12fbe9f03 100644 --- a/hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-redis/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-redis/pom.xml @@ -5,7 +5,7 @@ hsweb-concurrent-counter org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-counter/pom.xml b/hsweb-concurrent/hsweb-concurrent-counter/pom.xml index 5f52ac1b0..e01e0f227 100644 --- a/hsweb-concurrent/hsweb-concurrent-counter/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-counter/pom.xml @@ -22,7 +22,7 @@ hsweb-concurrent org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-api/pom.xml b/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-api/pom.xml index 2a430f75d..7eaec5164 100644 --- a/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-api/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-api/pom.xml @@ -5,7 +5,7 @@ hsweb-concurrent-lock org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-redis/pom.xml b/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-redis/pom.xml index 9efbb79d9..7d466ce06 100644 --- a/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-redis/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-redis/pom.xml @@ -5,7 +5,7 @@ hsweb-concurrent-lock org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-starter/pom.xml b/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-starter/pom.xml index cd5626f8d..5132fccbe 100644 --- a/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-starter/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-concurrent-lock org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-lock/pom.xml b/hsweb-concurrent/hsweb-concurrent-lock/pom.xml index 19993c61f..ffc9a91a4 100644 --- a/hsweb-concurrent/hsweb-concurrent-lock/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-lock/pom.xml @@ -22,7 +22,7 @@ hsweb-concurrent org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-rate-limiter/hsweb-concurrent-rate-limiter-api/pom.xml b/hsweb-concurrent/hsweb-concurrent-rate-limiter/hsweb-concurrent-rate-limiter-api/pom.xml index c19b63f78..71207f4ca 100644 --- a/hsweb-concurrent/hsweb-concurrent-rate-limiter/hsweb-concurrent-rate-limiter-api/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-rate-limiter/hsweb-concurrent-rate-limiter-api/pom.xml @@ -5,7 +5,7 @@ hsweb-concurrent-rate-limiter org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-rate-limiter/hsweb-concurrent-rate-limiter-starter/pom.xml b/hsweb-concurrent/hsweb-concurrent-rate-limiter/hsweb-concurrent-rate-limiter-starter/pom.xml index 148e13f3b..fa3e93d4f 100644 --- a/hsweb-concurrent/hsweb-concurrent-rate-limiter/hsweb-concurrent-rate-limiter-starter/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-rate-limiter/hsweb-concurrent-rate-limiter-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-concurrent-rate-limiter org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/hsweb-concurrent-rate-limiter/pom.xml b/hsweb-concurrent/hsweb-concurrent-rate-limiter/pom.xml index 3f509024f..94ead40b3 100644 --- a/hsweb-concurrent/hsweb-concurrent-rate-limiter/pom.xml +++ b/hsweb-concurrent/hsweb-concurrent-rate-limiter/pom.xml @@ -5,7 +5,7 @@ hsweb-concurrent org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-concurrent/pom.xml b/hsweb-concurrent/pom.xml index 099274818..e3a3522ed 100644 --- a/hsweb-concurrent/pom.xml +++ b/hsweb-concurrent/pom.xml @@ -22,7 +22,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-core/pom.xml b/hsweb-core/pom.xml index 89dd986f8..ab4e9d8bb 100644 --- a/hsweb-core/pom.xml +++ b/hsweb-core/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-datasource/hsweb-datasource-api/pom.xml b/hsweb-datasource/hsweb-datasource-api/pom.xml index 9d730d6ef..91ba071c8 100644 --- a/hsweb-datasource/hsweb-datasource-api/pom.xml +++ b/hsweb-datasource/hsweb-datasource-api/pom.xml @@ -5,7 +5,7 @@ hsweb-datasource org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml diff --git a/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DefaultJdbcExecutor.java b/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DefaultJdbcExecutor.java index 6a907b635..a9c05c711 100644 --- a/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DefaultJdbcExecutor.java +++ b/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DefaultJdbcExecutor.java @@ -1,8 +1,8 @@ package org.hswebframework.web.datasource; -import org.hswebframework.ezorm.core.ObjectWrapper; -import org.hswebframework.ezorm.rdb.executor.AbstractJdbcSqlExecutor; -import org.hswebframework.ezorm.rdb.executor.SQL; +import lombok.extern.slf4j.Slf4j; +import org.hswebframework.ezorm.rdb.executor.SqlRequest; +import org.hswebframework.ezorm.rdb.executor.jdbc.JdbcSyncSqlExecutor; import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -10,113 +10,51 @@ import org.springframework.transaction.annotation.Transactional; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.function.Consumer; /** * @author zhouhao */ @Transactional(rollbackFor = Throwable.class) -public class DefaultJdbcExecutor extends AbstractJdbcSqlExecutor { +@Slf4j +public class DefaultJdbcExecutor extends JdbcSyncSqlExecutor { protected String getDatasourceId() { String id = DataSourceHolder.switcher().currentDataSourceId(); return id == null ? "default" : id; } + @Override - public Connection getConnection() { + public Connection getConnection(SqlRequest sqlRequest) { DataSource dataSource = DataSourceHolder.currentDataSource().getNative(); Connection connection = DataSourceUtils.getConnection(dataSource); boolean isConnectionTransactional = DataSourceUtils.isConnectionTransactional(connection, dataSource); - if (logger.isDebugEnabled()) { - logger.debug("DataSource ({}) JDBC Connection [{}] will {}be managed by Spring", getDatasourceId(), connection, (isConnectionTransactional ? "" : "not ")); + if (log.isDebugEnabled()) { + log.debug("DataSource ({}) JDBC Connection [{}] will {}be managed by Spring", getDatasourceId(), connection, (isConnectionTransactional ? "" : "not ")); } return connection; } @Override - public void releaseConnection(Connection connection) throws SQLException { - if (logger.isDebugEnabled()) { - logger.debug("Releasing DataSource ({}) JDBC Connection [{}]", getDatasourceId(), connection); + public void releaseConnection(Connection connection, SqlRequest sqlRequest) { + if (log.isDebugEnabled()) { + log.debug("Releasing DataSource ({}) JDBC Connection [{}]", getDatasourceId(), connection); } try { DataSourceUtils.doReleaseConnection(connection, DataSourceHolder.currentDataSource().getNative()); } catch (SQLException e) { - logger.error(e.getMessage(), e); + log.error(e.getMessage(), e); try { connection.close(); } catch (Exception e2) { - logger.error(e2.getMessage(), e2); + log.error(e2.getMessage(), e2); } } } - @Override - @Transactional(readOnly = true) - public List list(SQL sql, ObjectWrapper wrapper) throws SQLException { - return super.list(sql, wrapper); - } - - @Override - @Transactional(readOnly = true) - public void list(String sql, Object params, Consumer> consumer) throws SQLException { - super.list(sql, params, consumer); - } - - @Override - @Transactional(readOnly = true) - public void list(String sql, Consumer> consumer) throws SQLException { - super.list(sql, consumer); - } - - @Override - @Transactional(readOnly = true) - public List list(String sql, Object params, ObjectWrapper wrapper) throws SQLException { - return super.list(sql, params, wrapper); - } - - @Override - @Transactional(readOnly = true) - public List list(String sql, ObjectWrapper wrapper) throws SQLException { - return super.list(sql, wrapper); - } - - @Override - @Transactional(readOnly = true) - public List> list(String sql) throws SQLException { - return super.list(sql); - } - - @Override - @Transactional(readOnly = true) - public List> list(SQL sql) throws SQLException { - return super.list(sql); - } - - @Override - @Transactional(readOnly = true) - public List> list(String sql, Object params) throws SQLException { - return super.list(sql, params); - } - @Override @Transactional(propagation = Propagation.NOT_SUPPORTED) - public void exec(SQL sql) throws SQLException { - super.exec(sql); - } - - @Override - @Transactional(propagation = Propagation.NOT_SUPPORTED) - public void exec(String sql) throws SQLException { - super.exec(sql); - } - - @Override - @Transactional(propagation = Propagation.NOT_SUPPORTED) - public void exec(String sql, Object params) throws SQLException { - super.exec(sql, params); + public void execute(SqlRequest request) { + super.execute(request); } } diff --git a/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DynamicDataSourceAutoConfiguration.java b/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DynamicDataSourceAutoConfiguration.java index b9d89171c..a773b0033 100644 --- a/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DynamicDataSourceAutoConfiguration.java +++ b/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DynamicDataSourceAutoConfiguration.java @@ -1,6 +1,6 @@ package org.hswebframework.web.datasource; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; +import org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor; import org.hswebframework.web.datasource.config.DynamicDataSourceConfigRepository; import org.hswebframework.web.datasource.config.InSpringDynamicDataSourceConfig; import org.hswebframework.web.datasource.service.InSpringContextDynamicDataSourceService; @@ -28,8 +28,8 @@ import javax.sql.DataSource; public class DynamicDataSourceAutoConfiguration { @Bean - @ConditionalOnMissingBean(SqlExecutor.class) - public SqlExecutor sqlExecutor() { + @ConditionalOnMissingBean(SyncSqlExecutor.class) + public SyncSqlExecutor sqlExecutor() { return new DefaultJdbcExecutor(); } diff --git a/hsweb-datasource/hsweb-datasource-jta/pom.xml b/hsweb-datasource/hsweb-datasource-jta/pom.xml index de47f4cdf..6be5992f0 100644 --- a/hsweb-datasource/hsweb-datasource-jta/pom.xml +++ b/hsweb-datasource/hsweb-datasource-jta/pom.xml @@ -5,7 +5,7 @@ hsweb-datasource org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml @@ -75,12 +75,6 @@ spring-boot-starter-jta-atomikos - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - test - commons-beanutils diff --git a/hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/JtaJdbcSqlExecutor.java b/hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/JtaJdbcSqlExecutor.java index 70c17bee3..db759364f 100644 --- a/hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/JtaJdbcSqlExecutor.java +++ b/hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/JtaJdbcSqlExecutor.java @@ -1,6 +1,5 @@ package org.hswebframework.web.datasource.jta; -import org.hswebframework.ezorm.rdb.executor.SQL; import org.hswebframework.web.datasource.DefaultJdbcExecutor; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -15,21 +14,5 @@ import java.sql.SQLException; */ @Transactional(rollbackFor = Throwable.class) public class JtaJdbcSqlExecutor extends DefaultJdbcExecutor { - @Override - @Transactional(propagation = Propagation.NOT_SUPPORTED) - public void exec(SQL sql) throws SQLException { - super.exec(sql); - } - @Override - @Transactional(propagation = Propagation.NOT_SUPPORTED) - public void exec(String sql) throws SQLException { - super.exec(sql); - } - - @Override - @Transactional(propagation = Propagation.NOT_SUPPORTED) - public void exec(String sql, Object params) throws SQLException { - super.exec(sql, params); - } } diff --git a/hsweb-datasource/hsweb-datasource-web/pom.xml b/hsweb-datasource/hsweb-datasource-web/pom.xml index 34a88c5be..92879f26a 100644 --- a/hsweb-datasource/hsweb-datasource-web/pom.xml +++ b/hsweb-datasource/hsweb-datasource-web/pom.xml @@ -5,7 +5,7 @@ hsweb-datasource org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml diff --git a/hsweb-datasource/pom.xml b/hsweb-datasource/pom.xml index 3e0b60c3c..4d547f488 100644 --- a/hsweb-datasource/pom.xml +++ b/hsweb-datasource/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml diff --git a/hsweb-logging/hsweb-access-logging-aop/pom.xml b/hsweb-logging/hsweb-access-logging-aop/pom.xml index 9a2afcf1d..df5d28f3a 100644 --- a/hsweb-logging/hsweb-access-logging-aop/pom.xml +++ b/hsweb-logging/hsweb-access-logging-aop/pom.xml @@ -5,7 +5,7 @@ hsweb-logging org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-logging/hsweb-access-logging-api/pom.xml b/hsweb-logging/hsweb-access-logging-api/pom.xml index 6f98bd465..e3b8ccdee 100644 --- a/hsweb-logging/hsweb-access-logging-api/pom.xml +++ b/hsweb-logging/hsweb-access-logging-api/pom.xml @@ -5,7 +5,7 @@ hsweb-logging org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-logging/pom.xml b/hsweb-logging/pom.xml index 5e1002ef4..da5daa190 100644 --- a/hsweb-logging/pom.xml +++ b/hsweb-logging/pom.xml @@ -23,7 +23,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-starter/hsweb-spring-boot-starter/pom.xml b/hsweb-starter/hsweb-spring-boot-starter/pom.xml index 6fc34f71d..e6ffc535e 100644 --- a/hsweb-starter/hsweb-spring-boot-starter/pom.xml +++ b/hsweb-starter/hsweb-spring-boot-starter/pom.xml @@ -23,7 +23,7 @@ hsweb-starter org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 @@ -62,6 +62,11 @@ org.springframework.boot spring-boot-starter-web + + org.hibernate.javax.persistence + hibernate-jpa-2.1-api + 1.0.2.Final + org.hswebframework.web hsweb-commons-controller @@ -72,5 +77,14 @@ hsweb-datasource-api ${project.version} + + org.hswebframework + hsweb-expands-script + ${hsweb.expands.version} + + + io.projectreactor + reactor-core + \ No newline at end of file diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/RestControllerExceptionTranslator.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/RestControllerExceptionTranslator.java index 1dba64e31..6b9a527f0 100644 --- a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/RestControllerExceptionTranslator.java +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/RestControllerExceptionTranslator.java @@ -69,13 +69,6 @@ public class RestControllerExceptionTranslator { return ResponseMessage.error(400, "解析JSON失败"); } - @ExceptionHandler(org.hswebframework.ezorm.rdb.exception.ValidationException.class) - @ResponseStatus(HttpStatus.BAD_REQUEST) - ResponseMessage handleException(org.hswebframework.ezorm.rdb.exception.ValidationException exception) { - return ResponseMessage.error(400, exception.getMessage()) - .result(exception.getValidateResult()); - } - @ExceptionHandler(ValidationException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) ResponseMessage> handleException(ValidationException exception) { diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/SystemInitializeAutoConfiguration.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/SystemInitializeAutoConfiguration.java index 40b88876e..c19ebbd06 100644 --- a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/SystemInitializeAutoConfiguration.java +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/SystemInitializeAutoConfiguration.java @@ -19,13 +19,10 @@ package org.hswebframework.web.starter; import lombok.extern.slf4j.Slf4j; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.ezorm.rdb.meta.RDBDatabaseMetaData; -import org.hswebframework.ezorm.rdb.meta.parser.*; -import org.hswebframework.ezorm.rdb.render.dialect.*; -import org.hswebframework.ezorm.rdb.simple.SimpleDatabase; import org.hswebframework.expands.script.engine.DynamicScriptEngine; import org.hswebframework.expands.script.engine.DynamicScriptEngineFactory; +import org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; import org.hswebframework.web.ScriptScope; import org.hswebframework.web.datasource.DataSourceHolder; import org.hswebframework.web.datasource.DatabaseType; @@ -72,7 +69,7 @@ public class SystemInitializeAutoConfiguration implements CommandLineRunner, Bea private DataSource dataSource; @Autowired - private SqlExecutor sqlExecutor; + private SyncSqlExecutor sqlExecutor; @Autowired private ApplicationContext applicationContext; @@ -85,6 +82,9 @@ public class SystemInitializeAutoConfiguration implements CommandLineRunner, Bea @Autowired private Environment environment; + @Autowired + private DatabaseOperator databaseOperator; + @PostConstruct public void init() { engines = Stream.of("js", "groovy") @@ -130,46 +130,16 @@ public class SystemInitializeAutoConfiguration implements CommandLineRunner, Bea connection.close(); } } - RDBDatabaseMetaData metaData; - switch (type) { - case oracle: - metaData = new OracleRDBDatabaseMetaData(); - metaData.setParser(new OracleTableMetaParser(sqlExecutor)); - break; - case postgresql: - metaData = new PGRDBDatabaseMetaData(); - metaData.setParser(new PGSqlTableMetaParser(sqlExecutor)); - break; - case sqlserver: - case jtds_sqlserver: - metaData = new MSSQLRDBDatabaseMetaData(); - metaData.setParser(new SqlServer2012TableMetaParser(sqlExecutor)); - break; - case mysql: - String engine = environment.getProperty("mysql.engine"); - if (StringUtils.hasText(engine)) { - metaData = new MysqlRDBDatabaseMetaData(engine); - } else { - metaData = new MysqlRDBDatabaseMetaData(); - } - metaData.setParser(new MysqlTableMetaParser(sqlExecutor)); - break; - default: - metaData = new H2RDBDatabaseMetaData(); - metaData.setParser(new H2TableMetaParser(sqlExecutor)); - break; - } - metaData.init(); - SimpleDatabase database = new SimpleDatabase(metaData, sqlExecutor); - database.setAutoParse(true); - SystemInitializeEvent event = new SystemInitializeEvent(database); + + + SystemInitializeEvent event = new SystemInitializeEvent(databaseOperator); eventPublisher.publishEvent(event); if (event.isIgnore()) { return; } - SystemInitialize initialize = new SystemInitialize(sqlExecutor, database, version); + SystemInitialize initialize = new SystemInitialize(sqlExecutor, databaseOperator, version); initialize.addScriptContext("db", jdbcUserName); initialize.addScriptContext("dbType", type.name()); diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/AutoDDLProcessor.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/AutoDDLProcessor.java new file mode 100644 index 000000000..5ee5053e4 --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/AutoDDLProcessor.java @@ -0,0 +1,46 @@ +package org.hswebframework.web.starter.easyorm; + +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Setter +@Slf4j +public class AutoDDLProcessor { + + private List entities = new ArrayList<>(); + + @Autowired + private DatabaseOperator operator; + + @Autowired + private EasyormProperties properties; + + @Autowired + private EntityTableMetadataResolver resolver; + + private boolean reactive; + + public void init() { + if (properties.isAutoDdl()) { + for (Class entity : entities) { + log.warn("auto ddl for {}", entity); + try { + operator.ddl() + .createOrAlter(resolver.resolve(entity)) + .commit() + .sync(); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + + } + } +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/CompositeEntityTableMetadataResolver.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/CompositeEntityTableMetadataResolver.java new file mode 100644 index 000000000..9d7ad74ac --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/CompositeEntityTableMetadataResolver.java @@ -0,0 +1,42 @@ +package org.hswebframework.web.starter.easyorm; + +import org.hswebframework.ezorm.rdb.mapping.parser.EntityTableMetadataParser; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; +import org.hswebframework.ezorm.rdb.metadata.RDBTableMetadata; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicReference; + +public class CompositeEntityTableMetadataResolver implements EntityTableMetadataResolver { + + private List resolvers = new ArrayList<>(); + + private Map> cache = new ConcurrentHashMap<>(); + + public void addParser(EntityTableMetadataParser resolver) { + resolvers.add(resolver); + } + + @Override + public RDBTableMetadata resolve(Class entityClass) { + + return cache.computeIfAbsent(entityClass, type -> new AtomicReference<>(doResolve(type))).get(); + } + + private RDBTableMetadata doResolve(Class entityClass) { + return resolvers.stream() + .map(resolver -> resolver.parseTable(entityClass)) + .filter(Optional::isPresent) + .map(Optional::get) + .reduce((t1, t2) -> { + for (RDBColumnMetadata column : t1.getColumns()) { + t2.addColumn(column.clone()); + } + return t2; + }).orElse(null); + } +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/DataSourceJdbcSyncSqlExecutor.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/DataSourceJdbcSyncSqlExecutor.java new file mode 100644 index 000000000..cfbca61ce --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/DataSourceJdbcSyncSqlExecutor.java @@ -0,0 +1,68 @@ +package org.hswebframework.web.starter.easyorm; + +import lombok.extern.slf4j.Slf4j; +import org.hswebframework.ezorm.rdb.executor.SqlRequest; +import org.hswebframework.ezorm.rdb.executor.jdbc.JdbcSyncSqlExecutor; +import org.hswebframework.ezorm.rdb.executor.wrapper.ResultWrapper; +import org.springframework.jdbc.datasource.DataSourceUtils; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.SQLException; + +@Slf4j +public abstract class DataSourceJdbcSyncSqlExecutor extends JdbcSyncSqlExecutor { + + protected abstract DataSource getDataSource(); + + @Override + public Connection getConnection(SqlRequest sqlRequest) { + DataSource dataSource = getDataSource(); + + Connection connection = DataSourceUtils.getConnection(dataSource); + boolean isConnectionTransactional = DataSourceUtils.isConnectionTransactional(connection, dataSource); + if (log.isDebugEnabled()) { + log.debug("DataSource ({}) JDBC Connection [{}] will {}be managed by Spring", dataSource, connection, (isConnectionTransactional ? "" : "not ")); + } + return connection; + } + + @Override + public void releaseConnection(Connection connection, SqlRequest sqlRequest) { + DataSource dataSource = getDataSource(); + + if (log.isDebugEnabled()) { + log.debug("Releasing DataSource ({}) JDBC Connection [{}]", dataSource, connection); + } + try { + DataSourceUtils.doReleaseConnection(connection, dataSource); + } catch (SQLException e) { + log.error(e.getMessage(), e); + try { + connection.close(); + } catch (Exception e2) { + log.error(e2.getMessage(), e2); + } + } + } + + @Override + @Transactional + public int update(SqlRequest request) { + return super.update(request); + } + + @Override + @Transactional(readOnly = true) + public R select(SqlRequest request, ResultWrapper wrapper) { + return super.select(request, wrapper); + } + + @Override + @Transactional(propagation = Propagation.NOT_SUPPORTED) + public void execute(SqlRequest request) { + super.execute(request); + } +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/DefaultEntityResultWrapperFactory.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/DefaultEntityResultWrapperFactory.java new file mode 100644 index 000000000..f10262698 --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/DefaultEntityResultWrapperFactory.java @@ -0,0 +1,21 @@ +package org.hswebframework.web.starter.easyorm; + +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import org.hswebframework.ezorm.rdb.executor.wrapper.ResultWrapper; +import org.hswebframework.ezorm.rdb.mapping.EntityManager; +import org.hswebframework.ezorm.rdb.mapping.wrapper.EntityResultWrapper; + +@AllArgsConstructor +public class DefaultEntityResultWrapperFactory implements EntityResultWrapperFactory { + + private EntityManager entityManager; + + @Override + @SneakyThrows + public ResultWrapper getWrapper(Class tClass) { + return new EntityResultWrapper<>(() -> entityManager.newInstance(tClass), + entityManager.getMapping(tClass)); + + } +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EasyOrmConfiguration.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EasyOrmConfiguration.java new file mode 100644 index 000000000..b07470df8 --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EasyOrmConfiguration.java @@ -0,0 +1,122 @@ +package org.hswebframework.web.starter.easyorm; + + +import lombok.SneakyThrows; +import org.hswebframework.ezorm.core.meta.Feature; +import org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor; +import org.hswebframework.ezorm.rdb.mapping.EntityColumnMapping; +import org.hswebframework.ezorm.rdb.mapping.EntityManager; +import org.hswebframework.ezorm.rdb.mapping.MappingFeatureType; +import org.hswebframework.ezorm.rdb.mapping.jpa.JpaEntityTableMetadataParser; +import org.hswebframework.ezorm.rdb.mapping.parser.DataTypeResolver; +import org.hswebframework.ezorm.rdb.mapping.parser.EntityTableMetadataParser; +import org.hswebframework.ezorm.rdb.mapping.parser.ValueCodecResolver; +import org.hswebframework.ezorm.rdb.metadata.RDBDatabaseMetadata; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; +import org.hswebframework.ezorm.rdb.operator.DefaultDatabaseOperator; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; +import java.util.List; +import java.util.Optional; + +@Configuration +@EnableConfigurationProperties(EasyormProperties.class) +public class EasyOrmConfiguration { + + @Autowired + private EasyormProperties properties; + + @Bean + @ConditionalOnBean(DataSource.class) + public SyncSqlExecutor syncSqlExecutor(DataSource dataSource) { + return new DataSourceJdbcSyncSqlExecutor() { + @Override + protected DataSource getDataSource() { + return dataSource; + } + }; + } + + @Bean + @ConditionalOnMissingBean + public EntityManager entityManager(EntityTableMetadataResolver resolver) { + return new EntityManager() { + @Override + @SneakyThrows + public E newInstance(Class type) { + return type.newInstance(); + } + + @Override + public EntityColumnMapping getMapping(Class entity) { + + return resolver.resolve(entity) + .getFeature(MappingFeatureType.columnPropertyMapping.createFeatureId(entity)) + .map(EntityColumnMapping.class::cast) + .orElse(null); + } + }; + } + + @Bean + public DefaultEntityResultWrapperFactory defaultEntityResultWrapperFactory(EntityManager entityManager) { + return new DefaultEntityResultWrapperFactory(entityManager); + } + + @Bean + @ConditionalOnMissingBean + public EntityTableMetadataResolver entityTableMappingResolver(List parsers) { + CompositeEntityTableMetadataResolver resolver = new CompositeEntityTableMetadataResolver(); + parsers.forEach(resolver::addParser); + return resolver; + } + + @Bean + @ConditionalOnMissingBean + public EntityTableMetadataParser jpaEntityTableMetadataParser(DatabaseOperator operator, + Optional resolver, + Optional codecResolver) { + JpaEntityTableMetadataParser parser = new JpaEntityTableMetadataParser(); + parser.setDatabaseMetadata(operator.getMetadata()); + + resolver.ifPresent(parser::setDataTypeResolver); + codecResolver.ifPresent(parser::setValueCodecResolver); + + return parser; + } + + @Bean + @ConditionalOnMissingBean + public DatabaseOperator databaseOperator() { + RDBDatabaseMetadata metadata = properties.createDatabaseMetadata(); + + return DefaultDatabaseOperator.of(metadata); + } + + @Bean + public BeanPostProcessor autoRegisterFeature(DatabaseOperator operator) { + return new BeanPostProcessor() { + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof Feature) { + operator.getMetadata().addFeature(((Feature) bean)); + } + return bean; + } + }; + } + +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EasyormProperties.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EasyormProperties.java new file mode 100644 index 000000000..1adf7ec1f --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EasyormProperties.java @@ -0,0 +1,112 @@ +package org.hswebframework.web.starter.easyorm; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; +import lombok.SneakyThrows; +import org.hswebframework.ezorm.rdb.metadata.RDBDatabaseMetadata; +import org.hswebframework.ezorm.rdb.metadata.RDBSchemaMetadata; +import org.hswebframework.ezorm.rdb.metadata.dialect.Dialect; +import org.hswebframework.ezorm.rdb.supports.h2.H2SchemaMetadata; +import org.hswebframework.ezorm.rdb.supports.mssql.SqlServerSchemaMetadata; +import org.hswebframework.ezorm.rdb.supports.mysql.MysqlSchemaMetadata; +import org.hswebframework.ezorm.rdb.supports.oracle.OracleSchemaMetadata; +import org.hswebframework.ezorm.rdb.supports.posgres.PostgresqlSchemaMetadata; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +@ConfigurationProperties(prefix = "easyorm") +@Data +public class EasyormProperties { + + private String defaultSchema; + + private String[] schemas = {}; + + private boolean autoDdl = true; + + private boolean allowAlter = false; + + private DialectEnum dialect = DialectEnum.h2; + + private Class dialectType; + + private Class schemaType; + + public RDBDatabaseMetadata createDatabaseMetadata() { + RDBDatabaseMetadata metadata = new RDBDatabaseMetadata(createDialect()); + + Set schemaSet = new HashSet<>(Arrays.asList(schemas)); + if (defaultSchema != null) { + schemaSet.add(defaultSchema); + } + schemaSet.stream() + .map(this::createSchema) + .forEach(metadata::addSchema); + + metadata.getSchema(defaultSchema) + .ifPresent(metadata::setCurrentSchema); + + return metadata; + } + + @SneakyThrows + public RDBSchemaMetadata createSchema(String name) { + if (schemaType == null) { + return dialect.createSchema(name); + } + return schemaType.getConstructor(String.class).newInstance(name); + } + + @SneakyThrows + public Dialect createDialect() { + if (dialectType == null) { + return dialect.getDialect(); + } + + return dialectType.newInstance(); + } + + @Getter + @AllArgsConstructor + public enum DialectEnum { + mysql(Dialect.MYSQL) { + @Override + public RDBSchemaMetadata createSchema(String name) { + return new MysqlSchemaMetadata(name); + } + }, + mssql(Dialect.MSSQL) { + @Override + public RDBSchemaMetadata createSchema(String name) { + return new SqlServerSchemaMetadata(name); + } + }, + oracle(Dialect.ORACLE) { + @Override + public RDBSchemaMetadata createSchema(String name) { + return new OracleSchemaMetadata(name); + } + }, + postgres(Dialect.POSTGRES) { + @Override + public RDBSchemaMetadata createSchema(String name) { + return new PostgresqlSchemaMetadata(name); + } + }, + h2(Dialect.H2) { + @Override + public RDBSchemaMetadata createSchema(String name) { + return new H2SchemaMetadata(name); + } + }, + ; + + Dialect dialect; + + public abstract RDBSchemaMetadata createSchema(String name); + } +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EasyormRepositoryRegistrar.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EasyormRepositoryRegistrar.java new file mode 100644 index 000000000..6a011e751 --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EasyormRepositoryRegistrar.java @@ -0,0 +1,89 @@ +package org.hswebframework.web.starter.easyorm; + +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.hswebframework.ezorm.rdb.mapping.defaults.DefaultSyncRepository; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; +import org.springframework.core.ResolvableType; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.core.type.AnnotationMetadata; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.core.type.classreading.SimpleMetadataReaderFactory; + +import java.lang.annotation.Annotation; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +public class EasyormRepositoryRegistrar implements ImportBeanDefinitionRegistrar { + + private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); + + private MetadataReaderFactory metadataReaderFactory = new SimpleMetadataReaderFactory(); + + @Override + @SneakyThrows + @SuppressWarnings("all") + public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { + + Map attr = importingClassMetadata.getAnnotationAttributes(EnableEasyormRepository.class.getName()); + if (attr == null) { + return; + } + String[] arr = (String[]) attr.get("value"); + String path = Arrays.stream(arr) + .map(str -> ResourcePatternResolver + .CLASSPATH_ALL_URL_PREFIX + .concat(str.replace(".", "/")).concat("/**/*.class")) + .collect(Collectors.joining()); + + Class[] anno = (Class[]) attr.get("annotation"); + boolean enableSync = Boolean.TRUE.equals(attr.get("enableSync")); + + List allEntities = new ArrayList<>(); + + for (Resource resource : resourcePatternResolver.getResources(path)) { + MetadataReader reader = metadataReaderFactory.getMetadataReader(resource); + String className = reader.getClassMetadata().getClassName(); + Class entityType = Class.forName(className); + if (Arrays.stream(anno) + .noneMatch(ann -> AnnotationUtils.findAnnotation(entityType, ann) != null)) { + continue; + } + allEntities.add(entityType); + ResolvableType repositoryType = ResolvableType.forClassWithGenerics(DefaultSyncRepository.class, entityType, String.class); + + log.debug("register easyorm synchronous repository for {}", entityType); + + RootBeanDefinition definition = new RootBeanDefinition(); + definition.setTargetType(repositoryType); + definition.setBeanClass(SyncRepositoryFactoryBean.class); + definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); + definition.getPropertyValues().add("entityType", entityType); + registry.registerBeanDefinition(entityType.getSimpleName().concat("SyncRepository"), definition); + + + } + + RootBeanDefinition definition = new RootBeanDefinition(); + definition.setTargetType(AutoDDLProcessor.class); + definition.setBeanClass(AutoDDLProcessor.class); + definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); + definition.getPropertyValues().add("entities", allEntities); + definition.setInitMethodName("init"); + registry.registerBeanDefinition(AutoDDLProcessor.class.getName(), definition); + + } + + +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EnableEasyormRepository.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EnableEasyormRepository.java new file mode 100644 index 000000000..651fc7233 --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EnableEasyormRepository.java @@ -0,0 +1,41 @@ +package org.hswebframework.web.starter.easyorm; + +import org.springframework.context.annotation.Import; + +import javax.persistence.Table; +import java.lang.annotation.*; + +/** + * @see org.hswebframework.ezorm.rdb.mapping.ReactiveRepository + * @see org.hswebframework.ezorm.rdb.mapping.SyncRepository + * @since 4.0.0 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Documented +@Import({EasyormRepositoryRegistrar.class,EasyOrmConfiguration.class}) +public @interface EnableEasyormRepository { + + /** + * 实体类包名: + *
+     *     com.company.project.entity
+     * 
+ */ + String[] value(); + + /** + * @see org.hswebframework.ezorm.rdb.mapping.jpa.JpaEntityTableMetadataParser + */ + Class[] annotation() default Table.class; + + /** + * @see org.hswebframework.ezorm.rdb.mapping.ReactiveRepository + */ + boolean enableReactive() default false; + + /** + * @see org.hswebframework.ezorm.rdb.mapping.SyncRepository + */ + boolean enableSync() default true; +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EntityResultWrapperFactory.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EntityResultWrapperFactory.java new file mode 100644 index 000000000..d34c4f81a --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EntityResultWrapperFactory.java @@ -0,0 +1,8 @@ +package org.hswebframework.web.starter.easyorm; + +import org.hswebframework.ezorm.rdb.executor.wrapper.ResultWrapper; + +public interface EntityResultWrapperFactory { + + ResultWrapper getWrapper(Class tClass); +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EntityTableMetadataResolver.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EntityTableMetadataResolver.java new file mode 100644 index 000000000..fe7099826 --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/EntityTableMetadataResolver.java @@ -0,0 +1,9 @@ +package org.hswebframework.web.starter.easyorm; + +import org.hswebframework.ezorm.rdb.metadata.RDBTableMetadata; + +public interface EntityTableMetadataResolver { + + RDBTableMetadata resolve(Class entityClass); + +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/SyncRepositoryFactoryBean.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/SyncRepositoryFactoryBean.java new file mode 100644 index 000000000..aaf67efff --- /dev/null +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/easyorm/SyncRepositoryFactoryBean.java @@ -0,0 +1,46 @@ +package org.hswebframework.web.starter.easyorm; + +import lombok.Getter; +import lombok.Setter; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; +import org.hswebframework.ezorm.rdb.mapping.defaults.DefaultSyncRepository; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.annotation.Autowired; + +@Getter +@Setter +public class SyncRepositoryFactoryBean + implements FactoryBean> { + + + @Autowired + private DatabaseOperator operator; + + @Autowired + private EntityTableMetadataResolver resolver; + + private Class entityType; + + @Autowired + private EntityResultWrapperFactory wrapperFactory; + + @Override + public SyncRepository getObject() { + + return new DefaultSyncRepository<>(operator, + resolver.resolve(entityType), + entityType, + wrapperFactory.getWrapper(entityType)); + } + + @Override + public Class getObjectType() { + return SyncRepository.class; + } + + @Override + public boolean isSingleton() { + return true; + } +} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/event/SystemInitializeEvent.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/event/SystemInitializeEvent.java index f50e7027b..14dfa15b9 100644 --- a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/event/SystemInitializeEvent.java +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/event/SystemInitializeEvent.java @@ -1,16 +1,16 @@ package org.hswebframework.web.starter.event; import lombok.Getter; -import org.hswebframework.ezorm.rdb.RDBDatabase; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; @Getter public class SystemInitializeEvent { - public SystemInitializeEvent(RDBDatabase database){ + public SystemInitializeEvent(DatabaseOperator database){ this.database=database; } - private RDBDatabase database; + private DatabaseOperator database; private boolean ignore; diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/DoNotingTableBuilder.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/DoNotingTableBuilder.java deleted file mode 100644 index d3fa8a351..000000000 --- a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/DoNotingTableBuilder.java +++ /dev/null @@ -1,150 +0,0 @@ -package org.hswebframework.web.starter.init; - -import lombok.AllArgsConstructor; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; -import org.hswebframework.ezorm.rdb.meta.builder.ColumnBuilder; -import org.hswebframework.ezorm.rdb.meta.builder.IndexBuilder; -import org.hswebframework.ezorm.rdb.meta.builder.TableBuilder; - -import java.sql.JDBCType; -import java.util.Set; -import java.util.function.Consumer; - -/** - * @author zhouhao - * @since 1.0.0 - */ -public class DoNotingTableBuilder implements TableBuilder { - - @AllArgsConstructor - public static class DoNotionColumnBuilder implements ColumnBuilder { - private TableBuilder tableBuilder; - - @Override - public ColumnBuilder custom(Consumer consumer) { - return this; - } - - @Override - public ColumnBuilder name(String s) { - return this; - } - - @Override - public ColumnBuilder alias(String s) { - return this; - } - - @Override - public ColumnBuilder dataType(String s) { - return this; - } - - @Override - public ColumnBuilder jdbcType(JDBCType jdbcType) { - return this; - } - - @Override - public ColumnBuilder javaType(Class aClass) { - return this; - } - - @Override - public ColumnBuilder comment(String s) { - return this; - } - - @Override - public ColumnBuilder notNull() { - return this; - } - - @Override - public ColumnBuilder primaryKey() { - return this; - } - - @Override - public ColumnBuilder columnDef(String s) { - return this; - } - - @Override - public ColumnBuilder property(String s, Object o) { - return this; - } - - @Override - public ColumnBuilder length(int i) { - return this; - } - - @Override - public ColumnBuilder length(int i, int i1) { - return this; - } - - @Override - public TableBuilder commit() { - return tableBuilder; - } - } - - @Override - public TableBuilder addColumn(Set set) { - return this; - } - - @Override - public TableBuilder custom(Consumer consumer) { - return this; - } - - @Override - public ColumnBuilder addColumn() { - return new DoNotionColumnBuilder(this); - } - - @Override - public ColumnBuilder addOrAlterColumn(String s) { - return new DoNotionColumnBuilder(this); - } - - @Override - public TableBuilder removeColumn(String s) { - return this; - } - - @Override - public TableBuilder comment(String s) { - return this; - } - - @Override - public TableBuilder property(String s, Object o) { - return this; - } - - @Override - public TableBuilder alias(String s) { - return this; - } - - @Override - public IndexBuilder index() { - TableBuilder builder = this; - return new IndexBuilder(this, null) { - @Override - public TableBuilder commit() { - return builder; - } - }; - } - - @Override - public void commit() { - - } -} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/SkipCreateOrAlterRDBDatabase.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/SkipCreateOrAlterRDBDatabase.java deleted file mode 100644 index 3688ffd1a..000000000 --- a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/SkipCreateOrAlterRDBDatabase.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.hswebframework.web.starter.init; - -import lombok.AllArgsConstructor; -import org.hswebframework.ezorm.rdb.RDBDatabase; -import org.hswebframework.ezorm.rdb.RDBTable; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.ezorm.rdb.meta.RDBDatabaseMetaData; -import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; -import org.hswebframework.ezorm.rdb.meta.builder.TableBuilder; -import org.hswebframework.ezorm.rdb.meta.builder.simple.SimpleTableBuilder; - -import java.sql.SQLException; -import java.util.List; - -/** - * @author zhouhao - * @since 1.0.0 - */ -@AllArgsConstructor -public class SkipCreateOrAlterRDBDatabase implements RDBDatabase { - private RDBDatabase target; - - private List excludes; - - private SqlExecutor sqlExecutor; - - @Override - public RDBDatabaseMetaData getMeta() { - return target.getMeta(); - } - - @Override - public RDBTable getTable(String name) { - return target.getTable(name); - } - - @Override - public RDBTable createTable(RDBTableMetaData tableMetaData) throws SQLException { - return target.createTable(tableMetaData); - } - - @Override - public RDBTable reloadTable(RDBTableMetaData tableMetaData) { - return target.reloadTable(tableMetaData); - } - - @Override - public RDBTable alterTable(RDBTableMetaData tableMetaData) throws SQLException { - return target.alterTable(tableMetaData); - } - - @Override - public boolean removeTable(String name) { - return target.removeTable(name); - } - - @Override - public TableBuilder createOrAlter(String name) { - if (excludes.contains(name)) { - return new DoNotingTableBuilder(); - } - return target.createOrAlter(name); - } -} diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/SystemInitialize.java b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/SystemInitialize.java index 09ec41c74..c5bb4d146 100644 --- a/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/SystemInitialize.java +++ b/hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/SystemInitialize.java @@ -2,29 +2,32 @@ package org.hswebframework.web.starter.init; import lombok.Getter; import lombok.Setter; -import org.hswebframework.ezorm.rdb.RDBDatabase; -import org.hswebframework.ezorm.rdb.RDBTable; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.ezorm.rdb.meta.converter.ClobValueConverter; -import org.hswebframework.ezorm.rdb.meta.converter.JSONValueConverter; -import org.hswebframework.ezorm.rdb.meta.converter.NumberValueConverter; -import org.hswebframework.ezorm.rdb.simple.wrapper.BeanWrapper; import org.hswebframework.expands.script.engine.DynamicScriptEngine; import org.hswebframework.expands.script.engine.DynamicScriptEngineFactory; +import org.hswebframework.ezorm.rdb.codec.JsonValueCodec; +import org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor; +import org.hswebframework.ezorm.rdb.executor.wrapper.ResultWrappers; +import org.hswebframework.ezorm.rdb.mapping.wrapper.EntityResultWrapper; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; +import org.hswebframework.web.bean.FastBeanCopier; import org.hswebframework.web.starter.SystemVersion; import org.hswebframework.web.starter.init.simple.SimpleDependencyInstaller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.util.CollectionUtils; import org.springframework.util.StreamUtils; import java.nio.charset.Charset; +import java.sql.JDBCType; import java.sql.SQLException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; +import static org.hswebframework.ezorm.rdb.executor.wrapper.ResultWrappers.*; import static org.hswebframework.web.starter.SystemVersion.Property.*; /** @@ -33,8 +36,7 @@ import static org.hswebframework.web.starter.SystemVersion.Property.*; public class SystemInitialize { private Logger logger = LoggerFactory.getLogger(SystemInitialize.class); - private SqlExecutor sqlExecutor; - private RDBDatabase database; + private DatabaseOperator database; //将要安装的信息 private SystemVersion targetVersion; @@ -54,8 +56,7 @@ public class SystemInitialize { private boolean initialized = false; - public SystemInitialize(SqlExecutor sqlExecutor, RDBDatabase database, SystemVersion targetVersion) { - this.sqlExecutor = sqlExecutor; + public SystemInitialize(SyncSqlExecutor sqlExecutor, DatabaseOperator database, SystemVersion targetVersion) { this.database = database; this.targetVersion = targetVersion; } @@ -65,10 +66,9 @@ public class SystemInitialize { if (initialized) { return; } - if (!CollectionUtils.isEmpty(excludeTables)) { - this.database = new SkipCreateOrAlterRDBDatabase(database, excludeTables, sqlExecutor); - } - scriptContext.put("sqlExecutor", sqlExecutor); +// if (!CollectionUtils.isEmpty(excludeTables)) { +// this.database = new SkipCreateOrAlterRDBDatabase(database, excludeTables, sqlExecutor); +// } scriptContext.put("database", database); scriptContext.put("logger", logger); initialized = true; @@ -79,9 +79,14 @@ public class SystemInitialize { } protected void syncSystemVersion() throws SQLException { - RDBTable rdbTable = database.getTable("s_system"); + Map mapVersion = FastBeanCopier.copy(targetVersion, HashMap::new); + if (installed == null) { - rdbTable.createInsert().value(targetVersion).exec(); + database.dml() + .insert("s_system") + .value(mapVersion) + .execute() + .sync(); } else { //合并已安装的依赖 //修复如果删掉了依赖,再重启会丢失依赖信息的问题 @@ -91,8 +96,12 @@ public class SystemInitialize { targetVersion.getDependencies().add(dependency); } } - - rdbTable.createUpdate().set(targetVersion).where().is("name", targetVersion.getName()).exec(); + database.dml() + .update("s_system") + .set(mapVersion) + .where(dsl -> dsl.is(targetVersion::getName)) + .execute() + .sync(); } } @@ -163,32 +172,36 @@ public class SystemInitialize { } - protected void initInstallInfo() throws SQLException { - boolean tableInstall = sqlExecutor.tableExists("s_system"); - database.createOrAlter("s_system") + protected void initInstallInfo() { + boolean tableInstall = database.getMetadata().getTable("s_system").isPresent(); + database.ddl().createOrAlter("s_system") .addColumn().name("name").varchar(128).comment("系统名称").commit() - .addColumn().name("major_version").alias(majorVersion).number(32).javaType(Integer.class).comment("主版本号").commit() - .addColumn().name("minor_version").alias(minorVersion).number(32).javaType(Integer.class).comment("次版本号").commit() - .addColumn().name("revision_version").alias(revisionVersion).number(32).javaType(Integer.class).comment("修订版").commit() - .addColumn().name("snapshot").number(1).javaType(Boolean.class) - .custom(column -> column.setValueConverter(new NumberValueConverter(Boolean.class))) + .addColumn().name("major_version").alias(majorVersion).integer().comment("主版本号").commit() + .addColumn().name("minor_version").alias(minorVersion).integer().comment("次版本号").commit() + .addColumn().name("revision_version").alias(revisionVersion).integer().comment("修订版").commit() + .addColumn().name("snapshot").type(JDBCType.TINYINT, Boolean.class) .comment("是否快照版").commit() .addColumn().name("comment").varchar(2000).comment("系统说明").commit() .addColumn().name("website").varchar(2000).comment("系统网址").commit() .addColumn().name("framework_version").notNull().alias(frameworkVersion).clob() - .custom(column -> column.setValueConverter(new JSONValueConverter(SystemVersion.FrameworkVersion.class, new ClobValueConverter()))).notNull().comment("框架版本").commit() + .custom(column -> column.setValueCodec(JsonValueCodec.of(SystemVersion.FrameworkVersion.class))).notNull().comment("框架版本").commit() .addColumn().name("dependencies").notNull().alias(dependencies).clob() - .custom(column -> column.setValueConverter(new JSONValueConverter(SystemVersion.Dependency.class, new ClobValueConverter()))).notNull().comment("依赖详情").commit() + .custom(column -> column.setValueCodec(JsonValueCodec.of(SystemVersion.Dependency.class))).notNull().comment("依赖详情").commit() .comment("系统信息") - .custom(table -> table.setObjectWrapper(new BeanWrapper(SystemVersion::new, table))) - .commit(); + .commit() + .sync(); if (!tableInstall) { installed = null; return; } - RDBTable rdbTable = database.getTable("s_system"); - installed = rdbTable.createQuery().where("name", targetVersion.getName()).single(); + installed = database.dml().query("s_system") + .where(dsl -> dsl.is("name", targetVersion.getName())) + .paging(0, 1) + .fetch(optional(single(new EntityResultWrapper<>(SystemVersion::new)))) + .sync() + .orElse(null) + ; } diff --git a/hsweb-starter/hsweb-spring-boot-starter/src/test/java/org/hswebframework/web/starter/InstallTests.java b/hsweb-starter/hsweb-spring-boot-starter/src/test/java/org/hswebframework/web/starter/InstallTests.java index c805c5028..941bc9d9f 100644 --- a/hsweb-starter/hsweb-spring-boot-starter/src/test/java/org/hswebframework/web/starter/InstallTests.java +++ b/hsweb-starter/hsweb-spring-boot-starter/src/test/java/org/hswebframework/web/starter/InstallTests.java @@ -18,63 +18,48 @@ package org.hswebframework.web.starter; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.serializer.SerializerFeature; -import org.hswebframework.ezorm.rdb.RDBDatabase; -import org.hswebframework.ezorm.rdb.executor.AbstractJdbcSqlExecutor; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.ezorm.rdb.meta.RDBDatabaseMetaData; -import org.hswebframework.ezorm.rdb.render.dialect.H2RDBDatabaseMetaData; -import org.hswebframework.ezorm.rdb.render.dialect.MysqlRDBDatabaseMetaData; -import org.hswebframework.ezorm.rdb.simple.SimpleDatabase; -import org.hswebframework.expands.script.engine.DynamicScriptEngine; -import org.hswebframework.expands.script.engine.DynamicScriptEngineFactory; -import org.hswebframework.web.starter.init.simple.SimpleDependencyInstaller; -import org.hswebframework.utils.file.FileUtils; +import org.hswebframework.ezorm.rdb.executor.SqlRequest; +import org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor; +import org.hswebframework.ezorm.rdb.executor.jdbc.JdbcSyncSqlExecutor; +import org.hswebframework.ezorm.rdb.metadata.RDBDatabaseMetadata; +import org.hswebframework.ezorm.rdb.metadata.dialect.Dialect; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; +import org.hswebframework.ezorm.rdb.operator.DefaultDatabaseOperator; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.slf4j.LoggerFactory; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; -import java.util.*; +import java.util.Collections; /** - * TODO 完成注释 - * * @author zhouhao */ public class InstallTests { - SqlExecutor sqlExecutor; - RDBDatabase database; + SyncSqlExecutor sqlExecutor; + DatabaseOperator database; Connection connection; @Before public void setup() throws Exception { -// Class.forName("com.mysql.jdbc.Driver"); -// connection = DriverManager.getConnection( -// "jdbc:mysql://localhost/test_db1?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false", -// "root", "root"); -// - Class.forName("org.h2.Driver"); connection = DriverManager.getConnection("jdbc:h2:file:./target/data/h2db;", "sa", ""); - sqlExecutor = new AbstractJdbcSqlExecutor() { + sqlExecutor =new JdbcSyncSqlExecutor() { @Override - public Connection getConnection() { + public Connection getConnection(SqlRequest sqlRequest) { return connection; } @Override - public void releaseConnection(Connection connection) throws SQLException { - //connection.close(); + public void releaseConnection(Connection connection, SqlRequest sqlRequest) { + } }; - RDBDatabaseMetaData databaseMetaData = new H2RDBDatabaseMetaData(); -// RDBDatabaseMetaData databaseMetaData = new MysqlRDBDatabaseMetaData("MyISAM"); - database = new SimpleDatabase(databaseMetaData, sqlExecutor); + RDBDatabaseMetadata databaseMetaData=new RDBDatabaseMetadata(Dialect.H2); + + database = DefaultDatabaseOperator.of(databaseMetaData); } @Test diff --git a/hsweb-starter/pom.xml b/hsweb-starter/pom.xml index 088d78339..f554af3f2 100644 --- a/hsweb-starter/pom.xml +++ b/hsweb-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/pom.xml b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/pom.xml index 30fa7e932..4c9b9d25c 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/pom.xml +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-authorization org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/pom.xml b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/pom.xml index 8f721bd0e..4429a9d5a 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/pom.xml +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-authorization org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 @@ -38,12 +38,6 @@ ${project.version} - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - - org.hswebframework.web hsweb-commons-service-simple diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/AuthorizationSettingDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/AuthorizationSettingDao.java deleted file mode 100644 index b1ae42d0f..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/AuthorizationSettingDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.authorization.AuthorizationSettingEntity; - -/** -* 权限设置 DAO接口 -* @author hsweb-generator-online - */ -public interface AuthorizationSettingDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/AuthorizationSettingDetailDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/AuthorizationSettingDetailDao.java deleted file mode 100644 index 5f33fce5f..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/AuthorizationSettingDetailDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.authorization.AuthorizationSettingDetailEntity; - -/** -* 权限设置详情 DAO接口 -* @author hsweb-generator-online - */ -public interface AuthorizationSettingDetailDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/AuthorizationSettingMenuDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/AuthorizationSettingMenuDao.java deleted file mode 100644 index 0d3378eb5..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/AuthorizationSettingMenuDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.authorization.AuthorizationSettingMenuEntity; - -/** -* 权限菜单 DAO接口 -* @author hsweb-generator-online - */ -public interface AuthorizationSettingMenuDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/MenuDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/MenuDao.java deleted file mode 100644 index 3a8513d46..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/MenuDao.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ - -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.authorization.MenuEntity; - -/** - * - * @author zhouhao - */ -public interface MenuDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/MenuGroupBindDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/MenuGroupBindDao.java deleted file mode 100644 index 09128c5a4..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/MenuGroupBindDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.authorization.MenuGroupBindEntity; - -/** -* 菜单分组关联 DAO接口 -* @author hsweb-generator-online - */ -public interface MenuGroupBindDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/MenuGroupDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/MenuGroupDao.java deleted file mode 100644 index e63f6515c..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/MenuGroupDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.authorization.MenuGroupEntity; - -/** -* 菜单分组 DAO接口 -* @author hsweb-generator-online - */ -public interface MenuGroupDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/PermissionDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/PermissionDao.java deleted file mode 100644 index d3d79ccb4..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/PermissionDao.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.authorization.PermissionEntity; - -/** - * @author zhouhao - */ -public interface PermissionDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/RoleDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/RoleDao.java deleted file mode 100644 index 14f10be9a..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/RoleDao.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.authorization.RoleEntity; - -/** - * @author zhouhao - */ -public interface RoleDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserDao.java deleted file mode 100644 index 01b9addda..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserDao.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.entity.authorization.UserEntity; -import org.hswebframework.web.dao.CrudDao; - -/** - * @author zhouhao - */ -public interface UserDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserRoleDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserRoleDao.java deleted file mode 100644 index 66db83f7e..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserRoleDao.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.dao.Dao; -import org.hswebframework.web.entity.authorization.UserRoleEntity; - -import java.util.List; - -/** - * @author zhouhao - */ -public interface UserRoleDao extends Dao { - int deleteByUserId(String userId); - - int deleteByRoleId(String roleId); - - void insert(UserRoleEntity userRoleBean); - - List selectByUserId(String userId); - - List selectByRoleId(String roleId); - -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserSettingDao.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserSettingDao.java deleted file mode 100644 index 36e04edbd..000000000 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserSettingDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.dao.authorization; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.authorization.UserSettingEntity; - -/** - * @author zhouhao - * @since 3.0 - */ -public interface UserSettingDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthenticationManager.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthenticationManager.java index a5f7861eb..1834f2e18 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthenticationManager.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthenticationManager.java @@ -6,7 +6,6 @@ import org.hswebframework.web.authorization.Authentication; import org.hswebframework.web.authorization.AuthenticationInitializeService; import org.hswebframework.web.authorization.AuthenticationManager; import org.hswebframework.web.authorization.AuthenticationRequest; -import org.hswebframework.web.authorization.listener.event.AuthorizationFailedEvent; import org.hswebframework.web.authorization.simple.PlainTextUsernamePasswordAuthenticationRequest; import org.hswebframework.web.commons.entity.DataStatus; import org.hswebframework.web.entity.authorization.UserEntity; @@ -16,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachePut; -import org.springframework.cache.annotation.Cacheable; import java.util.function.Supplier; diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthorizationSettingMenuService.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthorizationSettingMenuService.java index 50a663e21..4e7a1e168 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthorizationSettingMenuService.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthorizationSettingMenuService.java @@ -1,16 +1,13 @@ package org.hswebframework.web.service.authorization.simple; -import org.hswebframework.web.service.authorization.AuthorizationSettingMenuService; -import org.hswebframework.web.dao.authorization.AuthorizationSettingMenuDao; import org.hswebframework.web.entity.authorization.AuthorizationSettingMenuEntity; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.AbstractTreeSortService; -import org.springframework.beans.factory.annotation.Autowired; +import org.hswebframework.web.service.authorization.AuthorizationSettingMenuService; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Objects; @@ -22,18 +19,18 @@ import java.util.Objects; public class SimpleAuthorizationSettingMenuService extends AbstractTreeSortService implements AuthorizationSettingMenuService { - private AuthorizationSettingMenuDao authorizationSettingMenuDao; - @Override public int deleteBySettingId(String settingId) { Objects.requireNonNull(settingId); - return createDelete().where(AuthorizationSettingMenuEntity.settingId, settingId).exec(); + return getDao().createDelete() + .where(AuthorizationSettingMenuEntity.settingId, settingId) + .execute(); } @Override public List selectBySettingId(String settingId) { Objects.requireNonNull(settingId); - return createQuery().where(AuthorizationSettingMenuEntity.settingId, settingId).listNoPaging(); + return createQuery().where(AuthorizationSettingMenuEntity.settingId, settingId).fetch(); } @Override @@ -41,7 +38,7 @@ public class SimpleAuthorizationSettingMenuService extends AbstractTreeSortServi if(CollectionUtils.isEmpty(settingId)){ return new ArrayList<>(); } - return createQuery().where().in(AuthorizationSettingMenuEntity.settingId, settingId).listNoPaging(); + return createQuery().where().in(AuthorizationSettingMenuEntity.settingId, settingId).fetch(); } @Override @@ -49,13 +46,5 @@ public class SimpleAuthorizationSettingMenuService extends AbstractTreeSortServi return IDGenerator.MD5; } - @Override - public AuthorizationSettingMenuDao getDao() { - return authorizationSettingMenuDao; - } - @Autowired - public void setAuthorizationSettingMenuDao(AuthorizationSettingMenuDao authorizationSettingMenuDao) { - this.authorizationSettingMenuDao = authorizationSettingMenuDao; - } } diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthorizationSettingService.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthorizationSettingService.java index 60edfd531..71697907d 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthorizationSettingService.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthorizationSettingService.java @@ -18,6 +18,7 @@ package org.hswebframework.web.service.authorization.simple; import lombok.Getter; import lombok.Setter; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.authorization.Authentication; import org.hswebframework.web.authorization.AuthenticationInitializeService; import org.hswebframework.web.authorization.Permission; @@ -29,12 +30,7 @@ import org.hswebframework.web.authorization.simple.SimpleRole; import org.hswebframework.web.authorization.simple.SimpleUser; import org.hswebframework.web.bean.FastBeanCopier; import org.hswebframework.web.commons.entity.DataStatus; -import org.hswebframework.web.commons.entity.QueryEntity; import org.hswebframework.web.commons.entity.TreeSupportEntity; -import org.hswebframework.web.commons.entity.factory.EntityFactory; -import org.hswebframework.web.commons.entity.param.QueryParamEntity; -import org.hswebframework.web.dao.authorization.AuthorizationSettingDao; -import org.hswebframework.web.dao.authorization.AuthorizationSettingDetailDao; import org.hswebframework.web.entity.authorization.*; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.DefaultDSLDeleteService; @@ -61,14 +57,13 @@ import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; -import static java.util.Optional.*; +import static java.util.Optional.ofNullable; import static org.apache.commons.collections.CollectionUtils.isEmpty; import static org.apache.commons.collections.CollectionUtils.isNotEmpty; import static org.hswebframework.web.commons.entity.DataStatus.STATUS_ENABLED; import static org.hswebframework.web.entity.authorization.AuthorizationSettingDetailEntity.*; import static org.hswebframework.web.entity.authorization.AuthorizationSettingEntity.settingFor; import static org.hswebframework.web.entity.authorization.AuthorizationSettingEntity.type; -import static org.hswebframework.web.service.DefaultDSLDeleteService.*; import static org.hswebframework.web.service.authorization.simple.CacheConstants.USER_AUTH_CACHE_NAME; import static org.hswebframework.web.service.authorization.simple.CacheConstants.USER_MENU_CACHE_NAME; @@ -81,9 +76,8 @@ import static org.hswebframework.web.service.authorization.simple.CacheConstants public class SimpleAuthorizationSettingService extends GenericEntityService implements AuthorizationSettingService, AuthenticationInitializeService, UserMenuManagerService { - private AuthorizationSettingDao authorizationSettingDao; - - private AuthorizationSettingDetailDao authorizationSettingDetailDao; + @Autowired + private SyncRepository authorizationSettingDetailDao; private AuthorizationSettingMenuService authorizationSettingMenuService; @@ -102,10 +96,6 @@ public class SimpleAuthorizationSettingService extends GenericEntityService detailEntities = DefaultDSLQueryService .createQuery(authorizationSettingDetailDao) .where(AuthorizationSettingDetailEntity::getPermissionId, permissionId) - .listNoPaging(); + .fetch(); if (CollectionUtils.isEmpty(detailEntities)) { return new ArrayList<>(); @@ -301,7 +293,7 @@ public class SimpleAuthorizationSettingService extends GenericEntityService(); } @@ -648,16 +640,6 @@ public class SimpleAuthorizationSettingService extends GenericEntityService implements MenuGroupBindService { - @Autowired - private MenuGroupBindDao menuGroupBindDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public MenuGroupBindDao getDao() { - return menuGroupBindDao; - } @Override public int deleteByGroupId(String groupId) { tryValidateProperty(groupId != null, MenuGroupBindEntity.groupId, "groups id can not be null"); - return createDelete().where(MenuGroupBindEntity.groupId, groupId).exec(); + return createDelete().where(MenuGroupBindEntity.groupId, groupId).execute(); } } diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleMenuGroupService.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleMenuGroupService.java index a547229e8..2c2e27db6 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleMenuGroupService.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleMenuGroupService.java @@ -18,7 +18,6 @@ package org.hswebframework.web.service.authorization.simple; import org.hswebframework.web.service.authorization.MenuGroupService; import org.hswebframework.web.commons.entity.TreeSupportEntity; -import org.hswebframework.web.dao.authorization.MenuGroupDao; import org.hswebframework.web.entity.authorization.MenuEntity; import org.hswebframework.web.entity.authorization.MenuGroupBindEntity; import org.hswebframework.web.entity.authorization.MenuGroupEntity; @@ -48,8 +47,6 @@ import java.util.stream.Collectors; public class SimpleMenuGroupService extends AbstractTreeSortService implements MenuGroupService { - @Autowired - private MenuGroupDao menuGroupDao; @Autowired private MenuService menuService; @@ -62,11 +59,6 @@ public class SimpleMenuGroupService return IDGenerator.MD5; } - @Override - public MenuGroupDao getDao() { - return menuGroupDao; - } - @Override @Cacheable(key = "'group-id-list:'+(#groupId==null?0:#groupId.hashCode())") public List getMenuByGroupId(List groupId) { @@ -136,7 +128,7 @@ public class SimpleMenuGroupService createUpdate() .set(MenuGroupEntity.status, 1) .where(MenuGroupEntity.id, id) - .exec(); + .execute(); } @Override @@ -147,6 +139,6 @@ public class SimpleMenuGroupService .createUpdate(getDao()) .set(MenuGroupEntity.status, 0) .where(MenuGroupEntity.id, id) - .exec(); + .execute(); } } diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleMenuService.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleMenuService.java index 04b56ec44..652bde985 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleMenuService.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleMenuService.java @@ -18,12 +18,10 @@ package org.hswebframework.web.service.authorization.simple; -import org.hswebframework.web.dao.authorization.MenuDao; import org.hswebframework.web.entity.authorization.MenuEntity; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.AbstractTreeSortService; import org.hswebframework.web.service.authorization.MenuService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -39,23 +37,11 @@ public class SimpleMenuService extends AbstractTreeSortService implements MenuService { - private MenuDao menuDao; - @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Autowired - public void setMenuDao(MenuDao menuDao) { - this.menuDao = menuDao; - } - - @Override - public MenuDao getDao() { - return menuDao; - } - @Override @CacheEvict(cacheNames = {CacheConstants.MENU_CACHE_NAME, CacheConstants.USER_MENU_CACHE_NAME}, allEntries = true) public int updateByPk(MenuEntity entity) { diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimplePermissionService.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimplePermissionService.java index 39a22545b..642b4ac0f 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimplePermissionService.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimplePermissionService.java @@ -1,7 +1,6 @@ package org.hswebframework.web.service.authorization.simple; import org.hswebframework.web.commons.entity.DataStatus; -import org.hswebframework.web.dao.authorization.PermissionDao; import org.hswebframework.web.entity.authorization.PermissionEntity; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.GenericEntityService; @@ -11,8 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; -import java.util.Optional; - /** * 权限管理 * @@ -21,9 +18,6 @@ import java.util.Optional; @Service("permissionService") public class SimplePermissionService extends GenericEntityService implements PermissionService { - @Autowired - private PermissionDao permissionDao; - @Autowired private ApplicationEventPublisher eventPublisher; @@ -32,11 +26,6 @@ public class SimplePermissionService extends GenericEntityService implements RoleService { - @Autowired - private RoleDao roleDao; - @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public RoleDao getDao() { - return roleDao; - } - @Override public String insert(RoleEntity entity) { entity.setStatus(DataStatus.STATUS_ENABLED); @@ -67,7 +55,7 @@ public class SimpleRoleService extends GenericEntityService DefaultDSLUpdateService.createUpdate(getDao()) .set(RoleEntity.status, DataStatus.STATUS_ENABLED) .where(RoleEntity.id, roleId) - .exec(); + .execute(); } @Override @@ -76,6 +64,6 @@ public class SimpleRoleService extends GenericEntityService DefaultDSLUpdateService.createUpdate(getDao()) .set(RoleEntity.status, DataStatus.STATUS_DISABLED) .where(RoleEntity.id, roleId) - .exec(); + .execute(); } } diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleUserService.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleUserService.java index a6d0550b9..a2b9dca69 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleUserService.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleUserService.java @@ -1,12 +1,10 @@ package org.hswebframework.web.service.authorization.simple; import org.apache.commons.codec.digest.DigestUtils; -import org.hswebframework.web.service.authorization.*; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; +import org.hswebframework.utils.ListUtils; import org.hswebframework.web.commons.entity.DataStatus; import org.hswebframework.web.commons.entity.GenericEntity; -import org.hswebframework.web.dao.authorization.RoleDao; -import org.hswebframework.web.dao.authorization.UserDao; -import org.hswebframework.web.dao.authorization.UserRoleDao; import org.hswebframework.web.entity.authorization.RoleEntity; import org.hswebframework.web.entity.authorization.UserEntity; import org.hswebframework.web.entity.authorization.UserRoleEntity; @@ -14,12 +12,11 @@ import org.hswebframework.web.entity.authorization.bind.BindRoleUserEntity; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.AbstractService; import org.hswebframework.web.service.DefaultDSLQueryService; +import org.hswebframework.web.service.authorization.*; import org.hswebframework.web.service.authorization.events.ClearUserAuthorizationCacheEvent; import org.hswebframework.web.service.authorization.events.UserCreatedEvent; import org.hswebframework.web.service.authorization.events.UserModifiedEvent; -import org.hswebframework.web.service.authorization.simple.terms.UserInRoleSqlTerm; import org.hswebframework.web.validate.ValidationException; -import org.hswebframework.utils.ListUtils; import org.hswebframework.web.validator.group.CreateGroup; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; @@ -34,7 +31,7 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.stream.Collectors; -import static org.hswebframework.web.service.DefaultDSLUpdateService.*; +import static org.hswebframework.web.service.DefaultDSLUpdateService.createUpdate; /** * 默认的用户服务实现 @@ -57,13 +54,13 @@ public class SimpleUserService extends AbstractService private PasswordEncoder passwordEncoder = (password, salt) -> DigestUtils.md5Hex(String.format("hsweb.%s.framework.%s", password, salt)); @Autowired - private UserDao userDao; + private SyncRepository userDao; @Autowired - private UserRoleDao userRoleDao; + private SyncRepository userRoleDao; @Autowired - private RoleDao roleDao; + private SyncRepository roleDao; @Autowired private ApplicationEventPublisher publisher; @@ -88,7 +85,7 @@ public class SimpleUserService extends AbstractService if (!StringUtils.hasLength(username)) { return null; } - return createQuery().where("username", username).single(); + return createQuery().where("username", username).fetchOne().orElse(null); } @Override @@ -108,19 +105,22 @@ public class SimpleUserService extends AbstractService if (!StringUtils.hasLength(id)) { return null; } - UserEntity userEntity = createQuery().where(UserEntity.id, id).single(); - if (null != userEntity) { + return createQuery() + .where(UserEntity.id, id) + .fetchOne() + .map(userEntity -> { + List roleId = userRoleDao + .createQuery() + .where(UserRoleEntity::getRoleId, id) + .fetch() + .stream() + .map(UserRoleEntity::getRoleId) //转换为roleId + .collect(Collectors.toList()); + BindRoleUserEntity roleUserEntity = entityFactory.newInstance(BindRoleUserEntity.class, userEntity); + roleUserEntity.setRoles(roleId); + return roleUserEntity; + }).orElse(null); - List roleId = userRoleDao - .selectByUserId(id) - .stream() - .map(UserRoleEntity::getRoleId) //转换为roleId - .collect(Collectors.toList()); - BindRoleUserEntity roleUserEntity = entityFactory.newInstance(BindRoleUserEntity.class, userEntity); - roleUserEntity.setRoles(roleId); - return roleUserEntity; - } - return null; } @Override @@ -128,7 +128,7 @@ public class SimpleUserService extends AbstractService if (CollectionUtils.isEmpty(id)) { return new ArrayList<>(); } - return createQuery().where().in(UserEntity.id, id).listNoPaging(); + return createQuery().where().in(UserEntity.id, id).fetch(); } @Override @@ -162,7 +162,8 @@ public class SimpleUserService extends AbstractService } protected void trySyncUserRole(final String userId, final List roleIdList) { - new HashSet<>(roleIdList).stream() + new HashSet<>(roleIdList) + .stream() .map(roleId -> { UserRoleEntity roleEntity = entityFactory.newInstance(UserRoleEntity.class); roleEntity.setRoleId(roleId); @@ -202,12 +203,12 @@ public class SimpleUserService extends AbstractService createUpdate(getDao(), userEntity) .excludes(excludeProperties.toArray(new String[excludeProperties.size()])) .where(GenericEntity.id, userEntity.getId()) - .exec(); + .execute(); if (userEntity instanceof BindRoleUserEntity) { BindRoleUserEntity bindRoleUserEntity = ((BindRoleUserEntity) userEntity); if (bindRoleUserEntity.getRoles() != null) { //删除旧的数据 - userRoleDao.deleteByUserId(bindRoleUserEntity.getId()); + userRoleDao.createDelete().where(UserRoleEntity::getRoleId, bindRoleUserEntity.getId()).execute(); //同步角色信息 trySyncUserRole(userEntity.getId(), bindRoleUserEntity.getRoles()); roleModified = true; @@ -225,10 +226,10 @@ public class SimpleUserService extends AbstractService if (!StringUtils.hasLength(userId)) { return false; } - return createUpdate(getDao()) + return getDao().createUpdate() .set(UserEntity.status, DataStatus.STATUS_ENABLED) .where(GenericEntity.id, userId) - .exec() > 0; + .execute() > 0; } @Override @@ -239,7 +240,7 @@ public class SimpleUserService extends AbstractService return createUpdate(getDao()) .set(UserEntity.status, DataStatus.STATUS_DISABLED) .where(GenericEntity.id, userId) - .exec() > 0; + .execute() > 0; } @Override @@ -256,7 +257,7 @@ public class SimpleUserService extends AbstractService createUpdate(getDao()) .set(UserEntity.password, newPassword) .where(GenericEntity.id, userId) - .exec(); + .execute(); publisher.publishEvent(new UserModifiedEvent(userEntity, true, false)); } @@ -264,22 +265,18 @@ public class SimpleUserService extends AbstractService @Override public List getUserRole(String userId) { Assert.hasLength(userId, "参数不能为空"); - List roleEntities = userRoleDao.selectByUserId(userId); + List roleEntities = userRoleDao.createQuery().where(UserRoleEntity::getUserId, userId).fetch(); if (roleEntities.isEmpty()) { return new ArrayList<>(); } List roleIdList = roleEntities.stream().map(UserRoleEntity::getRoleId).collect(Collectors.toList()); return DefaultDSLQueryService - .createQuery(roleDao).where() + .createQuery(roleDao) + .where() .in(GenericEntity.id, roleIdList) - .noPaging() - .list(); + .fetch(); } - @Override - public UserDao getDao() { - return userDao; - } @Override public Set get(String userId) { @@ -287,7 +284,7 @@ public class SimpleUserService extends AbstractService if (null == userEntity) { return new HashSet<>(); } - List roleEntities = userRoleDao.selectByUserId(userId); + List roleEntities = userRoleDao.createQuery().where(UserRoleEntity::getUserId, userId).fetch(); //使用角色配置 Set settingInfo = roleEntities.stream() .map(entity -> new SettingInfo(SETTING_TYPE_ROLE, entity.getRoleId())) @@ -302,9 +299,8 @@ public class SimpleUserService extends AbstractService if (CollectionUtils.isEmpty(roleIdList)) { return new java.util.ArrayList<>(); } - // org.hswebframework.web.service.authorization.simple.terms.UserInRoleSqlTerm return createQuery() - .where("id", "user-in-role", roleIdList) - .listNoPaging(); + .where().and("id", "user-in-role", roleIdList) + .fetch(); } } diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleUserSettingService.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleUserSettingService.java index 81fe56180..90df8affa 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleUserSettingService.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleUserSettingService.java @@ -1,11 +1,9 @@ package org.hswebframework.web.service.authorization.simple; -import org.hswebframework.web.service.authorization.UserSettingService; -import org.hswebframework.web.dao.authorization.UserSettingDao; import org.hswebframework.web.entity.authorization.UserSettingEntity; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.EnableCacheGenericEntityService; -import org.springframework.beans.factory.annotation.Autowired; +import org.hswebframework.web.service.authorization.UserSettingService; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -25,26 +23,18 @@ import java.util.Objects; public class SimpleUserSettingService extends EnableCacheGenericEntityService implements UserSettingService { - @Autowired - private UserSettingDao userSettingDao; - @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public UserSettingDao getDao() { - return userSettingDao; - } - @Override protected boolean dataExisted(UserSettingEntity entity) { UserSettingEntity old = createQuery() .where(entity::getUserId) .and(entity::getKey) .and(entity::getSettingId) - .single(); + .fetchOne().orElse(null); if (old != null) { entity.setId(old.getId()); return true; @@ -58,7 +48,7 @@ public class SimpleUserSettingService extends EnableCacheGenericEntityService hsweb-system-authorization org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/java/org/hswebframework/web/authorization/starter/AuthorizationAutoConfiguration.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/java/org/hswebframework/web/authorization/starter/AuthorizationAutoConfiguration.java index 25698794d..99e7abd6a 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/java/org/hswebframework/web/authorization/starter/AuthorizationAutoConfiguration.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/java/org/hswebframework/web/authorization/starter/AuthorizationAutoConfiguration.java @@ -27,7 +27,6 @@ import org.hswebframework.web.authorization.twofactor.TwoFactorTokenManager; import org.hswebframework.web.authorization.twofactor.defaults.HashMapTwoFactorTokenManager; import org.hswebframework.web.service.authorization.simple.SimpleAuthenticationManager; import org.hswebframework.web.service.authorization.simple.totp.TotpTwoFactorProvider; -import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.*; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -42,7 +41,6 @@ import org.springframework.context.annotation.Primary; @Configuration @ComponentScan({"org.hswebframework.web.service.authorization.simple" , "org.hswebframework.web.authorization.controller"}) -@MapperScan("org.hswebframework.web.authorization.dao") @AutoConfigureBefore(value = { DefaultAuthorizationAutoConfiguration.class }, name = "org.hswebframework.web.authorization.basic.configuration.AuthorizingHandlerAutoConfiguration") diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-web/pom.xml b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-web/pom.xml index b3d7d42ab..56a710c7f 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-web/pom.xml +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-authorization org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-web/src/main/java/org/hswebframework/web/authorization/controller/UserController.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-web/src/main/java/org/hswebframework/web/authorization/controller/UserController.java index 428f19d71..1b02156df 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-web/src/main/java/org/hswebframework/web/authorization/controller/UserController.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-web/src/main/java/org/hswebframework/web/authorization/controller/UserController.java @@ -47,7 +47,7 @@ import static org.hswebframework.web.controller.message.ResponseMessage.ok; @Authorize(permission = "user", description = "用户管理") @Api(value = "用户管理", tags = "权限-用户管理") public class UserController implements - QueryController, + QueryController, CreateController { @Autowired diff --git a/hsweb-system/hsweb-system-authorization/pom.xml b/hsweb-system/hsweb-system-authorization/pom.xml index efa90feca..b4ba10d88 100644 --- a/hsweb-system/hsweb-system-authorization/pom.xml +++ b/hsweb-system/hsweb-system-authorization/pom.xml @@ -5,7 +5,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-config/hsweb-system-config-api/pom.xml b/hsweb-system/hsweb-system-config/hsweb-system-config-api/pom.xml index 3250602aa..6ee746c5e 100644 --- a/hsweb-system/hsweb-system-config/hsweb-system-config-api/pom.xml +++ b/hsweb-system/hsweb-system-config/hsweb-system-config-api/pom.xml @@ -23,7 +23,7 @@ hsweb-system-config org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml diff --git a/hsweb-system/hsweb-system-config/hsweb-system-config-local/pom.xml b/hsweb-system/hsweb-system-config/hsweb-system-config-local/pom.xml index 59c713d8e..2c1ccc962 100644 --- a/hsweb-system/hsweb-system-config/hsweb-system-config-local/pom.xml +++ b/hsweb-system/hsweb-system-config/hsweb-system-config-local/pom.xml @@ -23,7 +23,7 @@ hsweb-system-config org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 @@ -40,11 +40,6 @@ hsweb-commons-service-simple ${project.version} - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - diff --git a/hsweb-system/hsweb-system-config/hsweb-system-config-local/src/main/java/org/hswebframework/web/dao/config/ConfigDao.java b/hsweb-system/hsweb-system-config/hsweb-system-config-local/src/main/java/org/hswebframework/web/dao/config/ConfigDao.java deleted file mode 100644 index 2912f5d3c..000000000 --- a/hsweb-system/hsweb-system-config/hsweb-system-config-local/src/main/java/org/hswebframework/web/dao/config/ConfigDao.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.dao.config; - -import org.hswebframework.web.entity.config.ConfigEntity; -import org.hswebframework.web.dao.CrudDao; - -/** - * TODO 完成注释 - * - * @author zhouhao - */ -public interface ConfigDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-config/hsweb-system-config-local/src/main/java/org/hswebframework/web/service/config/simple/SimpleConfigService.java b/hsweb-system/hsweb-system-config/hsweb-system-config-local/src/main/java/org/hswebframework/web/service/config/simple/SimpleConfigService.java index d8d99246d..c8592d668 100644 --- a/hsweb-system/hsweb-system-config/hsweb-system-config-local/src/main/java/org/hswebframework/web/service/config/simple/SimpleConfigService.java +++ b/hsweb-system/hsweb-system-config/hsweb-system-config-local/src/main/java/org/hswebframework/web/service/config/simple/SimpleConfigService.java @@ -18,14 +18,11 @@ package org.hswebframework.web.service.config.simple; -import org.hswebframework.web.dao.config.ConfigDao; import org.hswebframework.web.entity.config.ConfigContent; import org.hswebframework.web.entity.config.ConfigEntity; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.EnableCacheAllEvictGenericEntityService; -import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.service.config.ConfigService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -40,19 +37,11 @@ import java.util.Optional; public class SimpleConfigService extends EnableCacheAllEvictGenericEntityService implements ConfigService { - @Autowired - private ConfigDao configDao; - @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public ConfigDao getDao() { - return configDao; - } - protected Optional getConfigContent(String configId, String key) { ConfigEntity entity = selectByPk(configId); if (entity == null) { diff --git a/hsweb-system/hsweb-system-config/hsweb-system-config-starter/pom.xml b/hsweb-system/hsweb-system-config/hsweb-system-config-starter/pom.xml index b8982510e..ca178411b 100644 --- a/hsweb-system/hsweb-system-config/hsweb-system-config-starter/pom.xml +++ b/hsweb-system/hsweb-system-config/hsweb-system-config-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-system-config org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-config/hsweb-system-config-web/pom.xml b/hsweb-system/hsweb-system-config/hsweb-system-config-web/pom.xml index 6fd64ff56..8928b159a 100644 --- a/hsweb-system/hsweb-system-config/hsweb-system-config-web/pom.xml +++ b/hsweb-system/hsweb-system-config/hsweb-system-config-web/pom.xml @@ -23,7 +23,7 @@ hsweb-system-config org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-config/hsweb-system-config-web/src/main/java/org/hswebframework/web/controller/config/ConfigController.java b/hsweb-system/hsweb-system-config/hsweb-system-config-web/src/main/java/org/hswebframework/web/controller/config/ConfigController.java index 0a16111b6..235306054 100644 --- a/hsweb-system/hsweb-system-config/hsweb-system-config-web/src/main/java/org/hswebframework/web/controller/config/ConfigController.java +++ b/hsweb-system/hsweb-system-config/hsweb-system-config-web/src/main/java/org/hswebframework/web/controller/config/ConfigController.java @@ -33,8 +33,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** - * TODO 完成注释 - * * @author zhouhao */ @RestController diff --git a/hsweb-system/hsweb-system-config/pom.xml b/hsweb-system/hsweb-system-config/pom.xml index b6c260ed9..f6180a768 100644 --- a/hsweb-system/hsweb-system-config/pom.xml +++ b/hsweb-system/hsweb-system-config/pom.xml @@ -23,7 +23,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-api/pom.xml b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-api/pom.xml index 251139fe8..9fd8c8473 100644 --- a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-api/pom.xml +++ b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dashboard org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/pom.xml b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/pom.xml index 4054798d8..d3ae5d55f 100644 --- a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/pom.xml +++ b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dashboard org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/java/org/hswebframework/web/dashboard/local/DefaultDashBoardService.java b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/java/org/hswebframework/web/dashboard/local/DefaultDashBoardService.java index 222152273..39868624a 100644 --- a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/java/org/hswebframework/web/dashboard/local/DefaultDashBoardService.java +++ b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/java/org/hswebframework/web/dashboard/local/DefaultDashBoardService.java @@ -3,10 +3,8 @@ package org.hswebframework.web.dashboard.local; import org.hswebframework.web.dao.CrudDao; import org.hswebframework.web.dashboard.DashBoardConfigEntity; import org.hswebframework.web.dashboard.DashBoardService; -import org.hswebframework.web.dashboard.local.dao.DashBoardConfigDao; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.EnableCacheAllEvictGenericEntityService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -17,21 +15,14 @@ import java.util.List; @CacheConfig(cacheNames = "hsweb:dashboard-conf") public class DefaultDashBoardService extends EnableCacheAllEvictGenericEntityService implements DashBoardService { - @Autowired - private DashBoardConfigDao dashBoardConfigDao; - @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public CrudDao getDao() { - return dashBoardConfigDao; - } @Cacheable(key = "'all-defaults'") public List selectAllDefaults() { - return createQuery().where("defaultConfig", true).or().isNull("defaultConfig").listNoPaging(); + return createQuery().where("defaultConfig", true).or().isNull("defaultConfig").fetch(); } } diff --git a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/java/org/hswebframework/web/dashboard/local/dao/DashBoardConfigDao.java b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/java/org/hswebframework/web/dashboard/local/dao/DashBoardConfigDao.java deleted file mode 100644 index 95c41dbf0..000000000 --- a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/java/org/hswebframework/web/dashboard/local/dao/DashBoardConfigDao.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.hswebframework.web.dashboard.local.dao; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.dashboard.DashBoardConfigEntity; - -public interface DashBoardConfigDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-starter/pom.xml b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-starter/pom.xml index bf1c12d39..f98e6838f 100644 --- a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-starter/pom.xml +++ b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dashboard org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-web/pom.xml b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-web/pom.xml index 29a751d95..9954214b7 100644 --- a/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-web/pom.xml +++ b/hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dashboard org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-dashboard/pom.xml b/hsweb-system/hsweb-system-dashboard/pom.xml index ba93b3a03..a1a5187f3 100644 --- a/hsweb-system/hsweb-system-dashboard/pom.xml +++ b/hsweb-system/hsweb-system-dashboard/pom.xml @@ -5,7 +5,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/pom.xml b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/pom.xml index 0e096f062..6aac66f28 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/pom.xml +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-database-manager org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/DatabaseManagerService.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/DatabaseManagerService.java index 29c9b16ee..1215a313f 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/DatabaseManagerService.java +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/DatabaseManagerService.java @@ -1,16 +1,10 @@ package org.hswebframework.web.database.manager; -import org.hswebframework.web.database.manager.meta.ObjectMetadata; import org.hswebframework.web.database.manager.sql.SqlExecutor; import org.hswebframework.web.database.manager.sql.TransactionSqlExecutor; -import org.hswebframework.web.datasource.DynamicDataSource; - -import java.util.List; -import java.util.Map; /** * @author zhouhao */ public interface DatabaseManagerService extends SqlExecutor,TransactionSqlExecutor { - Map> getMetas(); } diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/ObjectMetadata.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/ObjectMetadata.java deleted file mode 100644 index b5d4f1139..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/ObjectMetadata.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.hswebframework.web.database.manager.meta; - -import java.io.Serializable; - -/** - * @author zhouhao - */ -public abstract class ObjectMetadata implements Serializable { - - private static final long serialVersionUID = -5672781818170734240L; - - protected String name; - - protected ObjectType type; - - public ObjectType getType() { - return type; - } - - public void setType(ObjectType type) { - this.type = type; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public enum ObjectType { - TABLE,//表 - VIEW,//视图 - SEQUENCES//序列 - } -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/ColumnMetadata.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/ColumnMetadata.java deleted file mode 100644 index 8f30eb7be..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/ColumnMetadata.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table; - -import lombok.Data; - -import java.io.Serializable; -import java.sql.JDBCType; -import java.util.List; - -/** - * @author zhouhao - */ -@Data -public class ColumnMetadata implements Serializable { - private static final long serialVersionUID = 2068679809718583039L; - - /** - * 列名 - */ - private String name; - - /** - * 备注 - */ - private String comment; - - /** - * 数据类型 - */ - private String dataType; - - /** - * 长度 - */ - private int length; - - /** - * 精度 - */ - private int precision; - - /** - * 小数点位数 - */ - private int scale; - - /** - * 是否不能为空 - */ - private boolean notNull; - - /** - * JDBCType - */ - private JDBCType jdbcType; - -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/Constraint.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/Constraint.java deleted file mode 100644 index 58857a391..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/Constraint.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table; - -import lombok.Data; - -import java.io.Serializable; - -/** - * 约束 - * - * @author zhouhao - * @since 3.0 - */ -@Data -public class Constraint implements Serializable { - private static final long serialVersionUID = 6594361915290310179L; - - /** - * 表名 - * - * @see TableMetadata#getName() - */ - private String table; - - /** - * 列名 - * - * @see ColumnMetadata#getName() - */ - private String column; - - /** - * 约束类型 - */ - private Type type; - - public enum Type { - /** - * 主键 - */ - PrimaryKey, - /** - * 外键 - */ - ForeignKey, - /** - * 唯一约束 - */ - Unique, Check, Default - } -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/ForeignConstraint.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/ForeignConstraint.java deleted file mode 100644 index d5609eafe..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/ForeignConstraint.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table; - -import lombok.Data; - -/** - * @author zhouhao - */ -@Data -public class ForeignConstraint extends Constraint { - private static final long serialVersionUID = -7146549641064694467L; - private String targetTable; - - private String targetColumn; - -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/TableMetadata.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/TableMetadata.java deleted file mode 100644 index b7d14efd4..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/TableMetadata.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table; - -import lombok.*; -import org.hswebframework.web.database.manager.meta.ObjectMetadata; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @author zhouhao - */ -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class TableMetadata extends ObjectMetadata { - private static final long serialVersionUID = 1762059989615865556L; - - private String comment; - - private List constraints; - - private List columns; -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/AbstractSqlTableMetaDataParser.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/AbstractSqlTableMetaDataParser.java deleted file mode 100644 index a0eed8288..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/AbstractSqlTableMetaDataParser.java +++ /dev/null @@ -1,120 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table.parser; - -import lombok.SneakyThrows; -import org.apache.commons.beanutils.BeanUtilsBean; -import org.hswebframework.ezorm.core.ObjectWrapper; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.web.database.manager.meta.table.ColumnMetadata; -import org.hswebframework.web.database.manager.meta.table.TableMetadata; -import org.hswebframework.web.datasource.DataSourceHolder; -import org.hswebframework.web.datasource.DatabaseType; - -import java.sql.SQLException; -import java.util.*; -import java.util.function.BiConsumer; -import java.util.stream.Collectors; - -public abstract class AbstractSqlTableMetaDataParser implements TableMetaDataParser, MetaDataParserSupplier { - - private SqlExecutor sqlExecutor; - - private static ColumnMetadataWrapper wrapper = new ColumnMetadataWrapper(); - - public abstract String getSelectTableColumnsSql(); - - public abstract String getSelectTableMetaSql(); - - public abstract String getSelectAllTableSql(); - - public AbstractSqlTableMetaDataParser(SqlExecutor sqlExecutor, DatabaseType... databaseTypes) { - this.sqlExecutor = sqlExecutor; - supportDataBases.addAll(Arrays.asList(databaseTypes)); - } - - private Set supportDataBases = new HashSet<>(); - - @Override - public boolean isSupport(DatabaseType type) { - return supportDataBases.contains(type); - } - - @Override - public MetaDataParser get() { - return this; - } - - @Override - public List parseAll() throws SQLException { - String dsId = DataSourceHolder.switcher().currentDataSourceId(); - return sqlExecutor.list(getSelectAllTableSql()) - .parallelStream() - .map(map -> map.get("name")) - .map(String::valueOf) - .map(tableName -> { - try { - DataSourceHolder.switcher().use(dsId); - return this.parse(tableName); - } finally { - DataSourceHolder.switcher().reset(); - } - }) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - - @Override - @SneakyThrows - public TableMetadata parse(String objectName) { - - Map param = new HashMap<>(); - param.put("table", objectName); - - Map tableMetaMap = sqlExecutor.single(getSelectTableMetaSql(), param); - - if (tableMetaMap == null) { - return null; - } - TableMetadata table = new TableMetadata(); - table.setName(objectName); - table.setComment((String) tableMetaMap.getOrDefault("comment", "")); - List columns = sqlExecutor.list(getSelectTableColumnsSql(), param, wrapper); - - table.setColumns(columns); - - return table; - } - - - static class ColumnMetadataWrapper implements ObjectWrapper { - static Map> propertySetters = new HashMap<>(); - - static { - propertySetters.put("name", (columnMetadata, value) -> columnMetadata.setName(String.valueOf(value))); - - } - - @Override - public Class getType() { - return ColumnMetadata.class; - } - - @Override - public ColumnMetadata newInstance() { - return new ColumnMetadata(); - } - - @Override - public void wrapper(ColumnMetadata instance, int index, String attr, Object value) { - try { - BeanUtilsBean.getInstance().setProperty(instance, attr, value); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Override - public boolean done(ColumnMetadata instance) { - return true; - } - } -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParser.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParser.java deleted file mode 100644 index 0f9c81e2f..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParser.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table.parser; - -import org.hswebframework.web.database.manager.meta.ObjectMetadata; - -import java.sql.SQLException; -import java.util.List; - -public interface MetaDataParser { - - List parseAll() throws SQLException; - - M parse(String objectName) throws SQLException; -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParserRegister.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParserRegister.java deleted file mode 100644 index 3628a7e38..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParserRegister.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table.parser; - -import org.hswebframework.web.database.manager.meta.ObjectMetadata; -import org.hswebframework.web.datasource.DatabaseType; - -public interface MetaDataParserRegister { - void registerMetaDataParser(DatabaseType databaseType, ObjectMetadata.ObjectType objectType, MetaDataParser parser); -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParserSupplier.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParserSupplier.java deleted file mode 100644 index abb7f942d..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParserSupplier.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table.parser; - -import org.hswebframework.web.database.manager.meta.ObjectMetadata; -import org.hswebframework.web.datasource.DatabaseType; - -public interface MetaDataParserSupplier { - boolean isSupport(DatabaseType type); - - MetaDataParser get(); -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/TableMetaDataParser.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/TableMetaDataParser.java deleted file mode 100644 index 8f647061a..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/TableMetaDataParser.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table.parser; - -import org.hswebframework.web.database.manager.meta.table.TableMetadata; - -public interface TableMetaDataParser extends MetaDataParser { - -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/H2TableMetaDataParser.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/H2TableMetaDataParser.java deleted file mode 100644 index 7432e2a08..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/H2TableMetaDataParser.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table.parser.support; - -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.web.database.manager.meta.table.parser.AbstractSqlTableMetaDataParser; -import org.hswebframework.web.datasource.DatabaseType; - -public class H2TableMetaDataParser extends AbstractSqlTableMetaDataParser { - private static final String TABLE_META_SQL = "SELECT " + - "column_name AS \"name\"" + - ",type_name AS \"dataType\"" + - ",character_maximum_length as \"length\"" + - ",numeric_precision as \"precision\"" + - ",numeric_scale as \"scale\"" + - ",case when is_nullable='YES' then 0 else 1 end as \"notNull\"" + - ",remarks as \"comment\" " + - "FROM information_schema.columns WHERE TABLE_NAME = upper(#{table})"; - - private static final String TABLE_COMMENT_SQL = "SELECT " + - "remarks as \"comment\" " + - "FROM information_schema.tables " + - "WHERE table_type='TABLE' and table_name=upper(#{table})"; - - private static final String ALL_TABLE_SQL = "select table_name as \"name\" FROM information_schema.tables where table_type='TABLE'"; - - public H2TableMetaDataParser(SqlExecutor sqlExecutor) { - super(sqlExecutor,DatabaseType.h2); - } - - @Override - public String getSelectTableColumnsSql() { - return TABLE_META_SQL; - } - - @Override - public String getSelectTableMetaSql() { - return TABLE_COMMENT_SQL; - } - - @Override - public String getSelectAllTableSql() { - return ALL_TABLE_SQL; - } - -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/MysqlTableMetaDataParser.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/MysqlTableMetaDataParser.java deleted file mode 100644 index fccbb71ce..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/MysqlTableMetaDataParser.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table.parser.support; - -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.web.database.manager.meta.table.parser.AbstractSqlTableMetaDataParser; -import org.hswebframework.web.datasource.DatabaseType; - -public class MysqlTableMetaDataParser extends AbstractSqlTableMetaDataParser { - - private static final String TABLE_META_SQL = " select " + - "column_name as `name`, " + - "data_type as `dataType`, " + - "character_maximum_length as `length`, " + - "numeric_precision as `precision`, " + - "numeric_scale as `scale`, " + - "column_comment as `comment`, " + - "case when is_nullable='YES' then 0 else 1 end as 'notNull' " + - "from information_schema.columns where table_schema=database() and table_name=#{table}"; - - private static final String TABLE_COMMENT_SQL = " select " + - "table_comment as `comment` " + - "from information_schema.tables where table_name=#{table}"; - - private static final String ALL_TABLE_SQL = "select table_name as `name` from information_schema.`TABLES` where table_schema=database()"; - - public MysqlTableMetaDataParser(SqlExecutor sqlExecutor) { - super(sqlExecutor,DatabaseType.mysql); - } - - @Override - public String getSelectTableColumnsSql() { - return TABLE_META_SQL; - } - - @Override - public String getSelectTableMetaSql() { - return TABLE_COMMENT_SQL; - } - - @Override - public String getSelectAllTableSql() { - return ALL_TABLE_SQL; - } - -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/OracleTableMetaDataParser.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/OracleTableMetaDataParser.java deleted file mode 100644 index 3f7e9d0a0..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/OracleTableMetaDataParser.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table.parser.support; - -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.web.database.manager.meta.table.parser.AbstractSqlTableMetaDataParser; -import org.hswebframework.web.datasource.DatabaseType; - -public class OracleTableMetaDataParser extends AbstractSqlTableMetaDataParser { - - private final static String TABLE_META_SQL = "select distinct(cols.column_name) as \"name\"" + - ",cols.table_name as \"tableName\"" + - ",cols.data_type as \"dataType\"" + - ",cols.data_length as \"dataLength\"" + - ",cols.data_precision as \"precision\"" + - ",cols.data_scale as \"scale\"" + - ",acc.comments as \"comment\"" + - ",case when cols.nullable='Y' then 0 else 1 end as \"notNull\"" + - ",cols.column_id from user_tab_columns cols " + - "left join all_col_comments acc on acc.column_name=cols.column_name and acc.table_name=cols.table_name " + - "where cols.table_name=upper(#{table}) " + - "order by cols.column_id "; - - private final static String TABLE_COMMENT_SQL = "select comments as \"comment\" from user_tab_comments where table_type='TABLE' and table_name=upper(#{table})"; - - private final static String ALL_TABLE_SQL = "select table_name as \"name\" from user_tab_comments where table_type='TABLE'"; - - public OracleTableMetaDataParser(SqlExecutor sqlExecutor) { - super(sqlExecutor, DatabaseType.oracle); - } - - @Override - public String getSelectTableColumnsSql() { - return TABLE_META_SQL; - } - - @Override - public String getSelectTableMetaSql() { - return TABLE_COMMENT_SQL; - } - - @Override - public String getSelectAllTableSql() { - return ALL_TABLE_SQL; - } - -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/PostgresTableMetaDataParser.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/PostgresTableMetaDataParser.java deleted file mode 100644 index 92d7f0e0c..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/PostgresTableMetaDataParser.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table.parser.support; - -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.web.database.manager.meta.table.parser.AbstractSqlTableMetaDataParser; -import org.hswebframework.web.datasource.DatabaseType; - -public class PostgresTableMetaDataParser extends AbstractSqlTableMetaDataParser { - private static final String TABLE_META_SQL = "select column_name as \"name\"" + - " , udt_name as \"dataType\"" + - " , table_name as \"tableName\"" + - " , character_maximum_length as \"dataLength\"" + - " , numeric_precision as \"precision\"" + - " , numeric_scale as \"scale\"" + - " , case when is_nullable = 'YES' then 0 else 1 end as \"notNull\"" + - " ,col_description(a.attrelid,a.attnum) as \"comment\"" + - " from information_schema.columns columns ," + - " pg_class as c,pg_attribute as a" + - " where a.attrelid = c.oid and a.attnum>0 and a.attname = columns.column_name and c.relname=columns.table_name" + - " and table_schema = current_schema()" + - " and table_name = #{table}"; - - private static final String TABLE_COMMENT_SQL = "select cast(obj_description(relfilenode,'pg_class') as varchar)" + - " as \"comment\" from pg_class c" + - " where relname=#{table} and relkind = 'r' and relname not like 'pg_%'" + - " and relname not like 'sql_%'"; - - private static final String ALL_TABLE_SQL = "select table_name as \"name\" from information_schema.TABLES where table_schema=current_schema()"; - - public PostgresTableMetaDataParser(SqlExecutor sqlExecutor) { - super(sqlExecutor, DatabaseType.postgresql); - } - - @Override - public String getSelectTableColumnsSql() { - return TABLE_META_SQL; - } - - @Override - public String getSelectTableMetaSql() { - return TABLE_COMMENT_SQL; - } - - @Override - public String getSelectAllTableSql() { - return ALL_TABLE_SQL; - } - -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/SqlServerTableMetaDataParser.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/SqlServerTableMetaDataParser.java deleted file mode 100644 index 59808b5aa..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/support/SqlServerTableMetaDataParser.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.hswebframework.web.database.manager.meta.table.parser.support; - -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.web.database.manager.meta.table.parser.AbstractSqlTableMetaDataParser; -import org.hswebframework.web.datasource.DatabaseType; - -public class SqlServerTableMetaDataParser extends AbstractSqlTableMetaDataParser { - private static String TABLE_META_SQL = "SELECT \n" + - "c.name as [name],\n" + - "t.name as [dataType],\n" + - "c.length as [length],\n" + - "c.xscale as [scale],\n" + - "c.xprec as [precision],\n" + - "case when c.isnullable=1 then 0 else 1 end as [notNull],\n" + - "cast(p.value as varchar(500)) as [comment]\n" + - "FROM syscolumns c\n" + - "inner join systypes t on c.xusertype = t.xusertype \n" + - "left join sys.extended_properties p on c.id=p.major_id and c.colid=p.minor_id\n" + - "WHERE c.id = object_id(#{table})"; - - private static String TABLE_COMMENT_SQL = "select cast(p.value as varchar(500)) as [comment] from sys.extended_properties p " + - " where p.major_id=object_id(#{table}) and p.minor_id=0"; - - public SqlServerTableMetaDataParser(SqlExecutor sqlExecutor) { - super(sqlExecutor, DatabaseType.sqlserver, DatabaseType.jtds_sqlserver); - } - - @Override - public String getSelectTableColumnsSql() { - return TABLE_META_SQL; - } - - @Override - public String getSelectTableMetaSql() { - return TABLE_COMMENT_SQL; - } - - @Override - public String getSelectAllTableSql() { - return "select name from sysobjects where xtype='U'"; - } - -} diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/pom.xml b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/pom.xml index 9eba8afd3..da4447830 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/pom.xml +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-database-manager org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java index 694751274..2c64df416 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java @@ -1,11 +1,10 @@ package org.hswebframework.web.datasource.manager.simple; import lombok.SneakyThrows; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; +import org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor; import org.hswebframework.web.database.manager.SqlExecuteRequest; import org.hswebframework.web.database.manager.SqlExecuteResult; import org.hswebframework.web.database.manager.SqlInfo; -import org.hswebframework.web.database.manager.exception.SqlExecuteException; import org.hswebframework.web.datasource.DataSourceHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,9 +13,7 @@ import org.springframework.transaction.support.TransactionTemplate; import java.sql.SQLException; import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; -import java.util.Queue; import java.util.concurrent.*; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -32,7 +29,7 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor { private BlockingQueue executionQueue = new LinkedBlockingQueue<>(); - private SqlExecutor sqlExecutor; + private SyncSqlExecutor sqlExecutor; private SqlRequestExecutor sqlRequestExecutor; @@ -52,7 +49,7 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor { private CountDownLatch waitClose = new CountDownLatch(1); - public DefaultLocalTransactionExecutor(SqlExecutor sqlExecutor, String transactionId, String datasourceId, TransactionTemplate transactionTemplate) { + public DefaultLocalTransactionExecutor(SyncSqlExecutor sqlExecutor, String transactionId, String datasourceId, TransactionTemplate transactionTemplate) { this.sqlExecutor = sqlExecutor; this.transactionId = transactionId; this.datasourceId = datasourceId; @@ -103,7 +100,7 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor { commit = false; } - public void setSqlExecutor(SqlExecutor sqlExecutor) { + public void setSqlExecutor(SyncSqlExecutor sqlExecutor) { this.sqlExecutor = sqlExecutor; } @@ -240,7 +237,7 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor { } private interface SqlRequestExecutor { - SqlExecuteResult apply(SqlExecutor executor, SqlInfo sqlInfo) throws SQLException; + SqlExecuteResult apply(SyncSqlExecutor executor, SqlInfo sqlInfo) throws SQLException; } } diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/NonTransactionSqlExecutor.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/NonTransactionSqlExecutor.java index ff71dba04..bedca3046 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/NonTransactionSqlExecutor.java +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/NonTransactionSqlExecutor.java @@ -1,5 +1,6 @@ package org.hswebframework.web.datasource.manager.simple; +import org.hswebframework.ezorm.rdb.executor.SqlRequests; import org.hswebframework.web.database.manager.SqlExecuteRequest; import org.hswebframework.web.database.manager.SqlExecuteResult; import org.hswebframework.web.database.manager.SqlInfo; @@ -11,10 +12,10 @@ import java.util.List; import java.util.stream.Collectors; public class NonTransactionSqlExecutor implements SqlExecutor { - private org.hswebframework.ezorm.rdb.executor.SqlExecutor executor; + private org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor executor; - public NonTransactionSqlExecutor(org.hswebframework.ezorm.rdb.executor.SqlExecutor executor) { + public NonTransactionSqlExecutor(org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor executor) { this.executor = executor; } @@ -26,27 +27,21 @@ public class NonTransactionSqlExecutor implements SqlExecutor { public SqlExecuteResult doExecute(SqlInfo sqlInfo) { SqlExecuteResult result = new SqlExecuteResult(); Object executeResult = null; - try { - switch (sqlInfo.getType().toUpperCase()) { - case "SELECT": - QueryResultWrapper wrapper = new QueryResultWrapper(); - executor.list(sqlInfo.getSql(), wrapper); - executeResult = wrapper.getResult(); - break; - case "INSERT": - case "UPDATE": - executeResult = executor.update(sqlInfo.getSql()); - break; - case "DELETE": - executeResult = executor.delete(sqlInfo.getSql()); - break; - default: - executor.exec(sqlInfo.getSql()); - } - result.setSuccess(true); - } catch (SQLException e) { - throw new SqlExecuteException(e.getMessage(), e, sqlInfo.getSql()); + switch (sqlInfo.getType().toUpperCase()) { + case "SELECT": + QueryResultWrapper wrapper = new QueryResultWrapper(); + executor.select(SqlRequests.of(sqlInfo.getSql()), wrapper); + executeResult = wrapper.getResult(); + break; + case "INSERT": + case "DELETE": + case "UPDATE": + executeResult = executor.update(SqlRequests.of(sqlInfo.getSql())); + default: + executor.execute(SqlRequests.of(sqlInfo.getSql())); } + result.setSuccess(true); + result.setResult(executeResult); result.setSqlInfo(sqlInfo); diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/QueryResultWrapper.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/QueryResultWrapper.java index dbc6e8a9c..14ef35ba4 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/QueryResultWrapper.java +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/QueryResultWrapper.java @@ -1,41 +1,38 @@ package org.hswebframework.web.datasource.manager.simple; -import org.hswebframework.ezorm.core.ObjectWrapper; +import org.hswebframework.ezorm.rdb.executor.wrapper.ColumnWrapperContext; +import org.hswebframework.ezorm.rdb.executor.wrapper.ResultWrapper; +import org.hswebframework.ezorm.rdb.executor.wrapper.ResultWrapperContext; import java.util.ArrayList; import java.util.List; -public class QueryResultWrapper implements ObjectWrapper { +public class QueryResultWrapper implements ResultWrapper { private QueryResult result = new QueryResult(); private List temp = new ArrayList<>(); @Override - public void setUp(List columns) { - result.setColumns(columns); + public void beforeWrap(ResultWrapperContext context) { + result.setColumns(context.getColumns()); } - @Override - public Class getType() { - return QueryResult.class; - } @Override - public QueryResult newInstance() { + public QueryResult newRowInstance() { return result; } @Override - public void wrapper(QueryResult instance, int index, String attr, Object value) { - temp.add(value); - + public void wrapColumn(ColumnWrapperContext context) { + temp.add(context.getResult()); } @Override - public boolean done(QueryResult instance) { - instance.getData().add(new ArrayList<>(temp)); + public boolean completedWrapRow(QueryResult result) { + result.getData().add(new ArrayList<>(temp)); temp.clear(); - return false; + return true; } public QueryResult getResult() { diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/SimpleDatabaseManagerService.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/SimpleDatabaseManagerService.java index c1c5008d7..de2d05b6b 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/SimpleDatabaseManagerService.java +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/SimpleDatabaseManagerService.java @@ -1,33 +1,25 @@ package org.hswebframework.web.datasource.manager.simple; import lombok.extern.slf4j.Slf4j; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; +import org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor; import org.hswebframework.web.database.manager.DatabaseManagerService; import org.hswebframework.web.database.manager.SqlExecuteRequest; import org.hswebframework.web.database.manager.SqlExecuteResult; -import org.hswebframework.web.database.manager.meta.ObjectMetadata; -import org.hswebframework.web.database.manager.meta.table.parser.MetaDataParser; -import org.hswebframework.web.database.manager.meta.table.parser.MetaDataParserRegister; import org.hswebframework.web.database.manager.sql.TransactionInfo; -import org.hswebframework.web.datasource.DataSourceHolder; -import org.hswebframework.web.datasource.DatabaseType; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; import org.springframework.transaction.support.TransactionTemplate; import javax.annotation.PostConstruct; -import java.sql.SQLException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.stream.Collectors; /** * @author zhouhao */ @Slf4j -public class SimpleDatabaseManagerService implements DatabaseManagerService, MetaDataParserRegister { +public class SimpleDatabaseManagerService implements DatabaseManagerService { private Map transactionExecutorMap = new ConcurrentHashMap<>(); @@ -35,12 +27,10 @@ public class SimpleDatabaseManagerService implements DatabaseManagerService, Met private ExecutorService executorService; - private SqlExecutor sqlExecutor; + private SyncSqlExecutor sqlExecutor; private TransactionTemplate transactionTemplate; - private Map>> parserRepo = new HashMap<>(); - @Override public List allTransaction() { return new ArrayList<>(transactionInfoMap.values()); @@ -64,7 +54,7 @@ public class SimpleDatabaseManagerService implements DatabaseManagerService, Met } @Autowired - public void setSqlExecutor(SqlExecutor sqlExecutor) { + public void setSqlExecutor(SyncSqlExecutor sqlExecutor) { this.sqlExecutor = sqlExecutor; } @@ -131,25 +121,5 @@ public class SimpleDatabaseManagerService implements DatabaseManagerService, Met return new NonTransactionSqlExecutor(sqlExecutor).execute(request); } - @Override - public Map> getMetas() { - return parserRepo - .computeIfAbsent(DataSourceHolder.currentDatabaseType(), t -> new HashMap<>()) - .entrySet() - .stream() - .collect(Collectors.toMap(Map.Entry::getKey, entry -> { - try { - return entry.getValue().parseAll(); - } catch (SQLException e) { - log.error("parse meta {} error", entry.getKey(), e); - return new ArrayList<>(); - } - })); - } - @Override - public void registerMetaDataParser(DatabaseType databaseType, ObjectMetadata.ObjectType objectType, MetaDataParser parser) { - parserRepo.computeIfAbsent(databaseType, t -> new HashMap<>()) - .put(objectType, parser); - } } diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/pom.xml b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/pom.xml index ef0f8b3f6..b6211df90 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/pom.xml +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-system-database-manager org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/main/java/org/hswebframework/web/database/manager/DataBaseManagerAutoConfiguration.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/main/java/org/hswebframework/web/database/manager/DataBaseManagerAutoConfiguration.java index 72e847f78..74a6dd247 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/main/java/org/hswebframework/web/database/manager/DataBaseManagerAutoConfiguration.java +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/main/java/org/hswebframework/web/database/manager/DataBaseManagerAutoConfiguration.java @@ -11,8 +11,6 @@ import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan({"org.hswebframework.web.database.manager.web" , "org.hswebframework.web.datasource.manager.simple"}) -@ImportAutoConfiguration(TableMetaDataParserAutoConfiguration.class) -@AutoConfigureBefore(TableMetaDataParserAutoConfiguration.class) public class DataBaseManagerAutoConfiguration { @Bean diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/main/java/org/hswebframework/web/database/manager/TableMetaDataParserAutoConfiguration.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/main/java/org/hswebframework/web/database/manager/TableMetaDataParserAutoConfiguration.java deleted file mode 100644 index 09bc9129e..000000000 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/main/java/org/hswebframework/web/database/manager/TableMetaDataParserAutoConfiguration.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.hswebframework.web.database.manager; - -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.web.database.manager.meta.ObjectMetadata; -import org.hswebframework.web.database.manager.meta.table.parser.MetaDataParserRegister; -import org.hswebframework.web.database.manager.meta.table.parser.MetaDataParserSupplier; -import org.hswebframework.web.database.manager.meta.table.parser.TableMetaDataParser; -import org.hswebframework.web.database.manager.meta.table.parser.support.*; -import org.hswebframework.web.datasource.DatabaseType; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class TableMetaDataParserAutoConfiguration { - - @Autowired - private SqlExecutor sqlExecutor; - - @Autowired - private MetaDataParserRegister metaDataParserRegister; - - @Bean - @ConditionalOnClass(name = "org.h2.Driver") - public H2TableMetaDataParser h2TableMetaDataParser() { - return new H2TableMetaDataParser(sqlExecutor); - } - - @Bean - @ConditionalOnClass(name = "com.mysql.jdbc.Driver") - public MysqlTableMetaDataParser mysqlTableMetaDataParser() { - return new MysqlTableMetaDataParser(sqlExecutor); - } - - @Bean - @ConditionalOnClass(name = "oracle.jdbc.driver.OracleDriver") - public OracleTableMetaDataParser oracleTableMetaParser() { - return new OracleTableMetaDataParser(sqlExecutor); - } - @Bean - @ConditionalOnClass(name = "org.postgresql.Driver") - public PostgresTableMetaDataParser postgresTableMetaDataParser() { - return new PostgresTableMetaDataParser(sqlExecutor); - } - - - @Bean - @ConditionalOnClass(name = "com.microsoft.sqlserver.jdbc.SQLServerDriver") - public SqlServerTableMetaDataParser sqlServerTableMetaDataParser() { - return new SqlServerTableMetaDataParser(sqlExecutor); - } - - @Bean - @ConditionalOnClass(name = "net.sourceforge.jtds.jdbc.Driver") - public SqlServerTableMetaDataParser jstdSqlServerTableMetaDataParser() { - return new SqlServerTableMetaDataParser(sqlExecutor); - } - - @Bean - public BeanPostProcessor tableMetaDataAutoParserRegister() { - return new BeanPostProcessor() { - @Override - public Object postProcessBeforeInitialization(Object o, String s) throws BeansException { - return o; - } - - @Override - @SuppressWarnings("unchecked") - public Object postProcessAfterInitialization(Object o, String s) throws BeansException { - if (o instanceof MetaDataParserSupplier) { - MetaDataParserSupplier supplier = ((MetaDataParserSupplier) o); - for (DatabaseType databaseType : DatabaseType.values()) { - if (supplier.isSupport(databaseType)) { - metaDataParserRegister.registerMetaDataParser(databaseType, ObjectMetadata.ObjectType.TABLE, supplier.get()); - } - } - } - return o; - } - }; - } -} \ No newline at end of file diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/pom.xml b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/pom.xml index 9f94f140c..800eb996a 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/pom.xml +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-database-manager org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/src/main/java/org/hswebframework/web/database/manager/web/DataBaseManagerController.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/src/main/java/org/hswebframework/web/database/manager/web/DataBaseManagerController.java index 66d056c6a..ace6aab4c 100644 --- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/src/main/java/org/hswebframework/web/database/manager/web/DataBaseManagerController.java +++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/src/main/java/org/hswebframework/web/database/manager/web/DataBaseManagerController.java @@ -4,16 +4,12 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.hswebframework.web.Sqls; -import org.hswebframework.web.authorization.Authentication; -import org.hswebframework.web.authorization.Permission; import org.hswebframework.web.authorization.annotation.Authorize; -import org.hswebframework.web.authorization.exception.AccessDenyException; import org.hswebframework.web.controller.message.ResponseMessage; import org.hswebframework.web.database.manager.DatabaseManagerService; import org.hswebframework.web.database.manager.SqlExecuteRequest; import org.hswebframework.web.database.manager.SqlExecuteResult; import org.hswebframework.web.database.manager.SqlInfo; -import org.hswebframework.web.database.manager.meta.ObjectMetadata; import org.hswebframework.web.database.manager.sql.TransactionInfo; import org.hswebframework.web.datasource.DataSourceHolder; import org.springframework.beans.factory.annotation.Autowired; @@ -21,7 +17,6 @@ import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; @RestController @@ -33,23 +28,23 @@ public class DataBaseManagerController { @Autowired private DatabaseManagerService databaseManagerService; - @GetMapping("/metas") - @Authorize(action = Permission.ACTION_QUERY, description = "获取元数据") - @ApiOperation("获取数据库元数据") - public ResponseMessage>> parseAllObject() throws Exception { - return parseAllObject(null); - } - - @GetMapping("/metas/{datasourceId}") - @Authorize(action = Permission.ACTION_QUERY, description = "获取元数据") - @ApiOperation("获取指定数据源的元数据") - public ResponseMessage>> parseAllObject( - @PathVariable - @ApiParam("数据源ID") String datasourceId) throws Exception { - - DataSourceHolder.switcher().use(datasourceId); - return ResponseMessage.ok(databaseManagerService.getMetas()); - } +// @GetMapping("/metas") +// @Authorize(action = Permission.ACTION_QUERY, description = "获取元数据") +// @ApiOperation("获取数据库元数据") +// public ResponseMessage>> parseAllObject() throws Exception { +// return parseAllObject(null); +// } +// +// @GetMapping("/metas/{datasourceId}") +// @Authorize(action = Permission.ACTION_QUERY, description = "获取元数据") +// @ApiOperation("获取指定数据源的元数据") +// public ResponseMessage>> parseAllObject( +// @PathVariable +// @ApiParam("数据源ID") String datasourceId) throws Exception { +// +// DataSourceHolder.switcher().use(datasourceId); +// return ResponseMessage.ok(databaseManagerService.getMetas()); +// } @PostMapping(value = "/execute/{datasourceId}", consumes = MediaType.TEXT_PLAIN_VALUE) @Authorize(action = "execute", description = "执行SQL") diff --git a/hsweb-system/hsweb-system-database-manager/pom.xml b/hsweb-system/hsweb-system-database-manager/pom.xml index dceb47599..c53e55e5f 100644 --- a/hsweb-system/hsweb-system-database-manager/pom.xml +++ b/hsweb-system/hsweb-system-database-manager/pom.xml @@ -5,7 +5,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-api/pom.xml b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-api/pom.xml index 526333db2..0cffc3605 100644 --- a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-api/pom.xml +++ b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-datasource org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/pom.xml b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/pom.xml index dff18869d..f4e8e4674 100644 --- a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/pom.xml +++ b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-datasource org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 @@ -16,11 +16,6 @@ - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - org.hswebframework.web hsweb-commons-service-simple diff --git a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/src/main/java/org/hswebframework/web/dao/datasource/DataSourceConfigDao.java b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/src/main/java/org/hswebframework/web/dao/datasource/DataSourceConfigDao.java deleted file mode 100644 index a2adc7090..000000000 --- a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/src/main/java/org/hswebframework/web/dao/datasource/DataSourceConfigDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.dao.datasource; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.datasource.DataSourceConfigEntity; - -/** -* 数据源配置 DAO接口 -* @author hsweb-generator-online - */ -public interface DataSourceConfigDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/src/main/java/org/hswebframework/web/service/datasource/simple/SimpleDataSourceConfigService.java b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/src/main/java/org/hswebframework/web/service/datasource/simple/SimpleDataSourceConfigService.java index 9701a0c0f..3435bfe75 100644 --- a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/src/main/java/org/hswebframework/web/service/datasource/simple/SimpleDataSourceConfigService.java +++ b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/src/main/java/org/hswebframework/web/service/datasource/simple/SimpleDataSourceConfigService.java @@ -1,12 +1,9 @@ package org.hswebframework.web.service.datasource.simple; -import org.hswebframework.web.dao.datasource.DataSourceConfigDao; import org.hswebframework.web.entity.datasource.DataSourceConfigEntity; -import org.hswebframework.web.service.EnableCacheGenericEntityService; -import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.id.IDGenerator; +import org.hswebframework.web.service.EnableCacheGenericEntityService; import org.hswebframework.web.service.datasource.DataSourceConfigService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.stereotype.Service; @@ -19,17 +16,10 @@ import org.springframework.stereotype.Service; @CacheConfig(cacheNames = "data-source") public class SimpleDataSourceConfigService extends EnableCacheGenericEntityService implements DataSourceConfigService { - @Autowired - private DataSourceConfigDao dataSourceConfigDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public DataSourceConfigDao getDao() { - return dataSourceConfigDao; - } - } diff --git a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-starter/pom.xml b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-starter/pom.xml index f26c6c1ab..990f0226b 100644 --- a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-starter/pom.xml +++ b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-system-datasource org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-web/pom.xml b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-web/pom.xml index 28ca6521b..75bbf15e8 100644 --- a/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-web/pom.xml +++ b/hsweb-system/hsweb-system-datasource/hsweb-system-datasource-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-datasource org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-datasource/pom.xml b/hsweb-system/hsweb-system-datasource/pom.xml index 658df57e9..f8c45fa3a 100644 --- a/hsweb-system/hsweb-system-datasource/pom.xml +++ b/hsweb-system/hsweb-system-datasource/pom.xml @@ -5,7 +5,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml diff --git a/hsweb-system/hsweb-system-dev-tools/pom.xml b/hsweb-system/hsweb-system-dev-tools/pom.xml index e807da49d..9a3be654b 100644 --- a/hsweb-system/hsweb-system-dev-tools/pom.xml +++ b/hsweb-system/hsweb-system-dev-tools/pom.xml @@ -5,7 +5,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-api/pom.xml b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-api/pom.xml index 72614865c..e1f1db91b 100644 --- a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-api/pom.xml +++ b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dictionary org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/pom.xml b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/pom.xml index 63fffe755..b00c42650 100644 --- a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/pom.xml +++ b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dictionary org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 @@ -22,11 +22,6 @@ hsweb-commons-service-simple ${project.version} - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - \ No newline at end of file diff --git a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/SimpleDictionaryItemService.java b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/SimpleDictionaryItemService.java index 5b3a204a4..7b6eac95f 100644 --- a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/SimpleDictionaryItemService.java +++ b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/SimpleDictionaryItemService.java @@ -1,18 +1,18 @@ /* * Copyright 2019 http://www.hswebframework.org - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * + * */ package org.hswebframework.web.dictionary.simple; @@ -20,16 +20,16 @@ import org.hswebframework.utils.StringUtils; import org.hswebframework.web.dictionary.api.DictionaryItemService; import org.hswebframework.web.dictionary.api.entity.DictionaryItemEntity; import org.hswebframework.web.dictionary.api.events.ClearDictionaryCacheEvent; -import org.hswebframework.web.dictionary.simple.dao.DictionaryItemDao; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.AbstractTreeSortService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; -import java.util.Collections; import java.util.List; +import static org.hswebframework.ezorm.rdb.operator.dml.query.SortOrder.asc; + /** * 默认的服务实现 * @@ -38,8 +38,6 @@ import java.util.List; @Service("dictionaryItemService") public class SimpleDictionaryItemService extends AbstractTreeSortService implements DictionaryItemService { - @Autowired - private DictionaryItemDao dictionaryItemDao; @Autowired private ApplicationEventPublisher eventPublisher; @@ -49,11 +47,6 @@ public class SimpleDictionaryItemService extends AbstractTreeSortService implements DictionaryParserService { - @Autowired - private DictionaryParserDao dictionaryParserDao; @Autowired private DictionaryParserBuilder dictionaryParserBuilder; @@ -46,11 +43,6 @@ public class SimpleDictionaryParserService extends GenericEntityService DictionaryParser getParser(DictionaryEntity dict, String parserId) { DictionaryParserEntity entity = selectByPk(parserId); diff --git a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/dao/DictionaryDao.java b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/dao/DictionaryDao.java deleted file mode 100644 index 3aa361f15..000000000 --- a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/dao/DictionaryDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dictionary.simple.dao; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.dictionary.api.entity.DictionaryEntity; - -/** -* 数据字典 DAO接口 -* @author hsweb-generator-online - */ -public interface DictionaryDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/dao/DictionaryItemDao.java b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/dao/DictionaryItemDao.java deleted file mode 100644 index d0cc18565..000000000 --- a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/dao/DictionaryItemDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dictionary.simple.dao; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.dictionary.api.entity.DictionaryItemEntity; - -/** -* 数据字典选项 DAO接口 -* @author hsweb-generator-online - */ -public interface DictionaryItemDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/dao/DictionaryParserDao.java b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/dao/DictionaryParserDao.java deleted file mode 100644 index e03331fcc..000000000 --- a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/dao/DictionaryParserDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dictionary.simple.dao; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.dictionary.api.entity.DictionaryParserEntity; - -/** -* 数据字典解析配置 DAO接口 -* @author hsweb-generator-online - */ -public interface DictionaryParserDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-starter/pom.xml b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-starter/pom.xml index 99d21dcbd..dba43e312 100644 --- a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-starter/pom.xml +++ b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-starter/pom.xml @@ -22,7 +22,7 @@ hsweb-system-dictionary org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-web/pom.xml b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-web/pom.xml index 79f2996ed..76a9635da 100644 --- a/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-web/pom.xml +++ b/hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dictionary org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-dictionary/pom.xml b/hsweb-system/hsweb-system-dictionary/pom.xml index 29dad9d1b..6ceb95380 100644 --- a/hsweb-system/hsweb-system-dictionary/pom.xml +++ b/hsweb-system/hsweb-system-dictionary/pom.xml @@ -22,7 +22,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/pom.xml b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/pom.xml index 2e9ef2e4b..857d6ead9 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/pom.xml +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dynamic-form org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/entity/form/DictConfig.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/entity/form/DictConfig.java index 6d9b7bb3c..3d6930d7a 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/entity/form/DictConfig.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/entity/form/DictConfig.java @@ -2,11 +2,9 @@ package org.hswebframework.web.entity.form; import lombok.Getter; import lombok.Setter; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; import org.hswebframework.web.commons.bean.Bean; -import org.hswebframework.web.commons.entity.Entity; -import java.io.Serializable; import java.util.HashMap; import java.util.Map; @@ -26,6 +24,6 @@ public class DictConfig implements Bean { private Map config=new HashMap<>(); - private RDBColumnMetaData column; + private RDBColumnMetadata column; } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/DatabaseRepository.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/DatabaseRepository.java index 03196850b..ff0e8a9a7 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/DatabaseRepository.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/DatabaseRepository.java @@ -1,18 +1,18 @@ package org.hswebframework.web.service.form; -import org.hswebframework.ezorm.rdb.RDBDatabase; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; /** * 数据库仓库,用于获取默认数据库信息,指定数据源的信息以及当前激活的数据库信息 * * @author zhouhao - * @see RDBDatabase + * @see DatabaseOperator * @since 3.0 */ public interface DatabaseRepository { - RDBDatabase getDefaultDatabase(String databaseName); + DatabaseOperator getDefaultDatabase(String databaseName); - RDBDatabase getDatabase(String datasourceId,String databaseName); + DatabaseOperator getDatabase(String datasourceId,String databaseName); - RDBDatabase getCurrentDatabase(); + DatabaseOperator getCurrentDatabase(); } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/OptionalConvertBuilder.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/OptionalConvertBuilder.java index 3c0a79126..a40a8699f 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/OptionalConvertBuilder.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/OptionalConvertBuilder.java @@ -1,16 +1,15 @@ package org.hswebframework.web.service.form; -import org.hswebframework.ezorm.core.OptionConverter; -import org.hswebframework.ezorm.core.ValueConverter; +import org.hswebframework.ezorm.core.DictionaryCodec; +import org.hswebframework.ezorm.core.ValueCodec; import org.hswebframework.web.entity.form.DictConfig; -import org.hswebframework.web.entity.form.DynamicFormColumnEntity; /** * * @author zhouhao */ public interface OptionalConvertBuilder { - OptionConverter build(DictConfig dictConfig); + DictionaryCodec build(DictConfig dictConfig); - ValueConverter buildValueConverter(DictConfig dictConfig); + ValueCodec buildValueConverter(DictConfig dictConfig); } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/DatabaseInitEvent.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/DatabaseInitEvent.java index 8a36740ec..c0c430454 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/DatabaseInitEvent.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/DatabaseInitEvent.java @@ -2,7 +2,7 @@ package org.hswebframework.web.service.form.events; import lombok.AllArgsConstructor; import lombok.Getter; -import org.hswebframework.ezorm.rdb.RDBDatabase; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; /** * @author zhouhao @@ -12,6 +12,6 @@ import org.hswebframework.ezorm.rdb.RDBDatabase; public class DatabaseInitEvent { @Getter - private RDBDatabase database; + private DatabaseOperator database; } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataInsertBeforeEvent.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataInsertBeforeEvent.java index ddadd0d4f..45c5045be 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataInsertBeforeEvent.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataInsertBeforeEvent.java @@ -2,7 +2,6 @@ package org.hswebframework.web.service.form.events; import lombok.AllArgsConstructor; import lombok.Getter; -import org.hswebframework.ezorm.rdb.RDBTable; /** * @author zhouhao @@ -13,8 +12,6 @@ import org.hswebframework.ezorm.rdb.RDBTable; public class FormDataInsertBeforeEvent { private String formId; - private RDBTable table; - private T data; } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataQueryBeforeEvent.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataQueryBeforeEvent.java index 3d69aa3e3..47c3efc33 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataQueryBeforeEvent.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataQueryBeforeEvent.java @@ -2,7 +2,6 @@ package org.hswebframework.web.service.form.events; import lombok.AllArgsConstructor; import lombok.Getter; -import org.hswebframework.ezorm.rdb.RDBTable; import org.hswebframework.web.commons.entity.param.QueryParamEntity; /** @@ -14,8 +13,6 @@ import org.hswebframework.web.commons.entity.param.QueryParamEntity; public class FormDataQueryBeforeEvent { private String formId; - private RDBTable table; - private QueryParamEntity param; } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataUpdateBeforeEvent.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataUpdateBeforeEvent.java index 6cfdebd56..a2ce9b3f5 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataUpdateBeforeEvent.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataUpdateBeforeEvent.java @@ -2,7 +2,6 @@ package org.hswebframework.web.service.form.events; import lombok.AllArgsConstructor; import lombok.Getter; -import org.hswebframework.ezorm.rdb.RDBTable; /** * @author zhouhao @@ -13,8 +12,6 @@ import org.hswebframework.ezorm.rdb.RDBTable; public class FormDataUpdateBeforeEvent { private String formId; - private RDBTable table; - private T data; private Object id; diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/ColumnInitializeContext.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/ColumnInitializeContext.java index e6feecdf9..956c23fee 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/ColumnInitializeContext.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/ColumnInitializeContext.java @@ -1,6 +1,6 @@ package org.hswebframework.web.service.form.initialize; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; import org.hswebframework.web.entity.form.DynamicFormColumnEntity; /** @@ -9,5 +9,5 @@ import org.hswebframework.web.entity.form.DynamicFormColumnEntity; public interface ColumnInitializeContext extends TableInitializeContext { DynamicFormColumnEntity getColumnEntity(); - RDBColumnMetaData getColumn(); + RDBColumnMetadata getColumn(); } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/TableInitializeContext.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/TableInitializeContext.java index 39a2793af..d0eb196dd 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/TableInitializeContext.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/TableInitializeContext.java @@ -1,7 +1,7 @@ package org.hswebframework.web.service.form.initialize; -import org.hswebframework.ezorm.rdb.RDBDatabase; -import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; +import org.hswebframework.ezorm.rdb.metadata.RDBTableMetadata; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; import org.hswebframework.web.entity.form.DynamicFormEntity; /** @@ -9,10 +9,10 @@ import org.hswebframework.web.entity.form.DynamicFormEntity; */ public interface TableInitializeContext { - RDBDatabase getDatabase(); + DatabaseOperator getDatabase(); DynamicFormEntity getFormEntity(); - RDBTableMetaData getTable(); + RDBTableMetadata getTable(); } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/pom.xml b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/pom.xml index df87e94dc..8636cd55b 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/pom.xml +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dynamic-form org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 @@ -49,10 +49,5 @@ hsweb-datasource-api ${project.version} - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - \ No newline at end of file diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormColumnDao.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormColumnDao.java deleted file mode 100644 index 640f367b0..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormColumnDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.dao.form; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.form.DynamicFormColumnEntity; - -/** -* 动态表单 DAO接口 -* @author hsweb-generator-online - */ -public interface DynamicFormColumnDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormDao.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormDao.java deleted file mode 100644 index a579d384f..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormDao.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.hswebframework.web.dao.form; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.form.DynamicFormEntity; - -import java.util.concurrent.atomic.AtomicInteger; - -/** - * 动态表单 DAO接口 - * - * @author hsweb-generator-online - */ -public interface DynamicFormDao extends CrudDao { - void incrementVersion(String formId); -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormDeployLogDao.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormDeployLogDao.java deleted file mode 100644 index ae98321a9..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormDeployLogDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.dao.form; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.form.DynamicFormDeployLogEntity; - -/** -* 表单发布日志 DAO接口 -* @author hsweb-generator-online - */ -public interface DynamicFormDeployLogDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDatabaseRepository.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDatabaseRepository.java index 763bf43a8..7bdccc3dd 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDatabaseRepository.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDatabaseRepository.java @@ -1,35 +1,26 @@ package org.hswebframework.web.service.form.simple; -import org.hswebframework.ezorm.rdb.RDBDatabase; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.ezorm.rdb.meta.parser.*; -import org.hswebframework.ezorm.rdb.render.dialect.*; -import org.hswebframework.ezorm.rdb.simple.SimpleDatabase; +import org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; import org.hswebframework.web.datasource.DataSourceHolder; import org.hswebframework.web.datasource.DatabaseType; import org.hswebframework.web.datasource.DynamicDataSource; import org.hswebframework.web.service.form.DatabaseRepository; -import org.hswebframework.web.service.form.DynamicFormService; -import org.hswebframework.web.service.form.FormDeployService; -import org.hswebframework.web.service.form.events.DatabaseInitEvent; -import org.hswebframework.web.service.form.simple.cluster.ClusterDatabase; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; -import java.util.EnumMap; import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.function.Supplier; @Service public class SimpleDatabaseRepository implements DatabaseRepository { - private volatile RDBDatabase defaultDatabase = null; - private SqlExecutor sqlExecutor = null; + private volatile DatabaseOperator defaultDatabase = null; + private SyncSqlExecutor sqlExecutor = null; @Value("${hsweb.dynamic-form.cluster:false}") private boolean cluster = false; @@ -37,78 +28,43 @@ public class SimpleDatabaseRepository implements DatabaseRepository { @Autowired private ApplicationEventPublisher eventPublisher; - private final Map repository = new HashMap<>(); - private final Map> databaseMetaSuppliers = new EnumMap<>(DatabaseType.class); + private final Map repository = new HashMap<>(); @Autowired - public void setSqlExecutor(SqlExecutor sqlExecutor) { + public void setSqlExecutor(SyncSqlExecutor sqlExecutor) { this.sqlExecutor = sqlExecutor; } @PostConstruct public void init() { Objects.requireNonNull(sqlExecutor); - databaseMetaSuppliers.put(DatabaseType.oracle, () -> { - OracleRDBDatabaseMetaData metaData = new OracleRDBDatabaseMetaData(); - metaData.setParser(new OracleTableMetaParser(sqlExecutor)); - return metaData; - }); - databaseMetaSuppliers.put(DatabaseType.mysql, () -> { - MysqlRDBDatabaseMetaData metaData = new MysqlRDBDatabaseMetaData(); - metaData.setParser(new MysqlTableMetaParser(sqlExecutor)); - return metaData; - }); - - databaseMetaSuppliers.put(DatabaseType.h2, () -> { - H2RDBDatabaseMetaData metaData = new H2RDBDatabaseMetaData(); - metaData.setParser(new H2TableMetaParser(sqlExecutor)); - return metaData; - }); - databaseMetaSuppliers.put(DatabaseType.jtds_sqlserver, () -> { - MSSQLRDBDatabaseMetaData metaData = new MSSQLRDBDatabaseMetaData(); - metaData.setParser(new SqlServer2012TableMetaParser(sqlExecutor)); - return metaData; - }); - databaseMetaSuppliers.put(DatabaseType.sqlserver, databaseMetaSuppliers.get(DatabaseType.jtds_sqlserver)); - - databaseMetaSuppliers.put(DatabaseType.postgresql, () -> { - PGRDBDatabaseMetaData metaData = new PGRDBDatabaseMetaData(); - metaData.setParser(new PGSqlTableMetaParser(sqlExecutor)); - return metaData; - }); } @Override - public RDBDatabase getDefaultDatabase(String databaseName) { + public DatabaseOperator getDefaultDatabase(String databaseName) { return repository.computeIfAbsent("DEFAULT." + databaseName, id -> this.initDatabase(DataSourceHolder.defaultDatabaseType(), databaseName)); } @Override - public RDBDatabase getDatabase(String datasourceId, String databaseName) { + public DatabaseOperator getDatabase(String datasourceId, String databaseName) { DynamicDataSource dynamicDataSource = DataSourceHolder.dataSource(datasourceId); return repository.computeIfAbsent(datasourceId + "." + databaseName, id -> this.initDatabase(dynamicDataSource.getType(), databaseName)); } @Override - public RDBDatabase getCurrentDatabase() { + public DatabaseOperator getCurrentDatabase() { return repository .computeIfAbsent(DataSourceHolder.switcher().currentDataSourceId() , id -> this.initDatabase(DataSourceHolder.currentDatabaseType(), null)); } - private RDBDatabase initDatabase(DatabaseType databaseType, String databaseName) { - Supplier supplier = databaseMetaSuppliers.get(databaseType); - Objects.requireNonNull(supplier, "database type" + databaseType + " is not support"); - AbstractRDBDatabaseMetaData metaData = supplier.get(); - metaData.setDatabaseName(databaseName); - SimpleDatabase database = cluster ? - new ClusterDatabase(metaData, sqlExecutor) : - new SimpleDatabase(metaData, sqlExecutor); - database.setAutoParse(true); - eventPublisher.publishEvent(new DatabaseInitEvent(database)); - return database; + private DatabaseOperator initDatabase(DatabaseType databaseType, String databaseName) { + // TODO: 2019-09-27 + throw new UnsupportedOperationException(); +// eventPublisher.publishEvent(new DatabaseInitEvent(database)); +// return database; } } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormColumnService.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormColumnService.java index 426e68e7b..5cdca65de 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormColumnService.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormColumnService.java @@ -1,11 +1,9 @@ package org.hswebframework.web.service.form.simple; -import org.hswebframework.web.dao.form.DynamicFormColumnDao; import org.hswebframework.web.entity.form.DynamicFormColumnEntity; -import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.id.IDGenerator; +import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.service.form.DynamicFormColumnService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -16,17 +14,10 @@ import org.springframework.stereotype.Service; @Service("dynamicFormColumnService") public class SimpleDynamicFormColumnService extends GenericEntityService implements DynamicFormColumnService { - @Autowired - private DynamicFormColumnDao dynamicFormColumnDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public DynamicFormColumnDao getDao() { - return dynamicFormColumnDao; - } - } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormDeployLogService.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormDeployLogService.java index bcf2edfce..f4573964b 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormDeployLogService.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormDeployLogService.java @@ -1,22 +1,13 @@ package org.hswebframework.web.service.form.simple; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.serializer.SerializerFeature; +import org.hswebframework.ezorm.rdb.operator.dml.query.SortOrder; import org.hswebframework.web.commons.entity.DataStatus; -import org.hswebframework.web.dao.form.DynamicFormDeployLogDao; -import org.hswebframework.web.entity.form.DynamicFormColumnEntity; import org.hswebframework.web.entity.form.DynamicFormDeployLogEntity; -import org.hswebframework.web.entity.form.DynamicFormEntity; -import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.id.IDGenerator; +import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.service.form.DynamicFormDeployLogService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.Objects; /** @@ -27,26 +18,19 @@ import java.util.Objects; @Service("dynamicFormDeployLogService") public class SimpleDynamicFormDeployLogService extends GenericEntityService implements DynamicFormDeployLogService { - @Autowired - private DynamicFormDeployLogDao dynamicFormDeployLogDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public DynamicFormDeployLogDao getDao() { - return dynamicFormDeployLogDao; - } - @Override public DynamicFormDeployLogEntity selectLastDeployed(String formId) { Objects.requireNonNull(formId); DynamicFormDeployLogEntity deployed = createQuery() .where(DynamicFormDeployLogEntity.formId, formId) - .orderByDesc(DynamicFormDeployLogEntity.deployTime) - .single(); + .orderBy(SortOrder.desc(DynamicFormDeployLogEntity.deployTime)) + .fetchOne().orElse(null); if (null != deployed && DataStatus.STATUS_ENABLED.equals(deployed.getStatus())) { return deployed; } @@ -59,8 +43,8 @@ public class SimpleDynamicFormDeployLogService extends GenericEntityService RDBTable getTable(String formId) { - DynamicFormEntity form = dynamicFormService.selectByPk(formId); - if (null == form || Boolean.FALSE.equals(form.getDeployed())) { - throw new NotFoundException("表单不存在"); - } - RDBDatabase database = StringUtils.isEmpty(form.getDataSourceId()) ? - databaseRepository.getDefaultDatabase(form.getDatabaseName()) : - databaseRepository.getDatabase(form.getDataSourceId(),form.getDatabaseName()); - return database.getTable(form.getDatabaseTableName()); - } - - protected RDBDatabase getDatabase(String formId) { - DynamicFormEntity form = dynamicFormService.selectByPk(formId); - if (null == form || Boolean.FALSE.equals(form.getDeployed())) { - throw new NotFoundException("表单不存在"); - } - return StringUtils.isEmpty(form.getDataSourceId()) ? - databaseRepository.getDefaultDatabase(form.getDatabaseName()) : - databaseRepository.getDatabase(form.getDataSourceId(),form.getDatabaseName()); - } - - @Override - @Transactional(readOnly = true) - @SneakyThrows - public PagerResult selectPager(String formId, QueryParamEntity paramEntity) { - RDBTable table = getTable(formId); - RDBQuery query = table.createQuery(); - int total = query.setParam(paramEntity).total(); - if (total == 0) { - return PagerResult.empty(); - } - paramEntity.rePaging(total); - List list = query.setParam(paramEntity).list(paramEntity.getPageIndex(), paramEntity.getPageSize()); - return PagerResult.of(total, list, paramEntity); - } - - @Override - @Transactional(readOnly = true) - @SneakyThrows - public List select(String formId, QueryParamEntity paramEntity) { - RDBTable table = getTable(formId); - RDBQuery query = table.createQuery(); - return query.setParam(paramEntity).list(); - } - - @Override - @Transactional(readOnly = true) - @SneakyThrows - public T selectSingle(String formId, QueryParamEntity paramEntity) { - RDBTable table = getTable(formId); - RDBQuery query = table.createQuery(); - return query.setParam(paramEntity).single(); - } - - @Override - @Transactional(readOnly = true) - @SneakyThrows - public int count(String formId, QueryParamEntity paramEntity) { - RDBTable table = getTable(formId); - RDBQuery query = table.createQuery(); - return query.setParam(paramEntity).total(); - } - - @Override - @SneakyThrows - public int update(String formId, UpdateParamEntity paramEntity) { - if (Objects.requireNonNull(paramEntity).getTerms().isEmpty()) { - throw new UnsupportedOperationException("不能执行无条件的更新操作"); - } - RDBTable table = getTable(formId); - Update update = table.createUpdate(); - return update.setParam(paramEntity).exec(); - } - - @Override - @SneakyThrows - public T insert(String formId, T entity) { - RDBTable table = getTable(formId); - Insert insert = table.createInsert(); - eventPublisher.publishEvent(new FormDataInsertBeforeEvent<>(formId, table, entity)); - insert.value(entity).exec(); - return entity; - } - - private String getIdProperty(RDBTableMetaData tableMetaData) { - return tableMetaData.getColumns() - .stream() - .filter(RDBColumnMetaData::isPrimaryKey) - .findFirst() - .map(RDBColumnMetaData::getAlias) - .orElseThrow(() -> new BusinessException("表[" + tableMetaData.getComment() + "]未设置主键字段")); - } - - @SneakyThrows - protected Object getExistingDataId(String formId, T data) { - RDBTable table = getTable(formId); - String triggerName = "check-data-existing"; - - boolean useTrigger = table.getMeta().triggerIsSupport(triggerName); - String idProperty = getIdProperty(table.getMeta()); - //使用触发器来判断是否存在重复数据 - if (useTrigger) { - Map triggerContext = new HashMap<>(); - triggerContext.put("table", table); - triggerContext.put("database", getDatabase(formId)); - triggerContext.put("data", data); - Object result = table.getMeta().on(triggerName, triggerContext); - if (result instanceof String) { - return result; - } - if (result instanceof Map) { - Object id = ((Map) result).get(idProperty); - if (id == null) { - log.error("table:[{}]触发器返回了数据:[{}],但是不包含主键字段:[{}]", - table.getMeta().getName(), - data, - idProperty); - throw new BusinessException("数据错误,请联系管理员"); - } - return id; - } - } else { - Map mapData = FastBeanCopier.copy(data, new HashMap<>()); - Object id = mapData.get(idProperty); - if (null == id) { - return null; - } - Object existing = selectSingle(formId, QueryParamEntity.single(idProperty, id).includes(idProperty)); - if (null != existing) { - mapData = FastBeanCopier.copy(data, new HashMap<>()); - return mapData.get(idProperty); - } - } - - return null; - - } - - @Override - @SneakyThrows - public T saveOrUpdate(String formId, T data) { - Objects.requireNonNull(formId, "表单ID不能为空"); - Object id = getExistingDataId(formId, data); - if (null == id) { - insert(formId, data); - } else { - updateById(formId, id, data); - } - return data; - } - - @Override - @SneakyThrows - public int delete(String formId, DeleteParamEntity paramEntity) { - if (Objects.requireNonNull(paramEntity).getTerms().isEmpty()) { - throw new UnsupportedOperationException("不能执行无条件的删除操作"); - } - RDBTable table = getTable(formId); - Delete delete = table.createDelete(); - return delete.setParam(paramEntity).exec(); - } - - @Override - @SneakyThrows - public int deleteById(String formId, Object id) { - Objects.requireNonNull(id, "主键不能为空"); - RDBTable table = getTable(formId); - return table.createDelete() - .where(getIdProperty(table.getMeta()), id) - .exec(); - } - - @Override - @SneakyThrows - public T selectById(String formId, Object id) { - Objects.requireNonNull(id, "主键不能为空"); - RDBTable table = getTable(formId); - return table.createQuery() - .where(getIdProperty(table.getMeta()), id) - .single(); - } - - @Override - @SneakyThrows - public T updateById(String formId, Object id, T data) { - Objects.requireNonNull(id, "主键不能为空"); - RDBTable table = getTable(formId); - - eventPublisher.publishEvent(new FormDataUpdateBeforeEvent<>(formId, table, data, id)); - - table.createUpdate() - .set(data) - .where(getIdProperty(table.getMeta()), id) - .exec(); - return data; - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormService.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormService.java index 977c01622..299d45b2b 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormService.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormService.java @@ -1,23 +1,22 @@ package org.hswebframework.web.service.form.simple; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import org.apache.commons.codec.digest.DigestUtils; -import org.hswebframework.ezorm.core.ObjectWrapperFactory; -import org.hswebframework.ezorm.core.Trigger; -import org.hswebframework.ezorm.core.ValidatorFactory; -import org.hswebframework.ezorm.core.ValueConverter; -import org.hswebframework.ezorm.rdb.RDBDatabase; -import org.hswebframework.ezorm.rdb.meta.Correlation; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; -import org.hswebframework.ezorm.rdb.meta.converter.*; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.ezorm.rdb.simple.trigger.ScriptTraggerSupport; -import org.hswebframework.expands.script.engine.DynamicScriptEngine; -import org.hswebframework.expands.script.engine.DynamicScriptEngineFactory; -import org.hswebframework.web.BusinessException; +import org.hswebframework.ezorm.core.OriginalValueCodec; +import org.hswebframework.ezorm.core.RuntimeDefaultValue; +import org.hswebframework.ezorm.core.ValueCodec; +import org.hswebframework.ezorm.rdb.codec.BlobValueCodec; +import org.hswebframework.ezorm.rdb.codec.DateTimeCodec; +import org.hswebframework.ezorm.rdb.codec.JsonValueCodec; +import org.hswebframework.ezorm.rdb.codec.NumberValueCodec; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; +import org.hswebframework.ezorm.rdb.metadata.RDBSchemaMetadata; +import org.hswebframework.ezorm.rdb.metadata.RDBTableMetadata; +import org.hswebframework.ezorm.rdb.metadata.dialect.Dialect; +import org.hswebframework.ezorm.rdb.operator.DatabaseOperator; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.NativeSql; +import org.hswebframework.ezorm.rdb.operator.dml.query.SortOrder; +import org.hswebframework.web.NotFoundException; import org.hswebframework.web.commons.entity.DataStatus; import org.hswebframework.web.dao.form.DynamicFormColumnDao; import org.hswebframework.web.dao.form.DynamicFormDao; @@ -30,9 +29,7 @@ import org.hswebframework.web.service.DefaultDSLUpdateService; import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.service.form.*; import org.hswebframework.web.service.form.events.FormDeployEvent; -import org.hswebframework.web.service.form.initialize.ColumnInitializeContext; import org.hswebframework.web.service.form.initialize.DynamicFormInitializeCustomizer; -import org.hswebframework.web.service.form.initialize.TableInitializeContext; import org.hswebframework.web.service.form.simple.dict.EnumDictValueConverter; import org.hswebframework.web.validator.group.CreateGroup; import org.hswebframework.web.validator.group.UpdateGroup; @@ -46,16 +43,18 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.math.BigInteger; import java.sql.JDBCType; -import java.sql.SQLException; +import java.sql.SQLType; import java.util.*; import java.util.stream.Collectors; +import static org.hswebframework.ezorm.core.meta.DefaultObjectType.database; +import static org.hswebframework.ezorm.rdb.operator.dml.query.SortOrder.*; + /** * 默认的服务实现 * @@ -75,12 +74,6 @@ public class SimpleDynamicFormService extends GenericEntityService initializeCustomizers; @Autowired - private ValidatorFactory validatorFactory; - - @Autowired(required = false) - private ObjectWrapperFactory objectWrapperFactory; + private SyncRepository formColumnDao; @Autowired private ApplicationEventPublisher eventPublisher; @@ -107,11 +97,6 @@ public class SimpleDynamicFormService extends GenericEntityService this.deploy(form.getId())); } @@ -202,11 +187,13 @@ public class SimpleDynamicFormService extends GenericEntityService new NotFoundException("表单不存在")); + assertNotNull(oldColumn); DefaultDSLDeleteService.createDelete(formColumnDao) .where(DynamicFormDeployLogEntity.id, formId) - .exec(); + .execute(); return oldColumn; } @@ -332,7 +324,7 @@ public class SimpleDynamicFormService extends GenericEntityService columns = selectColumnsByFormId(formId); deploy(formEntity, columns, true); - createUpdate().set(DynamicFormEntity.deployed, true).where(DynamicFormEntity.id, formId).exec(); + createUpdate().set(DynamicFormEntity.deployed, true).where(DynamicFormEntity.id, formId).execute(); try { dynamicFormDeployLogService.insert(createDeployLog(formEntity, columns)); eventPublisher.publishEvent(new FormDeployEvent(formId)); @@ -426,161 +418,77 @@ public class SimpleDynamicFormService extends GenericEntityService columns, boolean updateMeta) { - RDBDatabase database = StringUtils.isEmpty(form.getDataSourceId()) - ? databaseRepository.getDefaultDatabase(form.getDatabaseName()) - : databaseRepository.getDatabase(form.getDataSourceId(),form.getDatabaseName()); - - initDatabase(database); - RDBTableMetaData metaData = buildTable(database, form, columns); - try { - if (!database.getMeta().getParser().tableExists(metaData.getName())) { - database.createTable(metaData); - } else { - if (!updateMeta) { - database.reloadTable(metaData); - } else { - database.alterTable(metaData); - } - } - } catch (SQLException e) { - throw new DynamicFormException("部署失败:" + e.getMessage(), e); - } +// RDBDatabase database = StringUtils.isEmpty(form.getDataSourceId()) +// ? databaseRepository.getDefaultDatabase(form.getDatabaseName()) +// : databaseRepository.getDatabase(form.getDataSourceId(),form.getDatabaseName()); +// +// +// RDBTableMetaData metaData = buildTable(database, form, columns); +// try { +// if (!database.getMeta().getParser().tableExists(metaData.getName())) { +// database.createTable(metaData); +// } else { +// if (!updateMeta) { +// database.reloadTable(metaData); +// } else { +// database.alterTable(metaData); +// } +// } +// } catch (SQLException e) { +// throw new DynamicFormException("部署失败:" + e.getMessage(), e); +// } } - protected Set buildCorrelations(String correlations) { - if (StringUtils.isEmpty(correlations)) { - return new LinkedHashSet<>(); - } - JSONArray correlationsConfig = JSON.parseArray(correlations); - Set correlations1 = new LinkedHashSet<>(); - for (int i = 0; i < correlationsConfig.size(); i++) { - JSONObject single = correlationsConfig.getJSONObject(i); - - String target = single.getString("target"); - String alias = single.getString("alias"); - String condition = single.getString("condition"); - Objects.requireNonNull(target); - Objects.requireNonNull(condition); - Correlation correlation = new Correlation(target, alias, condition); - correlation.setJoin(Correlation.JOIN.valueOf(String.valueOf(single.getOrDefault("join", "LEFT")).toUpperCase())); - JSONObject properties = single.getJSONObject("properties"); - - if (properties != null) { - properties.forEach(correlation::setProperty); - } - correlations1.add(correlation); - } - - return correlations1; - - } - - protected Map buildTrigger(String config) { - if (StringUtils.isEmpty(config)) { - return new HashMap<>(); - } - JSONArray triggerConfig = JSON.parseArray(config); - Map triggers = new HashMap<>(); - for (int i = 0; i < triggerConfig.size(); i++) { - JSONObject single = triggerConfig.getJSONObject(i); - String trigger = single.getString("trigger"); - String language = single.getString("language"); - String script = single.getString("script"); - String scriptId = DigestUtils.md5Hex(script); - try { - DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine(language); - if (engine == null) { - throw new UnsupportedOperationException("not support script language : " + language); - } - if (!engine.compiled(scriptId)) { - engine.compile(scriptId, script); - } - Trigger singleTrigger = new ScriptTraggerSupport(engine, scriptId); - triggers.put(trigger, singleTrigger); - } catch (Exception e) { - throw new BusinessException("compile script error :" + e.getMessage(), e); - } - } - return triggers; - } - - protected RDBTableMetaData buildTable(RDBDatabase database, DynamicFormEntity form, List columns) { - RDBTableMetaData metaData = new RDBTableMetaData(); - metaData.setComment(form.getDescribe()); - metaData.setName(form.getDatabaseTableName()); - if (null != form.getProperties()) { - metaData.setProperties(form.getProperties()); - } - metaData.setProperty("version", form.getVersion()); - metaData.setProperty("formId", form.getId()); - - metaData.setAlias(form.getAlias()); - metaData.setCorrelations(buildCorrelations(form.getCorrelations())); - metaData.setDatabaseMetaData(database.getMeta()); - buildTrigger(form.getTriggers()).forEach(metaData::on); + protected RDBTableMetadata buildTable(RDBSchemaMetadata schema, DynamicFormEntity form, List columns) { + RDBTableMetadata table = schema.newTable(form.getDatabaseTableName()); + table.setComment(form.getDescribe()); + table.setAlias(form.getAlias()); columns.forEach(column -> { - RDBColumnMetaData columnMeta = new RDBColumnMetaData(); + RDBColumnMetadata columnMeta = table.newColumn(); columnMeta.setName(column.getColumnName()); columnMeta.setAlias(column.getAlias()); columnMeta.setComment(column.getDescribe()); columnMeta.setLength(column.getLength() == null ? 0 : column.getLength()); columnMeta.setPrecision(column.getPrecision() == null ? 0 : column.getPrecision()); columnMeta.setScale(column.getScale() == null ? 0 : column.getScale()); - columnMeta.setJdbcType(JDBCType.valueOf(column.getJdbcType())); - columnMeta.setJavaType(getJavaType(column.getJavaType())); + columnMeta.setJdbcType(JDBCType.valueOf(column.getJdbcType()), getJavaType(column.getJavaType())); + columnMeta.setProperties(column.getProperties() == null ? new HashMap<>() : column.getProperties()); - if (!CollectionUtils.isEmpty(column.getValidator())) { - columnMeta.setValidator(new HashSet<>(column.getValidator())); - } - if (StringUtils.isEmpty(column.getDataType())) { - Dialect dialect = database.getMeta().getDialect(); - columnMeta.setDataType(dialect.buildDataType(columnMeta)); - } else { - columnMeta.setDataType(column.getDataType()); - } - columnMeta.setValueConverter(initColumnValueConvert(columnMeta.getJdbcType(), columnMeta.getJavaType())); + + columnMeta.setValueCodec(initColumnValueConvert(columnMeta.getType().getSqlType(), columnMeta.getJavaType())); if (optionalConvertBuilder != null && null != column.getDictConfig()) { try { DictConfig config = JSON.parseObject(column.getDictConfig(), DictConfig.class); config.setColumn(columnMeta); - columnMeta.setOptionConverter(optionalConvertBuilder.build(config)); - ValueConverter converter = optionalConvertBuilder.buildValueConverter(config); + + columnMeta.setDictionaryCodec(optionalConvertBuilder.build(config)); + ValueCodec converter = optionalConvertBuilder.buildValueConverter(config); if (null != converter) { - columnMeta.setValueConverter(converter); + columnMeta.setValueCodec(converter); } } catch (Exception e) { logger.warn("创建字典转换器失败", e); } } - customColumnSetting(database, form, metaData, column, columnMeta); - metaData.addColumn(columnMeta); + table.addColumn(columnMeta); }); - if (objectWrapperFactory != null) { - metaData.setObjectWrapper(objectWrapperFactory.createObjectWrapper(metaData)); - } - metaData.setValidator(validatorFactory.createValidator(metaData)); - customTableSetting(database, form, metaData); //没有主键并且没有id字段 - if (metaData.getColumns().stream().noneMatch(RDBColumnMetaData::isPrimaryKey) && metaData.findColumn("id") == null) { - RDBColumnMetaData primaryKey = createPrimaryKeyColumn(); - Dialect dialect = database.getMeta().getDialect(); - primaryKey.setDataType(dialect.buildDataType(primaryKey)); - metaData.addColumn(primaryKey); + if (table.getColumns().stream().noneMatch(RDBColumnMetadata::isPrimaryKey) &&! table.findColumn("id").isPresent()) { + table.addColumn(createPrimaryKeyColumn(table)); } - return metaData; + return table; } - protected RDBColumnMetaData createPrimaryKeyColumn() { - RDBColumnMetaData id = new RDBColumnMetaData(); + protected RDBColumnMetadata createPrimaryKeyColumn(RDBTableMetadata schemaMetadata) { + RDBColumnMetadata id = schemaMetadata.newColumn(); id.setName("id"); - id.setJdbcType(JDBCType.VARCHAR); - id.setJavaType(String.class); + id.setJdbcType(JDBCType.VARCHAR, String.class); id.setLength(32); - id.setDefaultValue(IDGenerator.MD5::generate); + id.setDefaultValue((RuntimeDefaultValue) IDGenerator.MD5::generate); id.setComment("主键"); id.setPrimaryKey(true); id.setNotNull(true); @@ -588,111 +496,37 @@ public class SimpleDynamicFormService extends GenericEntityService customizer.customTableSetting(context)); - } - } - - protected void customColumnSetting(RDBDatabase database - , DynamicFormEntity formEntity - , RDBTableMetaData table - , DynamicFormColumnEntity columnEntity - , RDBColumnMetaData column) { - ColumnInitializeContext context = new ColumnInitializeContext() { - @Override - public DynamicFormColumnEntity getColumnEntity() { - return columnEntity; - } - - @Override - public RDBColumnMetaData getColumn() { - return column; - } - - @Override - public RDBDatabase getDatabase() { - return database; - } - - @Override - public DynamicFormEntity getFormEntity() { - return formEntity; - } - - @Override - public RDBTableMetaData getTable() { - return table; - } - }; - if (!CollectionUtils.isEmpty(initializeCustomizers)) { - initializeCustomizers.forEach(customer -> customer.customTableColumnSetting(context)); - } - } - - protected ValueConverter initColumnValueConvert(JDBCType jdbcType, Class javaType) { + protected ValueCodec initColumnValueConvert(SQLType jdbcType, Class javaType) { boolean isBasicClass = !classMapping .values() - .contains(javaType) || javaType != Map.class || javaType != List.class; + .contains(javaType) + && javaType != Map.class + && javaType != List.class; if (javaType.isEnum() && EnumDict.class.isAssignableFrom(javaType)) { return new EnumDictValueConverter(() -> (List) Arrays.asList(javaType.getEnumConstants())); } - switch (jdbcType) { + switch (((JDBCType) jdbcType)) { case BLOB: if (!isBasicClass) { - return new JSONValueConverter(javaType, new BlobValueConverter()); + return JsonValueCodec.of(javaType); } - return new BlobValueConverter(); - case CLOB: - if (!isBasicClass) { - return new JSONValueConverter(javaType, new ClobValueConverter()); - } - return new ClobValueConverter(); + return BlobValueCodec.INSTANCE; case NUMERIC: case BIGINT: case INTEGER: case SMALLINT: case TINYINT: - return new NumberValueConverter(javaType); + return new NumberValueCodec(javaType); case DATE: case TIMESTAMP: case TIME: - return new DateTimeConverter("yyyy-MM-dd HH:mm:ss", javaType); + return new DateTimeCodec("yyyy-MM-dd HH:mm:ss", javaType); default: - if (!isBasicClass) { - return new JSONValueConverter(javaType, new DefaultValueConverter()); - } - if (javaType == String.class && (jdbcType == JDBCType.VARCHAR || jdbcType == JDBCType.NVARCHAR)) { - return new DefaultValueConverter() { - @Override - public Object getData(Object value) { - if (value instanceof Number) { - return value.toString(); - } - return super.getData(value); - } - }; - } - return new DefaultValueConverter(); + + + return OriginalValueCodec.INSTANCE; } } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/cluster/ClusterDatabase.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/cluster/ClusterDatabase.java deleted file mode 100644 index 741de5543..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/cluster/ClusterDatabase.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.hswebframework.web.service.form.simple.cluster; - -import org.hswebframework.ezorm.rdb.RDBTable; -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.ezorm.rdb.meta.RDBDatabaseMetaData; -import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; -import org.hswebframework.ezorm.rdb.simple.SimpleDatabase; - -import java.util.function.Consumer; -import java.util.function.Function; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -public class ClusterDatabase extends SimpleDatabase { - public ClusterDatabase(RDBDatabaseMetaData metaData, SqlExecutor sqlExecutor) { - super(metaData, sqlExecutor); - } - - private volatile Consumer versionChanged; - - private volatile Function latestVersionGetter; - - public void setVersionChanged(Consumer versionChanged) { - this.versionChanged = versionChanged; - } - - public void setLatestVersionGetter(Function latestVersionGetter) { - this.latestVersionGetter = latestVersionGetter; - } - - @Override - public RDBTable getTable(String name) { - RDBTable table = super.getTable(name); - if (versionChanged == null || latestVersionGetter == null) { - return table; - } - if (table != null) { - long version = table.getMeta().getProperty("version", -1L).getValue(); - if (version == -1L) { - return table; - } - if (version != latestVersionGetter.apply(table.getMeta())) { - versionChanged.accept(table.getMeta()); - } - return super.getTable(name); - } - return null; - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/cluster/ClusterDatabaseInit.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/cluster/ClusterDatabaseInit.java deleted file mode 100644 index 3983be5fe..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/cluster/ClusterDatabaseInit.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.hswebframework.web.service.form.simple.cluster; - -import org.hswebframework.ezorm.rdb.RDBDatabase; -import org.hswebframework.web.entity.form.DynamicFormColumnBindEntity; -import org.hswebframework.web.service.form.DynamicFormService; -import org.hswebframework.web.service.form.FormDeployService; -import org.hswebframework.web.service.form.events.DatabaseInitEvent; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Component; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@Component -public class ClusterDatabaseInit { - - @Autowired - private DynamicFormService dynamicFormService; - - @Autowired - private FormDeployService formDeployService; - - @EventListener - public void handleDatabaseInit(DatabaseInitEvent event) { - RDBDatabase database = event.getDatabase(); - - if (database instanceof ClusterDatabase) { - ClusterDatabase clusterDatabase = ((ClusterDatabase) database); - clusterDatabase.setVersionChanged(meta -> { - String formId = meta.getProperty("formId").getValue(); - if (formId != null) { - DynamicFormColumnBindEntity entity = dynamicFormService.selectLatestDeployed(formId); - if (null != entity) { - formDeployService.deploy(entity.getForm(), entity.getColumns(), false); - } - } - }); - clusterDatabase.setLatestVersionGetter(meta -> { - String formId = meta.getProperty("formId").getValue(); - if (formId != null) { - return dynamicFormService.selectDeployedVersion(formId); - } - return -1L; - }); - } - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/convert/SmartValueConverter.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/convert/SmartValueConverter.java deleted file mode 100644 index bd71e2262..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/convert/SmartValueConverter.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.hswebframework.web.service.form.simple.convert; - -import org.hswebframework.ezorm.core.ValueConverter; - -import java.util.List; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -public class SmartValueConverter implements ValueConverter { - - List converters; - - public SmartValueConverter(List converters) { - this.converters = converters; - } - - @Override - public Object getData(Object value) { - for (ValueConverter converter : converters) { - value = converter.getData(value); - } - return value; - } - - @Override - public Object getValue(Object data) { - for (ValueConverter converter : converters) { - data = converter.getData(data); - } - return data; - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/DefaultOptionalConvertBuilder.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/DefaultOptionalConvertBuilder.java index 653db2460..8cadad9db 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/DefaultOptionalConvertBuilder.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/DefaultOptionalConvertBuilder.java @@ -1,7 +1,7 @@ package org.hswebframework.web.service.form.simple.dict; -import org.hswebframework.ezorm.core.OptionConverter; -import org.hswebframework.ezorm.core.ValueConverter; +import org.hswebframework.ezorm.core.DictionaryCodec; +import org.hswebframework.ezorm.core.ValueCodec; import org.hswebframework.web.entity.form.DictConfig; import org.hswebframework.web.service.form.OptionalConvertBuilder; import org.springframework.beans.factory.annotation.Autowired; @@ -22,7 +22,7 @@ public class DefaultOptionalConvertBuilder implements OptionalConvertBuilder { private List strategies; @Override - public OptionConverter build(DictConfig dictConfig) { + public DictionaryCodec build(DictConfig dictConfig) { if(CollectionUtils.isEmpty(strategies)){ return null; } @@ -34,7 +34,7 @@ public class DefaultOptionalConvertBuilder implements OptionalConvertBuilder { } @Override - public ValueConverter buildValueConverter(DictConfig dictConfig) { + public ValueCodec buildValueConverter(DictConfig dictConfig) { if(CollectionUtils.isEmpty(strategies)){ return null; } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/DictionaryOptionalConvertBuilderStrategy.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/DictionaryOptionalConvertBuilderStrategy.java index 25e3f31b0..1d010aad2 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/DictionaryOptionalConvertBuilderStrategy.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/DictionaryOptionalConvertBuilderStrategy.java @@ -1,11 +1,9 @@ package org.hswebframework.web.service.form.simple.dict; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import org.hswebframework.ezorm.core.OptionConverter; -import org.hswebframework.ezorm.core.ValueConverter; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.web.dao.mybatis.mapper.dict.DictInTermTypeMapper; +import org.hswebframework.ezorm.core.DictionaryCodec; +import org.hswebframework.ezorm.core.ValueCodec; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; import org.hswebframework.web.dict.DictDefineRepository; import org.hswebframework.web.dict.EnumDict; import org.hswebframework.web.entity.form.DictConfig; @@ -36,7 +34,7 @@ public class DictionaryOptionalConvertBuilderStrategy implements OptionalConvert @Override - public OptionConverter build(DictConfig dictConfig) { + public DictionaryCodec build(DictConfig dictConfig) { JSONObject conf = new JSONObject(dictConfig.getConfig()); String dictId = conf.getString("dictId"); String fieldName = dictConfig.getToField(); @@ -54,7 +52,7 @@ public class DictionaryOptionalConvertBuilderStrategy implements OptionalConvert } @Override - public ValueConverter buildValueConverter(DictConfig dictConfig) { + public ValueCodec buildValueConverter(DictConfig dictConfig) { JSONObject conf = new JSONObject(dictConfig.getConfig()); String dictId = conf.getString("dictId"); boolean multi = !"false".equalsIgnoreCase(conf.getString("multi")); @@ -64,10 +62,10 @@ public class DictionaryOptionalConvertBuilderStrategy implements OptionalConvert EnumDictValueConverter> converter = new EnumDictValueConverter<>(supplier); converter.setMulti(multi); - RDBColumnMetaData column = dictConfig.getColumn(); - if (multi && (column.getJdbcType() == JDBCType.NUMERIC || column.getJdbcType() == JDBCType.BIGINT)) { + RDBColumnMetadata column = dictConfig.getColumn(); + if (multi && (column.getSqlType() == JDBCType.NUMERIC || column.getSqlType() == JDBCType.BIGINT)) { if (supplier.get().size() < 64) { - column.setProperty(DictInTermTypeMapper.USE_DICT_MASK_FLAG, true); + // column.setProperty(DictInTermTypeMapper.USE_DICT_MASK_FLAG, true); converter.setDataToMask(true); } else { throw new UnsupportedOperationException("数据类型为数字,并且数据字典选项数量超过64个,不支持多选!"); diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/EnumDictOptionConverter.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/EnumDictOptionConverter.java index 29fd23140..aac183c53 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/EnumDictOptionConverter.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/EnumDictOptionConverter.java @@ -3,7 +3,7 @@ package org.hswebframework.web.service.form.simple.dict; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import org.hswebframework.ezorm.core.OptionConverter; +import org.hswebframework.ezorm.core.DictionaryCodec; import org.hswebframework.web.dict.EnumDict; import java.util.*; @@ -13,7 +13,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; @Slf4j -public class EnumDictOptionConverter implements OptionConverter { +public class EnumDictOptionConverter implements DictionaryCodec { protected Supplier> allOptionSupplier; @@ -37,8 +37,8 @@ public class EnumDictOptionConverter implements OptionConver } @Override - public Object getOptions() { - return allOptionSupplier.get(); + public Set getItems() { + return new HashSet<>(allOptionSupplier.get()); } @Override @@ -47,14 +47,14 @@ public class EnumDictOptionConverter implements OptionConver } @Override - public Object converterData(Object o) { + public Object encode(Object o) { //什么也不做,EnumDictValueConverter会进行处理 return o; } @Override @SuppressWarnings("all") - public Object converterValue(Object o) { + public Object decode(Object o) { List values; if (o instanceof String) { values = splitter.apply((String) o); diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/EnumDictValueConverter.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/EnumDictValueConverter.java index f708e9796..34efcb198 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/EnumDictValueConverter.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/EnumDictValueConverter.java @@ -3,7 +3,7 @@ package org.hswebframework.web.service.form.simple.dict; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import org.hswebframework.ezorm.core.ValueConverter; +import org.hswebframework.ezorm.core.ValueCodec; import org.hswebframework.web.dict.EnumDict; import org.springframework.util.StringUtils; @@ -14,7 +14,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; @Slf4j -public class EnumDictValueConverter implements ValueConverter { +public class EnumDictValueConverter implements ValueCodec { protected Supplier> allOptionSupplier; @@ -59,7 +59,7 @@ public class EnumDictValueConverter implements ValueConverte @Override @SuppressWarnings("all") - public Object getData(Object value) { + public Object encode(Object value) { if (StringUtils.isEmpty(value)) { return value; } @@ -99,7 +99,7 @@ public class EnumDictValueConverter implements ValueConverte } @Override - public Object getValue(Object data) { + public Object decode(Object data) { if (multi) { if (dataToMask) { Long mask = null; diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/OptionalConvertBuilderStrategy.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/OptionalConvertBuilderStrategy.java index 295f4659e..2a05d3bfb 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/OptionalConvertBuilderStrategy.java +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/dict/OptionalConvertBuilderStrategy.java @@ -1,7 +1,7 @@ package org.hswebframework.web.service.form.simple.dict; -import org.hswebframework.ezorm.core.OptionConverter; -import org.hswebframework.ezorm.core.ValueConverter; +import org.hswebframework.ezorm.core.DictionaryCodec; +import org.hswebframework.ezorm.core.ValueCodec; import org.hswebframework.web.entity.form.DictConfig; /** @@ -21,7 +21,7 @@ public interface OptionalConvertBuilderStrategy { * @param dictConfig 配置内容 * @return 转换器对象 */ - OptionConverter build(DictConfig dictConfig); + DictionaryCodec build(DictConfig dictConfig); - ValueConverter buildValueConverter(DictConfig dictConfig); + ValueCodec buildValueConverter(DictConfig dictConfig); } diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/DynamicBeanValidator.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/DynamicBeanValidator.java deleted file mode 100644 index c81f65855..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/DynamicBeanValidator.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator; - -import org.hswebframework.ezorm.core.Validator; -import org.hswebframework.web.bean.FastBeanCopier; -import org.hswebframework.web.commons.bean.ValidateBean; -import org.hswebframework.web.validator.group.CreateGroup; -import org.hswebframework.web.validator.group.UpdateGroup; - -import java.util.function.Supplier; - -public class DynamicBeanValidator implements Validator { - - protected Supplier beanSupplier; - - public DynamicBeanValidator(Supplier beanSupplier) { - this.beanSupplier = beanSupplier; - } - - @Override - public boolean validate(Object source, Operation operation) { - ValidateBean validateBean = beanSupplier.get(); - FastBeanCopier.copy(source, validateBean); - if (operation == Operation.INSERT) { - validateBean.tryValidate(CreateGroup.class); - } else { - validateBean.tryValidate(UpdateGroup.class); - } - return true; - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/DynamicBeanValidatorFactory.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/DynamicBeanValidatorFactory.java deleted file mode 100644 index 392a5a6d6..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/DynamicBeanValidatorFactory.java +++ /dev/null @@ -1,183 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import javassist.CtField; -import javassist.bytecode.AnnotationsAttribute; -import javassist.bytecode.ConstPool; -import javassist.bytecode.annotation.Annotation; -import javassist.bytecode.annotation.MemberValue; -import lombok.Getter; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; -import org.hswebframework.ezorm.core.Validator; -import org.hswebframework.ezorm.core.ValidatorFactory; -import org.hswebframework.ezorm.core.meta.ColumnMetaData; -import org.hswebframework.ezorm.core.meta.TableMetaData; -import org.hswebframework.utils.StringUtils; -import org.hswebframework.web.proxy.Proxy; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.util.Assert; -import org.springframework.util.CollectionUtils; - -import java.util.*; -import java.util.stream.Collectors; - -import static org.hswebframework.web.proxy.Proxy.createMemberValue; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@Component -@Slf4j -public class DynamicBeanValidatorFactory implements ValidatorFactory { - - @Autowired - private List strategies; - - private String createSetPropertyCode(TableMetaData tableMetaData) { - StringBuilder builder = new StringBuilder(); - builder.append("public void setProperty(String property,Object value){\n"); - int index = 0; - for (ColumnMetaData column : tableMetaData.getColumns()) { - String propertyName = column.getAlias(); - Class type = column.getJavaType(); - if (index++ > 0) { - builder.append("\nelse "); - } - builder.append("if(property.intern()==\"") - .append(propertyName) - .append("\"||property.intern()==\"") - .append(column.getName()).append("\"){\n") - .append("this.set") - .append(StringUtils.toUpperCaseFirstOne(propertyName)) - .append("((").append(type.getName()).append(")") - .append("org.hswebframework.web.bean.FastBeanCopier.DEFAULT_CONVERT.convert(value,") - .append(type.getName()) - .append(".class,null));") - .append("\n}"); - } - builder.append("}"); - return builder.toString(); - } - - private String createGetPropertyCode(TableMetaData tableMetaData) { - StringBuilder builder = new StringBuilder(); - int index = 0; - builder.append("public Object getProperty(String property){\n"); - for (ColumnMetaData column : tableMetaData.getColumns()) { - String propertyName = column.getAlias(); - if (index++ > 0) { - builder.append("\nelse "); - } - builder.append("if(property.intern()==\"") - .append(propertyName) - .append("\"||property.intern()==\"") - .append(column.getName()) - .append("\"){\n") - .append("return this.get") - .append(StringUtils.toUpperCaseFirstOne(propertyName)) - .append("();") - .append("\n}"); - - } - builder.append("\nreturn null;\n}"); - return builder.toString(); - } - - - protected List createValidatorAnnotation(Set config) { - if (CollectionUtils.isEmpty(config)) { - return new java.util.ArrayList<>(); - } - - return config.stream() - .map(this::createValidatorAnnotation) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - - protected JSR303AnnotationInfo createValidatorAnnotation(String config) { - //JSON - if (config.startsWith("{")) { - JSONObject jsonConfig = JSON.parseObject(config); - String type = jsonConfig.getString("type"); - return strategies.stream().filter(strategy -> strategy.support(type)) - .findFirst() - .map(strategy -> strategy.parse(jsonConfig)) - .orElse(null); - } - - return null; - } - - @Override - public Validator createValidator(TableMetaData tableMetaData) { - Proxy proxy = Proxy.create(MapBean.class); - StringBuilder keySet = new StringBuilder("public java.util.Set keySet(){\n return new java.util.HashSet(java.util.Arrays.asList(new String[]{"); - int index = 0; - for (ColumnMetaData column : tableMetaData.getColumns()) { - String propertyName = column.getAlias(); - Class type = column.getJavaType(); - String typeName = type.getName(); - - if (index++ > 0) { - keySet.append(","); - } - - keySet.append("\"") - .append(propertyName) - .append("\""); - - proxy.custom(ctClass -> { - try { - CtField ctField = CtField.make("private " + type.getName() + " " + propertyName + ";", ctClass); - List jsr303 = createValidatorAnnotation(column.getValidator()); - //添加注解 - if (!CollectionUtils.isEmpty(jsr303)) { - ConstPool constPool = ctClass.getClassFile().getConstPool(); - AnnotationsAttribute attributeInfo = new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag); - for (JSR303AnnotationInfo jsr303AnnotationInfo : jsr303) { - Class jsr303Ann = jsr303AnnotationInfo.getAnnotation(); - Annotation ann = new javassist.bytecode.annotation.Annotation(jsr303Ann.getName(), constPool); - if (!CollectionUtils.isEmpty(jsr303AnnotationInfo.getProperties())) { - jsr303AnnotationInfo.getProperties().forEach((key, value) -> { - MemberValue memberValue = createMemberValue(value, constPool); - if (memberValue != null) { - ann.addMemberValue(key, memberValue); - } - }); - } - attributeInfo.addAnnotation(ann); - } - ctField.getFieldInfo().addAttribute(attributeInfo); - } - ctClass.addField(ctField); - } catch (Exception e) { - throw new RuntimeException(e); - } - }); - - proxy.addMethod("public void set" + StringUtils.toUpperCaseFirstOne(propertyName) + "(" + typeName + " " + propertyName + "){\n" + - "this." + propertyName + "=" + propertyName + ";\n" + - "\n};"); - - proxy.addMethod("public " + typeName + " get" + StringUtils.toUpperCaseFirstOne(propertyName) + "(){\n" + - "return this." + propertyName + ";\n" + - "\n};"); - } - - keySet.append("}));\n}"); - - proxy.addMethod(keySet.toString()); - proxy.addMethod(createSetPropertyCode(tableMetaData)); - proxy.addMethod(createGetPropertyCode(tableMetaData)); - - //尝试一下能否创建实例 - MapBean mapBean = proxy.newInstance(); - Assert.notNull(mapBean, "创建验证器失败!"); - return new DynamicBeanValidator(proxy::newInstance); - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/JSR303AnnotationInfo.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/JSR303AnnotationInfo.java deleted file mode 100644 index 042ed8104..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/JSR303AnnotationInfo.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator; - -import lombok.Getter; -import lombok.Setter; - -import java.util.Map; - -@Setter -@Getter -public class JSR303AnnotationInfo { - private Class annotation; - - private Map properties; -} \ No newline at end of file diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/JSR303AnnotationParserStrategy.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/JSR303AnnotationParserStrategy.java deleted file mode 100644 index 8044d68d4..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/JSR303AnnotationParserStrategy.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator; - -import java.util.Map; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -public interface JSR303AnnotationParserStrategy { - - boolean support(String type); - - JSR303AnnotationInfo parse(Map configMap); -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/MapBean.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/MapBean.java deleted file mode 100644 index ebf28bc4c..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/MapBean.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator; - -import org.hswebframework.web.commons.bean.ValidateBean; - -import java.util.Collection; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * @author zhouhao - * @since 3.0.0 - */ -public interface MapBean extends Map, ValidateBean { - - @Override - default int size() { - return keySet().size(); - } - - @Override - default boolean isEmpty() { - return values().isEmpty(); - } - - @Override - default boolean containsKey(Object key) { - return keySet().contains(key); - } - - @Override - default boolean containsValue(Object value) { - return values().contains(value); - } - - @Override - default Set> entrySet() { - return keySet() - .stream() - .map(key -> new Entry() { - @Override - public String getKey() { - return key; - } - - @Override - public Object getValue() { - return getProperty(key); - } - - @Override - public Object setValue(Object value) { - Object old = getValue(); - setProperty(key, value); - return old; - } - - @Override - public boolean equals(Object o) { - return getValue() != null && getValue().equals(o); - } - - @Override - public int hashCode() { - return getValue() == null ? 0 : getValue().hashCode(); - } - }) - .collect(Collectors.toSet()); - } - - @Override - default void putAll(Map m) { - m.forEach(this::setProperty); - } - - default void clear() { - for (String property : keySet()) { - setProperty(property, null); - } - } - - @Override - default Collection values() { - return keySet() - .stream() - .map(this::getProperty) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - - @Override - Set keySet(); - - @Override - default Object get(Object key) { - return getProperty(String.valueOf(key)); - } - - @Override - default Object put(String key, Object value) { - Object old = get(key); - setProperty(key, value); - return old; - } - - void setProperty(String key, Object value); - - Object getProperty(String key); -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/AbstractStrategy.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/AbstractStrategy.java deleted file mode 100644 index f46488c56..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/AbstractStrategy.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator.jsr303; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.Getter; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; -import org.hswebframework.web.bean.FastBeanCopier; -import org.hswebframework.web.service.form.simple.validator.JSR303AnnotationInfo; -import org.hswebframework.web.service.form.simple.validator.JSR303AnnotationParserStrategy; -import org.hswebframework.web.validator.group.CreateGroup; -import org.hswebframework.web.validator.group.UpdateGroup; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; - -import java.lang.annotation.Annotation; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@Slf4j -public abstract class AbstractStrategy implements JSR303AnnotationParserStrategy { - - private List propertyMappings = new ArrayList<>(); - - public AbstractStrategy() { - propertyMappings.add(PropertyMapping.of("message", String.class)); - } - - public void addPropertyMapping(PropertyMapping mapping) { - propertyMappings.add(mapping); - } - - protected String getTypeString() { - return getAnnotationType().getSimpleName(); - } - - protected abstract Class getAnnotationType(); - - @Getter - @Setter - public static class PropertyMapping { - private String name; - private Class type; - - public static PropertyMapping of(String name, Class type) { - PropertyMapping mapping = new PropertyMapping<>(); - - mapping.name = name; - mapping.type = type; - - return mapping; - } - - public static PropertyMapping of(String name, Class type, Function converter) { - PropertyMapping mapping = new PropertyMapping<>(); - mapping.name = name; - mapping.type = type; - mapping.converter = converter; - return mapping; - } - - private Function converter = source -> FastBeanCopier.DEFAULT_CONVERT.convert(source, type, null); - } - - @Override - public boolean support(String type) { - return type != null && (getTypeString().equalsIgnoreCase(type)); - } - - @Override - public JSR303AnnotationInfo parse(Map configMap) { - JSR303AnnotationInfo info = new JSR303AnnotationInfo(); - info.setAnnotation(getAnnotationType()); - - Map properties = new HashMap<>(); - - propertyMappings.forEach(mapping -> { - Object value = mapping.getConverter().apply(configMap.get(mapping.getName())); - if (!StringUtils.isEmpty(value)) { - properties.put(mapping.getName(), value); - } - }); - - List groups = null; - - Object groupObject = new JSONObject(configMap).get("groups"); - if (groupObject instanceof JSONArray) { - groups = ((JSONArray) groupObject); - } - if (groupObject instanceof String) { - groups = Arrays.asList(((String) groupObject).split("[,]")); - } - - if (!CollectionUtils.isEmpty(groups)) { - properties.put("groups", groups.stream().map(obj -> { - if ("create".equals(obj)) { - return CreateGroup.class; - } else if ("update".equals(obj)) { - return UpdateGroup.class; - } else { - try { - return Class.forName(String.valueOf(obj)); - } catch (ClassNotFoundException e) { - return CreateGroup.class; - } - } - }).toArray()); - } - info.setProperties(properties); - return info; - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/EmailStrategy.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/EmailStrategy.java deleted file mode 100644 index 3ebebb14e..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/EmailStrategy.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator.jsr303; - -import lombok.extern.slf4j.Slf4j; -import org.hibernate.validator.constraints.Email; -import org.hibernate.validator.constraints.Length; -import org.springframework.stereotype.Component; - -import javax.validation.constraints.Pattern; -import java.lang.reflect.Array; -import java.util.Arrays; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@Component -@Slf4j -public class EmailStrategy extends AbstractStrategy { - - public EmailStrategy() { - addPropertyMapping(PropertyMapping.of("regexp", String.class)); - } - - @Override - protected Class getAnnotationType() { - return Email.class; - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/LengthStrategy.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/LengthStrategy.java deleted file mode 100644 index 7a9cf1a3b..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/LengthStrategy.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator.jsr303; - -import lombok.extern.slf4j.Slf4j; -import org.hibernate.validator.constraints.Length; -import org.springframework.stereotype.Component; - -import javax.validation.constraints.NotNull; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@Component -@Slf4j -public class LengthStrategy extends AbstractStrategy { - - public LengthStrategy() { - addPropertyMapping(PropertyMapping.of("min", int.class)); - - addPropertyMapping(PropertyMapping.of("max", int.class)); - } - - @Override - protected Class getAnnotationType() { - return Length.class; - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/NotBlankStrategy.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/NotBlankStrategy.java deleted file mode 100644 index f3404a759..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/NotBlankStrategy.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator.jsr303; - -import lombok.extern.slf4j.Slf4j; -import org.hibernate.validator.constraints.NotBlank; -import org.springframework.stereotype.Component; - -import javax.validation.constraints.NotNull; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@Component -@Slf4j -public class NotBlankStrategy extends AbstractStrategy { - - @Override - protected Class getAnnotationType() { - return NotBlank.class; - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/NotNullStrategy.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/NotNullStrategy.java deleted file mode 100644 index a5b9e71c1..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/NotNullStrategy.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator.jsr303; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import javax.validation.constraints.NotNull; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@Component -@Slf4j -public class NotNullStrategy extends AbstractStrategy { - - @Override - protected Class getAnnotationType() { - return NotNull.class; - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/RangeStrategy.java b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/RangeStrategy.java deleted file mode 100644 index 87d2ff4f2..000000000 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/RangeStrategy.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.hswebframework.web.service.form.simple.validator.jsr303; - -import lombok.extern.slf4j.Slf4j; -import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.Range; -import org.springframework.stereotype.Component; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -@Component -@Slf4j -public class RangeStrategy extends AbstractStrategy { - - public RangeStrategy() { - addPropertyMapping(PropertyMapping.of("min", int.class)); - - addPropertyMapping(PropertyMapping.of("max", int.class)); - } - - @Override - protected Class getAnnotationType() { - return Range.class; - } -} diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/pom.xml b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/pom.xml index 17e643094..426fe07c8 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/pom.xml +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dynamic-form org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-web/pom.xml b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-web/pom.xml index 8273a810b..cea47fdd2 100644 --- a/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-web/pom.xml +++ b/hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-dynamic-form org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-dynamic-form/pom.xml b/hsweb-system/hsweb-system-dynamic-form/pom.xml index f99eb4ae5..b4b303d52 100644 --- a/hsweb-system/hsweb-system-dynamic-form/pom.xml +++ b/hsweb-system/hsweb-system-dynamic-form/pom.xml @@ -5,7 +5,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-file/hsweb-system-file-api/pom.xml b/hsweb-system/hsweb-system-file/hsweb-system-file-api/pom.xml index 9e711e628..e5cd346dc 100644 --- a/hsweb-system/hsweb-system-file/hsweb-system-file-api/pom.xml +++ b/hsweb-system/hsweb-system-file/hsweb-system-file-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-file org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-file/hsweb-system-file-local/pom.xml b/hsweb-system/hsweb-system-file/hsweb-system-file-local/pom.xml index 194e62436..15e758011 100644 --- a/hsweb-system/hsweb-system-file/hsweb-system-file-local/pom.xml +++ b/hsweb-system/hsweb-system-file/hsweb-system-file-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-file org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 @@ -30,10 +30,11 @@ 0.2.0 true + - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} + commons-codec + commons-codec + 1.13 \ No newline at end of file diff --git a/hsweb-system/hsweb-system-file/hsweb-system-file-local/src/main/java/org/hswebframework/web/dao/file/FileInfoDao.java b/hsweb-system/hsweb-system-file/hsweb-system-file-local/src/main/java/org/hswebframework/web/dao/file/FileInfoDao.java deleted file mode 100644 index 1ce2baecb..000000000 --- a/hsweb-system/hsweb-system-file/hsweb-system-file-local/src/main/java/org/hswebframework/web/dao/file/FileInfoDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.dao.file; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.file.FileInfoEntity; - -/** -* 文件信息 DAO接口 -* @author hsweb-generator-online - */ -public interface FileInfoDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-file/hsweb-system-file-local/src/main/java/org/hswebframework/web/service/file/simple/SimpleFileInfoService.java b/hsweb-system/hsweb-system-file/hsweb-system-file-local/src/main/java/org/hswebframework/web/service/file/simple/SimpleFileInfoService.java index 34a59c787..0614534da 100644 --- a/hsweb-system/hsweb-system-file/hsweb-system-file-local/src/main/java/org/hswebframework/web/service/file/simple/SimpleFileInfoService.java +++ b/hsweb-system/hsweb-system-file/hsweb-system-file-local/src/main/java/org/hswebframework/web/service/file/simple/SimpleFileInfoService.java @@ -1,11 +1,9 @@ package org.hswebframework.web.service.file.simple; -import org.hswebframework.web.dao.file.FileInfoDao; import org.hswebframework.web.entity.file.FileInfoEntity; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.service.file.FileInfoService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -23,23 +21,11 @@ import java.util.List; @CacheConfig(cacheNames = "file-info") public class SimpleFileInfoService extends GenericEntityService implements FileInfoService { - private FileInfoDao fileInfoDao; - @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public FileInfoDao getDao() { - return fileInfoDao; - } - - @Autowired - public void setFileInfoDao(FileInfoDao fileInfoDao) { - this.fileInfoDao = fileInfoDao; - } - @Override @Caching(evict = { @CacheEvict(key = "'md5:'+#entity.md5"), @@ -91,7 +77,10 @@ public class SimpleFileInfoService extends GenericEntityService hsweb-system-file org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-file/hsweb-system-file-starter/pom.xml b/hsweb-system/hsweb-system-file/hsweb-system-file-starter/pom.xml index cffbe56cb..f33d09f11 100644 --- a/hsweb-system/hsweb-system-file/hsweb-system-file-starter/pom.xml +++ b/hsweb-system/hsweb-system-file/hsweb-system-file-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-system-file org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-file/hsweb-system-file-web/pom.xml b/hsweb-system/hsweb-system-file/hsweb-system-file-web/pom.xml index c86de0dea..a58570877 100644 --- a/hsweb-system/hsweb-system-file/hsweb-system-file-web/pom.xml +++ b/hsweb-system/hsweb-system-file/hsweb-system-file-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-file org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-file/pom.xml b/hsweb-system/hsweb-system-file/pom.xml index 8c728b3b1..223d3efb9 100644 --- a/hsweb-system/hsweb-system-file/pom.xml +++ b/hsweb-system/hsweb-system-file/pom.xml @@ -5,7 +5,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-api/pom.xml b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-api/pom.xml index 8a3bbb96a..16306e1c6 100644 --- a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-api/pom.xml +++ b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-oauth2-client org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/pom.xml b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/pom.xml index 5abf85007..aeec647fc 100644 --- a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/pom.xml +++ b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-oauth2-client org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 @@ -31,10 +31,5 @@ org.hswebframework hsweb-expands-request - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - \ No newline at end of file diff --git a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/dao/oauth2/server/client/OAuth2ServerConfigDao.java b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/dao/oauth2/server/client/OAuth2ServerConfigDao.java deleted file mode 100644 index 0f88e65fb..000000000 --- a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/dao/oauth2/server/client/OAuth2ServerConfigDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.oauth2.server.client; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.oauth2.client.OAuth2ServerConfigEntity; - -/** -* OAuth2服务配置 DAO接口 -* @author hsweb-generator-online - */ -public interface OAuth2ServerConfigDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/dao/oauth2/server/client/OAuth2UserTokenDao.java b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/dao/oauth2/server/client/OAuth2UserTokenDao.java deleted file mode 100644 index 258fe1ff9..000000000 --- a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/dao/oauth2/server/client/OAuth2UserTokenDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.oauth2.server.client; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.oauth2.client.OAuth2UserTokenEntity; - -/** -* OAuth2用户授权信息 DAO接口 -* @author hsweb-generator-online - */ -public interface OAuth2UserTokenDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/service/oauth2/client/simple/SimpleOAuth2ServerConfigService.java b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/service/oauth2/client/simple/SimpleOAuth2ServerConfigService.java index f45b1b46f..4a37f180c 100644 --- a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/service/oauth2/client/simple/SimpleOAuth2ServerConfigService.java +++ b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/service/oauth2/client/simple/SimpleOAuth2ServerConfigService.java @@ -18,12 +18,10 @@ package org.hswebframework.web.service.oauth2.client.simple; import org.hswebframework.web.authorization.oauth2.client.OAuth2ServerConfig; import org.hswebframework.web.authorization.oauth2.client.simple.OAuth2ServerConfigRepository; -import org.hswebframework.web.dao.oauth2.server.client.OAuth2ServerConfigDao; import org.hswebframework.web.entity.oauth2.client.OAuth2ServerConfigEntity; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.service.oauth2.client.OAuth2ServerConfigService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -40,19 +38,11 @@ import java.util.List; @CacheConfig(cacheNames = "oauth2-server-config") public class SimpleOAuth2ServerConfigService extends GenericEntityService implements OAuth2ServerConfigService, OAuth2ServerConfigRepository { - @Autowired - private OAuth2ServerConfigDao oAuth2ServerConfigDao; - @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public OAuth2ServerConfigDao getDao() { - return oAuth2ServerConfigDao; - } - @Override @Cacheable(key = "'conf-id:'+#id") public OAuth2ServerConfig findById(String id) { diff --git a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/service/oauth2/client/simple/SimpleOAuth2UserTokenService.java b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/service/oauth2/client/simple/SimpleOAuth2UserTokenService.java index 6926ada07..098c8b274 100644 --- a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/service/oauth2/client/simple/SimpleOAuth2UserTokenService.java +++ b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-local/src/main/java/org/hswebframework/web/service/oauth2/client/simple/SimpleOAuth2UserTokenService.java @@ -1,29 +1,27 @@ /* * Copyright 2019 http://www.hswebframework.org - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * + * */ package org.hswebframework.web.service.oauth2.client.simple; import org.hswebframework.web.authorization.oauth2.client.AccessTokenInfo; import org.hswebframework.web.authorization.oauth2.client.simple.OAuth2UserTokenRepository; -import org.hswebframework.web.dao.oauth2.server.client.OAuth2UserTokenDao; import org.hswebframework.web.entity.oauth2.client.OAuth2UserTokenEntity; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.service.oauth2.client.OAuth2UserTokenService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; @@ -46,19 +44,12 @@ import java.util.stream.Collectors; @Service("oAuth2UserTokenService") public class SimpleOAuth2UserTokenService extends GenericEntityService implements OAuth2UserTokenService, OAuth2UserTokenRepository { - @Autowired - private OAuth2UserTokenDao oAuth2UserTokenDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public OAuth2UserTokenDao getDao() { - return oAuth2UserTokenDao; - } - @Override public AccessTokenInfo createToken() { return entityFactory.newInstance(AccessTokenInfo.class); @@ -147,12 +138,13 @@ public class SimpleOAuth2UserTokenService extends GenericEntityService hsweb-system-oauth2-client org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-web/pom.xml b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-web/pom.xml index 4d41bda2b..54ff27e4e 100644 --- a/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-web/pom.xml +++ b/hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-oauth2-client org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-oauth2-client/pom.xml b/hsweb-system/hsweb-system-oauth2-client/pom.xml index 85eb871ac..263c450e0 100644 --- a/hsweb-system/hsweb-system-oauth2-client/pom.xml +++ b/hsweb-system/hsweb-system-oauth2-client/pom.xml @@ -23,7 +23,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/pom.xml b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/pom.xml index 0a429c5c3..378e76122 100644 --- a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/pom.xml +++ b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-oauth2-server org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 @@ -28,11 +28,6 @@ org.springframework.boot spring-boot-starter - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - org.hswebframework.web hsweb-authorization-oauth2-auth-server diff --git a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/dao/oauth2/server/AuthorizationCodeDao.java b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/dao/oauth2/server/AuthorizationCodeDao.java deleted file mode 100644 index 038bce6fe..000000000 --- a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/dao/oauth2/server/AuthorizationCodeDao.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ - -package org.hswebframework.web.dao.oauth2.server; - -import org.hswebframework.web.entity.oauth2.server.AuthorizationCodeEntity; -import org.hswebframework.web.dao.InsertDao; -import org.hswebframework.web.dao.dynamic.DeleteByEntityDao; -import org.hswebframework.web.dao.dynamic.QueryByEntityDao; - -/** - * @author zhouhao - */ -public interface AuthorizationCodeDao extends - InsertDao, - DeleteByEntityDao, - QueryByEntityDao { - -} diff --git a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/dao/oauth2/server/OAuth2AccessDao.java b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/dao/oauth2/server/OAuth2AccessDao.java deleted file mode 100644 index 18a0841ce..000000000 --- a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/dao/oauth2/server/OAuth2AccessDao.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ - -package org.hswebframework.web.dao.oauth2.server; - -import org.hswebframework.web.entity.oauth2.server.OAuth2AccessEntity; -import org.hswebframework.web.dao.InsertDao; -import org.hswebframework.web.dao.dynamic.DeleteByEntityDao; -import org.hswebframework.web.dao.dynamic.QueryByEntityDao; -import org.hswebframework.web.dao.dynamic.UpdateByEntityDao; - -/** - * @author zhouhao - */ -public interface OAuth2AccessDao extends - InsertDao, - DeleteByEntityDao, - UpdateByEntityDao, - QueryByEntityDao { -} diff --git a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/dao/oauth2/server/OAuth2ClientDao.java b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/dao/oauth2/server/OAuth2ClientDao.java deleted file mode 100644 index 2c124ef07..000000000 --- a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/dao/oauth2/server/OAuth2ClientDao.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ - -package org.hswebframework.web.dao.oauth2.server; - - -import org.hswebframework.web.entity.oauth2.server.OAuth2ClientEntity; -import org.hswebframework.web.dao.CrudDao; - -/** - * - * @author zhouhao - */ -public interface OAuth2ClientDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleAccessTokenService.java b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleAccessTokenService.java index 9abdb0098..ac6dbde00 100644 --- a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleAccessTokenService.java +++ b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleAccessTokenService.java @@ -19,14 +19,15 @@ package org.hswebframework.web.service.oauth2.server.simple; -import org.hswebframework.web.entity.oauth2.server.OAuth2AccessEntity; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.authorization.oauth2.server.OAuth2AccessToken; import org.hswebframework.web.authorization.oauth2.server.token.AccessTokenService; +import org.hswebframework.web.bean.FastBeanCopier; import org.hswebframework.web.commons.entity.factory.EntityFactory; -import org.hswebframework.web.dao.oauth2.server.OAuth2AccessDao; +import org.hswebframework.web.entity.oauth2.server.OAuth2AccessEntity; +import org.hswebframework.web.entity.oauth2.server.SimpleOAuth2AccessEntity; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.DefaultDSLQueryService; -import org.hswebframework.web.service.DefaultDSLUpdateService; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; @@ -41,11 +42,11 @@ public class SimpleAccessTokenService implements AccessTokenService { private TokenGenerator tokenGenerator = IDGenerator.MD5::generate; - private OAuth2AccessDao oAuth2AccessDao; + private SyncRepository oAuth2AccessDao; private EntityFactory entityFactory; - public SimpleAccessTokenService(OAuth2AccessDao oAuth2AccessDao, EntityFactory entityFactory) { + public SimpleAccessTokenService(SyncRepository oAuth2AccessDao, EntityFactory entityFactory) { this.oAuth2AccessDao = oAuth2AccessDao; this.entityFactory = entityFactory; } @@ -60,13 +61,13 @@ public class SimpleAccessTokenService implements AccessTokenService { @Override @Cacheable(cacheNames = "oauth2-access-token", key = "'cgo'+#token.clientId+#token.grantType+#token.ownerId") public OAuth2AccessToken tryGetOldToken(OAuth2AccessToken token) { - OAuth2AccessToken old = DefaultDSLQueryService + return DefaultDSLQueryService .createQuery(oAuth2AccessDao) .where("clientId", token.getClientId()) .and("grantType", token.getGrantType()) .and("ownerId", token.getOwnerId()) - .single(); - return old; + .fetchOne() + .orElse(null); } @Override @@ -84,7 +85,9 @@ public class SimpleAccessTokenService implements AccessTokenService { public OAuth2AccessToken getTokenByRefreshToken(String refreshToken) { Assert.notNull(refreshToken, "refreshToken can not be null!"); return DefaultDSLQueryService.createQuery(oAuth2AccessDao) - .where("refreshToken", refreshToken).single(); + .where("refreshToken", refreshToken) + .fetchOne() + .orElse(null); } @Override @@ -93,7 +96,9 @@ public class SimpleAccessTokenService implements AccessTokenService { public OAuth2AccessToken getTokenByAccessToken(String accessToken) { Assert.notNull(accessToken, "accessToken can not be null!"); return DefaultDSLQueryService.createQuery(oAuth2AccessDao) - .where("accessToken", accessToken).single(); + .where("accessToken", accessToken) + .fetchOne() + .orElse(null); } @Override @@ -109,15 +114,16 @@ public class SimpleAccessTokenService implements AccessTokenService { .createQuery(oAuth2AccessDao) .where("clientId", token.getClientId()) .and("grantType", token.getGrantType()) - .and("ownerId", token.getOwnerId()).total(); + .and("ownerId", token.getOwnerId()) + .count(); token.setUpdateTime(System.currentTimeMillis()); if (total > 0) { - DefaultDSLUpdateService - .createUpdate(oAuth2AccessDao, token) + oAuth2AccessDao.createUpdate() + .set(FastBeanCopier.copy(token, SimpleOAuth2AccessEntity::new)) .where("clientId", token.getClientId()) .and("grantType", token.getGrantType()) .and("ownerId", token.getOwnerId()) - .exec(); + .execute(); } else { token.setCreateTime(System.currentTimeMillis()); oAuth2AccessDao.insert(((OAuth2AccessEntity) token)); diff --git a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleAuthorizationCodeService.java b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleAuthorizationCodeService.java index 7b9f4b4af..4486cbd37 100644 --- a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleAuthorizationCodeService.java +++ b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleAuthorizationCodeService.java @@ -18,12 +18,12 @@ package org.hswebframework.web.service.oauth2.server.simple; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.entity.oauth2.server.AuthorizationCodeEntity; import org.hswebframework.web.authorization.oauth2.server.support.code.AuthorizationCode; import org.hswebframework.web.authorization.oauth2.server.support.code.AuthorizationCodeRequest; import org.hswebframework.web.authorization.oauth2.server.support.code.AuthorizationCodeService; import org.hswebframework.web.commons.entity.factory.EntityFactory; -import org.hswebframework.web.dao.oauth2.server.AuthorizationCodeDao; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.DefaultDSLDeleteService; import org.hswebframework.web.service.DefaultDSLQueryService; @@ -32,16 +32,15 @@ import org.springframework.transaction.annotation.Transactional; /** - * TODO 完成注释 - * * @author zhouhao */ public class SimpleAuthorizationCodeService implements AuthorizationCodeService { - private AuthorizationCodeDao authorizationCodeDao; private EntityFactory entityFactory; private CodeGenerator codeGenerator = IDGenerator.MD5::generate; - public SimpleAuthorizationCodeService(AuthorizationCodeDao authorizationCodeDao, EntityFactory entityFactory) { + private SyncRepository authorizationCodeDao; + + public SimpleAuthorizationCodeService(SyncRepository authorizationCodeDao, EntityFactory entityFactory) { this.authorizationCodeDao = authorizationCodeDao; this.entityFactory = entityFactory; } @@ -71,10 +70,12 @@ public class SimpleAuthorizationCodeService implements AuthorizationCodeService public AuthorizationCode consumeAuthorizationCode(String code) { AuthorizationCodeEntity codeEntity = DefaultDSLQueryService .createQuery(authorizationCodeDao) - .where("code", code).single(); + .where("code", code) + .fetchOne() + .orElse(null); //delete DefaultDSLDeleteService.createDelete(authorizationCodeDao) - .where("code", code).exec(); + .where("code", code).execute(); return codeEntity; } } diff --git a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleClientConfigRepository.java b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleClientConfigRepository.java index 6391e55a1..32cbe72d8 100644 --- a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleClientConfigRepository.java +++ b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-local/src/main/java/org/hswebframework/web/service/oauth2/server/simple/SimpleClientConfigRepository.java @@ -18,40 +18,46 @@ package org.hswebframework.web.service.oauth2.server.simple; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.authorization.oauth2.server.client.OAuth2Client; import org.hswebframework.web.authorization.oauth2.server.client.OAuth2ClientConfigRepository; +import org.hswebframework.web.entity.oauth2.server.OAuth2ClientEntity; import org.hswebframework.web.entity.oauth2.server.SimpleOAuth2ClientEntity; import org.hswebframework.web.commons.entity.DataStatus; -import org.hswebframework.web.commons.entity.param.QueryParamEntity; -import org.hswebframework.web.dao.oauth2.server.OAuth2ClientDao; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.DefaultDSLQueryService; -import org.hswebframework.web.service.DefaultDSLUpdateService; import org.springframework.cache.annotation.*; import java.util.List; +import java.util.stream.Collectors; /** * @author zhouhao */ @CacheConfig(cacheNames = "oauth2-client-config") public class SimpleClientConfigRepository implements OAuth2ClientConfigRepository { - private OAuth2ClientDao oAuth2ClientDao; + private SyncRepository oAuth2ClientDao; - public SimpleClientConfigRepository(OAuth2ClientDao oAuth2ClientDao) { + public SimpleClientConfigRepository(SyncRepository oAuth2ClientDao) { this.oAuth2ClientDao = oAuth2ClientDao; } @Override @Cacheable(key = "'id:'+#id") public OAuth2Client getClientById(String id) { - return DefaultDSLQueryService.createQuery(oAuth2ClientDao).where("id", id).single(); + return DefaultDSLQueryService + .createQuery(oAuth2ClientDao) + .where("id", id) + .fetchOne() + .orElse(null); } @Override @Cacheable(key = "'ownerId:'+#ownerId") public OAuth2Client getClientByOwnerId(String ownerId) { - return DefaultDSLQueryService.createQuery(oAuth2ClientDao).where("ownerId", ownerId).single(); + return DefaultDSLQueryService + .createQuery(oAuth2ClientDao).where("ownerId", ownerId) + .fetchOne().orElse(null); } @Override @@ -62,10 +68,12 @@ public class SimpleClientConfigRepository implements OAuth2ClientConfigRepositor public OAuth2Client save(OAuth2Client oAuth2Client) { OAuth2Client old = getClientById(oAuth2Client.getId()); if (old != null) { - DefaultDSLUpdateService - .createUpdate(oAuth2ClientDao, oAuth2Client) + oAuth2ClientDao.createUpdate() + .set((OAuth2ClientEntity) oAuth2Client) .excludes("id", "createTime") - .where("id", oAuth2Client.getId()).exec(); + .where("id", oAuth2Client.getId()) + .execute(); + } else { oAuth2ClientDao.insert(((SimpleOAuth2ClientEntity) oAuth2Client)); } @@ -79,7 +87,7 @@ public class SimpleClientConfigRepository implements OAuth2ClientConfigRepositor }) public OAuth2Client remove(String id) { OAuth2Client old = getClientById(id); - oAuth2ClientDao.deleteByPk(id); + oAuth2ClientDao.deleteById(id); return old; } @@ -97,8 +105,11 @@ public class SimpleClientConfigRepository implements OAuth2ClientConfigRepositor @Override @SuppressWarnings("unchecked") public List getAll() { - QueryParamEntity entity = new QueryParamEntity(); - entity.setPaging(false); - return (List) oAuth2ClientDao.query(entity); + return oAuth2ClientDao + .createQuery() + .fetch() + .stream() + .map(OAuth2Client.class::cast) + .collect(Collectors.toList()); } } diff --git a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-starter/pom.xml b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-starter/pom.xml index 1205a2369..5becd216a 100644 --- a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-starter/pom.xml +++ b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-starter/pom.xml @@ -23,7 +23,7 @@ hsweb-system-oauth2-server org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-starter/src/main/java/org/hswebframework/web/oauth2/OAuth2GranterAutoConfiguration.java b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-starter/src/main/java/org/hswebframework/web/oauth2/OAuth2GranterAutoConfiguration.java index cb3219685..ced0cb671 100644 --- a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-starter/src/main/java/org/hswebframework/web/oauth2/OAuth2GranterAutoConfiguration.java +++ b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-starter/src/main/java/org/hswebframework/web/oauth2/OAuth2GranterAutoConfiguration.java @@ -18,6 +18,7 @@ package org.hswebframework.web.oauth2; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.authorization.AuthenticationManager; import org.hswebframework.web.authorization.oauth2.server.client.OAuth2ClientConfigRepository; import org.hswebframework.web.authorization.oauth2.server.support.AbstractAuthorizationService; @@ -37,9 +38,9 @@ import org.hswebframework.web.authorization.oauth2.server.support.refresh.Refres import org.hswebframework.web.authorization.oauth2.server.token.AccessTokenService; import org.hswebframework.web.authorization.token.UserTokenManager; import org.hswebframework.web.commons.entity.factory.EntityFactory; -import org.hswebframework.web.dao.oauth2.server.AuthorizationCodeDao; -import org.hswebframework.web.dao.oauth2.server.OAuth2AccessDao; -import org.hswebframework.web.dao.oauth2.server.OAuth2ClientDao; +import org.hswebframework.web.entity.oauth2.server.AuthorizationCodeEntity; +import org.hswebframework.web.entity.oauth2.server.OAuth2AccessEntity; +import org.hswebframework.web.entity.oauth2.server.OAuth2ClientEntity; import org.hswebframework.web.service.oauth2.server.simple.*; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; @@ -68,7 +69,7 @@ public class OAuth2GranterAutoConfiguration { @ConditionalOnMissingBean(AuthorizationCodeService.class) @Bean - public SimpleAuthorizationCodeService simpleAuthorizationCodeService(AuthorizationCodeDao authorizationCodeDao, + public SimpleAuthorizationCodeService simpleAuthorizationCodeService(SyncRepository authorizationCodeDao, EntityFactory entityFactory) { return new SimpleAuthorizationCodeService(authorizationCodeDao, entityFactory) .setCodeGenerator(codeGenerator); @@ -76,7 +77,7 @@ public class OAuth2GranterAutoConfiguration { @ConditionalOnMissingBean(OAuth2ClientConfigRepository.class) @Bean - public SimpleClientConfigRepository simpleClientService(OAuth2ClientDao oAuth2ClientDao) { + public SimpleClientConfigRepository simpleClientService(SyncRepository oAuth2ClientDao) { return new SimpleClientConfigRepository(oAuth2ClientDao); } @@ -88,7 +89,7 @@ public class OAuth2GranterAutoConfiguration { @ConditionalOnMissingBean(AccessTokenService.class) @Bean - public SimpleAccessTokenService simpleAccessTokenService(OAuth2AccessDao oAuth2AccessDao, EntityFactory entityFactory) { + public SimpleAccessTokenService simpleAccessTokenService(SyncRepository oAuth2AccessDao, EntityFactory entityFactory) { return new SimpleAccessTokenService(oAuth2AccessDao, entityFactory) .setTokenGenerator(tokenGenerator); } diff --git a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-web/pom.xml b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-web/pom.xml index 413260ebf..951008406 100644 --- a/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-web/pom.xml +++ b/hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-oauth2-server org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-oauth2-server/pom.xml b/hsweb-system/hsweb-system-oauth2-server/pom.xml index 544f4c540..13d4b4030 100644 --- a/hsweb-system/hsweb-system-oauth2-server/pom.xml +++ b/hsweb-system/hsweb-system-oauth2-server/pom.xml @@ -23,7 +23,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-api/pom.xml b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-api/pom.xml index 6764036c8..d2e9a6167 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-api/pom.xml +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-organizational org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/pom.xml b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/pom.xml index 313ca5b8a..b65ef5ea4 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/pom.xml +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/pom.xml @@ -5,7 +5,7 @@ hsweb-system-organizational org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/pom.xml b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/pom.xml index 18bb2bdd7..925d65100 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/pom.xml +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-organizational org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 @@ -29,14 +29,19 @@ hsweb-system-authorization-api ${project.version} - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - + + + + + io.vavr vavr + + org.hswebframework.web + hsweb-datasource-api + ${project.version} + \ No newline at end of file diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/DepartmentDao.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/DepartmentDao.java deleted file mode 100644 index 425be74cc..000000000 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/DepartmentDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.organizational; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.organizational.DepartmentEntity; - -/** -* 部门 DAO接口 -* @author hsweb-generator-online - */ -public interface DepartmentDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/DistrictDao.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/DistrictDao.java deleted file mode 100644 index 55c4d7700..000000000 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/DistrictDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.dao.organizational; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.organizational.DistrictEntity; - -/** -* 表单发布日志 DAO接口 -* @author hsweb-generator-online - */ -public interface DistrictDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/OrganizationalDao.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/OrganizationalDao.java deleted file mode 100644 index f88d2c664..000000000 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/OrganizationalDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.organizational; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.organizational.OrganizationalEntity; - -/** -* 组织 DAO接口 -* @author hsweb-generator-online - */ -public interface OrganizationalDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/PersonDao.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/PersonDao.java deleted file mode 100644 index 6671aa83e..000000000 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/PersonDao.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.organizational; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.organizational.PersonEntity; - -import java.util.List; - -/** - * 人员 DAO接口 - * - * @author hsweb-generator-online - */ -public interface PersonDao extends CrudDao { - List selectByPositionId(String positionId); - - List selectByRoleId(String positionId); -} diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/PersonPositionDao.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/PersonPositionDao.java deleted file mode 100644 index 07492f195..000000000 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/PersonPositionDao.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.organizational; - -import org.hswebframework.web.dao.InsertDao; -import org.hswebframework.web.dao.dynamic.QueryByEntityDao; -import org.hswebframework.web.entity.organizational.PersonPositionEntity; - -/** - * 人员职位关联 DAO接口 - * - * @author hsweb-generator-online - */ -public interface PersonPositionDao extends InsertDao - , QueryByEntityDao { - - int deleteByPersonId(String personId); - - int deleteByPositionId(String position); -} diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/PositionDao.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/PositionDao.java deleted file mode 100644 index 00b2c05ac..000000000 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/PositionDao.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 http://www.hswebframework.org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.hswebframework.web.dao.organizational; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.organizational.PositionEntity; - -/** -* 职位 DAO接口 -* @author hsweb-generator-online - */ -public interface PositionDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/RelationDefineDao.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/RelationDefineDao.java deleted file mode 100644 index a7afbcf60..000000000 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/RelationDefineDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.dao.organizational; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.organizational.RelationDefineEntity; - -/** -* 关系定义 DAO接口 -* @author hsweb-generator-online - */ -public interface RelationDefineDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/RelationInfoDao.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/RelationInfoDao.java deleted file mode 100644 index 2277e93da..000000000 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/RelationInfoDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.dao.organizational; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.organizational.RelationInfoEntity; - -/** -* 关系信息 DAO接口 -* @author hsweb-generator-online - */ -public interface RelationInfoDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDepartmentService.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDepartmentService.java index e6b51e88e..9076187ee 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDepartmentService.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDepartmentService.java @@ -17,28 +17,27 @@ package org.hswebframework.web.service.organizational.simple; import org.apache.commons.collections.CollectionUtils; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.BusinessException; -import org.hswebframework.web.dao.organizational.DepartmentDao; -import org.hswebframework.web.dao.organizational.PositionDao; import org.hswebframework.web.entity.organizational.DepartmentEntity; import org.hswebframework.web.entity.organizational.OrganizationalEntity; import org.hswebframework.web.entity.organizational.PositionEntity; import org.hswebframework.web.id.IDGenerator; -import org.hswebframework.web.service.AbstractTreeSortService; import org.hswebframework.web.service.DefaultDSLQueryService; import org.hswebframework.web.service.EnableCacheAllEvictTreeSortService; -import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.service.organizational.DepartmentService; import org.hswebframework.web.service.organizational.OrganizationalService; import org.hswebframework.web.service.organizational.event.ClearPersonCacheEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -51,11 +50,9 @@ import java.util.stream.Collectors; public class SimpleDepartmentService extends EnableCacheAllEvictTreeSortService implements DepartmentService { - @Autowired - private DepartmentDao departmentDao; @Autowired - protected PositionDao positionDao; + protected SyncRepository positionDao; @Autowired private ApplicationEventPublisher publisher; @@ -63,11 +60,6 @@ public class SimpleDepartmentService @Autowired private OrganizationalService organizationalService; - @Override - public DepartmentDao getDao() { - return departmentDao; - } - @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; @@ -76,7 +68,7 @@ public class SimpleDepartmentService @Override @Cacheable(key = "'org-id:'+#orgId") public List selectByOrgId(String orgId) { - return createQuery().where(DepartmentEntity.orgId, orgId).listNoPaging(); + return createQuery().where(DepartmentEntity.orgId, orgId).fetch(); } @Override @@ -106,26 +98,26 @@ public class SimpleDepartmentService return createQuery() .where() .in(DepartmentEntity.orgId, allOrgId) - .listNoPaging(); + .fetch(); } @Override @Cacheable(key = "'name:'+#name") public List selectByName(String name) { - return createQuery().where(DepartmentEntity.name, name).listNoPaging(); + return createQuery().where(DepartmentEntity.name, name).fetch(); } @Override @Cacheable(key = "'code:'+#code") public DepartmentEntity selectByCode(String code) { - return createQuery().where(DepartmentEntity.code, code).single(); + return createQuery().where(DepartmentEntity.code, code).fetchOne().orElse(null); } @Override public DepartmentEntity deleteByPk(String id) { if (DefaultDSLQueryService.createQuery(positionDao) .where(PositionEntity.departmentId, id) - .total() > 0) { + .count() > 0) { throw new BusinessException("部门下存在职位信息,无法删除!"); } publisher.publishEvent(new ClearPersonCacheEvent()); diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDistrictService.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDistrictService.java index 995ab38af..9ed730439 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDistrictService.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDistrictService.java @@ -1,24 +1,20 @@ package org.hswebframework.web.service.organizational.simple; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; +import org.hswebframework.ezorm.rdb.operator.dml.query.SortOrder; import org.hswebframework.web.BusinessException; import org.hswebframework.web.commons.entity.DataStatus; -import org.hswebframework.web.commons.entity.Entity; -import org.hswebframework.web.dao.organizational.DistrictDao; -import org.hswebframework.web.dao.organizational.OrganizationalDao; import org.hswebframework.web.entity.organizational.DistrictEntity; import org.hswebframework.web.entity.organizational.OrganizationalEntity; -import org.hswebframework.web.service.AbstractTreeSortService; +import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.DefaultDSLQueryService; import org.hswebframework.web.service.EnableCacheAllEvictTreeSortService; -import org.hswebframework.web.service.GenericEntityService; -import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.organizational.DistrictService; import org.hswebframework.web.service.organizational.event.ClearPersonCacheEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; -import org.springframework.cache.annotation.Caching; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; @@ -26,8 +22,6 @@ import java.util.Collection; import java.util.List; import java.util.Objects; -import static org.hswebframework.web.service.DefaultDSLQueryService.*; - /** * 默认的服务实现 * @@ -37,11 +31,9 @@ import static org.hswebframework.web.service.DefaultDSLQueryService.*; @CacheConfig(cacheNames = "district") public class SimpleDistrictService extends EnableCacheAllEvictTreeSortService implements DistrictService { - @Autowired - private DistrictDao districtDao; @Autowired - private OrganizationalDao organizationalDao; + private SyncRepository organizationalDao; @Autowired private ApplicationEventPublisher publisher; @@ -51,10 +43,6 @@ public class SimpleDistrictService extends EnableCacheAllEvictTreeSortService 0) { + if (DefaultDSLQueryService.createQuery(organizationalDao).where(OrganizationalEntity.districtId, id).count() > 0) { throw new BusinessException("行政区域下存在机构信息,无法删除!"); } publisher.publishEvent(new ClearPersonCacheEvent()); @@ -95,7 +83,10 @@ public class SimpleDistrictService extends EnableCacheAllEvictTreeSortService select() { - return createQuery().where().orderByAsc(DistrictEntity.sortIndex).listNoPaging(); + return createQuery() + .where() + .orderBy(SortOrder.asc(DistrictEntity.sortIndex)) + .fetch(); } @Override @@ -123,7 +117,7 @@ public class SimpleDistrictService extends EnableCacheAllEvictTreeSortService implements OrganizationalService { - @Autowired - private OrganizationalDao organizationalDao; @Autowired - private DepartmentDao departmentDao; + private SyncRepository departmentDao; @Autowired private ApplicationEventPublisher publisher; - @Override - public OrganizationalDao getDao() { - return organizationalDao; - } - @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; @@ -72,7 +63,7 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ public OrganizationalEntity deleteByPk(String id) { if (DefaultDSLQueryService.createQuery(departmentDao) .where(DepartmentEntity.orgId, id) - .total() > 0) { + .count() > 0) { throw new BusinessException("机构下存在部门信息,无法删除"); } publisher.publishEvent(new ClearPersonCacheEvent()); @@ -100,7 +91,7 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ createUpdate() .set(OrganizationalEntity.status, DataStatus.STATUS_DISABLED) .where(OrganizationalEntity.id, id) - .exec(); + .execute(); publisher.publishEvent(new ClearPersonCacheEvent()); } @@ -111,7 +102,7 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ createUpdate() .set(OrganizationalEntity.status, DataStatus.STATUS_ENABLED) .where(OrganizationalEntity.id, id) - .exec(); + .execute(); publisher.publishEvent(new ClearPersonCacheEvent()); } @@ -122,7 +113,9 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ if (StringUtils.isEmpty(code)) { return null; } - return createQuery().where(OrganizationalEntity.code, code).single(); + return createQuery().where(OrganizationalEntity.code, code) + .fetchOne() + .orElse(null); } @Override @@ -133,6 +126,8 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ return null; } - return createQuery().where(OrganizationalEntity.name, name).single(); + return createQuery().where(OrganizationalEntity.name, name) + .fetchOne() + .orElse(null); } } diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java index 0704378ea..7bd782a1a 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java @@ -1,26 +1,25 @@ /* * Copyright 2019 http://www.hswebframework.org - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * + * */ package org.hswebframework.web.service.organizational.simple; +import org.hswebframework.ezorm.rdb.mapping.SyncQuery; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.commons.entity.DataStatus; import org.hswebframework.web.commons.entity.TreeSupportEntity; -import org.hswebframework.web.commons.entity.param.QueryParamEntity; -import org.hswebframework.web.dao.dynamic.QueryByEntityDao; -import org.hswebframework.web.dao.organizational.*; import org.hswebframework.web.entity.authorization.UserEntity; import org.hswebframework.web.entity.organizational.*; import org.hswebframework.web.id.IDGenerator; @@ -50,9 +49,8 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; -import static org.hswebframework.web.commons.entity.TreeSupportEntity.*; -import static org.hswebframework.web.commons.entity.param.QueryParamEntity.*; -import static org.hswebframework.web.service.DefaultDSLQueryService.*; +import static org.hswebframework.web.commons.entity.TreeSupportEntity.id; +import static org.hswebframework.web.commons.entity.TreeSupportEntity.list2tree; import static org.springframework.util.StringUtils.isEmpty; /** @@ -67,39 +65,31 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService @Autowired - private PersonDao personDao; + private SyncRepository personPositionDao; @Autowired - private PersonPositionDao personPositionDao; + private SyncRepository positionDao; @Autowired - private PositionDao positionDao; + private SyncRepository departmentDao; @Autowired - private DepartmentDao departmentDao; + private SyncRepository organizationalDao; @Autowired - private OrganizationalDao organizationalDao; - - @Autowired - private DistrictDao districtDao; + private SyncRepository districtDao; @Autowired(required = false) private UserService userService; @Autowired - private RelationInfoDao relationInfoDao; + private SyncRepository relationInfoDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public PersonDao getDao() { - return personDao; - } - @Override @CacheEvict(allEntries = true) public String insert(PersonAuthBindEntity authBindEntity) { @@ -118,7 +108,8 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService @CacheEvict(allEntries = true) public int updateByPk(PersonAuthBindEntity authBindEntity) { if (authBindEntity.getPositionIds() != null) { - personPositionDao.deleteByPersonId(authBindEntity.getId()); + personPositionDao.createDelete() + .where(PersonPositionEntity::getPersonId, authBindEntity.getId()); syncPositionInfo(authBindEntity.getId(), authBindEntity.getPositionIds()); } if (authBindEntity.getPersonUser() != null) { @@ -139,7 +130,7 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService if (StringUtils.isEmpty(name)) { return new ArrayList<>(); } - return createQuery().where(PersonEntity.name, name).listNoPaging(); + return createQuery().where(PersonEntity.name, name).fetch(); } @Override @@ -157,7 +148,8 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService PersonAuthBindEntity bindEntity = entityFactory.newInstance(PersonAuthBindEntity.class, personEntity); Set positionIds = DefaultDSLQueryService.createQuery(personPositionDao) .where(PersonPositionEntity.personId, id) - .listNoPaging().stream() + .fetch() + .stream() .map(PersonPositionEntity::getPositionId) .collect(Collectors.toSet()); @@ -180,7 +172,9 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService if (StringUtils.isEmpty(positionId)) { return new ArrayList<>(); } - return personDao.selectByPositionId(positionId); + return createQuery() + .where().and(PersonEntity.id, "person-in-position", positionId) + .fetch(); } @Override @@ -190,8 +184,8 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService return new ArrayList<>(); } return createQuery() - .where(PersonEntity.id, "person-in-position", positionId) - .listNoPaging(); + .where().and(PersonEntity.id, "person-in-position", positionId) + .fetch(); } @Override @@ -201,8 +195,8 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService return new ArrayList<>(); } return createQuery() - .where(PersonEntity.id, "person-in-department", departmentId) - .listNoPaging(); + .where().and(PersonEntity.id, "person-in-department", departmentId) + .fetch(); } @Override @@ -212,8 +206,8 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService return new ArrayList<>(); } return createQuery() - .where(PersonEntity.id, "person-in-org", orgId) - .listNoPaging(); + .where().and(PersonEntity.id, "person-in-org", orgId) + .fetch(); } @Override @@ -222,7 +216,10 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService if (StringUtils.isEmpty(userId)) { return null; } - return createQuery().where(PersonEntity.userId, userId).single(); + return createQuery() + .where(PersonEntity.userId, userId) + .fetchOne() + .orElse(null); } @Override @@ -234,7 +231,7 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService //所有的机构 List positionId = DefaultDSLQueryService.createQuery(personPositionDao) .where().in(PersonPositionEntity.personId, personId) - .listNoPaging() + .fetch() .stream() .map(PersonPositionEntity::getPositionId) .filter(Objects::nonNull) @@ -247,7 +244,7 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService return DefaultDSLQueryService.createQuery(positionDao) .where() .in(PositionEntity.id, positionId) - .listNoPaging() + .fetch() .stream() .map(PositionEntity::getDepartmentId) .filter(Objects::nonNull) @@ -265,7 +262,7 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService return DefaultDSLQueryService.createQuery(departmentDao) .where() .in(DepartmentEntity.id, departmentId) - .listNoPaging() + .fetch() .stream() .map(DepartmentEntity::getOrgId) .filter(Objects::nonNull) @@ -279,7 +276,11 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService if (StringUtils.isEmpty(roleId)) { return new ArrayList<>(); } - return personDao.selectByRoleId(roleId); + return getDao() + .createQuery() + .where() + .and(PersonEntity::getUserId, "user-in-role", roleId) + .fetch(); } protected void syncPositionInfo(String personId, Set positionIds) { @@ -309,7 +310,7 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService int userBindSize = createQuery().where() .is(PersonEntity.userId, oldUser.getId()) .not(PersonEntity.id, bindEntity.getId()) - .total(); + .count(); tryValidateProperty(userBindSize == 0, "personUser.username", "用户已绑定其他人员"); } // 初始化用户后的操作方式 @@ -333,7 +334,9 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService @Override @CacheEvict(allEntries = true) public PersonEntity deleteByPk(String id) { - personPositionDao.deleteByPersonId(id); + personPositionDao.createDelete() + .where(PersonPositionEntity::getPersonId, id) + .execute(); return super.deleteByPk(id); } @@ -353,7 +356,7 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService // 获取用户的职位ID集合(多个职位) Set positionIds = DefaultDSLQueryService.createQuery(personPositionDao) .where(PersonPositionEntity.personId, personId) - .listNoPaging().stream() + .fetch().stream() .map(PersonPositionEntity::getPositionId) .collect(Collectors.toSet()); @@ -363,21 +366,21 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService Map districtCache = new HashMap<>(); //获取所有职位,并得到根职位(树结构) - List positionEntities = getAllChildrenAndReturnRootNode(positionDao, positionIds, PositionEntity::setChildren, rootPosList -> { + List positionEntities = getAllChildrenAndReturnRootNode(positionDao.createQuery(), positionIds, PositionEntity::setChildren, rootPosList -> { //根据职位获取部门 Set departmentIds = rootPosList.stream() .peek(positionEntity -> positionCache.put(positionEntity.getId(), positionEntity)) .map(PositionEntity::getDepartmentId) .collect(Collectors.toSet()); if (!CollectionUtils.isEmpty(departmentIds)) { - List departmentEntities = getAllChildrenAndReturnRootNode(departmentDao, departmentIds, DepartmentEntity::setChildren, rootDepList -> { + List departmentEntities = getAllChildrenAndReturnRootNode(departmentDao.createQuery(), departmentIds, DepartmentEntity::setChildren, rootDepList -> { //根据部门获取机构 Set orgIds = rootDepList.stream() .peek(departmentEntity -> departmentCache.put(departmentEntity.getId(), departmentEntity)) .map(DepartmentEntity::getOrgId) .collect(Collectors.toSet()); if (!CollectionUtils.isEmpty(orgIds)) { - List orgEntities = getAllChildrenAndReturnRootNode(organizationalDao, orgIds, OrganizationalEntity::setChildren, rootOrgList -> { + List orgEntities = getAllChildrenAndReturnRootNode(organizationalDao.createQuery(), orgIds, OrganizationalEntity::setChildren, rootOrgList -> { //根据机构获取行政区域 Set districtIds = rootOrgList.stream() .peek(org -> orgCache.put(org.getId(), org)) @@ -386,7 +389,7 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService .collect(Collectors.toSet()); if (!CollectionUtils.isEmpty(districtIds)) { List districtEntities = - getAllChildrenAndReturnRootNode(districtDao, districtIds, DistrictEntity::setChildren, + getAllChildrenAndReturnRootNode(districtDao.createQuery(), districtIds, DistrictEntity::setChildren, rootDistrictList -> rootDistrictList.forEach(dist -> districtCache.put(dist.getId(), dist))); authorization.setDistrictIds(transformationTreeNode(null, districtEntities)); @@ -448,7 +451,7 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService List relationInfoList = DefaultDSLQueryService.createQuery(relationInfoDao) .where(RelationInfoEntity.relationFrom, personId) .or(RelationInfoEntity.relationTo, personId) - .listNoPaging(); + .fetch(); List relations = relationInfoList.stream() .map(info -> { SimpleRelation relation = new SimpleRelation(); @@ -469,14 +472,13 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService /** * 获取一个树形结构的数据,并返回根节点集合 * - * @param dao 查询dao接口 * @param rootIds 根节点ID集合 * @param childAccepter 子节点接收方法 * @param rootConsumer 根节点消费回调 * @param 节点类型 * @return 根节点集合 */ - protected > List getAllChildrenAndReturnRootNode(QueryByEntityDao dao, + protected > List getAllChildrenAndReturnRootNode(SyncQuery query, Set rootIds, BiConsumer> childAccepter, Consumer> rootConsumer) { @@ -484,18 +486,17 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService return new java.util.ArrayList<>(); } //获取根节点 - List rootNodeList = newQuery() + List rootNodeList = query .where() .in(id, rootIds) - .execute(dao::query); + .fetch(); if (!rootNodeList.isEmpty()) { //所有子节点,使用节点的path属性进行快速查询,查询结果包含了根节点 - List allNode = newQuery() + List allNode = query //遍历生成查询条件: like path like ?||'%' or path like ?||'%' .... - .each(rootNodeList, (query, rootNode) -> query.or().like$(rootNode::getPath)) - .noPaging() - .execute(dao::query); + .each(rootNodeList, (q, rootNode) -> q.or().like$(rootNode::getPath)) + .fetch(); //转为树形结构 List tree = list2tree(allNode, childAccepter, (Predicate) node -> rootIds.contains(node.getId())); // 根节点判定 @@ -528,11 +529,12 @@ public class SimplePersonService extends EnableCacheAllEvictGenericEntityService @Override @Cacheable(key = "'auth:user-id:'+#userId") public PersonnelAuthentication getPersonnelAuthorizationByUserId(String userId) { - PersonEntity entity = createQuery().where(PersonEntity.userId, userId).single(); - if (entity == null) { - return null; - } - return getPersonnelAuthorizationByPersonId(entity.getId()); + return createQuery() + .where(PersonEntity.userId, userId) + .fetchOne() + .map(PersonEntity::getId) + .map(this::getPersonnelAuthorizationByPersonId) + .orElse(null); } diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePositionService.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePositionService.java index 5e29b63ef..30b0694fc 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePositionService.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePositionService.java @@ -1,27 +1,26 @@ /* * Copyright 2019 http://www.hswebframework.org - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * + * */ package org.hswebframework.web.service.organizational.simple; +import org.hswebframework.ezorm.rdb.mapping.SyncRepository; import org.hswebframework.web.BusinessException; -import org.hswebframework.web.dao.organizational.PersonDao; -import org.hswebframework.web.dao.organizational.PositionDao; +import org.hswebframework.web.entity.organizational.PersonPositionEntity; import org.hswebframework.web.entity.organizational.PositionEntity; import org.hswebframework.web.id.IDGenerator; -import org.hswebframework.web.service.AbstractTreeSortService; import org.hswebframework.web.service.EnableCacheAllEvictTreeSortService; import org.hswebframework.web.service.organizational.PositionService; import org.hswebframework.web.service.organizational.event.ClearPersonCacheEvent; @@ -30,7 +29,6 @@ import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; /** * 默认的服务实现 @@ -46,15 +44,7 @@ public class SimplePositionService extends EnableCacheAllEvictTreeSortService positionDao; @Override protected IDGenerator getIDGenerator() { @@ -64,7 +54,7 @@ public class SimplePositionService extends EnableCacheAllEvictTreeSortService 0) { throw new BusinessException("岗位中还有人员,无法删除!"); } publisher.publishEvent(new ClearPersonCacheEvent()); diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationDefineService.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationDefineService.java index 6b22449c8..645935577 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationDefineService.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationDefineService.java @@ -1,15 +1,12 @@ package org.hswebframework.web.service.organizational.simple; -import org.hswebframework.web.dao.organizational.RelationDefineDao; import org.hswebframework.web.entity.organizational.RelationDefineEntity; -import org.hswebframework.web.service.EnableCacheGenericEntityService; -import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.id.IDGenerator; +import org.hswebframework.web.service.EnableCacheGenericEntityService; import org.hswebframework.web.service.organizational.RelationDefineService; import org.hswebframework.web.service.organizational.event.ClearPersonCacheEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; @@ -22,8 +19,6 @@ import org.springframework.stereotype.Service; @CacheConfig(cacheNames = "hsweb-relation-define") public class SimpleRelationDefineService extends EnableCacheGenericEntityService implements RelationDefineService { - @Autowired - private RelationDefineDao relationDefineDao; @Autowired private ApplicationEventPublisher publisher; @@ -33,11 +28,6 @@ public class SimpleRelationDefineService extends EnableCacheGenericEntityService return IDGenerator.MD5; } - @Override - public RelationDefineDao getDao() { - return relationDefineDao; - } - @Override public String insert(RelationDefineEntity entity) { publisher.publishEvent(new ClearPersonCacheEvent()); diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationInfoService.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationInfoService.java index 4a9dab35e..fe1ea0af3 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationInfoService.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationInfoService.java @@ -1,6 +1,5 @@ package org.hswebframework.web.service.organizational.simple; -import org.hswebframework.web.dao.organizational.RelationInfoDao; import org.hswebframework.web.entity.organizational.RelationInfoEntity; import org.hswebframework.web.organizational.authorization.relation.*; import org.hswebframework.web.service.DefaultDSLQueryService; @@ -23,32 +22,26 @@ import java.util.stream.Collectors; public class SimpleRelationInfoService extends GenericEntityService implements RelationInfoService { - @Autowired - private RelationInfoDao relationInfoDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public RelationInfoDao getDao() { - return relationInfoDao; - } - @Override public Relations getRelations(String relationTypeFrom, String target) { Objects.requireNonNull(relationTypeFrom); Objects.requireNonNull(target); //获取关系 - List relationInfoList = DefaultDSLQueryService.createQuery(relationInfoDao) + List relationInfoList = getDao() + .createQuery() //where type_from='person' and(relation_from='personId' or relation_to='personId') .where(RelationInfoEntity.relationTypeFrom, relationTypeFrom) .nest() .is(RelationInfoEntity.relationFrom, target) .or(RelationInfoEntity.relationTo, target) .end() - .listNoPaging(); + .fetch(); List relations = relationInfoList.stream() .map(info -> { diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/relations/DefaultDepartmentRelations.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/relations/DefaultDepartmentRelations.java index aa41349e1..3db13328f 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/relations/DefaultDepartmentRelations.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/relations/DefaultDepartmentRelations.java @@ -25,10 +25,10 @@ public class DefaultDepartmentRelations extends DefaultLinkedRelations> departmentQuery = - Query.empty(new QueryParamEntity()).noPaging().nest(); + Query.of(new QueryParamEntity()).noPaging().nest(); private NestConditional> positionQuery = - Query.empty(new QueryParamEntity()).noPaging().nest(); + Query.of(new QueryParamEntity()).noPaging().nest(); public DefaultDepartmentRelations(ServiceContext serviceContext, Supplier> targetIdSupplier) { diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/relations/DefaultLinkedRelations.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/relations/DefaultLinkedRelations.java index 52e387d92..d393b7911 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/relations/DefaultLinkedRelations.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/relations/DefaultLinkedRelations.java @@ -24,7 +24,7 @@ public class DefaultLinkedRelations implements Linked public DefaultLinkedRelations(ServiceContext serviceContext, Supplier> targetIdSupplier) { this.serviceContext = serviceContext; this.targetIdSupplier = targetIdSupplier; - query = Query.empty(new QueryParamEntity()).nest(); + query = Query.of(new QueryParamEntity()).nest(); } @Override diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/CustomSqlTermConfiguration.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/CustomSqlTermConfiguration.java index 97e5ba90e..e5d8c301c 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/CustomSqlTermConfiguration.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/CustomSqlTermConfiguration.java @@ -17,218 +17,51 @@ public class CustomSqlTermConfiguration { //======================================================================= @Bean public InServiceTreeInSqlTerm distInSqlTerm(DistrictService districtService) { - return new InServiceTreeInSqlTerm<>(districtService, "dist", "s_district", false, false); + return new InServiceTreeInSqlTerm<>(districtService, "按行政区划查询", "dist", "s_district"); } - @Bean - public InServiceTreeInSqlTerm distInSqlTermParent(DistrictService districtService) { - return new InServiceTreeInSqlTerm<>(districtService, "dist", "s_district", false, true); - } - - @Bean - public InServiceTreeInSqlTerm distNotInSqlTerm(DistrictService districtService) { - return new InServiceTreeInSqlTerm<>(districtService, "dist", "s_district", true, false); - } - - @Bean - public InServiceTreeInSqlTerm distNotInSqlTermParent(DistrictService districtService) { - return new InServiceTreeInSqlTerm<>(districtService, "dist", "s_district", true, true); - } //======================================================================= @Bean public InServiceTreeInSqlTerm orgInSqlTerm(OrganizationalService organizationalService) { - return new InServiceTreeInSqlTerm<>(organizationalService, "org", "s_organization", false, false); - } - - @Bean - public InServiceTreeInSqlTerm orgNotInSqlTerm(OrganizationalService organizationalService) { - return new InServiceTreeInSqlTerm<>(organizationalService, "org", "s_organization", true, false); - } - - @Bean - public InServiceTreeInSqlTerm orgInSqlTermParent(OrganizationalService organizationalService) { - return new InServiceTreeInSqlTerm<>(organizationalService, "org", "s_organization", false, true); - } - - @Bean - public InServiceTreeInSqlTerm orgNotInSqlTermParent(OrganizationalService organizationalService) { - return new InServiceTreeInSqlTerm<>(organizationalService, "org", "s_organization", true, true); + return new InServiceTreeInSqlTerm<>(organizationalService, "按机构查询", "org", "s_organization"); } //======================================================================= @Bean public InServiceTreeInSqlTerm departmentInSqlTerm(DepartmentService departmentService) { - return new InServiceTreeInSqlTerm<>(departmentService, "dept", "s_department", false, false); + return new InServiceTreeInSqlTerm<>(departmentService, "按部门查询","dept", "s_department"); } - @Bean - public InServiceTreeInSqlTerm departmentNotInSqlTerm(DepartmentService departmentService) { - return new InServiceTreeInSqlTerm<>(departmentService, "dept", "s_department", true, false); - } - - @Bean - public InServiceTreeInSqlTerm departmentInSqlTermParent(DepartmentService departmentService) { - return new InServiceTreeInSqlTerm<>(departmentService, "dept", "s_department", false, true); - } - - @Bean - public InServiceTreeInSqlTerm departmentNotInSqlTermParent(DepartmentService departmentService) { - return new InServiceTreeInSqlTerm<>(departmentService, "dept", "s_department", true, true); - } - - /*====================================================================================*/ @Bean public UserInSqlTerm userInPositionSqlTerm(PositionService positionService) { - return new UserInPositionSqlTerm(false, false, "user-in-position", positionService); + return new UserInPositionSqlTerm("user-in-position", positionService); } - @Bean - public UserInSqlTerm userNotInPositionSqlTerm(PositionService positionService) { - - return new UserInPositionSqlTerm(true, false, "user-not-in-position", positionService); - } - - @Bean - public UserInSqlTerm userInPositionChildSqlTerm(PositionService positionService) { - - return new UserInPositionSqlTerm(false, true, "user-in-position-child", positionService).forChild(); - } - - @Bean - public UserInSqlTerm userNotInPositionChildSqlTerm(PositionService positionService) { - - return new UserInPositionSqlTerm(true, true, "user-not-in-position-child", positionService).forChild(); - } - - @Bean - public UserInSqlTerm userInPositionParentSqlTerm(PositionService positionService) { - - return new UserInPositionSqlTerm(false, true, "user-in-position-parent", positionService).forParent(); - } - - @Bean - public UserInSqlTerm userNotInPositionParentSqlTerm(PositionService positionService) { - return new UserInPositionSqlTerm(true, true, "user-not-in-position-parent", positionService).forParent(); - } - /*====================================================================================*/ + /*====================================================================================*/ @Bean public UserInSqlTerm personInPositionSqlTerm(PositionService positionService) { - return new UserInPositionSqlTerm(false, false, "person-in-position", positionService).forPerson(); + return new UserInPositionSqlTerm("person-in-position", positionService).forPerson(); } - @Bean - public UserInSqlTerm personNotInPositionSqlTerm(PositionService positionService) { - - return new UserInPositionSqlTerm(true, false, "person-not-in-position", positionService).forPerson(); - } - - @Bean - public UserInSqlTerm personInPositionChildSqlTerm(PositionService positionService) { - - return new UserInPositionSqlTerm(false, true, "person-in-position-child", positionService).forPerson(); - } - - @Bean - public UserInSqlTerm personNotInPositionChildSqlTerm(PositionService positionService) { - - return new UserInPositionSqlTerm(true, true, "person-not-in-position-child", positionService).forPerson(); - } - - @Bean - public UserInSqlTerm personInPositionParentSqlTerm(PositionService positionService) { - - return new UserInPositionSqlTerm(false, true, "person-in-position-parent", positionService).forPerson().forParent(); - } - - @Bean - public UserInSqlTerm personNotInPositionParentSqlTerm(PositionService positionService) { - - return new UserInPositionSqlTerm(true, true, "person-not-in-position-parent", positionService).forPerson().forParent(); - } /*====================================================================================*/ @Bean public UserInSqlTerm userInDepartmentSqlTerm(DepartmentService departmentService) { - return new UserInDepartmentSqlTerm(false, false, "user-in-department", departmentService); - } - - @Bean - public UserInSqlTerm userNotInDepartmentSqlTerm(DepartmentService departmentService) { - - return new UserInDepartmentSqlTerm(true, false, "user-not-in-department", departmentService); - } - - @Bean - public UserInSqlTerm userInDepartmentChildSqlTerm(DepartmentService departmentService) { - - return new UserInDepartmentSqlTerm(false, true, "user-in-department-child", departmentService).forChild(); - } - - @Bean - public UserInSqlTerm userNotInDepartmentChildSqlTerm(DepartmentService departmentService) { - - return new UserInDepartmentSqlTerm(true, true, "user-not-in-department-child", departmentService).forChild(); - } - - - @Bean - public UserInSqlTerm userInDepartmentParentSqlTerm(DepartmentService departmentService) { - - return new UserInDepartmentSqlTerm(false, true, "user-in-department-parent", departmentService).forParent(); - } - - @Bean - public UserInSqlTerm userNotInDepartmentParentSqlTerm(DepartmentService departmentService) { - - return new UserInDepartmentSqlTerm(true, true, "user-not-in-department-parent", departmentService).forParent(); + return new UserInDepartmentSqlTerm( "user-in-department", departmentService); } /*====================================================================================*/ @Bean public UserInSqlTerm personInDepartmentSqlTerm(DepartmentService departmentService) { - return new UserInDepartmentSqlTerm(false, false, "person-in-department", departmentService).forPerson(); - } - - @Bean - public UserInSqlTerm personNotInDepartmentSqlTerm(DepartmentService departmentService) { - - return new UserInDepartmentSqlTerm(true, false, "person-not-in-department", departmentService).forPerson(); - } - - @Bean - public UserInSqlTerm personInDepartmentChildSqlTerm(DepartmentService departmentService) { - - return new UserInDepartmentSqlTerm(false, true, "person-in-department-child", departmentService).forPerson(); - } - - @Bean - public UserInSqlTerm personNotInDepartmentChildSqlTerm(DepartmentService departmentService) { - - return new UserInDepartmentSqlTerm(true, true, "person-not-in-department-child", departmentService).forPerson(); - } - - @Bean - public UserInSqlTerm personInDepartmentParentSqlTerm(DepartmentService departmentService) { - - return new UserInDepartmentSqlTerm(false, true, "person-in-department-parent", departmentService) - .forPerson() - .forParent(); - } - - @Bean - public UserInSqlTerm personNotInDepartmentParentSqlTerm(DepartmentService departmentService) { - - return new UserInDepartmentSqlTerm(true, true, "person-not-in-department-parent", departmentService) - .forPerson() - .forParent(); + return new UserInDepartmentSqlTerm( "person-in-department", departmentService).forPerson(); } @@ -236,38 +69,7 @@ public class CustomSqlTermConfiguration { @Bean public UserInSqlTerm userInOrgSqlTerm(OrganizationalService organizationalService) { - return new UserInOrgSqlTerm(false, false, "user-in-org", organizationalService); - } - - @Bean - public UserInSqlTerm userNotInOrgSqlTerm(OrganizationalService organizationalService) { - - return new UserInOrgSqlTerm(true, false, "user-not-in-org", organizationalService); - } - - @Bean - public UserInSqlTerm userInOrgChildSqlTerm(OrganizationalService organizationalService) { - - return new UserInOrgSqlTerm(false, true, "user-in-org-child", organizationalService); - } - - @Bean - public UserInSqlTerm userNotInOrgChildSqlTerm(OrganizationalService organizationalService) { - - return new UserInOrgSqlTerm(true, true, "user-not-in-org-child", organizationalService); - } - - - @Bean - public UserInSqlTerm userInOrgParentSqlTerm(OrganizationalService organizationalService) { - - return new UserInOrgSqlTerm(false, true, "user-in-org-parent", organizationalService).forParent(); - } - - @Bean - public UserInSqlTerm userNotInOrgParentSqlTerm(OrganizationalService organizationalService) { - - return new UserInOrgSqlTerm(true, true, "user-not-in-org-parent", organizationalService).forParent(); + return new UserInOrgSqlTerm("user-in-org", organizationalService); } @@ -275,112 +77,23 @@ public class CustomSqlTermConfiguration { @Bean public UserInSqlTerm personInOrgSqlTerm(OrganizationalService organizationalService) { - return new UserInOrgSqlTerm(false, false, "person-in-org", organizationalService).forPerson(); - } - - @Bean - public UserInSqlTerm personNotInOrgSqlTerm(OrganizationalService organizationalService) { - - return new UserInOrgSqlTerm(true, false, "person-not-in-org", organizationalService).forPerson(); - } - - @Bean - public UserInSqlTerm personInOrgChildSqlTerm(OrganizationalService organizationalService) { - - return new UserInOrgSqlTerm(false, true, "person-in-org-child", organizationalService).forPerson(); - } - - @Bean - public UserInSqlTerm personNotInOrgChildSqlTerm(OrganizationalService organizationalService) { - - return new UserInOrgSqlTerm(true, true, "person-not-in-org-child", organizationalService).forPerson(); - } - - @Bean - public UserInSqlTerm personInOrgParentSqlTerm(OrganizationalService organizationalService) { - - return new UserInOrgSqlTerm(false, true, "person-in-org-parent", organizationalService).forPerson().forParent(); - } - - @Bean - public UserInSqlTerm personNotInOrgParentSqlTerm(OrganizationalService organizationalService) { - - return new UserInOrgSqlTerm(true, true, "person-not-in-org-parent", organizationalService).forPerson().forParent(); + return new UserInOrgSqlTerm( "person-in-org", organizationalService).forPerson(); } /*====================================================================================*/ @Bean public UserInSqlTerm userInDistSqlTerm(DistrictService districtService) { - return new UserInDistSqlTerm(false, false, "user-in-dist", districtService); - } - - @Bean - public UserInSqlTerm userNotInDistSqlTerm(DistrictService districtService) { - - return new UserInDistSqlTerm(true, false, "user-not-in-dist", districtService); - } - - @Bean - public UserInSqlTerm userInDistChildSqlTerm(DistrictService districtService) { - - return new UserInDistSqlTerm(false, true, "user-in-dist-child", districtService); - } - - @Bean - public UserInSqlTerm userNotInDistChildSqlTerm(DistrictService districtService) { - - return new UserInDistSqlTerm(true, true, "user-not-in-dist-child", districtService); - } - - @Bean - public UserInSqlTerm userInDistParentSqlTerm(DistrictService districtService) { - - return new UserInDistSqlTerm(false, true, "user-in-dist-parent", districtService).forParent(); - } - - @Bean - public UserInSqlTerm userNotInDistParentSqlTerm(DistrictService districtService) { - - return new UserInDistSqlTerm(true, true, "user-not-in-dist-parent", districtService).forParent(); + return new UserInDistSqlTerm( "user-in-dist", districtService); } /*====================================================================================*/ @Bean public UserInSqlTerm personInDistSqlTerm(DistrictService districtService) { - return new UserInDistSqlTerm(false, false, "person-in-dist", districtService).forPerson(); + return new UserInDistSqlTerm( "person-in-dist", districtService).forPerson(); } - @Bean - public UserInSqlTerm personNotInDistSqlTerm(DistrictService districtService) { - - return new UserInDistSqlTerm(true, false, "person-not-in-dist", districtService).forPerson(); - } - - @Bean - public UserInSqlTerm personInDistChildSqlTerm(DistrictService districtService) { - - return new UserInDistSqlTerm(false, true, "person-in-dist-child", districtService).forPerson(); - } - - @Bean - public UserInSqlTerm personNotInDistChildSqlTerm(DistrictService districtService) { - - return new UserInDistSqlTerm(true, true, "person-not-in-dist-child", districtService).forPerson(); - } - - @Bean - public UserInSqlTerm personInDistParentSqlTerm(DistrictService districtService) { - - return new UserInDistSqlTerm(false, true, "person-in-dist-parent", districtService).forPerson().forParent(); - } - - @Bean - public UserInSqlTerm personNotInDistParentSqlTerm(DistrictService districtService) { - - return new UserInDistSqlTerm(true, true, "person-not-in-dist-parent", districtService).forPerson().forParent(); - } } diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/InServiceTreeInSqlTerm.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/InServiceTreeInSqlTerm.java index 9f2205ab0..60e2050e0 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/InServiceTreeInSqlTerm.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/InServiceTreeInSqlTerm.java @@ -1,9 +1,10 @@ package org.hswebframework.web.service.organizational.simple.terms; +import lombok.Getter; import org.hswebframework.web.commons.entity.TreeSupportEntity; -import org.hswebframework.web.dao.mybatis.mapper.TreeStructureSqlTermCustomizer; import org.hswebframework.web.datasource.DataSourceHolder; import org.hswebframework.web.service.QueryService; +import org.hswebframework.web.service.terms.TreeStructureSqlTermCustomizer; import java.util.List; import java.util.Objects; @@ -19,13 +20,17 @@ public class InServiceTreeInSqlTerm extends TreeStructureSqlTermCustomizer { private String tableName; + @Getter + private String name; + public InServiceTreeInSqlTerm(QueryService, PK> service, + String name, String prefix, - String tableName, - boolean not, boolean parent) { - super(prefix + "-" + (parent ? "parent" : "child") + "-" + (not ? "not-" : "") + "in", not, parent); + String tableName) { + super(prefix); this.treeService = service; this.tableName = tableName; + this.name = name; } @Override diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInDepartmentSqlTerm.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInDepartmentSqlTerm.java index 3fd26cf79..5b0cdf20a 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInDepartmentSqlTerm.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInDepartmentSqlTerm.java @@ -1,30 +1,22 @@ package org.hswebframework.web.service.organizational.simple.terms; import org.hswebframework.ezorm.core.param.Term; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.ezorm.rdb.render.dialect.term.BoostTermTypeMapper; -import org.hswebframework.web.dao.mybatis.mapper.ChangedTermValue; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.PrepareSqlFragments; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments; import org.hswebframework.web.service.organizational.DepartmentService; import java.util.List; /** - * 查询岗位中的用户 - * * @author zhouhao - * @since 3.0.0-RC + * @since 3.1 */ public class UserInDepartmentSqlTerm extends UserInSqlTerm { - private boolean not; - - public UserInDepartmentSqlTerm(boolean not, boolean child, String term, DepartmentService departmentService) { + public UserInDepartmentSqlTerm(String term, DepartmentService departmentService) { super(term, departmentService); - setChild(child); - this.not = not; } @Override @@ -33,32 +25,36 @@ public class UserInDepartmentSqlTerm extends UserInSqlTerm { } @Override - public SqlAppender accept(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) { - ChangedTermValue termValue = createChangedTermValue(term); + public SqlFragments createFragments(String columnFullName, RDBColumnMetadata column, Term term) { + PrepareSqlFragments fragments = PrepareSqlFragments.of(); + boolean not = term.getOptions().contains("not"); + boolean child = term.getOptions().contains("child"); + boolean parent = term.getOptions().contains("parent"); - Dialect dialect = column.getTableMetaData().getDatabaseMetaData().getDialect(); - - SqlAppender appender = new SqlAppender(); - appender.addSpc(not ? "not" : "", "exists(select 1 from ", - getTableFullName("s_person_position")," _tmp,", - getTableFullName("s_position")," _pos,", - getTableFullName("s_person")," _person"); - if (isChild() || isParent()) { - appender.addSpc(",",getTableFullName("s_department")," _dept"); + fragments.addSql(not ? "not" : "", "exists(select 1 from ", + getTableFullName("s_person_position"), " _tmp,", + getTableFullName("s_position"), " _pos,", + getTableFullName("s_person"), " _person"); + if (child || parent) { + fragments.addSql(",", getTableFullName("s_department"), " _dept"); } - appender.addSpc("where _person.u_id=_tmp.person_id and _tmp.position_id = _pos.u_id and _person.u_id=_tmp.person_id" - , "and", createColumnName(column, tableAlias), "=", isForPerson() ? "_tmp.person_id" : "_person.user_id"); - if (isChild() || isParent()) { - appender.addSpc("and _dept.u_id=_pos.department_id"); + fragments.addSql("where _person.u_id=_tmp.person_id and _tmp.position_id = _pos.u_id and _person.u_id=_tmp.person_id" + , "and", columnFullName, "=", isForPerson() ? "_tmp.person_id" : "_person.user_id"); + if (child || parent) { + fragments.addSql("and _dept.u_id=_pos.department_id"); } - - List positionIdList = BoostTermTypeMapper.convertList(column, termValue.getOld()); + List positionIdList = convertList(term.getValue()); if (!positionIdList.isEmpty()) { - appender.addSpc("and"); - termValue.setValue(appendCondition(positionIdList, wherePrefix, appender, "_pos.department_id", dialect)); + fragments.addSql("and"); + appendCondition("_pos.department_id", fragments, column, term, positionIdList); } + fragments.addSql(")"); + return fragments; + } - appender.add(")"); - return appender; + + @Override + public String getName() { + return "根据" + (isForPerson() ? "人员" : "用户") + "按部门查询"; } } diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInDistSqlTerm.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInDistSqlTerm.java index 9e2ed1557..df6853c5b 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInDistSqlTerm.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInDistSqlTerm.java @@ -1,30 +1,25 @@ package org.hswebframework.web.service.organizational.simple.terms; import org.hswebframework.ezorm.core.param.Term; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.ezorm.rdb.render.dialect.term.BoostTermTypeMapper; -import org.hswebframework.web.dao.mybatis.mapper.ChangedTermValue; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.PrepareSqlFragments; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments; import org.hswebframework.web.service.organizational.DistrictService; import java.util.List; /** - * 查询岗位中的用户 + * 按地区查询 * * @author zhouhao - * @since 3.0.0-RC + * @since 3.1 */ public class UserInDistSqlTerm extends UserInSqlTerm { - private boolean not; - - public UserInDistSqlTerm(boolean not, boolean child, String term, DistrictService service) { + public UserInDistSqlTerm(String term, DistrictService service) { super(term, service); - setChild(child); - this.not = not; + } @Override @@ -32,34 +27,39 @@ public class UserInDistSqlTerm extends UserInSqlTerm { return "_dist"; } - @Override - public SqlAppender accept(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) { - ChangedTermValue termValue = createChangedTermValue(term); - Dialect dialect = column.getTableMetaData().getDatabaseMetaData().getDialect(); + public SqlFragments createFragments(String columnFullName, RDBColumnMetadata column, Term term) { + boolean not = term.getOptions().contains("not"); + boolean child = term.getOptions().contains("child"); + boolean parent = term.getOptions().contains("parent"); - SqlAppender appender = new SqlAppender(); - appender.addSpc(not ? "not" : "", "exists(select 1 from ", + PrepareSqlFragments fragments = PrepareSqlFragments.of(); + + fragments.addSql(not ? "not" : "", "exists(select 1 from ", getTableFullName("s_person_position"), " _tmp,", getTableFullName("s_position"), " _pos,", getTableFullName("s_person"), " _person,", getTableFullName("s_department"), " _dept,", getTableFullName("s_organization"), " _org"); - if (isChild() || isParent()) { - appender.addSpc(",",getTableFullName("s_district")," _dist"); + if (child || parent) { + fragments.addSql(",", getTableFullName("s_district"), " _dist"); } - appender.addSpc("where _person.u_id=_tmp.person_id and _tmp.position_id = _pos.u_id and _person.u_id=_tmp.person_id and _dept.u_id=_pos.department_id and _org.u_id=_dept.org_id" - , "and", createColumnName(column, tableAlias), "=", isForPerson() ? "_tmp.person_id" : "_person.user_id"); - if (isChild() || isParent()) { - appender.addSpc("and _org.district_id=_dist.u_id"); + fragments.addSql("where _person.u_id=_tmp.person_id and _tmp.position_id = _pos.u_id and _person.u_id=_tmp.person_id and _dept.u_id=_pos.department_id and _org.u_id=_dept.org_id" + , "and", columnFullName, "=", isForPerson() ? "_tmp.person_id" : "_person.user_id"); + if (child || parent) { + fragments.addSql("and _org.district_id=_dist.u_id"); } - List positionIdList = BoostTermTypeMapper.convertList(column, termValue.getOld()); + List positionIdList = convertList(term.getValue()); if (!positionIdList.isEmpty()) { - appender.addSpc("and"); - termValue.setValue(appendCondition(positionIdList, wherePrefix, appender, "_org.district_id", dialect)); + fragments.addSql("and"); + appendCondition("_org.district_id", fragments, column, term, positionIdList); } + fragments.addSql(")"); + return fragments; + } - appender.add(")"); - return appender; + @Override + public String getName() { + return "根据" + (isForPerson() ? "人员" : "用户") + "按行政区划查询"; } } diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInOrgSqlTerm.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInOrgSqlTerm.java index 8f5efc751..e8f83550e 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInOrgSqlTerm.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInOrgSqlTerm.java @@ -1,11 +1,9 @@ package org.hswebframework.web.service.organizational.simple.terms; import org.hswebframework.ezorm.core.param.Term; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.ezorm.rdb.render.dialect.term.BoostTermTypeMapper; -import org.hswebframework.web.dao.mybatis.mapper.ChangedTermValue; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.PrepareSqlFragments; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments; import org.hswebframework.web.service.organizational.OrganizationalService; import java.util.List; @@ -15,16 +13,12 @@ import java.util.List; * 查询岗位中的用户 * * @author zhouhao - * @since 3.0.0-RC + * @since 3.1 */ public class UserInOrgSqlTerm extends UserInSqlTerm { - private boolean not; - - public UserInOrgSqlTerm(boolean not, boolean child, String term, OrganizationalService service) { + public UserInOrgSqlTerm( String term, OrganizationalService service) { super(term, service); - setChild(child); - this.not = not; } @Override @@ -33,31 +27,37 @@ public class UserInOrgSqlTerm extends UserInSqlTerm { } @Override - public SqlAppender accept(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) { - ChangedTermValue termValue = createChangedTermValue(term); - Dialect dialect = column.getTableMetaData().getDatabaseMetaData().getDialect(); + public SqlFragments createFragments(String columnFullName, RDBColumnMetadata column, Term term) { + PrepareSqlFragments fragments = PrepareSqlFragments.of(); + boolean not = term.getOptions().contains("not"); + boolean child = term.getOptions().contains("child"); + boolean parent = term.getOptions().contains("parent"); - SqlAppender appender = new SqlAppender(); - appender.addSpc(not ? "not" : "", "exists(select 1 from ", + fragments.addSql(not ? "not" : "", "exists(select 1 from ", getTableFullName("s_person_position")," _tmp,", getTableFullName("s_position")," _pos,", getTableFullName("s_department")," _dept,", getTableFullName("s_person")," _person"); - if (isChild()||isParent()) { - appender.addSpc(",",getTableFullName("s_organization")," _org"); + if (child || parent) { + fragments.addSql(",",getTableFullName("s_organization")," _org"); } - appender.addSpc("where _person.u_id=_tmp.person_id and _tmp.position_id = _pos.u_id and _person.u_id=_tmp.person_id and _dept.u_id=_pos.department_id" - , "and", createColumnName(column, tableAlias), "=", isForPerson() ? "_tmp.person_id" : "_person.user_id"); - if (isChild()||isParent()) { - appender.addSpc("and _org.u_id=_dept.org_id"); + fragments.addSql("where _person.u_id=_tmp.person_id and _tmp.position_id = _pos.u_id and _person.u_id=_tmp.person_id and _dept.u_id=_pos.department_id" + , "and",columnFullName, "=", isForPerson() ? "_tmp.person_id" : "_person.user_id"); + if (child || parent) { + fragments.addSql("and _org.u_id=_dept.org_id"); } - List positionIdList = BoostTermTypeMapper.convertList(column, termValue.getOld()); + List positionIdList = convertList(term.getValue()); if (!positionIdList.isEmpty()) { - appender.addSpc("and"); - termValue.setValue(appendCondition(positionIdList, wherePrefix, appender, "_dept.org_id", dialect)); + fragments.addSql("and"); + appendCondition("_dept.org_id", fragments, column,term, positionIdList); } + fragments.addSql(")"); + return fragments; + } - appender.add(")"); - return appender; + + @Override + public String getName() { + return "根据" + (isForPerson() ? "人员" : "用户") + "按机构查询"; } } diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInPositionSqlTerm.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInPositionSqlTerm.java index df52d17a6..cb9395af0 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInPositionSqlTerm.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInPositionSqlTerm.java @@ -1,11 +1,9 @@ package org.hswebframework.web.service.organizational.simple.terms; import org.hswebframework.ezorm.core.param.Term; -import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.ezorm.rdb.render.dialect.term.BoostTermTypeMapper; -import org.hswebframework.web.dao.mybatis.mapper.ChangedTermValue; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.PrepareSqlFragments; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments; import org.hswebframework.web.service.organizational.PositionService; import java.util.List; @@ -19,12 +17,10 @@ import java.util.List; */ public class UserInPositionSqlTerm extends UserInSqlTerm { - private boolean not; - public UserInPositionSqlTerm(boolean not, boolean child, String term, PositionService positionService) { + public UserInPositionSqlTerm(String term, PositionService positionService) { super(term, positionService); - setChild(child); - this.not = not; + } @Override @@ -33,35 +29,38 @@ public class UserInPositionSqlTerm extends UserInSqlTerm { } @Override - public SqlAppender accept(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) { - ChangedTermValue termValue = createChangedTermValue(term); - Dialect dialect=column.getTableMetaData().getDatabaseMetaData().getDialect(); + public SqlFragments createFragments(String columnFullName, RDBColumnMetadata column, Term term) { + PrepareSqlFragments fragments = PrepareSqlFragments.of(); - SqlAppender appender = new SqlAppender(); - appender.addSpc(not ? "not" : "", "exists(select 1 from ",getTableFullName("s_person_position")," _tmp"); - if (isChild()||isParent()) { - appender.addSpc(",",getTableFullName("s_position")," _pos"); + boolean not = term.getOptions().contains("not"); + boolean child = term.getOptions().contains("child"); + boolean parent = term.getOptions().contains("parent"); + + + fragments.addSql(not ? "not" : "", "exists(select 1 from ", getTableFullName("s_person_position"), " _tmp"); + if (child || parent) { + fragments.addSql(",", getTableFullName("s_position"), " _pos"); } if (!isForPerson()) { - appender.addSpc(",",getTableFullName("s_person")," _person"); + fragments.addSql(",", getTableFullName("s_person"), " _person"); } - - appender.addSpc("where ", - createColumnName(column, tableAlias), "=", + fragments.addSql("where ", + columnFullName, "=", isForPerson() ? " _tmp.person_id" : "_person.user_id and _person.u_id=_tmp.person_id"); - - if (isChild()||isParent()) { - appender.addSpc("and _pos.u_id=_tmp.position_id"); + if (child || parent) { + fragments.addSql("and _pos.u_id=_tmp.position_id"); } - - List positionIdList = BoostTermTypeMapper.convertList(column, termValue.getOld()); + List positionIdList = convertList(term.getValue()); if (!positionIdList.isEmpty()) { - appender.addSpc("and"); - termValue.setValue(appendCondition(positionIdList, wherePrefix, appender, "_tmp.position_id",dialect)); + fragments.addSql("and"); + appendCondition("_tmp.position_id", fragments, column,term, positionIdList); } + fragments.addSql(")"); + return fragments; + } - appender.add(")"); - - return appender; + @Override + public String getName() { + return "根据" + (isForPerson() ? "人员" : "用户") + "按岗位查询"; } } diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInSqlTerm.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInSqlTerm.java index bda1c85cf..8a3378eec 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInSqlTerm.java +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/service/organizational/simple/terms/UserInSqlTerm.java @@ -3,23 +3,21 @@ package org.hswebframework.web.service.organizational.simple.terms; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import org.hswebframework.ezorm.rdb.render.SqlAppender; -import org.hswebframework.ezorm.rdb.render.dialect.Dialect; -import org.hswebframework.ezorm.rdb.render.dialect.RenderPhase; -import org.hswebframework.ezorm.rdb.render.dialect.function.SqlFunction; +import org.hswebframework.ezorm.core.param.Term; +import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.PrepareSqlFragments; +import org.hswebframework.ezorm.rdb.operator.builder.fragments.function.FunctionFragmentBuilder; import org.hswebframework.web.commons.entity.TreeSupportEntity; -import org.hswebframework.web.dao.mybatis.mapper.AbstractSqlTermCustomizer; import org.hswebframework.web.datasource.DataSourceHolder; import org.hswebframework.web.service.QueryService; +import org.hswebframework.web.service.terms.AbstractSqlTermCustomizer; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** - * 查询岗位中的用户 + * 查询根据用户查询某🀄️数据 * * @author zhouhao * @since 3.0.0-RC @@ -28,30 +26,14 @@ import java.util.stream.Collectors; public abstract class UserInSqlTerm extends AbstractSqlTermCustomizer { - @Setter - @Getter - private boolean child; - - @Getter - @Setter - private boolean parent; @Getter @Setter private boolean forPerson; - QueryService, PK> treeService; + protected QueryService, PK> treeService; - public UserInSqlTerm forChild() { - setChild(true); - return this; - } - - public UserInSqlTerm forParent() { - setParent(true); - return this; - } public UserInSqlTerm forPerson() { this.forPerson = true; @@ -65,7 +47,7 @@ public abstract class UserInSqlTerm extends AbstractSqlTermCustomizer { public abstract String getTableName(); - protected String getTableFullName(String tableName){ + protected String getTableFullName(String tableName) { String db = DataSourceHolder.databaseSwitcher().currentDatabase(); if (db != null) { return db.concat(".").concat(tableName); @@ -73,43 +55,54 @@ public abstract class UserInSqlTerm extends AbstractSqlTermCustomizer { return tableName; } - protected Object appendCondition(List values, String wherePrefix, SqlAppender appender, String column, Dialect dialect) { - if (!child&&!parent) { - appender.addSpc(column); - return super.appendCondition(values, wherePrefix, appender); + @SuppressWarnings("all") + protected void appendCondition(String table, PrepareSqlFragments fragments, RDBColumnMetadata column, Term term, List values) { + boolean not = term.getOptions().contains("not"); + + boolean child = term.getOptions().contains("child"); + boolean parent = term.getOptions().contains("parent"); + + if (!child && !parent) { + super.appendCondition(fragments, column, values); } else { List paths = getTreePathByTerm(values) .stream() .map(path -> parent ? path : path.concat("%")) .collect(Collectors.toList()); + int len = paths.size(); if (len == 0) { - appender.add("1=2"); + fragments.addSql("1=2"); } else { - appender.add("("); + fragments.addSql("("); for (int i = 0; i < len; i++) { if (i > 0) { - appender.addSpc("or"); + fragments.addSql("or"); } if (parent) { - SqlFunction function = dialect.getFunction(SqlFunction.concat); + FunctionFragmentBuilder function = column.findFeature(FunctionFragmentBuilder.createFeatureId("concat")).orElse(null); + String concat; if (function == null) { concat = getTableName() + ".path"; - log.warn("数据库方言未支持concat函数,你可以调用Dialect.installFunction进行设置!"); + log.warn("数据库不支持concat函数(FunctionFragmentBuilder)!"); + fragments.addSql("? like ", paths.get(i)).addSql("like", concat); } else { - concat = function.apply(SqlFunction.Param.of(RenderPhase.where, Arrays.asList(getTableName() + ".path", "'%'"))); + Map param = new HashMap<>(); + param.put("0", "'tmp.path'"); + param.put("1", "'%'"); + + //? like concat(tmp.path,'%') + fragments.addSql("? like ", paths.get(i)).addSql("like").addFragments(function.create(table, column, param)); } - // aaa-vvv-ccc like aaa% - appender.add("#{", wherePrefix, ".value.value[", i, "]}", " like ", concat); + } else { - appender.add(getTableName(), ".path like #{", wherePrefix, ".value.value[", i, "]}"); + fragments.addSql(table, "like ?", paths.get(i)); } } - appender.add(")"); + fragments.addSql(")"); } - return paths; } } diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-starter/pom.xml b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-starter/pom.xml index d278ffa76..0d6d7c119 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-starter/pom.xml +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-starter/pom.xml @@ -22,7 +22,7 @@ hsweb-system-organizational org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-web/pom.xml b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-web/pom.xml index 5c9de6abd..31c8ab89e 100644 --- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-web/pom.xml +++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-organizational org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-organizational/pom.xml b/hsweb-system/hsweb-system-organizational/pom.xml index ee323e58f..59f34d271 100644 --- a/hsweb-system/hsweb-system-organizational/pom.xml +++ b/hsweb-system/hsweb-system-organizational/pom.xml @@ -22,7 +22,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-schedule/README.md b/hsweb-system/hsweb-system-schedule/README.md deleted file mode 100644 index 0d1c89baf..000000000 --- a/hsweb-system/hsweb-system-schedule/README.md +++ /dev/null @@ -1,4 +0,0 @@ -## 任务调度管理 -在线维护定时任务 -## API -//todo \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/pom.xml b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/pom.xml deleted file mode 100644 index 3969014eb..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - hsweb-system-schedule - org.hswebframework.web - 3.0.10-SNAPSHOT - - 4.0.0 - - hsweb-system-schedule-api - - - - - org.hswebframework.web - hsweb-commons-service-api - ${project.version} - - - org.quartz-scheduler - quartz - - - \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/entity/schedule/ScheduleJobEntity.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/entity/schedule/ScheduleJobEntity.java deleted file mode 100644 index c21baaa32..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/entity/schedule/ScheduleJobEntity.java +++ /dev/null @@ -1,141 +0,0 @@ -package org.hswebframework.web.entity.schedule; - -import org.hswebframework.web.commons.entity.GenericEntity; - -/** - * 调度任务 实体 - * - * @author hsweb-generator-online - */ -public interface ScheduleJobEntity extends GenericEntity { - /*------------------------------------------- - | 属性名常量 | - ===========================================*/ - /** - * 任务名称 - */ - String name = "name"; - /** - * 备注 - */ - String remark = "remark"; - /** - * 定时调度配置 - */ - String quartzConfig = "quartzConfig"; - /** - * 执行脚本 - */ - String script = "script"; - /** - * 脚本语言 - */ - String language = "language"; - /** - * 是否启用 - */ - String status = "status"; - /** - * 启动参数 - */ - String parameters = "parameters"; - /** - * 任务类型 - */ - String type = "type"; - /** - * 标签 - */ - String tags = "tags"; - - /** - * @return 任务名称 - */ - String getName(); - - /** - * @param name 任务名称 - */ - void setName(String name); - - /** - * @return 备注 - */ - String getRemark(); - - /** - * @param remark 备注 - */ - void setRemark(String remark); - - /** - * @return 定时调度配置 - */ - String getQuartzConfig(); - - /** - * @param quartzConfig 定时调度配置 - */ - void setQuartzConfig(String quartzConfig); - - /** - * @return 执行脚本 - */ - String getScript(); - - /** - * @param script 执行脚本 - */ - void setScript(String script); - - /** - * @return 脚本语言 - */ - String getLanguage(); - - /** - * @param language 脚本语言 - */ - void setLanguage(String language); - - /** - * @return 是否启用 - */ - Byte getStatus(); - - /** - * @param status 是否启用 - */ - void setStatus(Byte status); - - /** - * @return 启动参数 - */ - String getParameters(); - - /** - * @param parameters 启动参数 - */ - void setParameters(String parameters); - - /** - * @return 任务类型 - */ - String getType(); - - /** - * @param type 任务类型 - */ - void setType(String type); - - /** - * @return 标签 - */ - String getTags(); - - /** - * @param tags 标签 - */ - void setTags(String tags); - -} \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/entity/schedule/SimpleScheduleJobEntity.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/entity/schedule/SimpleScheduleJobEntity.java deleted file mode 100644 index 861001331..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/entity/schedule/SimpleScheduleJobEntity.java +++ /dev/null @@ -1,163 +0,0 @@ -package org.hswebframework.web.entity.schedule; -import org.hswebframework.web.commons.entity.SimpleGenericEntity; - -/** -* 调度任务 -* @author hsweb-generator-online -*/ -public class SimpleScheduleJobEntity extends SimpleGenericEntity implements ScheduleJobEntity{ - //任务名称 - private String name; - //备注 - private String remark; - //定时调度配置 - private String quartzConfig; - //执行脚本 - private String script; - //脚本语言 - private String language; - //是否启用 - private Byte status; - //启动参数 - private String parameters; - //任务类型 - private String type; - //标签 - private String tags; - - /** - * @return 任务名称 - */ - @Override - public String getName(){ - return this.name; - } - - /** - * @param name 任务名称 - */ - @Override - public void setName(String name){ - this.name=name; - } - /** - * @return 备注 - */ - @Override - public String getRemark(){ - return this.remark; - } - - /** - * @param remark 备注 - */ - @Override - public void setRemark(String remark){ - this.remark=remark; - } - /** - * @return 定时调度配置 - */ - @Override - public String getQuartzConfig(){ - return this.quartzConfig; - } - - /** - * @param quartzConfig 定时调度配置 - */ - @Override - public void setQuartzConfig(String quartzConfig){ - this.quartzConfig = quartzConfig; - } - /** - * @return 执行脚本 - */ - @Override - public String getScript(){ - return this.script; - } - - /** - * @param script 执行脚本 - */ - @Override - public void setScript(String script){ - this.script=script; - } - /** - * @return 脚本语言 - */ - @Override - public String getLanguage(){ - return this.language; - } - - /** - * @param language 脚本语言 - */ - @Override - public void setLanguage(String language){ - this.language=language; - } - /** - * @return 是否启用 - */ - @Override - public Byte getStatus(){ - return this.status; - } - - /** - * @param status 是否启用 - */ - @Override - public void setStatus(Byte status){ - this.status = status; - } - /** - * @return 启动参数 - */ - @Override - public String getParameters(){ - return this.parameters; - } - - /** - * @param parameters 启动参数 - */ - @Override - public void setParameters(String parameters){ - this.parameters=parameters; - } - /** - * @return 任务类型 - */ - @Override - public String getType(){ - return this.type; - } - - /** - * @param type 任务类型 - */ - @Override - public void setType(String type){ - this.type=type; - } - /** - * @return 标签 - */ - @Override - public String getTags(){ - return this.tags; - } - - /** - * @param tags 标签 - */ - @Override - public void setTags(String tags){ - this.tags=tags; - } -} \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleJobExecutor.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleJobExecutor.java deleted file mode 100644 index d01cc8112..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleJobExecutor.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.hswebframework.web.service.schedule; - -import java.util.Map; - -/** - * @author zhouhao - */ -public interface ScheduleJobExecutor { - Object doExecuteJob(String jobId, Map parameter); -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleJobService.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleJobService.java deleted file mode 100644 index bfcbf7b69..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleJobService.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.hswebframework.web.service.schedule; - -import org.hswebframework.web.entity.schedule.ScheduleJobEntity; -import org.hswebframework.web.service.CrudService; - -/** - * 调度任务 服务类 - * - * @author hsweb-generator-online - */ -public interface ScheduleJobService extends CrudService { - - void enable(String id); - - void disable(String id); -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleTriggerBuilder.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleTriggerBuilder.java deleted file mode 100644 index f68c3f0ef..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleTriggerBuilder.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.hswebframework.web.service.schedule; - -import org.quartz.spi.MutableTrigger; - -/** - * TODO 完成注释 - * - * @author zhouhao - */ -public interface ScheduleTriggerBuilder { - MutableTrigger buildTrigger(String config); -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/pom.xml b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/pom.xml deleted file mode 100644 index cfba8b098..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - hsweb-system-schedule - org.hswebframework.web - 3.0.10-SNAPSHOT - ../pom.xml - - 4.0.0 - - hsweb-system-schedule-local - - - - org.hswebframework.web - hsweb-commons-service-simple - ${project.version} - - - org.hswebframework.web - hsweb-system-schedule-api - ${project.version} - - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - - - - \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/dao/schedule/ScheduleJobDao.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/dao/schedule/ScheduleJobDao.java deleted file mode 100644 index 28dd15c29..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/dao/schedule/ScheduleJobDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.dao.schedule; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.schedule.ScheduleJobEntity; - -/** -* 调度任务 DAO接口 -* @author hsweb-generator-online - */ -public interface ScheduleJobDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/DefaultScriptScheduleJobExecutor.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/DefaultScriptScheduleJobExecutor.java deleted file mode 100644 index e7e1e21ab..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/DefaultScriptScheduleJobExecutor.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.hswebframework.web.service.schedule.simple; - -import org.apache.commons.codec.digest.DigestUtils; -import org.hswebframework.expands.script.engine.DynamicScriptEngine; -import org.hswebframework.expands.script.engine.DynamicScriptEngineFactory; -import org.hswebframework.web.entity.schedule.ScheduleJobEntity; -import org.hswebframework.web.service.schedule.ScheduleJobExecutor; -import org.hswebframework.web.service.schedule.ScheduleJobService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Map; - -/** - * @author zhouhao - */ -public class DefaultScriptScheduleJobExecutor implements ScheduleJobExecutor { - - private ScheduleJobService scheduleJobService; - - public DefaultScriptScheduleJobExecutor() { - } - - public DefaultScriptScheduleJobExecutor(ScheduleJobService scheduleJobService) { - this.scheduleJobService = scheduleJobService; - } - - @Autowired - public void setScheduleJobService(ScheduleJobService scheduleJobService) { - this.scheduleJobService = scheduleJobService; - } - - @Override - @Transactional(rollbackFor = Throwable.class) - public Object doExecuteJob(String jobId, Map parameter) { - try { - ScheduleJobEntity jobEntity = scheduleJobService.selectByPk(jobId); - if (null == jobEntity) { - return null; - } - DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine(jobEntity.getLanguage()); - - String jobMd5 = DigestUtils.md5Hex(jobEntity.getScript()); - //脚本发生变化,重新编译执行 - if (engine.getContext(jobId) == null || !jobMd5.equals(engine.getContext(jobId).getMd5())) { - engine.compile(jobId, jobEntity.getScript()); - } - return engine.execute(jobId, parameter).getIfSuccess(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/DynamicJob.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/DynamicJob.java deleted file mode 100644 index 850b1fdae..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/DynamicJob.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.hswebframework.web.service.schedule.simple; - -import org.quartz.DisallowConcurrentExecution; -import org.quartz.Job; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; - -/** - * TODO 完成注释 - * - * @author zhouhao - */ -@DisallowConcurrentExecution -public class DynamicJob implements Job { - @Override - public void execute(JobExecutionContext context) throws JobExecutionException { - - } -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/DynamicJobFactory.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/DynamicJobFactory.java deleted file mode 100644 index 0dbe5077b..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/DynamicJobFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.hswebframework.web.service.schedule.simple; - -import org.hswebframework.web.service.schedule.ScheduleJobExecutor; -import org.quartz.Job; -import org.quartz.Scheduler; -import org.quartz.SchedulerException; -import org.quartz.spi.JobFactory; -import org.quartz.spi.TriggerFiredBundle; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.Map; - -/** - * @author zhouhao - */ -public class DynamicJobFactory implements JobFactory { - - public static final String JOB_ID_KEY = "dynamic-job-id:"; - - private JobFactory defaultFactory; - - private ScheduleJobExecutor scheduleJobExecutor; - - public DynamicJobFactory(JobFactory defaultFactory) { - this.defaultFactory = defaultFactory; - } - - @Autowired - public void setScheduleJobExecutor(ScheduleJobExecutor scheduleJobExecutor) { - this.scheduleJobExecutor = scheduleJobExecutor; - } - - @Override - public Job newJob(TriggerFiredBundle bundle, Scheduler scheduler) throws SchedulerException { - Map data = bundle.getJobDetail().getJobDataMap(); - String jobId = (String) data.get(JOB_ID_KEY); - if (null == jobId || bundle.getJobDetail().getJobClass() != DynamicJob.class) { - return defaultFactory.newJob(bundle, scheduler); - } - return context -> scheduleJobExecutor.doExecuteJob(jobId, data); - } -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/SimpleScheduleJobService.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/SimpleScheduleJobService.java deleted file mode 100644 index 5d0d1a5b1..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/SimpleScheduleJobService.java +++ /dev/null @@ -1,157 +0,0 @@ -package org.hswebframework.web.service.schedule.simple; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import org.hswebframework.web.BusinessException; -import org.hswebframework.web.commons.entity.DataStatus; -import org.hswebframework.web.dao.schedule.ScheduleJobDao; -import org.hswebframework.web.entity.schedule.ScheduleJobEntity; -import org.hswebframework.web.id.IDGenerator; -import org.hswebframework.web.service.GenericEntityService; -import org.hswebframework.web.service.schedule.ScheduleJobService; -import org.hswebframework.web.service.schedule.ScheduleTriggerBuilder; -import org.quartz.*; -import org.quartz.spi.MutableTrigger; -import org.quartz.spi.OperableTrigger; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.Objects; - -/** - * 默认的服务实现 - * - * @author hsweb-generator-online - */ -@Service("scheduleJobService") -//@CacheConfig(cacheNames = "schedule-job") -public class SimpleScheduleJobService extends GenericEntityService - implements ScheduleJobService { - @Autowired - private ScheduleJobDao scheduleJobDao; - - @Autowired - protected Scheduler scheduler; - - @Autowired - private ScheduleTriggerBuilder scheduleTriggerBuilder; - - @Override - protected IDGenerator getIDGenerator() { - return IDGenerator.MD5; - } - - @Override - public ScheduleJobDao getDao() { - return scheduleJobDao; - } - - public static List computeFireTimesBetween(OperableTrigger trigger, - org.quartz.Calendar cal, Date from, Date to, int num) { - List lst = new LinkedList<>(); - OperableTrigger t = (OperableTrigger) trigger.clone(); - if (t.getNextFireTime() == null) { - t.setStartTime(from); - t.setEndTime(to); - t.computeFirstFireTime(cal); - } - for (int i = 0; i < num; i++) { - Date d = t.getNextFireTime(); - if (d != null) { - if (d.before(from)) { - t.triggered(cal); - continue; - } - if (d.after(to)) { - break; - } - lst.add(d); - t.triggered(cal); - } else { - break; - } - } - return lst; - } - - protected void startJob(ScheduleJobEntity jobEntity) { - try { - if (scheduler.checkExists(createJobKey(jobEntity))) { - return; - } - JobDetail jobDetail = JobBuilder - .newJob(DynamicJob.class) - .withIdentity(createJobKey(jobEntity)) - .setJobData(createJobDataMap(jobEntity.getParameters())) - .usingJobData(DynamicJobFactory.JOB_ID_KEY, jobEntity.getId()) - .withDescription(jobEntity.getName() + (jobEntity.getRemark() == null ? "" : jobEntity.getRemark())) - .build(); - MutableTrigger trigger = scheduleTriggerBuilder.buildTrigger(jobEntity.getQuartzConfig()); - trigger.setKey(createTriggerKey(jobEntity)); - - scheduler.scheduleJob(jobDetail, trigger); - } catch (SchedulerException e) { - throw new BusinessException("启动定时调度失败", e); - } - } - - protected JobDataMap createJobDataMap(String parameters) { - JobDataMap map = new JobDataMap(); - if (!StringUtils.isEmpty(parameters)) { - JSONArray jsonArray = JSON.parseArray(parameters); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject o = jsonArray.getJSONObject(i); - map.put(o.getString("key"), o.get("value")); - } - } - return map; - } - - protected JobKey createJobKey(ScheduleJobEntity jobEntity) { - String group = jobEntity.getType() == null ? "hsweb.scheduler" : jobEntity.getType(); - - return new JobKey(jobEntity.getId(), group); - } - - protected TriggerKey createTriggerKey(ScheduleJobEntity jobEntity) { - String group = jobEntity.getType() == null ? "hsweb.scheduler" : jobEntity.getType(); - - return new TriggerKey(jobEntity.getId(), group); - } - - @Override - public void enable(String id) { - Objects.requireNonNull(id); - int size = createUpdate().set(ScheduleJobEntity.status, DataStatus.STATUS_ENABLED) - .where(ScheduleJobEntity.id, id).exec(); - if (size > 0) { - startJob(selectByPk(id)); - } - } - - private void deleteJob(ScheduleJobEntity jobEntity) { - JobKey jobKey = createJobKey(jobEntity); - try { - if (scheduler.checkExists(jobKey)) { - scheduler.deleteJob(jobKey); - } - } catch (SchedulerException e) { - throw new BusinessException("更新任务失败", e, 500); - } - } - - @Override - public void disable(String id) { - Objects.requireNonNull(id); - int size = createUpdate().set(ScheduleJobEntity.status, DataStatus.STATUS_DISABLED) - .where(ScheduleJobEntity.id, id).exec(); - if (size > 0) { - deleteJob(selectByPk(id)); - } - } -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/SmartScheduleTriggerBuilder.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/SmartScheduleTriggerBuilder.java deleted file mode 100644 index dc5a579f0..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/SmartScheduleTriggerBuilder.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.hswebframework.web.service.schedule.simple; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import org.hswebframework.web.service.schedule.ScheduleTriggerBuilder; -import org.quartz.CronScheduleBuilder; -import org.quartz.spi.MutableTrigger; -import org.springframework.stereotype.Service; - -/** - * @author zhouhao - */ -@Service -public class SmartScheduleTriggerBuilder implements ScheduleTriggerBuilder { - @Override - public MutableTrigger buildTrigger(String config) { - JSONObject configObj = JSON.parseObject(config); - switch (configObj.getString("type")) { - case "cron": - String cron = configObj.getString("config"); - return CronScheduleBuilder.cronSchedule(cron) - .build(); - default: - throw new UnsupportedOperationException(config); - } - - } -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/schedule/ScheduleJobMapper.xml b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/schedule/ScheduleJobMapper.xml deleted file mode 100644 index bbd290109..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/schedule/ScheduleJobMapper.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - delete from ${_fullTableName} where u_id =#{id} - - - - - - - - - - - - - - - - diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/pom.xml b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/pom.xml deleted file mode 100644 index e98195840..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/pom.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - hsweb-system-schedule - org.hswebframework.web - 3.0.10-SNAPSHOT - - 4.0.0 - - hsweb-system-schedule-starter - - - - - - src/main/resources - true - - - - - - - org.hswebframework.web - hsweb-system-schedule-local - ${project.version} - - - - org.hswebframework.web - hsweb-system-schedule-web - ${project.version} - - - org.springframework - spring-context-support - - - org.hswebframework.web - hsweb-datasource-api - ${project.version} - - - - org.springframework.boot - spring-boot-starter - - - - com.h2database - h2 - test - - - - com.alibaba - druid - 1.0.26 - test - - - - org.hswebframework.web - hsweb-spring-boot-starter - ${project.version} - test - - - - org.hswebframework.web - hsweb-tests - ${project.version} - test - - - - javax.servlet - javax.servlet-api - test - - - - \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/java/org/hswebframework/web/schedule/configuration/AutoCreateTable.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/java/org/hswebframework/web/schedule/configuration/AutoCreateTable.java deleted file mode 100644 index 0e28d5027..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/java/org/hswebframework/web/schedule/configuration/AutoCreateTable.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.hswebframework.web.schedule.configuration; - -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.utils.file.FileUtils; -import org.hswebframework.web.Sqls; -import org.hswebframework.web.datasource.DataSourceHolder; -import org.hswebframework.web.datasource.DatabaseType; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.CommandLineRunner; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.util.StringUtils; - -import java.io.InputStreamReader; -import java.io.Reader; -import java.util.List; - -/** - * @author zhouhao - */ -@Order(Ordered.HIGHEST_PRECEDENCE) -public class AutoCreateTable implements CommandLineRunner { - - @Autowired - private SqlExecutor sqlExecutor; - - @Override - public void run(String... args) throws Exception { - if (sqlExecutor.tableExists("QRTZ_LOCKS")) { - return; - } - DatabaseType databaseType = DataSourceHolder.currentDatabaseType(); - String databaseTypeName = databaseType.name(); - if (databaseType == DatabaseType.jtds_sqlserver) { - databaseTypeName = DatabaseType.sqlserver.name(); - } - String file = "classpath*:/quartz/sql/quartz-" + databaseTypeName + "-create.sql"; - Resource[] resources = new PathMatchingResourcePatternResolver().getResources(file); - - for (Resource resource : resources) { - try (Reader reader = new InputStreamReader(resource.getInputStream())) { - String str = FileUtils.reader2String(reader); - List sqlList = Sqls.parse(str); - for (String sql : sqlList) { - if (StringUtils.isEmpty(sql)) return; - sqlExecutor.exec(sql); - } - } - } - } -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/java/org/hswebframework/web/schedule/configuration/ScheduleAutoConfiguration.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/java/org/hswebframework/web/schedule/configuration/ScheduleAutoConfiguration.java deleted file mode 100644 index 2ba509c05..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/java/org/hswebframework/web/schedule/configuration/ScheduleAutoConfiguration.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.hswebframework.web.schedule.configuration; - -import lombok.extern.slf4j.Slf4j; -import org.hswebframework.web.service.schedule.ScheduleJobExecutor; -import org.hswebframework.web.service.schedule.ScheduleJobService; -import org.hswebframework.web.service.schedule.simple.DefaultScriptScheduleJobExecutor; -import org.hswebframework.web.service.schedule.simple.DynamicJobFactory; -import org.quartz.Calendar; -import org.quartz.Scheduler; -import org.quartz.SchedulerListener; -import org.quartz.impl.StdSchedulerFactory; -import org.quartz.spi.JobFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.quartz.AdaptableJobFactory; -import org.springframework.scheduling.quartz.SchedulerFactoryBean; -import org.springframework.transaction.PlatformTransactionManager; - -import javax.sql.DataSource; -import java.util.Map; - -/** - * @author zhouhao - */ -@Configuration -@EnableConfigurationProperties(SchedulerProperties.class) -@ConditionalOnMissingBean({Scheduler.class, SchedulerFactoryBean.class}) -@ComponentScan({"org.hswebframework.web.service.schedule.simple" - , "org.hswebframework.web.controller.schedule"}) -@Slf4j -public class ScheduleAutoConfiguration { - @Autowired - private SchedulerProperties schedulerProperties; - - @Autowired - private ApplicationContext applicationContext; - - @Autowired - private DataSource dataSource; - - @Autowired - private PlatformTransactionManager platformTransactionManager; - - @Autowired(required = false) - private Map calendarMap; - - @Autowired(required = false) - private SchedulerListener[] schedulerListeners; - - @Bean - public JobFactory jobFactory() { - return new DynamicJobFactory(new AdaptableJobFactory()); - } - - @Bean - public AutoCreateTable autoCreateTable() { - return new AutoCreateTable(); - } - - @Bean - public SchedulerFactoryBean schedulerFactory(JobFactory jobFactory) { - SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); - schedulerFactoryBean.setApplicationContext(applicationContext); - schedulerFactoryBean.setAutoStartup(schedulerProperties.isAutoStartup()); - schedulerFactoryBean.setDataSource(dataSource); - schedulerFactoryBean.setTransactionManager(platformTransactionManager); - schedulerFactoryBean.setOverwriteExistingJobs(schedulerProperties.isOverwriteExistingJobs()); - schedulerFactoryBean.setSchedulerFactoryClass(StdSchedulerFactory.class); - schedulerFactoryBean.setBeanName(schedulerProperties.getBeanName()); - schedulerFactoryBean.setJobFactory(jobFactory); - schedulerFactoryBean.setWaitForJobsToCompleteOnShutdown(schedulerProperties.isWaitOnShutdown()); - schedulerFactoryBean.setQuartzProperties(schedulerProperties.getProperties()); - schedulerFactoryBean.setStartupDelay(schedulerProperties.getStartupDelay()); - schedulerFactoryBean.setCalendars(calendarMap); - schedulerFactoryBean.setSchedulerListeners(schedulerListeners); - return schedulerFactoryBean; - } - - @Bean - @ConditionalOnMissingBean(ScheduleJobExecutor.class) - public ScheduleJobExecutor scheduleJobExecutor(ScheduleJobService scheduleJobService) { - ScheduleJobExecutor defaultExecutor = new DefaultScriptScheduleJobExecutor(scheduleJobService); - - - return defaultExecutor; - } - -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/java/org/hswebframework/web/schedule/configuration/SchedulerProperties.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/java/org/hswebframework/web/schedule/configuration/SchedulerProperties.java deleted file mode 100644 index 6c642bdca..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/java/org/hswebframework/web/schedule/configuration/SchedulerProperties.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2015-2016 http://hsweb.me - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.hswebframework.web.schedule.configuration; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; - -import java.util.List; -import java.util.Properties; - -@ConfigurationProperties(prefix = "scheduler") -@Data -public class SchedulerProperties { - private boolean autoStartup = true; - - private boolean overwriteExistingJobs = true; - - private String beanName = "scheduler"; - - private boolean waitOnShutdown = true; - - private int startupDelay = 10; - - private Properties properties = new Properties(); - - private boolean enableCluster = false; - - private List executeTags; -} \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/META-INF/spring.factories b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/META-INF/spring.factories deleted file mode 100644 index f4d2307a1..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,3 +0,0 @@ -# Auto Configure -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.hswebframework.web.schedule.configuration.ScheduleAutoConfiguration \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/hsweb-starter.js b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/hsweb-starter.js deleted file mode 100644 index d037f95b7..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/hsweb-starter.js +++ /dev/null @@ -1,50 +0,0 @@ - -//组件信息 -var info = { - groupId: "${project.groupId}", - artifactId: "${project.artifactId}", - version: "${project.version}", - website: "https://github.com/hs-web/hsweb-framework", - author: "admin@hsweb.me", - comment: "调度任务" -}; - -//版本更新信息 -var versions = [ - // { - // version: "3.0.2", - // upgrade: function (context) { - // java.lang.System.out.println("更新到3.0.2了"); - // } - // } -]; -var JDBCType = java.sql.JDBCType; -function install(context) { - var database = context.database; - database.createOrAlter("s_schedule_job") - .addColumn().name("u_id").alias("id").comment("ID").jdbcType(java.sql.JDBCType.VARCHAR).length(32).primaryKey().commit() - .addColumn().name("name").alias("name").comment("任务名称").jdbcType(java.sql.JDBCType.VARCHAR).length(128).commit() - .addColumn().name("remark").alias("remark").comment("备注").jdbcType(java.sql.JDBCType.VARCHAR).length(512).commit() - .addColumn().name("quartz_config").alias("quartzConfig").comment("定时调度配置").jdbcType(java.sql.JDBCType.CLOB).commit() - .addColumn().name("script").alias("script").comment("执行脚本").jdbcType(java.sql.JDBCType.CLOB).commit() - .addColumn().name("language").alias("language").comment("脚本语言").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit() - .addColumn().name("status").alias("status").comment("是否启用").jdbcType(java.sql.JDBCType.DECIMAL).length(4,0).commit() - .addColumn().name("parameters").alias("parameters").comment("启动参数").jdbcType(java.sql.JDBCType.CLOB).commit() - .addColumn().name("type").alias("type").comment("任务类型").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit() - .addColumn().name("tags").alias("tags").comment("标签").jdbcType(java.sql.JDBCType.VARCHAR).length(512).commit() - .comment("调度任务").commit(); - -} -//设置依赖 -dependency.setup(info) - .onInstall(install) - .onUpgrade(function (context) { //更新时执行 - var upgrader = context.upgrader; - upgrader.filter(versions) - .upgrade(function (newVer) { - newVer.upgrade(context); - }); - }) - .onUninstall(function (context) { //卸载时执行 - - }); \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-h2-create.sql b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-h2-create.sql deleted file mode 100644 index dcb0638cd..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-h2-create.sql +++ /dev/null @@ -1,247 +0,0 @@ --- Thanks to Amir Kibbar and Peter Rietzler for contributing the schema for H2 database, --- and verifying that it works with Quartz's StdJDBCDelegate --- --- Note, Quartz depends on row-level locking which means you must use the MVCC=TRUE --- setting on your H2 database, or you will experience dead-locks --- --- --- In your Quartz properties file, you'll need to set --- org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate - -CREATE TABLE QRTZ_CALENDARS ( - SCHED_NAME VARCHAR(120) NOT NULL, - CALENDAR_NAME VARCHAR (200) NOT NULL , - CALENDAR IMAGE NOT NULL -); - -CREATE TABLE QRTZ_CRON_TRIGGERS ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR (200) NOT NULL , - TRIGGER_GROUP VARCHAR (200) NOT NULL , - CRON_EXPRESSION VARCHAR (120) NOT NULL , - TIME_ZONE_ID VARCHAR (80) -); - -CREATE TABLE QRTZ_FIRED_TRIGGERS ( - SCHED_NAME VARCHAR(120) NOT NULL, - ENTRY_ID VARCHAR (95) NOT NULL , - TRIGGER_NAME VARCHAR (200) NOT NULL , - TRIGGER_GROUP VARCHAR (200) NOT NULL , - INSTANCE_NAME VARCHAR (200) NOT NULL , - FIRED_TIME BIGINT NOT NULL , - SCHED_TIME BIGINT NOT NULL , - PRIORITY INTEGER NOT NULL , - STATE VARCHAR (16) NOT NULL, - JOB_NAME VARCHAR (200) NULL , - JOB_GROUP VARCHAR (200) NULL , - IS_NONCONCURRENT BOOLEAN NULL , - REQUESTS_RECOVERY BOOLEAN NULL -); - -CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_GROUP VARCHAR (200) NOT NULL -); - -CREATE TABLE QRTZ_SCHEDULER_STATE ( - SCHED_NAME VARCHAR(120) NOT NULL, - INSTANCE_NAME VARCHAR (200) NOT NULL , - LAST_CHECKIN_TIME BIGINT NOT NULL , - CHECKIN_INTERVAL BIGINT NOT NULL -); - -CREATE TABLE QRTZ_LOCKS ( - SCHED_NAME VARCHAR(120) NOT NULL, - LOCK_NAME VARCHAR (40) NOT NULL -); - -CREATE TABLE QRTZ_JOB_DETAILS ( - SCHED_NAME VARCHAR(120) NOT NULL, - JOB_NAME VARCHAR (200) NOT NULL , - JOB_GROUP VARCHAR (200) NOT NULL , - DESCRIPTION VARCHAR (250) NULL , - JOB_CLASS_NAME VARCHAR (250) NOT NULL , - IS_DURABLE BOOLEAN NOT NULL , - IS_NONCONCURRENT BOOLEAN NOT NULL , - IS_UPDATE_DATA BOOLEAN NOT NULL , - REQUESTS_RECOVERY BOOLEAN NOT NULL , - JOB_DATA IMAGE NULL -); - -CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR (200) NOT NULL , - TRIGGER_GROUP VARCHAR (200) NOT NULL , - REPEAT_COUNT BIGINT NOT NULL , - REPEAT_INTERVAL BIGINT NOT NULL , - TIMES_TRIGGERED BIGINT NOT NULL -); - -CREATE TABLE qrtz_simprop_triggers - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - STR_PROP_1 VARCHAR(512) NULL, - STR_PROP_2 VARCHAR(512) NULL, - STR_PROP_3 VARCHAR(512) NULL, - INT_PROP_1 INTEGER NULL, - INT_PROP_2 INTEGER NULL, - LONG_PROP_1 BIGINT NULL, - LONG_PROP_2 BIGINT NULL, - DEC_PROP_1 NUMERIC(13,4) NULL, - DEC_PROP_2 NUMERIC(13,4) NULL, - BOOL_PROP_1 BOOLEAN NULL, - BOOL_PROP_2 BOOLEAN NULL, -); - -CREATE TABLE QRTZ_BLOB_TRIGGERS ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR (200) NOT NULL , - TRIGGER_GROUP VARCHAR (200) NOT NULL , - BLOB_DATA IMAGE NULL -); - -CREATE TABLE QRTZ_TRIGGERS ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR (200) NOT NULL , - TRIGGER_GROUP VARCHAR (200) NOT NULL , - JOB_NAME VARCHAR (200) NOT NULL , - JOB_GROUP VARCHAR (200) NOT NULL , - DESCRIPTION VARCHAR (250) NULL , - NEXT_FIRE_TIME BIGINT NULL , - PREV_FIRE_TIME BIGINT NULL , - PRIORITY INTEGER NULL , - TRIGGER_STATE VARCHAR (16) NOT NULL , - TRIGGER_TYPE VARCHAR (8) NOT NULL , - START_TIME BIGINT NOT NULL , - END_TIME BIGINT NULL , - CALENDAR_NAME VARCHAR (200) NULL , - MISFIRE_INSTR SMALLINT NULL , - JOB_DATA IMAGE NULL -); - -ALTER TABLE QRTZ_CALENDARS ADD - CONSTRAINT PK_QRTZ_CALENDARS PRIMARY KEY - ( - SCHED_NAME, - CALENDAR_NAME - ); - -ALTER TABLE QRTZ_CRON_TRIGGERS ADD - CONSTRAINT PK_QRTZ_CRON_TRIGGERS PRIMARY KEY - ( - SCHED_NAME, - TRIGGER_NAME, - TRIGGER_GROUP - ); - -ALTER TABLE QRTZ_FIRED_TRIGGERS ADD - CONSTRAINT PK_QRTZ_FIRED_TRIGGERS PRIMARY KEY - ( - SCHED_NAME, - ENTRY_ID - ); - -ALTER TABLE QRTZ_PAUSED_TRIGGER_GRPS ADD - CONSTRAINT PK_QRTZ_PAUSED_TRIGGER_GRPS PRIMARY KEY - ( - SCHED_NAME, - TRIGGER_GROUP - ); - -ALTER TABLE QRTZ_SCHEDULER_STATE ADD - CONSTRAINT PK_QRTZ_SCHEDULER_STATE PRIMARY KEY - ( - SCHED_NAME, - INSTANCE_NAME - ); - -ALTER TABLE QRTZ_LOCKS ADD - CONSTRAINT PK_QRTZ_LOCKS PRIMARY KEY - ( - SCHED_NAME, - LOCK_NAME - ); - -ALTER TABLE QRTZ_JOB_DETAILS ADD - CONSTRAINT PK_QRTZ_JOB_DETAILS PRIMARY KEY - ( - SCHED_NAME, - JOB_NAME, - JOB_GROUP - ); - -ALTER TABLE QRTZ_SIMPLE_TRIGGERS ADD - CONSTRAINT PK_QRTZ_SIMPLE_TRIGGERS PRIMARY KEY - ( - SCHED_NAME, - TRIGGER_NAME, - TRIGGER_GROUP - ); - -ALTER TABLE QRTZ_SIMPROP_TRIGGERS ADD - CONSTRAINT PK_QRTZ_SIMPROP_TRIGGERS PRIMARY KEY - ( - SCHED_NAME, - TRIGGER_NAME, - TRIGGER_GROUP - ); - -ALTER TABLE QRTZ_TRIGGERS ADD - CONSTRAINT PK_QRTZ_TRIGGERS PRIMARY KEY - ( - SCHED_NAME, - TRIGGER_NAME, - TRIGGER_GROUP - ); - -ALTER TABLE QRTZ_CRON_TRIGGERS ADD - CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY - ( - SCHED_NAME, - TRIGGER_NAME, - TRIGGER_GROUP - ) REFERENCES QRTZ_TRIGGERS ( - SCHED_NAME, - TRIGGER_NAME, - TRIGGER_GROUP - ) ON DELETE CASCADE; - - -ALTER TABLE QRTZ_SIMPLE_TRIGGERS ADD - CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY - ( - SCHED_NAME, - TRIGGER_NAME, - TRIGGER_GROUP - ) REFERENCES QRTZ_TRIGGERS ( - SCHED_NAME, - TRIGGER_NAME, - TRIGGER_GROUP - ) ON DELETE CASCADE; - -ALTER TABLE QRTZ_SIMPROP_TRIGGERS ADD - CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY - ( - SCHED_NAME, - TRIGGER_NAME, - TRIGGER_GROUP - ) REFERENCES QRTZ_TRIGGERS ( - SCHED_NAME, - TRIGGER_NAME, - TRIGGER_GROUP - ) ON DELETE CASCADE; - - -ALTER TABLE QRTZ_TRIGGERS ADD - CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS FOREIGN KEY - ( - SCHED_NAME, - JOB_NAME, - JOB_GROUP - ) REFERENCES QRTZ_JOB_DETAILS ( - SCHED_NAME, - JOB_NAME, - JOB_GROUP - ); diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-mysql-create.sql b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-mysql-create.sql deleted file mode 100644 index 41fe6b946..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-mysql-create.sql +++ /dev/null @@ -1,143 +0,0 @@ -CREATE TABLE QRTZ_JOB_DETAILS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - JOB_NAME VARCHAR(200) NOT NULL, - JOB_GROUP VARCHAR(200) NOT NULL, - DESCRIPTION VARCHAR(250) NULL, - JOB_CLASS_NAME VARCHAR(250) NOT NULL, - IS_DURABLE VARCHAR(1) NOT NULL, - IS_NONCONCURRENT VARCHAR(1) NOT NULL, - IS_UPDATE_DATA VARCHAR(1) NOT NULL, - REQUESTS_RECOVERY VARCHAR(1) NOT NULL, - JOB_DATA BLOB NULL, - PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) -); - -CREATE TABLE QRTZ_TRIGGERS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - JOB_NAME VARCHAR(200) NOT NULL, - JOB_GROUP VARCHAR(200) NOT NULL, - DESCRIPTION VARCHAR(250) NULL, - NEXT_FIRE_TIME BIGINT(13) NULL, - PREV_FIRE_TIME BIGINT(13) NULL, - PRIORITY INTEGER NULL, - TRIGGER_STATE VARCHAR(16) NOT NULL, - TRIGGER_TYPE VARCHAR(8) NOT NULL, - START_TIME BIGINT(13) NOT NULL, - END_TIME BIGINT(13) NULL, - CALENDAR_NAME VARCHAR(200) NULL, - MISFIRE_INSTR SMALLINT(2) NULL, - JOB_DATA BLOB NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) - REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) -); - -CREATE TABLE QRTZ_SIMPLE_TRIGGERS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - REPEAT_COUNT BIGINT(7) NOT NULL, - REPEAT_INTERVAL BIGINT(12) NOT NULL, - TIMES_TRIGGERED BIGINT(10) NOT NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); - -CREATE TABLE QRTZ_CRON_TRIGGERS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - CRON_EXPRESSION VARCHAR(200) NOT NULL, - TIME_ZONE_ID VARCHAR(80), - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); - -CREATE TABLE QRTZ_SIMPROP_TRIGGERS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - STR_PROP_1 VARCHAR(512) NULL, - STR_PROP_2 VARCHAR(512) NULL, - STR_PROP_3 VARCHAR(512) NULL, - INT_PROP_1 INT NULL, - INT_PROP_2 INT NULL, - LONG_PROP_1 BIGINT NULL, - LONG_PROP_2 BIGINT NULL, - DEC_PROP_1 NUMERIC(13,4) NULL, - DEC_PROP_2 NUMERIC(13,4) NULL, - BOOL_PROP_1 VARCHAR(1) NULL, - BOOL_PROP_2 VARCHAR(1) NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); - -CREATE TABLE QRTZ_BLOB_TRIGGERS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - BLOB_DATA BLOB NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); - -CREATE TABLE QRTZ_CALENDARS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - CALENDAR_NAME VARCHAR(200) NOT NULL, - CALENDAR BLOB NOT NULL, - PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) -); - -CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) -); - -CREATE TABLE QRTZ_FIRED_TRIGGERS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - ENTRY_ID VARCHAR(95) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - INSTANCE_NAME VARCHAR(200) NOT NULL, - FIRED_TIME BIGINT(13) NOT NULL, - SCHED_TIME BIGINT(13) NOT NULL, - PRIORITY INTEGER NOT NULL, - STATE VARCHAR(16) NOT NULL, - JOB_NAME VARCHAR(200) NULL, - JOB_GROUP VARCHAR(200) NULL, - IS_NONCONCURRENT VARCHAR(1) NULL, - REQUESTS_RECOVERY VARCHAR(1) NULL, - PRIMARY KEY (SCHED_NAME,ENTRY_ID) -); - -CREATE TABLE QRTZ_SCHEDULER_STATE - ( - SCHED_NAME VARCHAR(120) NOT NULL, - INSTANCE_NAME VARCHAR(200) NOT NULL, - LAST_CHECKIN_TIME BIGINT(13) NOT NULL, - CHECKIN_INTERVAL BIGINT(13) NOT NULL, - PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) -); - -CREATE TABLE QRTZ_LOCKS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - LOCK_NAME VARCHAR(40) NOT NULL, - PRIMARY KEY (SCHED_NAME,LOCK_NAME) -); diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-oracle-create.sql b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-oracle-create.sql deleted file mode 100644 index c381d9d4e..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-oracle-create.sql +++ /dev/null @@ -1,157 +0,0 @@ -CREATE TABLE qrtz_job_details - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - JOB_NAME VARCHAR2(200) NOT NULL, - JOB_GROUP VARCHAR2(200) NOT NULL, - DESCRIPTION VARCHAR2(250) NULL, - JOB_CLASS_NAME VARCHAR2(250) NOT NULL, - IS_DURABLE VARCHAR2(1) NOT NULL, - IS_NONCONCURRENT VARCHAR2(1) NOT NULL, - IS_UPDATE_DATA VARCHAR2(1) NOT NULL, - REQUESTS_RECOVERY VARCHAR2(1) NOT NULL, - JOB_DATA BLOB NULL, - CONSTRAINT QRTZ_JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) -); -CREATE TABLE qrtz_triggers - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - TRIGGER_NAME VARCHAR2(200) NOT NULL, - TRIGGER_GROUP VARCHAR2(200) NOT NULL, - JOB_NAME VARCHAR2(200) NOT NULL, - JOB_GROUP VARCHAR2(200) NOT NULL, - DESCRIPTION VARCHAR2(250) NULL, - NEXT_FIRE_TIME NUMBER(13) NULL, - PREV_FIRE_TIME NUMBER(13) NULL, - PRIORITY NUMBER(13) NULL, - TRIGGER_STATE VARCHAR2(16) NOT NULL, - TRIGGER_TYPE VARCHAR2(8) NOT NULL, - START_TIME NUMBER(13) NOT NULL, - END_TIME NUMBER(13) NULL, - CALENDAR_NAME VARCHAR2(200) NULL, - MISFIRE_INSTR NUMBER(2) NULL, - JOB_DATA BLOB NULL, - CONSTRAINT QRTZ_TRIGGERS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - CONSTRAINT QRTZ_TRIGGER_TO_JOBS_FK FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) - REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) -); -CREATE TABLE qrtz_simple_triggers - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - TRIGGER_NAME VARCHAR2(200) NOT NULL, - TRIGGER_GROUP VARCHAR2(200) NOT NULL, - REPEAT_COUNT NUMBER(7) NOT NULL, - REPEAT_INTERVAL NUMBER(12) NOT NULL, - TIMES_TRIGGERED NUMBER(10) NOT NULL, - CONSTRAINT QRTZ_SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - CONSTRAINT QRTZ_SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); -CREATE TABLE qrtz_cron_triggers - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - TRIGGER_NAME VARCHAR2(200) NOT NULL, - TRIGGER_GROUP VARCHAR2(200) NOT NULL, - CRON_EXPRESSION VARCHAR2(120) NOT NULL, - TIME_ZONE_ID VARCHAR2(80), - CONSTRAINT QRTZ_CRON_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - CONSTRAINT QRTZ_CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); -CREATE TABLE qrtz_simprop_triggers - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - TRIGGER_NAME VARCHAR2(200) NOT NULL, - TRIGGER_GROUP VARCHAR2(200) NOT NULL, - STR_PROP_1 VARCHAR2(512) NULL, - STR_PROP_2 VARCHAR2(512) NULL, - STR_PROP_3 VARCHAR2(512) NULL, - INT_PROP_1 NUMBER(10) NULL, - INT_PROP_2 NUMBER(10) NULL, - LONG_PROP_1 NUMBER(13) NULL, - LONG_PROP_2 NUMBER(13) NULL, - DEC_PROP_1 NUMERIC(13,4) NULL, - DEC_PROP_2 NUMERIC(13,4) NULL, - BOOL_PROP_1 VARCHAR2(1) NULL, - BOOL_PROP_2 VARCHAR2(1) NULL, - CONSTRAINT QRTZ_SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - CONSTRAINT QRTZ_SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); -CREATE TABLE qrtz_blob_triggers - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - TRIGGER_NAME VARCHAR2(200) NOT NULL, - TRIGGER_GROUP VARCHAR2(200) NOT NULL, - BLOB_DATA BLOB NULL, - CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - CONSTRAINT QRTZ_BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); -CREATE TABLE qrtz_calendars - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - CALENDAR_NAME VARCHAR2(200) NOT NULL, - CALENDAR BLOB NOT NULL, - CONSTRAINT QRTZ_CALENDARS_PK PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) -); -CREATE TABLE qrtz_paused_trigger_grps - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - TRIGGER_GROUP VARCHAR2(200) NOT NULL, - CONSTRAINT QRTZ_PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) -); -CREATE TABLE qrtz_fired_triggers - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - ENTRY_ID VARCHAR2(95) NOT NULL, - TRIGGER_NAME VARCHAR2(200) NOT NULL, - TRIGGER_GROUP VARCHAR2(200) NOT NULL, - INSTANCE_NAME VARCHAR2(200) NOT NULL, - FIRED_TIME NUMBER(13) NOT NULL, - SCHED_TIME NUMBER(13) NOT NULL, - PRIORITY NUMBER(13) NOT NULL, - STATE VARCHAR2(16) NOT NULL, - JOB_NAME VARCHAR2(200) NULL, - JOB_GROUP VARCHAR2(200) NULL, - IS_NONCONCURRENT VARCHAR2(1) NULL, - REQUESTS_RECOVERY VARCHAR2(1) NULL, - CONSTRAINT QRTZ_FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME,ENTRY_ID) -); -CREATE TABLE qrtz_scheduler_state - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - INSTANCE_NAME VARCHAR2(200) NOT NULL, - LAST_CHECKIN_TIME NUMBER(13) NOT NULL, - CHECKIN_INTERVAL NUMBER(13) NOT NULL, - CONSTRAINT QRTZ_SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) -); -CREATE TABLE qrtz_locks - ( - SCHED_NAME VARCHAR2(120) NOT NULL, - LOCK_NAME VARCHAR2(40) NOT NULL, - CONSTRAINT QRTZ_LOCKS_PK PRIMARY KEY (SCHED_NAME,LOCK_NAME) -); - -create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY); -create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP); - -create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); -create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP); -create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME); -create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP); -create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE); -create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); -create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); -create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME); -create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); -create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); -create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); -create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); - -create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME); -create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); -create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); -create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP); -create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); -create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP); - diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-postgresql-create.sql b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-postgresql-create.sql deleted file mode 100644 index 440bc72ec..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/quartz/sql/quartz-postgresql-create.sql +++ /dev/null @@ -1,171 +0,0 @@ --- Thanks to Patrick Lightbody for submitting this... --- --- In your Quartz properties file, you'll need to set --- org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate -CREATE TABLE qrtz_job_details - ( - SCHED_NAME VARCHAR(120) NOT NULL, - JOB_NAME VARCHAR(200) NOT NULL, - JOB_GROUP VARCHAR(200) NOT NULL, - DESCRIPTION VARCHAR(250) NULL, - JOB_CLASS_NAME VARCHAR(250) NOT NULL, - IS_DURABLE BOOL NOT NULL, - IS_NONCONCURRENT BOOL NOT NULL, - IS_UPDATE_DATA BOOL NOT NULL, - REQUESTS_RECOVERY BOOL NOT NULL, - JOB_DATA BYTEA NULL, - PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) -); - -CREATE TABLE qrtz_triggers - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - JOB_NAME VARCHAR(200) NOT NULL, - JOB_GROUP VARCHAR(200) NOT NULL, - DESCRIPTION VARCHAR(250) NULL, - NEXT_FIRE_TIME BIGINT NULL, - PREV_FIRE_TIME BIGINT NULL, - PRIORITY INTEGER NULL, - TRIGGER_STATE VARCHAR(16) NOT NULL, - TRIGGER_TYPE VARCHAR(8) NOT NULL, - START_TIME BIGINT NOT NULL, - END_TIME BIGINT NULL, - CALENDAR_NAME VARCHAR(200) NULL, - MISFIRE_INSTR SMALLINT NULL, - JOB_DATA BYTEA NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) - REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) -); - -CREATE TABLE qrtz_simple_triggers - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - REPEAT_COUNT BIGINT NOT NULL, - REPEAT_INTERVAL BIGINT NOT NULL, - TIMES_TRIGGERED BIGINT NOT NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); - -CREATE TABLE qrtz_cron_triggers - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - CRON_EXPRESSION VARCHAR(120) NOT NULL, - TIME_ZONE_ID VARCHAR(80), - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); - -CREATE TABLE qrtz_simprop_triggers - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - STR_PROP_1 VARCHAR(512) NULL, - STR_PROP_2 VARCHAR(512) NULL, - STR_PROP_3 VARCHAR(512) NULL, - INT_PROP_1 INT NULL, - INT_PROP_2 INT NULL, - LONG_PROP_1 BIGINT NULL, - LONG_PROP_2 BIGINT NULL, - DEC_PROP_1 NUMERIC(13,4) NULL, - DEC_PROP_2 NUMERIC(13,4) NULL, - BOOL_PROP_1 BOOL NULL, - BOOL_PROP_2 BOOL NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); - -CREATE TABLE qrtz_blob_triggers - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - BLOB_DATA BYTEA NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -); - -CREATE TABLE qrtz_calendars - ( - SCHED_NAME VARCHAR(120) NOT NULL, - CALENDAR_NAME VARCHAR(200) NOT NULL, - CALENDAR BYTEA NOT NULL, - PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) -); - - -CREATE TABLE qrtz_paused_trigger_grps - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) -); - -CREATE TABLE qrtz_fired_triggers - ( - SCHED_NAME VARCHAR(120) NOT NULL, - ENTRY_ID VARCHAR(95) NOT NULL, - TRIGGER_NAME VARCHAR(200) NOT NULL, - TRIGGER_GROUP VARCHAR(200) NOT NULL, - INSTANCE_NAME VARCHAR(200) NOT NULL, - FIRED_TIME BIGINT NOT NULL, - SCHED_TIME BIGINT NOT NULL, - PRIORITY INTEGER NOT NULL, - STATE VARCHAR(16) NOT NULL, - JOB_NAME VARCHAR(200) NULL, - JOB_GROUP VARCHAR(200) NULL, - IS_NONCONCURRENT BOOL NULL, - REQUESTS_RECOVERY BOOL NULL, - PRIMARY KEY (SCHED_NAME,ENTRY_ID) -); - -CREATE TABLE qrtz_scheduler_state - ( - SCHED_NAME VARCHAR(120) NOT NULL, - INSTANCE_NAME VARCHAR(200) NOT NULL, - LAST_CHECKIN_TIME BIGINT NOT NULL, - CHECKIN_INTERVAL BIGINT NOT NULL, - PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) -); - -CREATE TABLE qrtz_locks - ( - SCHED_NAME VARCHAR(120) NOT NULL, - LOCK_NAME VARCHAR(40) NOT NULL, - PRIMARY KEY (SCHED_NAME,LOCK_NAME) -); - -create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY); -create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP); - -create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); -create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP); -create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME); -create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP); -create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE); -create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); -create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); -create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME); -create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); -create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); -create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); -create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); - -create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME); -create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); -create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); -create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP); -create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); -create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP); diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/test/java/org/hswebframework/web/schedule/test/DynamicScheduleTests.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/test/java/org/hswebframework/web/schedule/test/DynamicScheduleTests.java deleted file mode 100644 index 31647df6b..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/test/java/org/hswebframework/web/schedule/test/DynamicScheduleTests.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.hswebframework.web.schedule.test; - -import org.hswebframework.web.commons.entity.DataStatus; -import org.hswebframework.web.entity.schedule.ScheduleJobEntity; -import org.hswebframework.web.service.schedule.ScheduleJobService; -import org.hswebframework.web.tests.SimpleWebApplicationTests; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; - -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicLong; - -/** - * @author zhouhao - */ -@Transactional(propagation = Propagation.NOT_SUPPORTED) -public class DynamicScheduleTests extends SimpleWebApplicationTests { - - @Autowired - private ScheduleJobService scheduleJobService; - - - public static final CountDownLatch counter=new CountDownLatch(1); - public static final AtomicLong value=new AtomicLong(); - private String id; - - @Before - public void initJob() throws InterruptedException { - id = scheduleJobService.insert(createJob()); - scheduleJobService.enable(id); - } - - public ScheduleJobEntity createJob() { - ScheduleJobEntity entity = scheduleJobService.createEntity(); - entity.setStatus(DataStatus.STATUS_ENABLED); - entity.setType("test"); - entity.setLanguage("javascript"); - entity.setTags("core2"); - entity.setScript("" + - "org.hswebframework.web.schedule.test.DynamicScheduleTests.value.incrementAndGet();\n" + - "org.hswebframework.web.schedule.test.DynamicScheduleTests.counter.countDown();\n" + - "java.lang.System.out.println('script job running...')"); - entity.setQuartzConfig("{\"type\":\"cron\",\"config\":\"0/1 * * * * ?\"}"); - return entity; - } - - @Test - public void testCreateJob() throws InterruptedException { - counter.await(100, TimeUnit.SECONDS); - Assert.assertTrue(value.get()>0); - } -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/test/java/org/hswebframework/web/schedule/test/ScheduleTests.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/test/java/org/hswebframework/web/schedule/test/ScheduleTests.java deleted file mode 100644 index 2e77a8569..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/test/java/org/hswebframework/web/schedule/test/ScheduleTests.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.hswebframework.web.schedule.test; - -import org.hswebframework.web.tests.SimpleWebApplicationTests; -import org.junit.Assert; -import org.junit.Test; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; - -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * TODO 完成注释 - * - * @author zhouhao - */ -@EnableScheduling -@Configuration -public class ScheduleTests extends SimpleWebApplicationTests { - - AtomicInteger counter = new AtomicInteger(); - - CountDownLatch countDownLatch = new CountDownLatch(1); - - @Scheduled(cron = "0/1 * * * * ?") - public void quartzTest() { - counter.incrementAndGet(); - countDownLatch.countDown(); - } - - @Test - public void test() throws InterruptedException { - countDownLatch.await(100, TimeUnit.SECONDS); - Assert.assertTrue(counter.get() > 0); - } -} diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/test/resources/application.yml b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/test/resources/application.yml deleted file mode 100644 index 04aae0347..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/test/resources/application.yml +++ /dev/null @@ -1,24 +0,0 @@ -spring: - aop: - auto: true - proxy-target-class: true - datasource: - url : jdbc:h2:file:./target/workflow-test;DB_CLOSE_ON_EXIT=FALSE - username : sa - password : - type: com.alibaba.druid.pool.DruidDataSource - driver-class-name : org.h2.Driver - cache: - type: simple - -logging: - level: - org.quartz: debug -# org.activiti: debug -mybatis: - dynamic-datasource: false -server: - port: 8080 -scheduler: - enable-cluster: false - execute-tags: core \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-web/pom.xml b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-web/pom.xml deleted file mode 100644 index e8287ba4e..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-web/pom.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - hsweb-system-schedule - org.hswebframework.web - 3.0.10-SNAPSHOT - - 4.0.0 - - hsweb-system-schedule-web - - - - javax.servlet - javax.servlet-api - true - - - org.hswebframework.web - hsweb-system-schedule-api - ${project.version} - - - org.hswebframework.web - hsweb-commons-controller - ${project.version} - - - \ No newline at end of file diff --git a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-web/src/main/java/org/hswebframework/web/controller/schedule/ScheduleJobController.java b/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-web/src/main/java/org/hswebframework/web/controller/schedule/ScheduleJobController.java deleted file mode 100644 index 063fc0556..000000000 --- a/hsweb-system/hsweb-system-schedule/hsweb-system-schedule-web/src/main/java/org/hswebframework/web/controller/schedule/ScheduleJobController.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.hswebframework.web.controller.schedule; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.hswebframework.web.authorization.Permission; -import org.hswebframework.web.authorization.annotation.Authorize; -import org.hswebframework.web.commons.entity.param.QueryParamEntity; -import org.hswebframework.web.controller.SimpleGenericEntityController; -import org.hswebframework.web.controller.message.ResponseMessage; -import org.hswebframework.web.entity.schedule.ScheduleJobEntity; -import org.hswebframework.web.service.schedule.ScheduleJobExecutor; -import org.hswebframework.web.service.schedule.ScheduleJobService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - * 调度任务 - * - * @author hsweb-generator-online - */ -@RestController -@RequestMapping("${hsweb.web.mappings.scheduleJob:schedule/job}") -@Authorize(permission = "schedule-job", description = "定时调度管理") -@Api(value = "定时调度管理",tags = "定时调度管理") -public class ScheduleJobController implements SimpleGenericEntityController { - - private ScheduleJobService scheduleJobService; - - private ScheduleJobExecutor scheduleJobExecutor; - - @Autowired - @Authorize(ignore = true) - public void setScheduleJobExecutor(ScheduleJobExecutor scheduleJobExecutor) { - this.scheduleJobExecutor = scheduleJobExecutor; - } - - @Autowired - @Authorize(ignore = true) - public void setScheduleJobService(ScheduleJobService scheduleJobService) { - this.scheduleJobService = scheduleJobService; - } - - @Override - public ScheduleJobService getService() { - return scheduleJobService; - } - - @PutMapping("/{id}/enable") - @Authorize(action = Permission.ACTION_ENABLE) - @ApiOperation("启用任务") - public ResponseMessage enable(@PathVariable String id) { - scheduleJobService.enable(id); - return ResponseMessage.ok(); - } - - @PutMapping("/{id}/disable") - @Authorize(action = Permission.ACTION_DISABLE) - @ApiOperation("禁用任务") - public ResponseMessage disable(@PathVariable String id) { - scheduleJobService.disable(id); - return ResponseMessage.ok(); - } - - @PostMapping("/{id}/execute") - @Authorize(action = "execute", description = "执行任务") - @ApiOperation("执行任务") - public ResponseMessage execute(@PathVariable String id, @RequestBody Map args) { - return ResponseMessage.ok(scheduleJobExecutor.doExecuteJob(id, args)); - } -} diff --git a/hsweb-system/hsweb-system-schedule/pom.xml b/hsweb-system/hsweb-system-schedule/pom.xml deleted file mode 100644 index 854ea4df0..000000000 --- a/hsweb-system/hsweb-system-schedule/pom.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - hsweb-system - org.hswebframework.web - 3.0.10-SNAPSHOT - - 4.0.0 - pom - hsweb-system-schedule - - hsweb-system-schedule-starter - hsweb-system-schedule-api - hsweb-system-schedule-local - hsweb-system-schedule-web - - - - - - org.quartz-scheduler - quartz - 2.2.3 - - - - \ No newline at end of file diff --git a/hsweb-system/hsweb-system-script/hsweb-system-script-api/pom.xml b/hsweb-system/hsweb-system-script/hsweb-system-script-api/pom.xml index f7d6cc2f1..fcbbdc818 100644 --- a/hsweb-system/hsweb-system-script/hsweb-system-script-api/pom.xml +++ b/hsweb-system/hsweb-system-script/hsweb-system-script-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-script org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-script/hsweb-system-script-local/pom.xml b/hsweb-system/hsweb-system-script/hsweb-system-script-local/pom.xml index dcb2c2357..526748568 100644 --- a/hsweb-system/hsweb-system-script/hsweb-system-script-local/pom.xml +++ b/hsweb-system/hsweb-system-script/hsweb-system-script-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-script org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 @@ -22,10 +22,5 @@ hsweb-system-script-api ${project.version} - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - \ No newline at end of file diff --git a/hsweb-system/hsweb-system-script/hsweb-system-script-starter/pom.xml b/hsweb-system/hsweb-system-script/hsweb-system-script-starter/pom.xml index daff229f1..d45785824 100644 --- a/hsweb-system/hsweb-system-script/hsweb-system-script-starter/pom.xml +++ b/hsweb-system/hsweb-system-script/hsweb-system-script-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-system-script org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-script/hsweb-system-script-web/pom.xml b/hsweb-system/hsweb-system-script/hsweb-system-script-web/pom.xml index 5883a3696..34ea313c0 100644 --- a/hsweb-system/hsweb-system-script/hsweb-system-script-web/pom.xml +++ b/hsweb-system/hsweb-system-script/hsweb-system-script-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-script org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-script/pom.xml b/hsweb-system/hsweb-system-script/pom.xml index 1021ec71f..3a266f51d 100644 --- a/hsweb-system/hsweb-system-script/pom.xml +++ b/hsweb-system/hsweb-system-script/pom.xml @@ -5,7 +5,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-template/hsweb-system-template-api/pom.xml b/hsweb-system/hsweb-system-template/hsweb-system-template-api/pom.xml index 00ebd2313..3a6fcc817 100644 --- a/hsweb-system/hsweb-system-template/hsweb-system-template-api/pom.xml +++ b/hsweb-system/hsweb-system-template/hsweb-system-template-api/pom.xml @@ -5,7 +5,7 @@ hsweb-system-template org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-template/hsweb-system-template-local/pom.xml b/hsweb-system/hsweb-system-template/hsweb-system-template-local/pom.xml index 312c4a8ed..53f2bd363 100644 --- a/hsweb-system/hsweb-system-template/hsweb-system-template-local/pom.xml +++ b/hsweb-system/hsweb-system-template/hsweb-system-template-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-template org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 @@ -22,10 +22,5 @@ hsweb-system-template-api ${project.version} - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - \ No newline at end of file diff --git a/hsweb-system/hsweb-system-template/hsweb-system-template-local/src/main/java/org/hswebframework/web/dao/template/TemplateDao.java b/hsweb-system/hsweb-system-template/hsweb-system-template-local/src/main/java/org/hswebframework/web/dao/template/TemplateDao.java deleted file mode 100644 index cf553fc5b..000000000 --- a/hsweb-system/hsweb-system-template/hsweb-system-template-local/src/main/java/org/hswebframework/web/dao/template/TemplateDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.dao.template; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.entity.template.TemplateEntity; - -/** -* 模板 DAO接口 -* @author hsweb-generator-online - */ -public interface TemplateDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-template/hsweb-system-template-local/src/main/java/org/hswebframework/web/service/template/simple/SimpleTemplateService.java b/hsweb-system/hsweb-system-template/hsweb-system-template-local/src/main/java/org/hswebframework/web/service/template/simple/SimpleTemplateService.java index 5258949fb..98fbae086 100644 --- a/hsweb-system/hsweb-system-template/hsweb-system-template-local/src/main/java/org/hswebframework/web/service/template/simple/SimpleTemplateService.java +++ b/hsweb-system/hsweb-system-template/hsweb-system-template-local/src/main/java/org/hswebframework/web/service/template/simple/SimpleTemplateService.java @@ -1,17 +1,11 @@ package org.hswebframework.web.service.template.simple; -import org.hswebframework.web.dao.template.TemplateDao; import org.hswebframework.web.entity.template.TemplateEntity; -import org.hswebframework.web.service.EnableCacheGenericEntityService; -import org.hswebframework.web.service.GenericEntityService; import org.hswebframework.web.id.IDGenerator; +import org.hswebframework.web.service.EnableCacheGenericEntityService; import org.hswebframework.web.service.template.TemplateService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.stereotype.Service; -import org.springframework.util.AntPathMatcher; - -import java.util.regex.Pattern; /** * 默认的服务实现 @@ -22,19 +16,12 @@ import java.util.regex.Pattern; @CacheConfig(cacheNames = "template") public class SimpleTemplateService extends EnableCacheGenericEntityService implements TemplateService { - @Autowired - private TemplateDao templateDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public TemplateDao getDao() { - return templateDao; - } - @Override public int updateByPk(String id, TemplateEntity entity) { TemplateEntity old = selectByPk(id); diff --git a/hsweb-system/hsweb-system-template/hsweb-system-template-starter/pom.xml b/hsweb-system/hsweb-system-template/hsweb-system-template-starter/pom.xml index dee1c18a3..ae812f939 100644 --- a/hsweb-system/hsweb-system-template/hsweb-system-template-starter/pom.xml +++ b/hsweb-system/hsweb-system-template/hsweb-system-template-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-system-template org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-template/hsweb-system-template-web/pom.xml b/hsweb-system/hsweb-system-template/hsweb-system-template-web/pom.xml index 1d17593f5..532087090 100644 --- a/hsweb-system/hsweb-system-template/hsweb-system-template-web/pom.xml +++ b/hsweb-system/hsweb-system-template/hsweb-system-template-web/pom.xml @@ -5,7 +5,7 @@ hsweb-system-template org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-template/pom.xml b/hsweb-system/hsweb-system-template/pom.xml index 8fe893642..15e2aa58c 100644 --- a/hsweb-system/hsweb-system-template/pom.xml +++ b/hsweb-system/hsweb-system-template/pom.xml @@ -5,7 +5,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/pom.xml b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/pom.xml index 219ba9c6e..ba27e580e 100644 --- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/pom.xml +++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/pom.xml @@ -5,7 +5,7 @@ hsweb-system-workflow org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 @@ -22,11 +22,6 @@ - - org.hswebframework.web - hsweb-commons-dao-mybatis - ${project.version} - org.hswebframework.web diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ActivityConfigDao.java b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ActivityConfigDao.java deleted file mode 100644 index 5d48b94b3..000000000 --- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ActivityConfigDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.workflow.dao; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.workflow.dao.entity.ActivityConfigEntity; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -public interface ActivityConfigDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ProcessDefineConfigDao.java b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ProcessDefineConfigDao.java deleted file mode 100644 index 2e1cdedae..000000000 --- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ProcessDefineConfigDao.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.hswebframework.web.workflow.dao; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.workflow.dao.entity.ProcessDefineConfigEntity; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -public interface ProcessDefineConfigDao extends CrudDao { - -} diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ProcessHistoryDao.java b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ProcessHistoryDao.java deleted file mode 100644 index c37155065..000000000 --- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ProcessHistoryDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.hswebframework.web.workflow.dao; - -import org.hswebframework.web.dao.CrudDao; -import org.hswebframework.web.workflow.dao.entity.ProcessHistoryEntity; - -/** - * @author zhouhao - * @since 3.0.0-RC - */ -public interface ProcessHistoryDao extends CrudDao { -} diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/ActivityConfigServiceImpl.java b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/ActivityConfigServiceImpl.java index b93c04407..12510f5b6 100644 --- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/ActivityConfigServiceImpl.java +++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/ActivityConfigServiceImpl.java @@ -1,14 +1,10 @@ package org.hswebframework.web.workflow.service.imp; import org.hswebframework.web.commons.entity.DataStatus; -import org.hswebframework.web.dao.CrudDao; import org.hswebframework.web.id.IDGenerator; -import org.hswebframework.web.service.EnableCacheGenericEntityService; import org.hswebframework.web.service.GenericEntityService; -import org.hswebframework.web.workflow.dao.ActivityConfigDao; import org.hswebframework.web.workflow.dao.entity.ActivityConfigEntity; import org.hswebframework.web.workflow.service.ActivityConfigService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -26,18 +22,12 @@ import java.util.Date; public class ActivityConfigServiceImpl extends GenericEntityService implements ActivityConfigService { - @Autowired - private ActivityConfigDao activityConfigDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public CrudDao getDao() { - return activityConfigDao; - } @Override @Caching(evict = { @@ -94,7 +84,8 @@ public class ActivityConfigServiceImpl extends GenericEntityService implements ProcessDefineConfigService { - @Autowired - private ProcessDefineConfigDao processDefineConfigDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public CrudDao getDao() { - return processDefineConfigDao; - } - @Override @Caching(evict = { @@ -95,7 +86,8 @@ public class ProcessDefineConfigServiceImpl extends EnableCacheGenericEntityServ public ProcessDefineConfigEntity selectByProcessDefineId(String processDefineId) { return createQuery() .where("processDefineId", Objects.requireNonNull(processDefineId, "参数[processDefineId]不能为空")) - .single(); + .fetchOne() + .orElse(null); } @Override @@ -104,7 +96,7 @@ public class ProcessDefineConfigServiceImpl extends EnableCacheGenericEntityServ return createQuery() .where("processDefineKey", Objects.requireNonNull(processDefineKey, "参数[processDefineKey]不能为空")) .and("status", DataStatus.STATUS_ENABLED) - .orderByDesc("updateTime") - .single(); + .orderBy(SortOrder.desc("updateTime")) + .fetchOne().orElse(null); } } diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/ProcessHistoryServiceImpl.java b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/ProcessHistoryServiceImpl.java index 617bbea73..8a6e06b84 100644 --- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/ProcessHistoryServiceImpl.java +++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/ProcessHistoryServiceImpl.java @@ -1,12 +1,9 @@ package org.hswebframework.web.workflow.service.imp; -import org.hswebframework.web.dao.CrudDao; import org.hswebframework.web.id.IDGenerator; import org.hswebframework.web.service.GenericEntityService; -import org.hswebframework.web.workflow.dao.ProcessHistoryDao; import org.hswebframework.web.workflow.dao.entity.ProcessHistoryEntity; import org.hswebframework.web.workflow.service.ProcessHistoryService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; @@ -18,18 +15,12 @@ import java.util.Date; @Component public class ProcessHistoryServiceImpl extends GenericEntityService implements ProcessHistoryService { - @Autowired - private ProcessHistoryDao processHistoryDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } - @Override - public CrudDao getDao() { - return processHistoryDao; - } @Override public String insert(ProcessHistoryEntity entity) { diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-starter/pom.xml b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-starter/pom.xml index a51f080c6..8952e1a8a 100644 --- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-starter/pom.xml +++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-starter/pom.xml @@ -5,7 +5,7 @@ hsweb-system-workflow org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/hsweb-system-workflow/pom.xml b/hsweb-system/hsweb-system-workflow/pom.xml index 0f8070e45..d397b70eb 100644 --- a/hsweb-system/hsweb-system-workflow/pom.xml +++ b/hsweb-system/hsweb-system-workflow/pom.xml @@ -5,7 +5,7 @@ hsweb-system org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-system/pom.xml b/hsweb-system/pom.xml index 6dd22e8af..25dce3e30 100644 --- a/hsweb-system/pom.xml +++ b/hsweb-system/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 @@ -18,7 +18,6 @@ hsweb-system-database-manager hsweb-system-datasource hsweb-system-workflow - hsweb-system-schedule hsweb-system-organizational hsweb-system-file hsweb-system-template diff --git a/hsweb-tests/pom.xml b/hsweb-tests/pom.xml index e8363c8d1..d0d1b271c 100644 --- a/hsweb-tests/pom.xml +++ b/hsweb-tests/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/hsweb-tests/src/main/java/org/hswebframework/web/tests/SimpleWebApplicationTests.java b/hsweb-tests/src/main/java/org/hswebframework/web/tests/SimpleWebApplicationTests.java deleted file mode 100644 index 744af3caa..000000000 --- a/hsweb-tests/src/main/java/org/hswebframework/web/tests/SimpleWebApplicationTests.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * - * * Copyright 2019 http://www.hswebframework.org - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.hswebframework.web.tests; - -import org.hswebframework.ezorm.rdb.executor.SqlExecutor; -import org.hswebframework.web.commons.entity.factory.EntityFactory; -import org.junit.Before; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.MediaType; -import org.springframework.mock.web.MockHttpSession; -import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import org.springframework.web.context.WebApplicationContext; - -import javax.annotation.Resource; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; - -/** - * 已弃用,请使用 {@link HswebSpecification} {@link HswebCrudWebApiSpecification } - * - * @author zhouhao - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = SimpleWebApplicationTests.Config.class) -@Deprecated -public class SimpleWebApplicationTests extends AbstractTransactionalJUnit4SpringContextTests { - - protected MockMvc mvc; - @Resource - protected WebApplicationContext wac; - - protected MockHttpSession session; - - @Autowired - protected SqlExecutor sqlExecutor; - - @Autowired - protected EntityFactory entityFactory; - - @Before - public void setup() throws Exception { - this.mvc = webAppContextSetup(this.wac).build(); - this.session = new MockHttpSession(); - } - - private TestProcess test(MockHttpServletRequestBuilder builder) { - return new TestProcess() { - @Override - public TestProcess setUp(TestProcessSetUp testProcessSetUp) { - testProcessSetUp.setUp(builder); - return this; - } - - @Override - public TestResult exec() throws Exception { - return () -> mvc.perform(builder); - } - }; - } - - protected MockHttpServletRequestBuilder initDefaultSetting(MockHttpServletRequestBuilder builder) { - return builder.session(session).characterEncoding("UTF-8").contentType(MediaType.APPLICATION_JSON); - } - - protected TestProcess testGet(String api) throws Exception { - MockHttpServletRequestBuilder msrb = initDefaultSetting(get(api)); - return test(msrb); - } - - protected TestProcess testPost(String api) throws Exception { - MockHttpServletRequestBuilder msrb = initDefaultSetting(post(api)); - return test(msrb); - } - - protected TestProcess testDelete(String api) throws Exception { - MockHttpServletRequestBuilder msrb = initDefaultSetting(delete(api)); - return test(msrb); - } - - - protected TestProcess testPut(String api) throws Exception { - MockHttpServletRequestBuilder msrb = initDefaultSetting(put(api)); - return test(msrb); - } - - @Configuration - @SpringBootApplication - @WebAppConfiguration - public static class Config { - - } -} diff --git a/hsweb-thirdparty/hsweb-thirdparty-ueditor/pom.xml b/hsweb-thirdparty/hsweb-thirdparty-ueditor/pom.xml index 44acadead..44fbc6998 100644 --- a/hsweb-thirdparty/hsweb-thirdparty-ueditor/pom.xml +++ b/hsweb-thirdparty/hsweb-thirdparty-ueditor/pom.xml @@ -5,7 +5,7 @@ hsweb-thirdparty org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/hsweb-thirdparty/pom.xml b/hsweb-thirdparty/pom.xml index 6ea060da7..a6de9bcb5 100644 --- a/hsweb-thirdparty/pom.xml +++ b/hsweb-thirdparty/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hswebframework.web - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 676a81d3c..91c092805 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ org.hswebframework.web hsweb-framework - 3.0.10-SNAPSHOT + 3.1.0-SNAPSHOT hsweb-starter hsweb-core @@ -95,7 +95,7 @@ 1.6.12 5.1.1.Final - 3.0.6 + 4.0.0-SNAPSHOT 3.0.2 3.0.2 @@ -312,6 +312,11 @@ + + io.projectreactor + reactor-core + 3.2.12.RELEASE + io.vavr vavr