优化动态表单

This commit is contained in:
周浩
2016-06-15 18:41:45 +08:00
parent d8634ea715
commit 2cc725fae7
3 changed files with 55 additions and 29 deletions

View File

@@ -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);
}

View File

@@ -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<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")) {

View File

@@ -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);