Browse Source

完善数据字典功能

zhouhao 8 years ago
parent
commit
59316a6dcd

+ 4 - 2
hsweb-system/hsweb-system-dictionary/README.md

@@ -1,5 +1,7 @@
 ## 数据字典功能
 
+提供数据字典功能,支持字典解析与反解析。支持树形结构的字典。
 
-## API
-//todo
+## 字典解析
+
+详见: [DictionaryParserTests](hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/test/java/org/hswebframework/web/starter/dictionary/DictionaryParserTests.java)

+ 3 - 0
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-dao/hsweb-system-dictionary-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/dictionary/DictionaryItemMapper.xml

@@ -34,6 +34,9 @@
         <result property="sortIndex" column="sort_index" javaType="Long" jdbcType="DECIMAL"/>
         <result property="level" column="level" javaType="Long" jdbcType="DECIMAL"/>
         <result property="properties" column="properties" javaType="Map" jdbcType="CLOB"/>
+        <result property="valueExpression" column="value_expression" javaType="String" jdbcType="CLOB"/>
+        <result property="textExpression" column="text_expression" javaType="String" jdbcType="CLOB"/>
+        <result property="properties" column="properties" javaType="Map" jdbcType="CLOB"/>
     </resultMap>
 
     <!--用于动态生成sql所需的配置-->

+ 32 - 14
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-entity/src/main/java/org/hswebframework/web/entity/dictionary/DictionaryItemEntity.java

@@ -17,6 +17,9 @@
 package org.hswebframework.web.entity.dictionary;
 
 import org.hswebframework.web.commons.entity.TreeSortSupportEntity;
+import org.hswebframework.web.commons.entity.TreeSupportEntity;
+
+import java.util.List;
 
 /**
  * 数据字典选项 实体
@@ -30,51 +33,68 @@ public interface DictionaryItemEntity extends TreeSortSupportEntity<String> {
     /**
      * 字典id
      */
-    String dictId     = "dictId";
+    String dictId         = "dictId";
     /**
      * 名称
      */
-    String name       = "name";
+    String name           = "name";
     /**
      * 字典值
      */
-    String value      = "value";
+    String value          = "value";
     /**
      * 字典文本
      */
-    String text       = "text";
+    String text           = "text";
     /**
      * 字典值类型
      */
-    String valueType  = "valueType";
+    String valueType      = "valueType";
     /**
      * 是否启用
      */
-    String enabled    = "enabled";
+    String enabled        = "enabled";
     /**
      * 说明
      */
-    String describe   = "describe";
+    String describe       = "describe";
     /**
      * 父级选项
      */
-    String parentId   = "parentId";
+    String parentId       = "parentId";
     /**
      * 树编码
      */
-    String path   = "path";
+    String path           = "path";
     /**
      * 快速搜索码
      */
-    String searchCode = "searchCode";
+    String searchCode     = "searchCode";
     /**
      * 排序索引
      */
-    String sortIndex  = "sortIndex";
+    String sortIndex      = "sortIndex";
     /**
      * 树结构层级
      */
-    String level      = "level";
+    String level          = "level";
+    /**
+     * 文本提取表达式
+     */
+    String textExpression = "textExpression";
+
+    /**
+     * 文本提取表达式
+     */
+    String valueExpression = "valueExpression";
+
+    String getTextExpression();
+
+    void setTextExpression(String textExpression);
+
+    String getValueExpression();
+
+    void setValueExpression(String valueExpression);
 
     /**
      * @return 字典id
@@ -155,6 +175,4 @@ public interface DictionaryItemEntity extends TreeSortSupportEntity<String> {
      * 设置 快速搜索码
      */
     void setSearchCode(String searchCode);
-
-
 }

+ 24 - 0
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-entity/src/main/java/org/hswebframework/web/entity/dictionary/SimpleDictionaryItemEntity.java

@@ -43,6 +43,12 @@ public class SimpleDictionaryItemEntity extends SimpleTreeSortSupportEntity<Stri
     //快速搜索码
     private String searchCode;
 
+    // 使用表达式拼接text
+    // #value+'('+#context.otherVal+')'
+    private String textExpression;
+    private String valueExpression;
+
+
     private List<SimpleDictionaryItemEntity> children;
 
     @Override
@@ -55,6 +61,24 @@ public class SimpleDictionaryItemEntity extends SimpleTreeSortSupportEntity<Stri
         this.children = children;
     }
 
