瀏覽代碼

优化代码逻辑

周浩 9 年之前
父節點
當前提交
9d67ea83e9

+ 1 - 1
hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/AbstractServiceImpl.java

@@ -83,7 +83,7 @@ public abstract class AbstractServiceImpl<Po, PK> implements GenericService<Po,
 
     @Transactional(readOnly = true)
     public List<Po> select() throws Exception {
-        return this.getMapper().select(new QueryParam());
+        return this.getMapper().select(new QueryParam().noPaging());
     }
 
     @Override

+ 48 - 24
hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java

@@ -1,8 +1,6 @@
 package org.hsweb.web.service.impl.form;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import org.hsweb.concurrent.lock.annotation.LockName;
 import org.hsweb.concurrent.lock.annotation.ReadLock;
 import org.hsweb.concurrent.lock.annotation.WriteLock;
@@ -11,6 +9,7 @@ import org.hsweb.web.bean.po.GenericPo;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.bean.po.history.History;
 import org.hsweb.web.core.Install;
+import org.hsweb.web.core.authorize.ExpressionScopeBean;
 import org.hsweb.web.core.exception.BusinessException;
 import org.hsweb.web.core.exception.NotFoundException;
 import org.hsweb.web.service.form.DynamicFormDataValidator;
@@ -22,7 +21,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.Assert;
 import org.webbuilder.office.excel.ExcelIO;
 import org.webbuilder.office.excel.config.Header;
 import org.webbuilder.sql.*;
@@ -30,11 +28,8 @@ import org.webbuilder.sql.exception.CreateException;
 import org.webbuilder.sql.exception.TriggerException;
 import org.webbuilder.sql.param.ExecuteCondition;
 import org.webbuilder.sql.trigger.TriggerResult;
-import org.webbuilder.utils.script.engine.DynamicScriptEngine;
-import org.webbuilder.utils.script.engine.DynamicScriptEngineFactory;
-import org.webbuilder.utils.script.engine.ExecuteResult;
+import org.webbuilder.utils.common.StringUtils;
 
-import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -45,9 +40,9 @@ import java.util.*;
  */
 @Service("dynamicFormService")
 @Transactional(rollbackFor = Throwable.class)
