Browse Source

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

zhouhao 7 years ago
parent
commit
0ad0ffccc3

+ 21 - 0
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-controller/src/main/java/org/hswebframework/web/controller/form/DynamicFormController.java

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

+ 2 - 0
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-service/hsweb-system-dynamic-form-service-api/src/main/java/org/hswebframework/web/service/form/DynamicFormService.java

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

+ 17 - 0
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-service/hsweb-system-dynamic-form-service-simple/src/main/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormService.java

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

+ 14 - 7
hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/test/java/org/hswebframework/web/service/form/simple/SimpleDynamicFormServiceTest.java

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