Browse Source

新增功能,修复若干bug

周浩 9 years ago
parent
commit
855553a1da

+ 23 - 0
hsweb-web-core/src/main/java/org/hsweb/web/core/exception/ValidationException.java

@@ -0,0 +1,23 @@
+package org.hsweb.web.core.exception;
+
+import org.hsweb.web.bean.valid.ValidResults;
+
+/**
+ * Created by zhouhao on 16-5-12.
+ */
+public class ValidationException extends BusinessException {
+    private ValidResults results;
+
+    public ValidationException(String message) {
+        super(message, 400);
+    }
+
+    public ValidationException(ValidResults results) {
+        super(results.toString(), 400);
+        this.results = results;
+    }
+
+    public ValidResults getResults() {
+        return results;
+    }
+}

+ 74 - 16
hsweb-web-dao-impl-mybatis/src/main/java/org/hsweb/web/mybatis/builder/DefaultSqlParamBuilder.java

@@ -28,13 +28,46 @@ public class DefaultSqlParamBuilder {
         mapperMap.put(TermType.like, (paramKey, field, jdbcType) ->
                         new SqlAppender().add(field.getField(), " like ", "#{", paramKey, "}").toString()
         );
-
+        mapperMap.put(TermType.notlike, (paramKey, field, jdbcType) ->
+                        new SqlAppender().add(field.getField(), " not like ", "#{", paramKey, "}").toString()
+        );
         mapperMap.put(TermType.notnull, (paramKey, field, jdbcType) ->
-                        new SqlAppender().add(field.getField(), " not null").toString()
+                        new SqlAppender().add(field.getField(), " is not null").toString()
         );
         mapperMap.put(TermType.isnull, (paramKey, field, jdbcType) ->
                         new SqlAppender().add(field.getField(), " is null").toString()
         );
+        mapperMap.put(TermType.empty, (paramKey, field, jdbcType) ->
+                        new SqlAppender().add(field.getField(), " =''").toString()
+        );
+        mapperMap.put(TermType.notempty, (paramKey, field, jdbcType) ->
+                        new SqlAppender().add(field.getField(), " !=''").toString()
+        );
+        mapperMap.put(TermType.btw, (paramKey, field, jdbcType) ->
+        {
+            SqlAppender sqlAppender = new SqlAppender();
+            List<Object> objects = param2list(field.getValue());
+            if (objects.size() == 1)
+                objects.add(objects.get(0));
+            field.setValue(objects);
+            sqlAppender.addSpc(field.getField(), "between")
+                    .add(" #{", paramKey, "[0]}")
+                    .add(" and ", "#{", paramKey, "[1]}");
+            return sqlAppender.toString();
+        });
+
+        mapperMap.put(TermType.notbtw, (paramKey, field, jdbcType) ->
+        {
+            SqlAppender sqlAppender = new SqlAppender();
+            List<Object> objects = param2list(field.getValue());
+            if (objects.size() == 1)
+                objects.add(objects.get(0));
+            field.setValue(objects);
+            sqlAppender.addSpc(field.getField(), "not between")
+                    .add(" #{", paramKey, "[0]}")
+                    .add(" and ", "#{", paramKey, "[1]}");
+            return sqlAppender.toString();
+        });
 
         mapperMap.put(TermType.gt, (paramKey, field, jdbcType) -> {
             SqlAppender sqlAppender = new SqlAppender();
@@ -99,11 +132,14 @@ public class DefaultSqlParamBuilder {
     }
 
     public String buildWhere(Map<String, Object> fieldConfig, List<Term> terms) {
-        String sql = buildWhere(fieldConfig, "", terms);
-        return sql;
+        SqlAppender sqlAppender = new SqlAppender();
+        buildWhere(fieldConfig, "", terms, sqlAppender);
+        if (sqlAppender.size() > 0) sqlAppender.removeFirst();
+        return sqlAppender.toString();
     }
 
     public JDBCType getFieldJDBCType(String field, Map<String, Object> fieldConfig) {
+        if (field == null) return JDBCType.NULL;
         Object conf = fieldConfig.get(field);
         if (conf instanceof Map) {
             try {
@@ -114,27 +150,49 @@ public class DefaultSqlParamBuilder {
         return JDBCType.VARCHAR;
     }
 
-    public String buildWhere(Map<String, Object> fieldConfig, String prefix, List<Term> terms) {
-        if (terms == null || terms.isEmpty()) return "";
-        SqlAppender appender = new SqlAppender();
+    public void buildWhere(Map<String, Object> fieldConfig, String prefix, List<Term> terms, SqlAppender appender) {
+        if (terms == null || terms.isEmpty()) return;
         int index = 0;
         String prefixTmp = StringUtils.concat(prefix, StringUtils.isNullOrEmpty(prefix) ? "" : ".");
         for (Term term : terms) {
-            if (!fieldConfig.containsKey(term.getField())) continue;
+            boolean nullTerm = StringUtils.isNullOrEmpty(term.getField());
+            //不是空条件 也不是可选字段
+            if (!nullTerm && !fieldConfig.containsKey(term.getField())) continue;
+            //不是空条件,值为空
+            if (!nullTerm && StringUtils.isNullOrEmpty(term.getValue())) continue;
+            //是空条件,但是无嵌套
+            if (nullTerm && term.getTerms().isEmpty()) continue;
+            //用于sql预编译的参数名
             prefix = StringUtils.concat(prefixTmp, "terms[", index++, "]");
+            //JDBC类型
             JDBCType jdbcType = getFieldJDBCType(term.getField(), fieldConfig);
+            //转换参数的值
             term.setValue(transformationValue(jdbcType, term.getValue()));
-            appender.addSpc(" " + term.getType().toString());
-            if (term.getTerms() != null && !term.getTerms().isEmpty()) {
-                appender.add("(", mapperMap.get(term.getTermType()).fieldMapper(prefix + ".value", term, jdbcType));
-                appender.addSpc("", term.getType().toString())
-                        .add(buildWhere(fieldConfig, prefix, term.getTerms()), ")");
+            //添加类型,and 或者 or
+            appender.add(StringUtils.concat(" ", term.getType().toString(), " "));
+            if (!term.getTerms().isEmpty()) {
+                //构建嵌套的条件
+                SqlAppender nest = new SqlAppender();
+                buildWhere(fieldConfig, prefix, term.getTerms(), nest);
+                //如果嵌套结果为空
+                if (nest.isEmpty()) {
+                    appender.removeLast();//删除最后一个(and 或者 or)
+                    continue;
+                }
+                if (nullTerm) {
+                    //删除 第一个(and 或者 or)
+                    nest.removeFirst();
+                }
+                appender.add("(");
+                if (!nullTerm)
+                    appender.add(mapperMap.get(term.getTermType()).fieldMapper(prefix + ".value", term, jdbcType));
+                appender.addAll(nest);
+                appender.add(")");
             } else {
-                appender.add(mapperMap.get(term.getTermType()).fieldMapper("" + prefix + ".value", term, jdbcType));
+                if (!nullTerm)
+                    appender.add(mapperMap.get(term.getTermType()).fieldMapper("" + prefix + ".value", term, jdbcType));
             }
         }
-        appender.removeFirst();
-        return appender.toString();
     }
 
     protected Object transformationValue(JDBCType type, Object value) {

+ 4 - 3
hsweb-web-dao-impl-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/mysql/config/ConfigMapper.xml

@@ -10,7 +10,7 @@
         <result property="remark" column="remark" javaType="String" jdbcType="VARCHAR"/>
         <result property="content" column="content" javaType="String" jdbcType="VARCHAR"/>
         <result property="create_date" column="create_date" javaType="java.util.Date" jdbcType="TIMESTAMP"/>
-        <result property="update_date" column="update_date" javaType="java.util.Date" jdbcType="TIMESTAMP"/>
+        <result property="type" column="type" javaType="String" jdbcType="VARCHAR"/>
     </resultMap>
 
     <!--字段信息配置-->
@@ -20,8 +20,9 @@
                     'u_id':#{'jdbcType':'VARCHAR','javaType':'string'}
                     ,'remark':#{'jdbcType':'VARCHAR','javaType':'string'}
                     ,'content':#{'jdbcType':'VARCHAR','javaType':'string'}
-                    ,'create_date':#{'jdbcType':'VARCHAR','javaType':'date'}
-                    ,'update_date':#{'jdbcType':'VARCHAR','javaType':'date'}
+                    ,'create_date':#{'jdbcType':'TIMESTAMP','javaType':'date'}
+                    ,'update_date':#{'jdbcType':'TIMESTAMP','javaType':'date'}
+                     ,'type':#{'jdbcType':'VARCHAR','javaType':'string'}
                     }"/>
 
         <bind name="$fields" value="$fieldsInfo.keySet()"/>

+ 4 - 2
hsweb-web-dao-impl-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/oracle/config/ConfigMapper.xml

@@ -11,6 +11,7 @@
         <result property="content" column="content" javaType="String" jdbcType="VARCHAR"/>
         <result property="create_date" column="create_date" javaType="java.util.Date" jdbcType="TIMESTAMP"/>
         <result property="update_date" column="update_date" javaType="java.util.Date" jdbcType="TIMESTAMP"/>
+        <result property="type" column="type" javaType="String" jdbcType="VARCHAR"/>
     </resultMap>
 
     <!--字段信息配置-->
@@ -20,8 +21,9 @@
                     'u_id':#{'jdbcType':'VARCHAR','javaType':'string'}
                     ,'remark':#{'jdbcType':'VARCHAR','javaType':'string'}
                     ,'content':#{'jdbcType':'VARCHAR','javaType':'string'}
-                    ,'create_date':#{'jdbcType':'VARCHAR','javaType':'date'}
-                    ,'update_date':#{'jdbcType':'VARCHAR','javaType':'date'}
+                    ,'create_date':#{'jdbcType':'TIMESTAMP','javaType':'date'}
+                    ,'update_date':#{'jdbcType':'TIMESTAMP','javaType':'date'}
+                     ,'type':#{'jdbcType':'VARCHAR','javaType':'string'}
                     }"/>
 
         <bind name="$fields" value="$fieldsInfo.keySet()"/>

+ 67 - 0
hsweb-web-dao-impl-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/oracle/module/ModuleMetaMapper.xml

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.hsweb.web.dao.module.ModuleMetaMapper">
+    <resultMap id="ModuleMetaResultMap" type="ModuleMeta">
+        <id property="u_id" column="u_id" javaType="string" jdbcType="VARCHAR"/>
+        <result property="key" column="key" javaType="String" jdbcType="VARCHAR"/>
+        <result property="module_id" column="module_id" javaType="String" jdbcType="VARCHAR"/>
+        <result property="role_id" column="role_id" javaType="String" jdbcType="VARCHAR"/>
+        <result property="meta" column="meta" javaType="String" jdbcType="CLOB"/>
+        <result property="remark" column="remark" javaType="String" jdbcType="VARCHAR"/>
+        <result property="status" column="status" javaType="int" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <!--字段信息绑定-->
+    <sql id="fieldConfig">
+        <bind name="$fieldsInfo"
+              value="#{
+                    'u_id':#{'jdbcType':'VARCHAR','javaType':'string'}
+                    ,'key':#{'jdbcType':'VARCHAR','javaType':'string'}
+                    ,'module_id':#{'jdbcType':'VARCHAR','javaType':'string'}
+                    ,'role_id':#{'jdbcType':'VARCHAR','javaType':'string'}
+                    ,'meta':#{'jdbcType':'CLOB','javaType':'string'}
+                    ,'remark':#{'jdbcType':'VARCHAR','javaType':'string'}
+                    ,'status':#{'jdbcType':'INTEGER','javaType':'number'}
+                    }"/>
+        <bind name="$fields" value="$fieldsInfo.keySet()"/>
+    </sql>
+    <!--表名-->
+    <sql id="tableName">
+        <bind name="$tableName" value="'s_module_meta'"/>
+    </sql>
+
+    <insert id="insert" parameterType="org.hsweb.web.bean.common.InsertParam" useGeneratedKeys="true" keyProperty="data.u_id" keyColumn="U_ID">
+        <include refid="fieldConfig"/>
+        <include refid="tableName"/>
+        <include refid="BasicMapper.buildInsertSql"/>
+    </insert>
+
+    <delete id="delete" parameterType="org.hsweb.web.bean.common.DeleteParam">
+        delete from s_module_meta where u_id=#{term.primaryKey}
+    </delete>
+
+    <update id="update" parameterType="org.hsweb.web.bean.common.UpdateParam">
+        <include refid="fieldConfig"/>
+        <include refid="tableName"/>
+        <include refid="BasicMapper.buildUpdateSql"/>
+    </update>
+
+    <select id="selectByPk" parameterType="string" resultMap="ModuleMetaResultMap">
+        select * from s_module_meta WHERE u_id=#{u_id}
+    </select>
+
+    <select id="select" parameterType="org.hsweb.web.bean.common.QueryParam" resultMap="ModuleMetaResultMap">
+        <include refid="fieldConfig"/>
+        <include refid="tableName"/>
+        <include refid="BasicMapper.buildSelectSql"/>
+    </select>
+
+    <select id="total" parameterType="org.hsweb.web.bean.common.QueryParam" resultType="int">
+        <include refid="fieldConfig"/>
+        <include refid="tableName"/>
+        <include refid="BasicMapper.buildTotalSql"/>
+    </select>
+</mapper>

+ 11 - 0
hsweb-web-dao-interface/src/main/java/org/hsweb/web/dao/module/ModuleMetaMapper.java

@@ -0,0 +1,11 @@
+package org.hsweb.web.dao.module;
+
+import org.hsweb.web.bean.po.module.ModuleMeta;
+import org.hsweb.web.dao.GenericMapper;
+
+/**
+ * Created by zhouhao on 16-5-10.
+ */
+public interface ModuleMetaMapper extends GenericMapper<ModuleMeta, String> {
+
+}

+ 2 - 0
hsweb-web-service-interface/src/main/java/org/hsweb/web/service/form/DynamicFormService.java

@@ -11,6 +11,8 @@ import java.util.Map;
  */
 public interface DynamicFormService {
 
+    Object parseMeta(Form form) throws Exception;
+
     void deploy(Form form) throws Exception;
 
     void unDeploy(Form form) throws Exception;

+ 26 - 0
hsweb-web-service-interface/src/main/java/org/hsweb/web/service/module/ModuleMetaService.java

@@ -0,0 +1,26 @@
+package org.hsweb.web.service.module;
+
+import org.hsweb.web.bean.common.QueryParam;
+import org.hsweb.web.bean.po.module.ModuleMeta;
+import org.hsweb.web.service.GenericService;
+
+import java.util.List;
+
+/**
+ * Created by zhouhao on 16-5-10.
+ */
+public interface ModuleMetaService extends GenericService<ModuleMeta, String> {
+
+    default List<ModuleMeta> selectByKeyAndRoleId(String key, String... roleId) throws Exception {
+        QueryParam queryParam = new QueryParam();
+        queryParam.where("key", key).and("role_id$IN", roleId);
+        return this.select(queryParam);
+    }
+
+    default List<ModuleMeta> selectByKey(String key) throws Exception {
+        QueryParam queryParam = new QueryParam();
+        queryParam.where("key", key);
+        return this.select(queryParam);
+    }
+
+}