Bladeren bron

优化动态表单

周浩 9 jaren geleden
bovenliggende
commit
2cc725fae7

+ 12 - 1
hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/DynamicFormController.java

@@ -3,7 +3,9 @@ package org.hsweb.web.controller.form;
 import org.hsweb.web.bean.common.InsertMapParam;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.UpdateMapParam;
+import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.core.authorize.annotation.Authorize;
+import org.hsweb.web.core.exception.BusinessException;
 import org.hsweb.web.core.logger.annotation.AccessLogger;
 import org.hsweb.web.core.message.ResponseMessage;
 import org.hsweb.web.service.form.DynamicFormService;
@@ -41,6 +43,15 @@ public class DynamicFormController {
         return ResponseMessage.ok(formService.selectDeployed(name));
     }
 
+    @RequestMapping(value = "/{name}/v/{version}", method = RequestMethod.GET)
+    @Authorize(expression = "#dynamicFormAuthorizeValidator.validate(#name,#user,#paramsMap,'R')")
+    public ResponseMessage latest(@PathVariable(value = "name") String name,
+                                  @PathVariable(value = "version") Integer version) throws Exception {
+        Form form = formService.selectByVersion(name, version);
+        if (form == null) throw new BusinessException("表单不存在", 404);
+        return ResponseMessage.ok(form);
+    }
+
     @RequestMapping(value = "/{name}", method = RequestMethod.GET)
     @AccessLogger("查看列表")
     @Authorize(expression = "#dynamicFormAuthorizeValidator.validate(#name,#user,#paramsMap,'R')")
@@ -70,7 +81,7 @@ public class DynamicFormController {
     @Authorize(expression = "#dynamicFormAuthorizeValidator.validate(#name,#user,#paramsMap,'C')")
     public ResponseMessage insert(@PathVariable("name") String name,
                                   @RequestBody(required = true) Map<String, Object> data) throws Exception {
-        String pk = dynamicFormService.insert(name,data);
+        String pk = dynamicFormService.insert(name, data);
         return ResponseMessage.ok(pk);
     }
 

+ 34 - 25
hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java

@@ -1,14 +1,16 @@
 package org.hsweb.web.service.impl.form;
 
 import com.alibaba.fastjson.JSON;
+import org.hsweb.concurrent.lock.annotation.LockName;
+import org.hsweb.concurrent.lock.annotation.ReadLock;
+import org.hsweb.concurrent.lock.annotation.WriteLock;
 import org.hsweb.ezorm.meta.FieldMetaData;
 import org.hsweb.ezorm.meta.TableMetaData;
+import org.hsweb.ezorm.meta.expand.OptionConverter;
 import org.hsweb.ezorm.meta.expand.PropertyWrapper;
 import org.hsweb.ezorm.run.*;
-import org.hsweb.concurrent.lock.annotation.LockName;
-import org.hsweb.concurrent.lock.annotation.ReadLock;
-import org.hsweb.concurrent.lock.annotation.WriteLock;
-import org.hsweb.web.bean.common.*;
+import org.hsweb.web.bean.common.DeleteParam;
+import org.hsweb.web.bean.common.PagerResult;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.bean.po.GenericPo;
@@ -271,6 +273,24 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
         return query.single();
     }
 
+    protected void putExcelHeader(String fieldPrefix, FieldMetaData fieldMetaData, List<Header> headers) {
+        if (fieldMetaData == null) return;
+        PropertyWrapper valueWrapper = fieldMetaData.getProperty("export-excel", false);
+        if (fieldPrefix.length() > 0) fieldPrefix += ".";
+        if (valueWrapper.isTrue()) {
+            String title = fieldMetaData.getProperty("export-header", fieldMetaData.getComment()).toString();
+            if (StringUtils.isNullOrEmpty(title)) {
+                title = fieldMetaData.getName();
+            }
+            String field = fieldMetaData.getName();
+            OptionConverter converter = fieldMetaData.getOptionConverter();
+            if (converter != null) {
+                field = converter.getFieldName();
+            }
+            headers.add(new Header(title, fieldPrefix + field));
+        }
+    }
+
     @Override
     @ReadLock
     @LockName(value = "'form.lock.'+#name", isExpression = true)
@@ -281,27 +301,16 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
         TableMetaData metaData = table.getMeta();
         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 -> {
-            PropertyWrapper valueWrapper = fieldMetaData.getProperty("export-excel", false);
-            if (valueWrapper.isTrue()) {
-                String title = fieldMetaData.getProperty("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 + "_text") != null)
-                    field = field + "_text";
-                headers.add(new Header(title, field));
+        sample.forEach((key, value) -> {
+            if (value instanceof Map) {
+                ((Map) value).forEach((k, v) -> {
+                    String fieldName = key + "." + k;
+                    FieldMetaData field = metaData.findFieldByName(fieldName);
+                    putExcelHeader(fieldName,field, headers);
+                });
+            } else {
+                FieldMetaData field = metaData.findFieldByName(key);
+                putExcelHeader("",field, headers);
             }
         });
         if (metaData.triggerIsSupport("export.excel")) {

+ 8 - 2
hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/FormServiceImpl.java

@@ -75,7 +75,6 @@ public class FormServiceImpl extends AbstractServiceImpl<Form, String> implement
 
     @Override
     public String insert(Form data) throws Exception {
-
         List<Form> old = this.select(QueryParam.build().where("name", data.getName()));
         Assert.isTrue(old.isEmpty(), "表单 [" + data.getName() + "] 已存在!");
         data.setCreateDate(new Date());
@@ -87,11 +86,17 @@ public class FormServiceImpl extends AbstractServiceImpl<Form, String> implement
     }
 
     @Override
-    @CacheEvict(value = {CACHE_KEY}, key = "#data.id")
+    @Caching(
+            evict = {
+                    @CacheEvict(value = {CACHE_KEY}, key = "#data.id"),
+                    @CacheEvict(value = {CACHE_KEY}, key = "#data.name+':'+#data.version")
+            }
+    )
     public int update(Form data) throws Exception {
         Form old = this.selectByPk(data.getId());
         assertNotNull(old, "表单不存在!");
         data.setUpdateDate(new Date());
+        data.setVersion(old.getVersion());
         data.setRevision(old.getRevision() + 1);
         UpdateParam<Form> param = UpdateParam.build(data).excludes("createDate", "release", "version", "using");
         return getMapper().update(param);
@@ -119,6 +124,7 @@ public class FormServiceImpl extends AbstractServiceImpl<Form, String> implement
     }
 
     @Override
+    @Cacheable(value = CACHE_KEY, key = "#name+':'+#version")
     public Form selectByVersion(String name, int version) throws Exception {
         QueryParam param = QueryParam.build()
                 .where("name", name).where("version", version);