浏览代码

优化动态表单

zhouhao 7 年之前
父节点
当前提交
53117bc4cc
共有 20 个文件被更改,包括 552 次插入288 次删除
  1. 12 5
      hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DataSourceHolder.java
  2. 3 9
      hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DefaultJdbcExecutor.java
  3. 5 12
      hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DynamicDataSourceAutoConfiguration.java
  4. 0 1
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-dao/hsweb-system-authorization-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/authorization/AuthorizationSettingMenuMapper.xml
  5. 1 1
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-dao/hsweb-system-dynamic-form-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/form/DynamicFormDeployLogMapper.xml
  6. 3 3
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-dao/hsweb-system-dynamic-form-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/form/DynamicFormMapper.xml
  7. 3 0
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-entity/src/main/java/org/hswebframework/web/entity/form/DynamicFormDeployLogEntity.java
  8. 17 17
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-entity/src/main/java/org/hswebframework/web/entity/form/DynamicFormEntity.java
  9. 214 201
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-entity/src/main/java/org/hswebframework/web/entity/form/SimpleDynamicFormEntity.java
  10. 1 0
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-service/hsweb-system-dynamic-form-service-api/src/main/java/org/hswebframework/web/service/form/DynamicFormService.java
  11. 64 13
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-service/hsweb-system-dynamic-form-service-simple/src/main/java/org/hswebframework/web/service/form/simple/SimpleDatabaseRepository.java
  12. 8 0
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-service/hsweb-system-dynamic-form-service-simple/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormDeployLogService.java
  13. 96 16
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-service/hsweb-system-dynamic-form-service-simple/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormService.java
  14. 36 0
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/main/java/org/hswebframework/web/form/DynamicFormAutoConfiguration.java
  15. 3 0
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/main/resources/META-INF/spring.factories
  16. 2 2
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/main/resources/hsweb-starter.js
  17. 66 0
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/test/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormServiceTest.java
  18. 13 0
      hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/test/resources/application.yml
  19. 3 6
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java
  20. 2 2
      hsweb-tests/src/main/java/org/hswebframework/web/tests/SimpleWebApplicationTests.java

+ 12 - 5
hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DataSourceHolder.java

@@ -2,27 +2,31 @@ package org.hswebframework.web.datasource;
 
 import org.hswebframework.web.datasource.exception.DataSourceNotFoundException;
 import org.hswebframework.web.datasource.switcher.DataSourceSwitcher;
