Bläddra i källkod

业务流自定义流程表单渲染优化

hubin 9 månader sedan
förälder
incheckning
8f731da7c8

+ 31 - 15
src/main/java/com/aizuda/boot/modules/flw/service/impl/ProcessTaskServiceImpl.java

@@ -1,9 +1,6 @@
 package com.aizuda.boot.modules.flw.service.impl;
 
-import com.aizuda.boot.modules.flw.entity.ApprovalContent;
-import com.aizuda.boot.modules.flw.entity.FlwProcessApproval;
-import com.aizuda.boot.modules.flw.entity.FlwProcessConfigure;
-import com.aizuda.boot.modules.flw.entity.FlwProcessForm;
+import com.aizuda.boot.modules.flw.entity.*;
 import com.aizuda.boot.modules.flw.entity.dto.*;
 import com.aizuda.boot.modules.flw.entity.vo.*;
 import com.aizuda.boot.modules.flw.flow.FlowForm;
@@ -135,25 +132,27 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
 
         FlwProcessConfigure configure = flwProcessConfigureService.getByProcessId(hisInstance.getProcessId());
         if (null != configure) {
+            boolean searchFormContent = true;
+
             // 流程设置
             vo.setProcessSetting(configure.getProcessSetting());
 
             // 表单设置
             if (ProcessType.business.eq(extInstance.getProcessType())) {
                 // 业务流程,加载表单模板内容
-                vo.setFormTemplate(flwFormTemplateService.getByConfigure(configure.getProcessForm()));
-            } else {
-                // 普通流程,表单填写内容,子流程需要获取主流程表单
-                FlwProcessForm flwProcessForm;
-                if (null != hisInstance.getParentInstanceId()) {
-                    flwProcessForm = flwProcessFormService.getByInstanceId(hisInstance.getParentInstanceId());
-                } else {
-                    flwProcessForm = flwProcessFormService.getByInstanceId(instanceId);
-                }
-                if (null != flwProcessForm) {
-                    vo.setFormContent(flwProcessForm.getContent());
+                FlwFormTemplate formTemplate = flwFormTemplateService.getByConfigure(configure.getProcessForm());
+                ApiAssert.fail(null == formTemplate, "未发现指定业务流程表单模板");
+                vo.setFormTemplate(formTemplate);
+                if (Objects.equals(formTemplate.getType(), 1)) {
+                    // 系统表单情况
+                    searchFormContent = false;
                 }
             }
+
+            // 表单内容
+            if (searchFormContent) {
+                vo.setFormContent(this.formContent(instanceId, hisInstance.getParentInstanceId()));
+            }
         }
 
 
@@ -211,6 +210,23 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
         return vo;
     }
 
+    /**
+     * 查询流程表单内容
+     * <p>
+     * 普通流程,表单填写内容,子流程需要获取主流程表单
+     * </p>
+     */
+    private String formContent(Long instanceId, Long parentInstanceId) {
+        // 普通流程,表单填写内容,子流程需要获取主流程表单
+        FlwProcessForm flwProcessForm;
+        if (null != parentInstanceId) {
+            flwProcessForm = flwProcessFormService.getByInstanceId(parentInstanceId);
+        } else {
+            flwProcessForm = flwProcessFormService.getByInstanceId(instanceId);
+        }
+        return null == flwProcessForm ? null :flwProcessForm.getContent();
+    }
+
     @Override
     public List<Map<String, String>> listPreviousNodes(Long taskId) {
         FlwTask flwTask = this.getFlwTask(taskId);

+ 3 - 1
src/main/java/com/aizuda/boot/modules/test/service/impl/TestPurchaseOrderServiceImpl.java

@@ -2,12 +2,12 @@ package com.aizuda.boot.modules.test.service.impl;
 
 import com.aizuda.boot.modules.flw.entity.dto.ProcessStartDTO;
 import com.aizuda.boot.modules.flw.flow.FlowHelper;
+import com.aizuda.boot.modules.flw.service.IFlwProcessFormService;
 import com.aizuda.boot.modules.flw.service.IFlwProcessService;
 import com.aizuda.boot.modules.test.entity.TestPurchaseOrder;
 import com.aizuda.boot.modules.test.entity.dto.TestProcessStartDTO;
 import com.aizuda.boot.modules.test.mapper.TestPurchaseOrderMapper;
 import com.aizuda.boot.modules.test.service.ITestPurchaseOrderService;
-import com.aizuda.bpm.engine.FlowDataTransfer;
 import com.aizuda.bpm.engine.core.FlowCreator;
 import com.aizuda.bpm.engine.core.enums.EventType;
 import com.aizuda.bpm.engine.entity.FlwInstance;
@@ -31,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
 @Service
 @AllArgsConstructor
 public class TestPurchaseOrderServiceImpl extends BaseServiceImpl<TestPurchaseOrderMapper, TestPurchaseOrder> implements ITestPurchaseOrderService {
+    private IFlwProcessFormService flwProcessFormService;
     private IFlwProcessService flwProcessService;
 
     @Override
@@ -56,6 +57,7 @@ public class TestPurchaseOrderServiceImpl extends BaseServiceImpl<TestPurchaseOr
         processStart.setBusinessKey("purchaseOrder");
         Long flwInstanceId = flwProcessService.launchProcess(processStart, flowCreator);
         ApiAssert.fail(null == flwInstanceId, "流程发起失败");
+        ApiAssert.fail(!flwProcessFormService.saveForm(flwInstanceId, processStart.getProcessForm()), "保存保单失败");
         TestPurchaseOrder tpo = new TestPurchaseOrder();
         tpo.setId(dto.getId());
         tpo.setFlwInstanceId(flwInstanceId);