-public class DynamicFormServiceImpl implements DynamicFormService {
+public class DynamicFormServiceImpl implements DynamicFormService, ExpressionScopeBean {
 
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 
     @Autowired(required = false)
     protected FormParser formParser;
@@ -64,6 +59,9 @@ public class DynamicFormServiceImpl implements DynamicFormService {
     @Autowired(required = false)
     protected List<DynamicFormDataValidator> dynamicFormDataValidator;
 
+    @Autowired(required = false)
+    protected Map<String, ExpressionScopeBean> expressionScopeBeanMap;
+
     protected void initDefaultField(TableMetaData metaData) {
         String dataType;
         switch (Install.getDatabaseType()) {
@@ -277,16 +275,34 @@ public class DynamicFormServiceImpl implements DynamicFormService {
         Table table = getTableByName(name);
         TableMetaData metaData = table.getMetaData();
         List<Header> headers = new LinkedList<>();
+        Map<String, Object> sample = dataList.isEmpty() ? new HashMap<>() : (Map) dataList.get(0);
+        int[] index = new int[1];
+        index[0] = 1;
         metaData.getFields().forEach(fieldMetaData -> {
-            ValueWrapper valueWrapper = fieldMetaData.attrWrapper("exportExcel", true);
+            ValueWrapper valueWrapper = fieldMetaData.attrWrapper("export-excel", false);
             if (valueWrapper.toBoolean()) {
-                String title = fieldMetaData.attrWrapper("excelHeader", fieldMetaData.getComment()).toString();
+                String title = fieldMetaData.attrWrapper("export-header", fieldMetaData.getComment()).toString();
+                if (StringUtils.isNullOrEmpty(title)) {
+                    title = "字段" + index[0]++;
+                }
                 String field = fieldMetaData.getName();
+                Set<String> includes = param.getIncludes();
+                Set<String> excludes = param.getExcludes();
+                if (!includes.isEmpty()) {
+                    if (!includes.contains(field)) return;
+                }
+                if (!excludes.isEmpty()) {
+                    if (excludes.contains(field)) return;
+                }
+                if (sample.get(field + "_cn") != null)
+                    field = field + "_cn";
                 headers.add(new Header(title, field));
             }
         });
         if (metaData.triggerSupport("export.excel")) {
             Map<String, Object> var = new HashMap<>();
+            if (expressionScopeBeanMap != null)
+                var.putAll(expressionScopeBeanMap);
             var.put("dataList", dataList);
             var.put("headers", headers);
             metaData.on("export.excel", var);
@@ -323,20 +339,25 @@ public class DynamicFormServiceImpl implements DynamicFormService {
             var.put("headerMapper", headerMapper);
             var.put("excelData", excelData);
             var.put("dataList", dataList);
-            metaData.on("export.import.before", var);
-        } else
-            excelData.forEach(data -> {
-                Map<String, Object> newData = new HashMap<>();
-                data.forEach((k, v) -> {
-                    String field = headerMapper.get(k);
-                    if (field != null) {
-                        newData.put(field, v);
-                    } else {
-                        newData.put(k, v);
-                    }
-                });
-                dataList.add(newData);
+            if (expressionScopeBeanMap != null)
+                var.putAll(expressionScopeBeanMap);
+            TriggerResult triggerResult = metaData.on("export.import.before", var);
+            if (!triggerResult.isSuccess()) {
+                throw new TriggerException(triggerResult.getMessage());
+            }
+        }
+        excelData.forEach(data -> {
+            Map<String, Object> newData = new HashMap<>();
+            data.forEach((k, v) -> {
+                String field = headerMapper.get(k);
+                if (field != null) {
+                    newData.put(field, v);
+                } else {
+                    newData.put(k, v);
+                }
             });
+            dataList.add(newData);
+        });
         List<Map<String, Object>> errorMessage = new LinkedList<>();
         int index = 0, success = 0;
         for (Map<String, Object> map : dataList) {
@@ -347,6 +368,9 @@ public class DynamicFormServiceImpl implements DynamicFormService {
                     var.put("headerMapper", headerMapper);
                     var.put("excelData", excelData);
                     var.put("dataList", dataList);
+                    var.put("data", map);
+                    if (expressionScopeBeanMap != null)
+                        var.putAll(expressionScopeBeanMap);
                     TriggerResult triggerResult = metaData.on("export.import.each", var);
                     if (!triggerResult.isSuccess()) {
                         throw new TriggerException(triggerResult.getMessage());

+ 22 - 5
hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidatorFactory.java

@@ -24,6 +24,7 @@ public class GroovyDycBeanValidatorFactory implements ValidatorFactory {
     private javax.validation.Validator hibernateValidator;
 
     private Map<String, Validator> base = new HashMap<>();
+    private static final Map<Class, String> simpleType = new HashMap<>();
 
     protected static DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine("groovy");
 
@@ -34,6 +35,18 @@ public class GroovyDycBeanValidatorFactory implements ValidatorFactory {
             "import javax.validation.constraints.*;"
     };
 
+    static {
+        simpleType.put(Integer.class, "int");
+        simpleType.put(Long.class, "long");
+        simpleType.put(String.class, "String");
+        simpleType.put(Double.class, "double");
+        simpleType.put(Float.class, "float");
+        simpleType.put(Boolean.class, "boolean");
+        simpleType.put(Short.class, "short");
+        simpleType.put(Byte.class, "byte");
+        simpleType.put(Character.class, "char");
+    }
+
     @Override
     public Validator getValidator(TableMetaData metaData) {
         return base.get(metaData.getName());
@@ -56,28 +69,32 @@ public class GroovyDycBeanValidatorFactory implements ValidatorFactory {
         script.append("public class ").append(metaData.getName()).append("{\n");
         boolean hasValidator = false;
         for (FieldMetaData fieldMetaData : metaData.getFields()) {
-            if(fieldMetaData.getValidator().isEmpty())continue;
+            String typeName = simpleType.get(fieldMetaData.getJavaType());
+            if (typeName == null) typeName = fieldMetaData.getJavaType().getName();
+            if (fieldMetaData.getValidator().isEmpty()) continue;
             for (String ann : fieldMetaData.getValidator()) {
                 hasValidator = true;
                 script.append("\t@").append(ann).append("\n");
             }
             script.append("\tprivate ")
-                    .append(fieldMetaData.getJavaType().getName()).append(" ")
+                    .append(typeName).append(" ")
                     .append(fieldMetaData.getName()).append(";\n\n");
         }
         //没有配置验证器
         if (!hasValidator) return null;
         for (FieldMetaData fieldMetaData : metaData.getFields()) {
-            if(fieldMetaData.getValidator().isEmpty())continue;
+            String typeName = simpleType.get(fieldMetaData.getJavaType());
+            if (typeName == null) typeName = fieldMetaData.getJavaType().getName();
+            if (fieldMetaData.getValidator().isEmpty()) continue;
             script.append("public ")
-                    .append(fieldMetaData.getJavaType().getName()).append(" get")
+                    .append(typeName).append(" get")
                     .append(StringUtils.toUpperCaseFirstOne(fieldMetaData.getName()))
                     .append("(){\n")
                     .append("\treturn this.").append(fieldMetaData.getName()).append(";")
                     .append("\n}\n");
             script.append("public void set").append(StringUtils.toUpperCaseFirstOne(fieldMetaData.getName()))
                     .append("(")
-                    .append(fieldMetaData.getJavaType().getName()).append(" ").append(fieldMetaData.getName())
+                    .append(typeName).append(" ").append(fieldMetaData.getName())
                     .append(")")
                     .append("{\n")
                     .append("\tthis.").append(fieldMetaData.getName()).append("=").append(fieldMetaData.getName()).append(";")

+ 4 - 4
hsweb-web-service-impl-common/src/test/java/org/hsweb/web/service/impl/system/DataBaseManagerServiceImplTest.java

@@ -50,10 +50,10 @@ public class DataBaseManagerServiceImplTest extends AbstractTestCase {
                 .where("createDate$GT", "2015-12-10");
 
         userMapper.select(queryParam);
-        User user = userMapper.selectByPk("admin");
-        user.setId("aaaa");
-        userMapper.insert(new InsertParam<>(user));
-        userMapper.update(new UpdateParam<>(user).includes("username"));
+//        User user = userMapper.selectByPk("admin");
+//        user.setId("aaaa");
+       // userMapper.insert(new InsertParam<>(user));
+       // userMapper.update(new UpdateParam<>(user).includes("username"));
     }
 
     @Test