+import org.hswebframework.web.datasource.switcher.DefaultDataSourceSwitcher;
 
 /**
  * 用于操作动态数据源,如获取当前使用的数据源,使用switcher切换数据源等
  *
  * @author zhouhao
- * @since  3.0
+ * @since 3.0
  */
 public final class DataSourceHolder {
 
+    private static final DataSourceSwitcher defaultSwitcher = new DefaultDataSourceSwitcher();
+
     /**
      * 动态数据源切换器
      */
-    static DataSourceSwitcher dataSourceSwitcher;
-
+    static DataSourceSwitcher dataSourceSwitcher = defaultSwitcher;
     /**
      * 动态数据源服务
      */
     static DynamicDataSourceService dynamicDataSourceService;
 
     public static void checkDynamicDataSourceReady() {
-        if (dynamicDataSourceService == null) throw new UnsupportedOperationException("dynamicDataSourceService not ready");
+        if (dynamicDataSourceService == null) {
+            throw new UnsupportedOperationException("dataSourceService not ready");
+        }
     }
 
     /**
@@ -36,19 +40,22 @@ public final class DataSourceHolder {
      * @return 默认数据源
      */
     public static DynamicDataSource defaultDataSource() {
+        checkDynamicDataSourceReady();
         return dynamicDataSourceService.getDefaultDataSource();
     }
 
     /**
      * 根据指定的数据源id获取动态数据源
+     *
      * @param dataSourceId 数据源id
      * @return 动态数据源
      * @throws DataSourceNotFoundException 如果数据源不存在将抛出此异常
      */
-    public  static DynamicDataSource dataSource(String dataSourceId){
+    public static DynamicDataSource dataSource(String dataSourceId) {
         checkDynamicDataSourceReady();
         return dynamicDataSourceService.getDataSource(dataSourceId);
     }
+
     /**
      * @return 当前使用的数据源
      */

+ 3 - 9
hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DefaultJdbcExecutor.java

@@ -16,23 +16,17 @@ import java.util.Objects;
  */
 @Transactional(rollbackFor = Throwable.class)
 public class DefaultJdbcExecutor extends AbstractJdbcSqlExecutor {
-    private DataSource dataSource;
-
-    public DefaultJdbcExecutor(DataSource dataSource) {
-        Objects.requireNonNull(dataSource);
-        this.dataSource = dataSource;
-    }
 
     @Override
     public Connection getConnection() {
-        return DataSourceUtils.getConnection(dataSource);
+        return DataSourceUtils.getConnection(DataSourceHolder.currentDataSource());
     }
 
     @Override
     public void releaseConnection(Connection connection) throws SQLException {
-        DataSourceUtils.releaseConnection(connection, dataSource);
+        DataSourceUtils.releaseConnection(connection, DataSourceHolder.currentDataSource());
     }
-    
+
     @Override
     @Transactional(propagation = Propagation.NOT_SUPPORTED)
     public void exec(SQL sql) throws SQLException {

+ 5 - 12
hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DynamicDataSourceAutoConfiguration.java

@@ -3,11 +3,9 @@ package org.hswebframework.web.datasource;
 import org.hsweb.ezorm.rdb.executor.SqlExecutor;
 import org.hswebframework.web.datasource.starter.AopDataSourceSwitcherAutoConfiguration;
 import org.hswebframework.web.datasource.switcher.DataSourceSwitcher;
-import org.hswebframework.web.datasource.switcher.DefaultDataSourceSwitcher;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -23,22 +21,16 @@ import javax.sql.DataSource;
 @ImportAutoConfiguration(AopDataSourceSwitcherAutoConfiguration.class)
 public class DynamicDataSourceAutoConfiguration implements BeanPostProcessor {
 
-    @Bean
-    @ConditionalOnMissingBean(DataSourceSwitcher.class)
-    public DataSourceSwitcher dataSourceSwitcher() {
-        return new DefaultDataSourceSwitcher();
-    }
-
     @Bean
     @ConditionalOnMissingBean(SqlExecutor.class)
-    public SqlExecutor sqlExecutor(DataSource dataSource) {
-        return new DefaultJdbcExecutor(dataSource);
+    public SqlExecutor sqlExecutor() {
+        return new DefaultJdbcExecutor();
     }
 
     @Bean
     @ConditionalOnMissingBean(DynamicDataSourceService.class)
-    public DynamicDataSourceService justSupportDefaultDataSourceService(DataSource dataSource){
-        DynamicDataSourceProxy dataSourceProxy=new DynamicDataSourceProxy(null,dataSource);
+    public DynamicDataSourceService justSupportDefaultDataSourceService(DataSource dataSource) {
+        DynamicDataSourceProxy dataSourceProxy = new DynamicDataSourceProxy(null, dataSource);
         return new DynamicDataSourceService() {
             @Override
             public DynamicDataSource getDataSource(String dataSourceId) {
@@ -52,6 +44,7 @@ public class DynamicDataSourceAutoConfiguration implements BeanPostProcessor {
         };
 
     }
+
     @Override
     public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
         return bean;

+ 0 - 1
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-dao/hsweb-system-authorization-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/authorization/AuthorizationSettingMenuMapper.xml

@@ -50,7 +50,6 @@
         select * from s_autz_menu where setting_id =#{setting_id}
     </select>
 
-
     <delete id="delete" parameterType="org.hswebframework.web.commons.entity.Entity">
         <include refid="config"/>
         <include refid="BasicMapper.buildDeleteSql"/>

+ 1 - 1
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-dao/hsweb-system-dynamic-form-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/form/DynamicFormDeployLogMapper.xml

@@ -7,7 +7,7 @@
         <id property="id" column="u_id" javaType="string" jdbcType="VARCHAR"/>
         <result property="formId" column="form_id" javaType="String" jdbcType="VARCHAR"/>
         <result property="version" column="version" javaType="Long" jdbcType="NUMERIC"/>
-        <result property="deployTime" column="deploy_time" javaType="Long" jdbcType="TIMESTAMP"/>
+        <result property="deployTime" column="deploy_time" javaType="Long" jdbcType="DECIMAL"/>
         <result property="metaData" column="meta_data" javaType="String" jdbcType="CLOB"/>
         <result property="status" column="status" javaType="Byte" jdbcType="NUMERIC"/>
     </resultMap>

+ 3 - 3
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-dao/hsweb-system-dynamic-form-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/form/DynamicFormMapper.xml

@@ -3,10 +3,10 @@
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.hswebframework.web.dao.form.DynamicFormDao">
-    <resultMap id="DynamicFormResultMap" type="org.hswebframework.web.entity.form.SimpleDynamicFormEntity">
+    <resultMap id="DynamicFormResultMap" type="org.hswebframework.web.entity.form.DynamicFormEntity">
         <id property="id" column="u_id" javaType="string" jdbcType="VARCHAR"/>
         <result property="name" column="name" javaType="String" jdbcType="VARCHAR"/>
-        <result property="tableName" column="table_name" javaType="String" jdbcType="VARCHAR"/>
+        <result property="databaseTableName" column="t_name" javaType="String" jdbcType="VARCHAR"/>
         <result property="describe" column="describe" javaType="String" jdbcType="VARCHAR"/>
         <result property="version" column="version" javaType="Long" jdbcType="DECIMAL"/>
         <result property="creatorId" column="creator_id" javaType="String" jdbcType="VARCHAR"/>
@@ -27,7 +27,7 @@
         <bind name="tableName" value="'s_dyn_form'"/>
     </sql>
 
-    <insert id="insert" parameterType="org.hswebframework.web.entity.form.SimpleDynamicFormEntity">
+    <insert id="insert" parameterType="org.hswebframework.web.entity.form.DynamicFormEntity">
         <include refid="config"/>
         <include refid="BasicMapper.buildInsertSql"/>
     </insert>

+ 3 - 0
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-entity/src/main/java/org/hswebframework/web/entity/form/DynamicFormDeployLogEntity.java

@@ -27,6 +27,9 @@ public interface DynamicFormDeployLogEntity extends GenericEntity<String> {
      * 部署的元数据
      */
     String metaData   = "metaData";
+    /**
+     * 部署状态
+     */
     String status     = "status";
 
     /**

+ 17 - 17
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-entity/src/main/java/org/hswebframework/web/entity/form/DynamicFormEntity.java

@@ -14,59 +14,59 @@ public interface DynamicFormEntity extends GenericEntity<String> {
     /**
      * 表单名称
      */
-    String name = "name";
+    String name              = "name";
     /**
      * 数据库表名
      */
-    String tableName = "tableName";
+    String databaseTableName = "databaseTableName";
     /**
      * 备注
      */
-    String describe = "describe";
+    String describe          = "describe";
     /**
      * 版本
      */
-    String version = "version";
+    String version           = "version";
     /**
      * 创建人id
      */
-    String creatorId = "creatorId";
+    String creatorId         = "creatorId";
     /**
      * 创建时间
      */
-    String createTime = "createTime";
+    String createTime        = "createTime";
     /**
      * 修改时间
      */
-    String updateTime = "updateTime";
+    String updateTime        = "updateTime";
     /**
      * 是否已发布
      */
-    String deployed = "deployed";
+    String deployed          = "deployed";
     /**
      * 别名
      */
-    String alias = "alias";
+    String alias             = "alias";
     /**
      * 触发器
      */
-    String triggers = "triggers";
+    String triggers          = "triggers";
     /**
      * 表链接
      */
-    String correlations = "correlations";
+    String correlations      = "correlations";
     /**
      * 数据源id,为空使用默认数据源
      */
-    String dataSourceId = "dataSourceId";
+    String dataSourceId      = "dataSourceId";
     /**
      * 其他配置
      */
-    String properties = "properties";
+    String properties        = "properties";
     /**
      * 表单类型
      */
-    String type = "type";
+    String type              = "type";
 
     /**
      * @return 表单名称
@@ -81,12 +81,12 @@ public interface DynamicFormEntity extends GenericEntity<String> {
     /**
      * @return 数据库表名
      */
-    String getTableName();
+    String getDatabaseTableName();
 
     /**
-     * @param tableName 数据库表名
+     * @param databaseTableName 数据库表名
      */
-    void setTableName(String tableName);
+    void setDatabaseTableName(String databaseTableName);
 
     /**
      * @return 备注

+ 214 - 201
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-entity/src/main/java/org/hswebframework/web/entity/form/SimpleDynamicFormEntity.java

@@ -1,206 +1,219 @@
 package org.hswebframework.web.entity.form;
+
 import org.hswebframework.web.commons.entity.SimpleGenericEntity;
 
 /**
-* 动态表单
-* @author hsweb-generator-online
-*/
-public class SimpleDynamicFormEntity extends SimpleGenericEntity<String> implements DynamicFormEntity{
-  		//表单名称
-        private String name;
-  		//数据库表名
-        private String tableName;
-  		//备注
-        private String describe;
-  		//版本
-        private Long version;
-  		//创建人id
-        private String creatorId;
-  		//创建时间
-        private Long createTime;
-  		//修改时间
-        private Long updateTime;
-  		//是否已发布
-        private Boolean deployed;
-  		//别名
-        private String alias;
-  		//触发器
-        private String triggers;
-  		//表链接
-        private String correlations;
-  		//数据源id,为空使用默认数据源
-        private String dataSourceId;
-  		//表单类型
-        private String type;
-
-        /**
-        * @return  表单名称
-        */
-        public String getName(){
-			return this.name;
-        }
-
-        /**
-        * @param  name  表单名称
-        */
-        public void setName(String name){
-        	this.name=name;
-        }
-        /**
-        * @return  数据库表名
-        */
-        public String getTableName(){
-			return this.tableName;
-        }
-
-        /**
-        * @param  tableName  数据库表名
-        */
-        public void setTableName(String tableName){
-        	this.tableName=tableName;
-        }
-        /**
-        * @return  备注
-        */
-        public String getDescribe(){
-			return this.describe;
-        }
-
-        /**
-        * @param  describe  备注
-        */
-        public void setDescribe(String describe){
-        	this.describe = describe;
-        }
-        /**
-        * @return  版本
-        */
-        public Long getVersion(){
-			return this.version;
-        }
-
-        /**
-        * @param  version  版本
-        */
-        public void setVersion(Long version){
-        	this.version=version;
-        }
-        /**
-        * @return  创建人id
-        */
-        public String getCreatorId(){
-			return this.creatorId;
-        }
-
-        /**
-        * @param  creatorId  创建人id
-        */
-        public void setCreatorId(String creatorId){
-        	this.creatorId=creatorId;
-        }
-        /**
-        * @return  创建时间
-        */
-        public Long getCreateTime(){
-			return this.createTime;
-        }
-
-        /**
-        * @param  createTime  创建时间
-        */
-        public void setCreateTime(Long createTime){
-        	this.createTime=createTime;
-        }
-        /**
-        * @return  修改时间
-        */
-        public Long getUpdateTime(){
-			return this.updateTime;
-        }
-
-        /**
-        * @param  updateTime  修改时间
-        */
-        public void setUpdateTime(Long updateTime){
-        	this.updateTime=updateTime;
-        }
-        /**
-        * @return  是否已发布
-        */
-        public Boolean isDeployed(){
-			return this.deployed;
-        }
-
-        /**
-        * @param  deployed  是否已发布
-        */
-        public void setDeployed(Boolean deployed){
-        	this.deployed=deployed;
-        }
-        /**
-        * @return  别名
-        */
-        public String getAlias(){
-			return this.alias;
-        }
-
-        /**
-        * @param  alias  别名
-        */
-        public void setAlias(String alias){
-        	this.alias=alias;
-        }
-        /**
-        * @return  触发器
-        */
-        public String getTriggers(){
-			return this.triggers;
-        }
-
-        /**
-        * @param  triggers  触发器
-        */
-        public void setTriggers(String triggers){
-        	this.triggers=triggers;
-        }
-        /**
-        * @return  表链接
-        */
-        public String getCorrelations(){
-			return this.correlations;
-        }
-
-        /**
-        * @param  correlations  表链接
-        */
-        public void setCorrelations(String correlations){
-        	this.correlations=correlations;
-        }
-        /**
-        * @return  数据源id,为空使用默认数据源
-        */
-        public String getDataSourceId(){
-			return this.dataSourceId;
-        }
-
-        /**
-        * @param  dataSourceId  数据源id,为空使用默认数据源
-        */
-        public void setDataSourceId(String dataSourceId){
-        	this.dataSourceId=dataSourceId;
-        }
-
-        /**
-        * @return  表单类型
-        */
-        public String getType(){
-			return this.type;
-        }
-
-        /**
-        * @param  type  表单类型
-        */
-        public void setType(String type){
-        	this.type=type;
-        }
+ * 动态表单
+ *
+ * @author hsweb-generator-online
+ */
+public class SimpleDynamicFormEntity extends SimpleGenericEntity<String> implements DynamicFormEntity {
+    //表单名称
+    private String  name;
+    //数据库表名
+    private String  databaseTableName;
+    //备注
+    private String  describe;
+    //版本
+    private Long    version;
+    //创建人id
+    private String  creatorId;
+    //创建时间
+    private Long    createTime;
+    //修改时间
+    private Long    updateTime;
+    //是否已发布
+    private Boolean deployed;
+    //别名
+    private String  alias;
+    //触发器
+    private String  triggers;
+    //表链接
+    private String  correlations;
+    //数据源id,为空使用默认数据源
+    private String  dataSourceId;
+    //表单类型
+    private String  type;
+
+    /**
+     * @return 表单名称
+     */
+    public String getName() {
+        return this.name;
+    }
+
+    /**
+     * @param name 表单名称
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * @return 数据库表名
+     */
+    public String getDatabaseTableName() {
+        return this.databaseTableName;
+    }
+
+    /**
+     * @param databaseTableName 数据库表名
+     */
+    public void setDatabaseTableName(String databaseTableName) {
+        this.databaseTableName = databaseTableName;
+    }
+
+    /**
+     * @return 备注
+     */
+    public String getDescribe() {
+        return this.describe;
+    }
+
+    /**
+     * @param describe 备注
+     */
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+
+    /**
+     * @return 版本
+     */
+    public Long getVersion() {
+        return this.version;
+    }
+
+    /**
+     * @param version 版本
+     */
+    public void setVersion(Long version) {
+        this.version = version;
+    }
+
+    /**
+     * @return 创建人id
+     */
+    public String getCreatorId() {
+        return this.creatorId;
+    }
+
+    /**
+     * @param creatorId 创建人id
+     */
+    public void setCreatorId(String creatorId) {
+        this.creatorId = creatorId;
+    }
+
+    /**
+     * @return 创建时间
+     */
+    public Long getCreateTime() {
+        return this.createTime;
+    }
+
+    /**
+     * @param createTime 创建时间
+     */
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * @return 修改时间
+     */
+    public Long getUpdateTime() {
+        return this.updateTime;
+    }
+
+    /**
+     * @param updateTime 修改时间
+     */
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    /**
+     * @return 是否已发布
+     */
+    public Boolean isDeployed() {
+        return this.deployed;
+    }
+
+    /**
+     * @param deployed 是否已发布
+     */
+    public void setDeployed(Boolean deployed) {
+        this.deployed = deployed;
+    }
+
+    /**
+     * @return 别名
+     */
+    public String getAlias() {
+        return this.alias;
+    }
+
+    /**
+     * @param alias 别名
+     */
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+    /**
+     * @return 触发器
+     */
+    public String getTriggers() {
+        return this.triggers;
+    }
+
+    /**
+     * @param triggers 触发器
+     */
+    public void setTriggers(String triggers) {
+        this.triggers = triggers;
+    }
+
+    /**
+     * @return 表链接
+     */
+    public String getCorrelations() {
+        return this.correlations;
+    }
+
+    /**
+     * @param correlations 表链接
+     */
+    public void setCorrelations(String correlations) {
+        this.correlations = correlations;
+    }
+
+    /**
+     * @return 数据源id, 为空使用默认数据源
+     */
+    public String getDataSourceId() {
+        return this.dataSourceId;
+    }
+
+    /**
+     * @param dataSourceId 数据源id,为空使用默认数据源
+     */
+    public void setDataSourceId(String dataSourceId) {
+        this.dataSourceId = dataSourceId;
+    }
+
+    /**
+     * @return 表单类型
+     */
+    public String getType() {
+        return this.type;
+    }
+
+    /**
+     * @param type 表单类型
+     */
+    public void setType(String type) {
+        this.type = type;
+    }
 }

+ 1 - 0
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-service/hsweb-system-dynamic-form-service-api/src/main/java/org/hswebframework/web/service/form/DynamicFormService.java

@@ -9,6 +9,7 @@ import org.hswebframework.web.service.CrudService;
  * @author hsweb-generator-online
  */
 public interface DynamicFormService extends CrudService<DynamicFormEntity, String> {
+    void deployAllFromLog();
 
     void deployAll();
 

+ 64 - 13
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-service/hsweb-system-dynamic-form-service-simple/src/main/java/org/hswebframework/web/service/form/simple/SimpleDatabaseRepository.java

@@ -1,30 +1,77 @@
 package org.hswebframework.web.service.form.simple;
 
-import org.hsweb.ezorm.core.Database;
 import org.hsweb.ezorm.rdb.RDBDatabase;
+import org.hsweb.ezorm.rdb.executor.SqlExecutor;
+import org.hsweb.ezorm.rdb.meta.parser.H2TableMetaParser;
+import org.hsweb.ezorm.rdb.meta.parser.MysqlTableMetaParser;
+import org.hsweb.ezorm.rdb.meta.parser.OracleTableMetaParser;
+import org.hsweb.ezorm.rdb.meta.parser.SqlServer2012TableMetaParser;
+import org.hsweb.ezorm.rdb.render.dialect.*;
+import org.hsweb.ezorm.rdb.simple.SimpleDatabase;
 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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
+import java.util.function.Supplier;
 
 /**
  * Created by zhouhao on 2017/7/2.
  */
+@Service
 public class SimpleDatabaseRepository implements DatabaseRepository {
 
-    private RDBDatabase defaultDatabase;
+    private RDBDatabase defaultDatabase = null;
+    private SqlExecutor sqlExecutor     = null;
 
-    private Map<String,RDBDatabase> repository = new HashMap<>();
+    private final Map<String, RDBDatabase>                                 repository            = new HashMap<>();
+    private final Map<DatabaseType, Supplier<AbstractRDBDatabaseMetaData>> databaseMetaSuppliers = new HashMap<>();
+
+    @Autowired
+    public void setSqlExecutor(SqlExecutor 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));
+    }
 
     @Override
     public RDBDatabase getDefaultDatabase() {
-        if(defaultDatabase==null){
-            synchronized (this){
-                if(defaultDatabase==null){
-                    defaultDatabase=initDatabase(DataSourceHolder.defaultDatabaseType());
+        if (defaultDatabase == null) {
+            synchronized (this) {
+                if (defaultDatabase == null) {
+                    defaultDatabase = initDatabase(DataSourceHolder.defaultDatabaseType());
                 }
             }
         }
@@ -33,20 +80,24 @@ public class SimpleDatabaseRepository implements DatabaseRepository {
 
     @Override
     public RDBDatabase getDatabase(String datasourceId) {
-        DynamicDataSource dynamicDataSource =DataSourceHolder.dataSource(datasourceId);
-        return repository.computeIfAbsent(datasourceId,id->this.initDatabase(dynamicDataSource.getType()));
+        DynamicDataSource dynamicDataSource = DataSourceHolder.dataSource(datasourceId);
+        return repository.computeIfAbsent(datasourceId, id -> this.initDatabase(dynamicDataSource.getType()));
     }
 
     @Override
     public RDBDatabase getCurrentDatabase() {
         return repository
                 .computeIfAbsent(DataSourceHolder.switcher().currentDataSourceId()
-                        ,id->this.initDatabase(DataSourceHolder.currentDatabaseType()));
+                        , id -> this.initDatabase(DataSourceHolder.currentDatabaseType()));
     }
 
 
-    private RDBDatabase initDatabase(DatabaseType databaseType){
-
-        return  null;
+    private RDBDatabase initDatabase(DatabaseType databaseType) {
+        Supplier<AbstractRDBDatabaseMetaData> supplier = databaseMetaSuppliers.get(databaseType);
+        Objects.requireNonNull(supplier, "database type" + databaseType + " is not support");
+        AbstractRDBDatabaseMetaData metaData = supplier.get();
+        SimpleDatabase database = new SimpleDatabase(metaData, sqlExecutor);
+        database.setAutoParse(true);
+        return database;
     }
 }

+ 8 - 0
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-service/hsweb-system-dynamic-form-service-simple/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormDeployLogService.java

@@ -1,14 +1,22 @@
 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.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.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;
 
 /**

+ 96 - 16
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-service/hsweb-system-dynamic-form-service-simple/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormService.java

@@ -1,15 +1,18 @@
 package org.hswebframework.web.service.form.simple;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import org.hsweb.ezorm.core.ValueConverter;
 import org.hsweb.ezorm.rdb.RDBDatabase;
 import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
 import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
 import org.hsweb.ezorm.rdb.meta.converter.*;
 import org.hsweb.ezorm.rdb.render.dialect.Dialect;
-import org.hswebframework.web.concurrent.lock.annotation.WriteLock;
+import org.hswebframework.web.commons.entity.DataStatus;
 import org.hswebframework.web.dao.form.DynamicFormColumnDao;
 import org.hswebframework.web.dao.form.DynamicFormDao;
 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.id.IDGenerator;
 import org.hswebframework.web.service.DefaultDSLQueryService;
@@ -49,7 +52,7 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
     @Autowired
     private DynamicFormDeployLogService dynamicFormDeployLogService;
 
-    @Autowired
+    @Autowired(required = false)
     private OptionalConvertBuilder optionalConvertBuilder;
 
     @Override
@@ -67,9 +70,71 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
         return super.updateByPk(s, entity);
     }
 
+    @Override
+    public void deployAllFromLog() {
+        List<DynamicFormEntity> entities = createQuery()
+                .select(DynamicFormEntity.id)
+                .where(DynamicFormEntity.deployed, true)
+                .listNoPaging();
+        if (logger.isDebugEnabled()) {
+            logger.debug("do deploy all form , size:{}", entities.size());
+        }
+        for (DynamicFormEntity form : entities) {
+            DynamicFormDeployLogEntity logEntity = dynamicFormDeployLogService.selectLastDeployed(form.getId());
+            if (null != logEntity) {
+                deployFromLog(logEntity);
+            }
+        }
+    }
+
     @Override
     public void deployAll() {
+        createQuery()
+                .select(DynamicFormEntity.id)
+                .listNoPaging()
+                .forEach(form -> this.deploy(form.getId()));
+    }
+
+    public DynamicFormDeployLogEntity createDeployLog(DynamicFormEntity form, List<DynamicFormColumnEntity> columns) {
+        DynamicFormDeployLogEntity entity = entityFactory.newInstance(DynamicFormDeployLogEntity.class);
+        entity.setStatus(DataStatus.STATUS_ENABLED);
+        entity.setDeployTime(System.currentTimeMillis());
+        entity.setVersion(form.getVersion());
+        entity.setFormId(form.getId());
+        Map<String, Object> meta = new HashMap<>();
+        meta.put("form", form);
+        meta.put("columns", columns);
+        entity.setMetaData(JSON.toJSONString(meta));
+        return entity;
+    }
+
+    public void deployFromLog(DynamicFormDeployLogEntity logEntity) {
+        JSONObject metadata = JSON.parseObject(logEntity.getMetaData());
+        DynamicFormEntity form = metadata.getObject("form", DynamicFormEntity.class);
+        List<DynamicFormColumnEntity> columns = metadata.getJSONArray("columns").toJavaList(DynamicFormColumnEntity.class);
+        if (logger.isDebugEnabled()) {
+            logger.debug("do deploy form {} , columns size:{}", form.getName(), columns.size());
+        }
+        deploy(form, columns);
+    }
+
+    @Override
+    public String insert(DynamicFormEntity entity) {
+        entity.setDeployed(false);
+        return super.insert(entity);
+    }
 
+    @Override
+    public void unDeploy(String formId) {
+        DynamicFormEntity form = selectByPk(formId);
+        assertNotNull(form);
+        //取消发布
+        dynamicFormDeployLogService.cancelDeployed(formId);
+        //移除表结构定义
+        RDBDatabase database = StringUtils.isEmpty(form.getDataSourceId())
+                ? databaseRepository.getDefaultDatabase()
+                : databaseRepository.getDatabase(form.getDataSourceId());
+        database.removeTable(form.getDatabaseTableName());
     }
 
     public void deploy(String formId) {
@@ -79,6 +144,12 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
                 .where(DynamicFormColumnEntity.formId, formId)
                 .listNoPaging();
         deploy(formEntity, columns);
+        try {
+            dynamicFormDeployLogService.insert(createDeployLog(formEntity, columns));
+        } catch (Exception e) {
+            unDeploy(formId);
+            throw e;
+        }
     }
 
     protected void deploy(DynamicFormEntity form, List<DynamicFormColumnEntity> columns) {
@@ -87,7 +158,7 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
                 : databaseRepository.getDatabase(form.getDataSourceId());
         RDBTableMetaData metaData = buildTable(database, form, columns);
         try {
-            if (null == database.getTable(metaData.getName())) {
+            if (!database.getMeta().getParser().tableExists(metaData.getName())) {
                 database.createTable(metaData);
             } else {
                 database.alterTable(metaData);
@@ -100,7 +171,7 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
     protected RDBTableMetaData buildTable(RDBDatabase database, DynamicFormEntity form, List<DynamicFormColumnEntity> columns) {
         RDBTableMetaData metaData = new RDBTableMetaData();
         metaData.setComment(form.getDescribe());
-        metaData.setName(form.getTableName());
+        metaData.setName(form.getDatabaseTableName());
         metaData.setProperties(form.getProperties());
         metaData.setAlias(form.getAlias());
         columns.stream().map(column -> {
@@ -108,20 +179,20 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
             columnMeta.setName(column.getName());
             columnMeta.setAlias(column.getAlias());
             columnMeta.setComment(column.getDescribe());
-            columnMeta.setProperties(column.getProperties());
-            columnMeta.setLength(column.getLength());
-            columnMeta.setPrecision(column.getPrecision());
-            columnMeta.setScale(column.getScale());
+            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()));
-            if (!StringUtils.isEmpty(column.getDataType())) {
+            columnMeta.setProperties(column.getProperties() == null ? new HashMap<>() : column.getProperties());
+            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()));
-            if (!StringUtils.isEmpty(column.getDictId())) {
+            if (!StringUtils.isEmpty(column.getDictId()) && optionalConvertBuilder != null) {
                 columnMeta.setOptionConverter(optionalConvertBuilder.buildFromDict(column.getDictId(), column.getDictParserId()));
             }
             customColumnSetting(database, form, metaData, column, columnMeta);
@@ -162,6 +233,10 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
                 }
                 return new ClobValueConverter();
             case NUMERIC:
+            case BIGINT:
+            case INTEGER:
+            case SMALLINT:
+            case TINYINT:
                 return new NumberValueConverter(javaType);
             case DATE:
             case TIMESTAMP:
@@ -171,6 +246,17 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
                 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();
         }
 
@@ -221,10 +307,4 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
         return clazz;
     }
 
-    @Override
-    @WriteLock("dynamic-form:${#formId}")
-    public void unDeploy(String formId) {
-
-    }
-
 }

+ 36 - 0
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/main/java/org/hswebframework/web/form/DynamicFormAutoConfiguration.java

@@ -0,0 +1,36 @@
+package org.hswebframework.web.form;
+
+import org.hswebframework.web.service.form.DynamicFormService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.event.ContextStartedEvent;
+
+/**
+ * TODO 完成注释
+ *
+ * @author zhouhao
+ */
+@Configuration
+public class DynamicFormAutoConfiguration {
+
+    public static class DynamicFormAutoDeploy implements ApplicationListener<ContextStartedEvent> {
+
+        private Logger logger = LoggerFactory.getLogger(this.getClass());
+
+        @Autowired
+        private DynamicFormService dynamicFormService;
+
+        @Override
+        public void onApplicationEvent(ContextStartedEvent event) {
+            try {
+                dynamicFormService.deployAllFromLog();
+            } catch (Exception e) {
+                logger.error("deploy form error", e);
+            }
+        }
+    }
+}

+ 3 - 0
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/main/resources/META-INF/spring.factories

@@ -0,0 +1,3 @@
+# Auto Configure
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.hswebframework.web.form.DynamicFormAutoConfiguration

+ 2 - 2
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/main/resources/hsweb-starter.js

@@ -23,7 +23,7 @@ function install(context) {
     database.createOrAlter("s_dyn_form")
         .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(32).commit()
-        .addColumn().name("table_name").alias("tableName").comment("数据库表名").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()
+        .addColumn().name("t_name").alias("tableName").comment("数据库表名").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()
         .addColumn().name("describe").alias("describe").comment("备注").jdbcType(java.sql.JDBCType.VARCHAR).length(512).commit()
         .addColumn().name("type").alias("type").comment("表单类型").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()
         .addColumn().name("version").alias("version").comment("版本").jdbcType(java.sql.JDBCType.DECIMAL).length(32, 0).commit()
@@ -60,7 +60,7 @@ function install(context) {
         .addColumn().name("u_id").alias("id").comment("ID").jdbcType(java.sql.JDBCType.VARCHAR).length(32).primaryKey().commit()
         .addColumn().name("form_id").alias("formId").comment("表单ID").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()
         .addColumn().name("version").alias("version").comment("发布的版本").jdbcType(java.sql.JDBCType.NUMERIC).length(32).commit()
-        .addColumn().name("deploy_time").alias("deployTime").comment("发布时间").jdbcType(java.sql.JDBCType.TIMESTAMP).commit()
+        .addColumn().name("deploy_time").alias("deployTime").comment("发布时间").jdbcType(java.sql.JDBCType.DECIMAL).commit()
         .addColumn().name("meta_data").alias("metaData").comment("部署的元数据").jdbcType(java.sql.JDBCType.CLOB).commit()
         .addColumn().name("status").alias("status").comment("状态").jdbcType(java.sql.JDBCType.NUMERIC).length(4).commit()
         .comment("表单发布日志").commit();

+ 66 - 0
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/test/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormServiceTest.java

@@ -0,0 +1,66 @@
+package org.hswebframework.web.service.form.simple;
+
+import org.hsweb.ezorm.rdb.executor.SqlExecutor;
+import org.hswebframework.web.entity.form.DynamicFormColumnEntity;
+import org.hswebframework.web.entity.form.DynamicFormEntity;
+import org.hswebframework.web.service.form.DynamicFormColumnService;
+import org.hswebframework.web.service.form.DynamicFormService;
+import org.hswebframework.web.tests.SimpleWebApplicationTests;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.sql.JDBCType;
+import java.sql.SQLException;
+
+/**
+ * TODO 完成注释
+ *
+ * @author zhouhao
+ */
+public class SimpleDynamicFormServiceTest extends SimpleWebApplicationTests {
+
+    @Autowired
+    private DynamicFormService dynamicFormService;
+
+    @Autowired
+    private DynamicFormColumnService dynamicFormColumnService;
+
+    @Autowired
+    private SqlExecutor sqlExecutor;
+
+    @Test
+    public void testDeploy() throws SQLException {
+        DynamicFormEntity form = entityFactory.newInstance(DynamicFormEntity.class);
+        form.setName("test");
+        form.setDatabaseTableName("f_test");
+        String id = dynamicFormService.insert(form);
+        DynamicFormColumnEntity column_id = entityFactory.newInstance(DynamicFormColumnEntity.class);
+        column_id.setFormId(id);
+        column_id.setName("id");
+        column_id.setDescribe("ID");
+        column_id.setJavaType("string");
+        column_id.setJdbcType(JDBCType.VARCHAR.getName());
+        column_id.setLength(32);
+        DynamicFormColumnEntity column_name = entityFactory.newInstance(DynamicFormColumnEntity.class);
+        column_name.setFormId(id);
+        column_name.setName("name");
+        column_name.setDescribe("姓名");
+        column_name.setJavaType("string");
+        column_name.setJdbcType(JDBCType.VARCHAR.getName());
+        column_name.setLength(32);
+
+        DynamicFormColumnEntity column_age = entityFactory.newInstance(DynamicFormColumnEntity.class);
+        column_age.setFormId(id);
+        column_age.setName("age");
+        column_age.setDescribe("年龄");
+        column_age.setJavaType("int");
+        column_age.setJdbcType(JDBCType.NUMERIC.getName());
+        column_age.setPrecision(4);
+        column_age.setScale(0);
+
+        dynamicFormColumnService.insert(column_id);
+        dynamicFormService.deploy(id);
+
+        sqlExecutor.list("select * from f_test");
+    }
+}

+ 13 - 0
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/test/resources/application.yml

@@ -0,0 +1,13 @@
+spring:
+    aop:
+        auto: true
+    datasource:
+       url : jdbc:h2:mem:form_test_mem
+       username : sa
+       password :
+       type: com.alibaba.druid.pool.DruidDataSource
+       driver-class-name : org.h2.Driver
+hsweb:
+    app:
+      name: 动态表单测试
+      version: 3.0.0

+ 3 - 6
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java

@@ -16,6 +16,7 @@
  */
 package org.hswebframework.web.service.organizational.simple;
 
+import org.hswebframework.web.commons.entity.DataStatus;
 import org.hswebframework.web.commons.entity.TreeSupportEntity;
 import org.hswebframework.web.dao.dynamic.QueryByEntityDao;
 import org.hswebframework.web.dao.organizational.*;
@@ -38,9 +39,6 @@ import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StringUtils;
 
 import java.util.*;
 import java.util.function.BiConsumer;
@@ -49,8 +47,7 @@ import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
-import static org.hswebframework.web.service.DefaultDSLQueryService.*;
-import static org.springframework.util.StringUtils.*;
+import static org.springframework.util.StringUtils.isEmpty;
 
 /**
  * 默认的服务实现
@@ -96,7 +93,7 @@ public class SimplePersonService extends EnableCacheGernericEntityService<Person
     @Override
     @CacheEvict(allEntries = true)
     public String insert(PersonAuthBindEntity authBindEntity) {
-        authBindEntity.setStatus((byte) 1);
+        authBindEntity.setStatus(DataStatus.STATUS_ENABLED);
         // TODO: 17-6-1 应该使用锁,防止并发同步用户,导致多个人员使用相同的用户
         if (authBindEntity.getPersonUser() != null) {
             syncUserInfo(authBindEntity);

+ 2 - 2
hsweb-tests/src/main/java/org/hswebframework/web/tests/SimpleWebApplicationTests.java

@@ -28,6 +28,7 @@ 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;
@@ -46,7 +47,7 @@ import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppC
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = SimpleWebApplicationTests.Config.class)
-public class SimpleWebApplicationTests {
+public class SimpleWebApplicationTests extends AbstractTransactionalJUnit4SpringContextTests {
 
     protected MockMvc               mvc;
     @Resource
@@ -111,6 +112,5 @@ public class SimpleWebApplicationTests {
     @WebAppConfiguration
     public static class Config {
 
-
     }
 }