+    public String getTextExpression() {
+        return textExpression;
+    }
+
+    public void setTextExpression(String textExpression) {
+        this.textExpression = textExpression;
+    }
+
+    @Override
+    public String getValueExpression() {
+        return valueExpression;
+    }
+
+    @Override
+    public void setValueExpression(String valueExpression) {
+        this.valueExpression = valueExpression;
+    }
+
     /**
      * @return 字典id
      */

+ 9 - 8
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-starter/src/main/resources/hsweb-starter.js

@@ -41,9 +41,9 @@ function install(context) {
         .addColumn().name("name").alias("name").comment("字典名称").jdbcType(java.sql.JDBCType.VARCHAR).length(64).commit()
         .addColumn().name("classified_id").alias("classifiedId").comment("分类id").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()
         .addColumn().name("describe").alias("describe").comment("说明").jdbcType(java.sql.JDBCType.VARCHAR).length(256).commit()
-        .addColumn().name("create_time").alias("createTime").comment("创建时间").jdbcType(java.sql.JDBCType.DECIMAL).length(32,0).commit()
+        .addColumn().name("create_time").alias("createTime").comment("创建时间").jdbcType(java.sql.JDBCType.DECIMAL).length(32, 0).commit()
         .addColumn().name("creator_id").alias("creatorId").comment("创建人id").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()
-        .addColumn().name("enabled").alias("enabled").comment("是否启用").jdbcType(java.sql.JDBCType.DECIMAL).length(4,0).commit()
+        .addColumn().name("enabled").alias("enabled").comment("是否启用").jdbcType(java.sql.JDBCType.DECIMAL).length(4, 0).commit()
         .comment("数据字典").commit();
 
     database.createOrAlter("s_dict_item")
@@ -53,15 +53,16 @@ function install(context) {
         .addColumn().name("value").alias("value").comment("字典值").jdbcType(java.sql.JDBCType.VARCHAR).length(64).commit()
         .addColumn().name("text").alias("text").comment("字典文本").jdbcType(java.sql.JDBCType.VARCHAR).length(128).commit()
         .addColumn().name("value_type").alias("valueType").comment("字典值类型").jdbcType(java.sql.JDBCType.VARCHAR).length(64).commit()
-        .addColumn().name("is_enabled").alias("enabled").comment("是否启用").jdbcType(java.sql.JDBCType.DECIMAL).length(4,0).commit()
+        .addColumn().name("is_enabled").alias("enabled").comment("是否启用").jdbcType(java.sql.JDBCType.DECIMAL).length(4, 0).commit()
         .addColumn().name("describe").alias("describe").comment("说明").jdbcType(java.sql.JDBCType.VARCHAR).length(128).commit()
         .addColumn().name("parent_id").alias("parentId").comment("父级选项").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()
         .addColumn().name("path").alias("path").comment("树编码").jdbcType(java.sql.JDBCType.VARCHAR).length(3000).commit()
         .addColumn().name("search_code").alias("searchCode").comment("快速搜索码").jdbcType(java.sql.JDBCType.VARCHAR).length(128).commit()
-        .addColumn().name("sort_index").alias("sortIndex").comment("排序索引").jdbcType(java.sql.JDBCType.DECIMAL).length(32,0).commit()
-        .addColumn().name("level").alias("level").comment("树结构层级").jdbcType(java.sql.JDBCType.DECIMAL).length(32,0).commit()
+        .addColumn().name("sort_index").alias("sortIndex").comment("排序索引").jdbcType(java.sql.JDBCType.DECIMAL).length(32, 0).commit()
+        .addColumn().name("level").alias("level").comment("树结构层级").jdbcType(java.sql.JDBCType.DECIMAL).length(32, 0).commit()
         .addColumn().name("properties").alias("properties").comment("其他自定义属性").jdbcType(java.sql.JDBCType.CLOB).commit()
-
+        .addColumn().name("text_expression").alias("textExpression").comment("文本表达式").jdbcType(java.sql.JDBCType.CLOB).commit()
+        .addColumn().name("value_expression").alias("valueExpression").comment("值表达式").jdbcType(java.sql.JDBCType.CLOB).commit()
         .comment("数据字典解析配置").commit();
 
     database.createOrAlter("s_dict_parser")
@@ -69,9 +70,9 @@ function install(context) {
         .addColumn().name("v_t_parser").alias("valueToTextParser").comment("值到文本转换方式").jdbcType(java.sql.JDBCType.CLOB).commit()
         .addColumn().name("t_v_parser").alias("textToValueParser").comment("文本到值转换方式").jdbcType(java.sql.JDBCType.CLOB).commit()
         .addColumn().name("on_error").alias("onError").comment("转换失败时的操作").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()
-        .addColumn().name("create_time").alias("createTime").comment("创建时间").jdbcType(java.sql.JDBCType.DECIMAL).length(32,0).commit()
+        .addColumn().name("create_time").alias("createTime").comment("创建时间").jdbcType(java.sql.JDBCType.DECIMAL).length(32, 0).commit()
         .addColumn().name("creator_id").alias("creatorId").comment("创建人id").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()
-        .addColumn().name("update_time").alias("updateTime").comment("更新时间").jdbcType(java.sql.JDBCType.DECIMAL).length(32,0).commit()
+        .addColumn().name("update_time").alias("updateTime").comment("更新时间").jdbcType(java.sql.JDBCType.DECIMAL).length(32, 0).commit()
         .addColumn().name("name").alias("name").comment("名称").jdbcType(java.sql.JDBCType.VARCHAR).length(128).commit()
         .addColumn().name("describe").alias("describe").comment("说明").jdbcType(java.sql.JDBCType.VARCHAR).length(256).commit()
         .addColumn().name("classified_id").alias("classifiedId").comment("分类id").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()

+ 4 - 0
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-starter/src/test/java/org/hswebframework/web/starter/dictionary/DictionaryParserTests.java

@@ -21,6 +21,7 @@ package org.hswebframework.web.starter.dictionary;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import org.hswebframework.web.entity.dictionary.DictionaryParserEntity;
+import org.hswebframework.web.entity.dictionary.SimpleDictionaryItemEntity;
 import org.hswebframework.web.entity.dictionary.SimpleDictionaryParserEntity;
 import org.hswebframework.web.starter.convert.FastJsonHttpMessageConverter;
 import org.hswebframework.web.tests.SimpleWebApplicationTests;
@@ -30,6 +31,8 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 
+import java.util.List;
+
 /**
  * TODO 完善单元测试
  *
@@ -46,6 +49,7 @@ public class DictionaryParserTests extends SimpleWebApplicationTests {
         //todo 设置测试属性
         entity.setName("test");
         entity.setClassifiedId("1");
+
         // test add data
         String requestBody = JSON.toJSONString(entity);
         JSONObject result = testPost("/dictionary-parser").setUp(setup -> setup.contentType(MediaType.APPLICATION_JSON).content(requestBody)).exec().resultAsJson();

+ 23 - 0
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-starter/src/test/java/org/hswebframework/web/starter/dictionary/DictionaryTests.java

@@ -23,6 +23,7 @@ import com.alibaba.fastjson.JSONObject;
 import org.hswebframework.web.entity.dictionary.DictionaryEntity;
 import org.hswebframework.web.entity.dictionary.DictionaryItemEntity;
 import org.hswebframework.web.entity.dictionary.SimpleDictionaryEntity;
+import org.hswebframework.web.entity.dictionary.SimpleDictionaryItemEntity;
 import org.hswebframework.web.starter.convert.FastJsonHttpMessageConverter;
 import org.hswebframework.web.tests.SimpleWebApplicationTests;
 import org.junit.Assert;
@@ -31,6 +32,8 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 
+import java.util.List;
+
 /**
  * TODO 完善单元测试
  *
@@ -52,6 +55,26 @@ public class DictionaryTests extends SimpleWebApplicationTests {
         entity.setDescribe("test");
         entity.setClassifiedId("test");
         entity.setEnabled(true);
+        String json = "[" +
+                "{'value':'1','text':'水果','children':" +
+                "[" +
+                "{'value':'101','text':'苹果'," +
+                "'children':[" +
+                "{'value':'10102','text':'红富士'}" +
+                ",{'value':'10103','text':'青苹果'}" +
+                //使用表达式进行解析
+                ",{'value':'10105','text':'其他苹果'" +
+                ",'textExpression':'${#value}[${#context[otherApple]}]'" +
+                ",'valueExpression':'${(#context.put(\\'otherApple\\',#pattern.split(\"[ \\\\[ \\\\]]\")[1])==null)?#value:#value}'" +
+                "}" +
+                "]}" +
+                ",{'value':'102','text':'梨子'}]" +
+                "}" +
+                ",{'value':'2','text':'蔬菜'}" +
+                "]";
+
+        List<DictionaryItemEntity> itemEntities = (List) JSON.parseArray(json, SimpleDictionaryItemEntity.class);
+        entity.setItems(itemEntities);
         // test add data
         String requestBody = JSON.toJSONString(entity);
         JSONObject result = testPost("/dictionary").setUp(setup -> setup.contentType(MediaType.APPLICATION_JSON).content(requestBody)).exec().resultAsJson();