mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-06-01 02:15:07 +08:00
优化表单保存,支持同时保存表单和列
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user