优化表单保存,支持同时保存表单和列

This commit is contained in:
zhouhao
2017-08-11 11:04:53 +08:00
parent 836a7f135b
commit 0ad0ffccc3
4 changed files with 54 additions and 7 deletions

View File

@@ -2,7 +2,9 @@ package org.hswebframework.web.controller.form;
import io.swagger.annotations.Api;
import org.hswebframework.web.authorization.Authentication;
import org.hswebframework.web.authorization.Permission;
import org.hswebframework.web.authorization.annotation.Authorize;
import org.hswebframework.web.authorization.annotation.Logical;
import org.hswebframework.web.commons.entity.param.QueryParamEntity;
import org.hswebframework.web.controller.SimpleGenericEntityController;
import org.hswebframework.web.controller.message.ResponseMessage;
@@ -13,6 +15,8 @@ import org.hswebframework.web.service.form.DynamicFormService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Objects;
/**
* 动态表单
*
@@ -37,6 +41,23 @@ public class DynamicFormController implements SimpleGenericEntityController<Dyna
return dynamicFormService;
}
@PatchMapping("/bind")
@AccessLogger("同时保存表单和字段")
@Authorize(action = {Permission.ACTION_ADD, Permission.ACTION_UPDATE}, logical = Logical.OR)
public ResponseMessage<String> saveOrUpdateFormAndColumn(@RequestBody DynamicFormColumnBindEntity bindEntity) {
Authentication authentication = Authentication.current().orElse(null);
Objects.requireNonNull(bindEntity.getForm(), "form can not be null");
Objects.requireNonNull(bindEntity.getColumns(), "columns can not be null");
if (null != authentication) {
bindEntity.getForm().setCreatorId(authentication.getUser().getId());
}
bindEntity.getForm().setCreateTime(System.currentTimeMillis());
return ResponseMessage.ok(dynamicFormService.saveOrUpdate(bindEntity));
}
@Override
public ResponseMessage<String> add(@RequestBody DynamicFormEntity data) {
Authentication authentication = Authentication.current().orElse(null);

View File

@@ -21,6 +21,8 @@ public interface DynamicFormService extends CrudService<DynamicFormEntity, Strin
void unDeploy(String formId);
String saveOrUpdate(DynamicFormColumnBindEntity bindEntity);
String saveOrUpdateColumn(DynamicFormColumnEntity columnEntity);
List<String> saveOrUpdateColumn(List<DynamicFormColumnEntity> columnEntities);

View File

@@ -221,6 +221,23 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
}
@Override
@CacheEvict(key = "'form-columns:'+#result")
public String saveOrUpdate(DynamicFormColumnBindEntity bindEntity) {
DynamicFormEntity formEntity = bindEntity.getForm();
List<DynamicFormColumnEntity> columnEntities = bindEntity.getColumns();
//保存表单
saveOrUpdate(formEntity);
//保存表单列
columnEntities.stream()
.peek(column -> column.setFormId(formEntity.getId()))
.forEach(this::saveOrUpdate0);
return formEntity.getId();
}
@Override
@CacheEvict(key = "'form-columns:'+#formId")
public DynamicFormColumnEntity deleteColumn(String formId) {

View File

@@ -2,6 +2,7 @@ package org.hswebframework.web.service.form.simple;
import org.hsweb.ezorm.rdb.executor.SqlExecutor;
import org.hswebframework.web.commons.entity.param.QueryParamEntity;
import org.hswebframework.web.entity.form.DynamicFormColumnBindEntity;
import org.hswebframework.web.entity.form.DynamicFormColumnEntity;
import org.hswebframework.web.entity.form.DynamicFormEntity;
import org.hswebframework.web.service.form.DatabaseRepository;
@@ -16,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.sql.JDBCType;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Stream;
@@ -39,7 +41,7 @@ public class SimpleDynamicFormServiceTest extends SimpleWebApplicationTests {
@Autowired
private DatabaseRepository databaseRepository;
@Autowired
private SqlExecutor sqlExecutor;
private SqlExecutor sqlExecutor;
@Test
@Transactional
@@ -56,16 +58,14 @@ public class SimpleDynamicFormServiceTest extends SimpleWebApplicationTests {
form.setCorrelations("[" +
"{\"target\":\"s_dyn_form\",\"alias\":\"form\",\"condition\":\"form.u_id=f_test.id\"}" +
"]");
String id = dynamicFormService.insert(form);
DynamicFormColumnEntity column_id = entityFactory.newInstance(DynamicFormColumnEntity.class);
column_id.setFormId(id);
column_id.setColumnName("id");
column_id.setName("ID");
column_id.setJavaType("string");
column_id.setJdbcType(JDBCType.VARCHAR.getName());
column_id.setLength(32);
DynamicFormColumnEntity column_name = entityFactory.newInstance(DynamicFormColumnEntity.class);
column_name.setFormId(id);
column_name.setName("姓名");
column_name.setColumnName("name");
column_name.setJavaType("string");
@@ -73,7 +73,6 @@ public class SimpleDynamicFormServiceTest extends SimpleWebApplicationTests {
column_name.setLength(32);
DynamicFormColumnEntity column_age = entityFactory.newInstance(DynamicFormColumnEntity.class);
column_age.setFormId(id);
column_age.setName("年龄");
column_age.setColumnName("age");
column_age.setJavaType("int");
@@ -81,7 +80,15 @@ public class SimpleDynamicFormServiceTest extends SimpleWebApplicationTests {
column_age.setPrecision(4);
column_age.setScale(0);
Stream.of(column_id, column_name, column_age).forEach(dynamicFormColumnService::insert);
// Stream.of(column_id, column_name, column_age).forEach(dynamicFormColumnService::insert);
DynamicFormColumnBindEntity bindEntity = new DynamicFormColumnBindEntity();
bindEntity.setForm(form);
bindEntity.setColumns(Arrays.asList(column_id, column_name, column_age));
String id = dynamicFormService.saveOrUpdate(bindEntity);
dynamicFormService.deploy(id);
dynamicFormOperationService.insert(form.getId(), new HashMap<String, Object>() {
@@ -94,7 +101,7 @@ public class SimpleDynamicFormServiceTest extends SimpleWebApplicationTests {
databaseRepository.getDefaultDatabase().getTable("s_dyn_form");
List<Object> objects = dynamicFormOperationService.select(form.getId(), new QueryParamEntity().includes("*","form.*"));
List<Object> objects = dynamicFormOperationService.select(form.getId(), new QueryParamEntity().includes("*", "form.*"));
Assert.assertTrue(objects.size() == 1);
System.out.println(objects);