diff --git a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/DynamicFormController.java b/hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/DynamicFormController.java index c13fb6ae2..e583ea25d 100644 --- a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/DynamicFormController.java +++ b/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 data) throws Exception { - String pk = dynamicFormService.insert(name,data); + String pk = dynamicFormService.insert(name, data); return ResponseMessage.ok(pk); } diff --git a/hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java b/hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java index a30e8af76..d9f531265 100644 --- a/hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java +++ b/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.ezorm.meta.FieldMetaData; -import org.hsweb.ezorm.meta.TableMetaData; -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.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.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
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
headers = new LinkedList<>(); Map 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 includes = param.getIncludes(); - Set 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")) { diff --git a/hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/FormServiceImpl.java b/hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/FormServiceImpl.java index 6a08ec957..ea0cfed4b 100644 --- a/hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/FormServiceImpl.java +++ b/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 implement @Override public String insert(Form data) throws Exception { - List
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 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 param = UpdateParam.build(data).excludes("createDate", "release", "version", "using"); return getMapper().update(param); @@ -119,6 +124,7 @@ public class FormServiceImpl extends AbstractServiceImpl 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);