Forráskód Böngészése

新增发起业务流程接口

hubin 1 éve
szülő
commit
d82c8e4d10

+ 1 - 1
src/main/java/com/aizuda/boot/modules/flw/controller/ProcessController.java

@@ -77,7 +77,7 @@ public class ProcessController extends ApiController {
     @Permission("flw:process:launch")
     @PostMapping("/launch")
     public boolean launchProcess(@RequestBody ProcessStartDTO dto) {
-        return flwProcessService.launchProcess(dto, FlowHelper.getFlowCreator());
+        return flwProcessService.launchProcess(dto, FlowHelper.getFlowCreator()) != null;
     }
 
     @Operation(summary = "根据 id 获取模型")

+ 2 - 1
src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessService.java

@@ -51,8 +51,9 @@ public interface IFlwProcessService extends IBaseService<FlwProcess> {
      *
      * @param dto         流程发起 DTO
      * @param flowCreator 流程创建者
+     * @return 流程实例ID
      */
-    boolean launchProcess(ProcessStartDTO dto, FlowCreator flowCreator);
+    Long launchProcess(ProcessStartDTO dto, FlowCreator flowCreator);
 
     /**
      * 根据 id 获取模型

+ 12 - 3
src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessServiceImpl.java

@@ -48,7 +48,7 @@ import java.util.*;
 @Service
 @AllArgsConstructor
 public class FlwProcessServiceImpl extends ServiceImpl<FlwProcessMapper, FlwProcess> implements IFlwProcessService {
-    private final ProcessService processService;
+    private ProcessService processService;
     private IFlwProcessCategoryService flwProcessCategoryService;
     private IFlwProcessPermissionService flwProcessPermissionService;
     private IFlwProcessConfigureService flwProcessConfigureService;
@@ -160,7 +160,7 @@ public class FlwProcessServiceImpl extends ServiceImpl<FlwProcessMapper, FlwProc
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean launchProcess(ProcessStartDTO dto, FlowCreator flowCreator) {
+    public Long launchProcess(ProcessStartDTO dto, FlowCreator flowCreator) {
         FlwProcess flwProcess = flowLongEngine.processService().getProcessById(dto.getProcessId());
         if (null == flwProcess) {
             ApiAssert.fail("指定流程模型不存在");
@@ -181,9 +181,18 @@ public class FlwProcessServiceImpl extends ServiceImpl<FlwProcessMapper, FlwProc
             // 传递动态分配处理人员
             FlowDataTransfer.dynamicAssignee(Collections.unmodifiableMap(assigneeMap));
         }
+
+        // 传递表单参数
         FlowForm.argsTransfer(dto.getProcessForm());
+
+        // 启动流程
         Optional<FlwInstance> opt = flowLongEngine.startInstanceById(dto.getProcessId(), flowCreator);
-        return opt.filter(flwInstance -> flwProcessFormService.saveForm(flwInstance.getId(), dto.getProcessForm())).isPresent();
+        if (opt.isPresent()) {
+            FlwInstance flwInstance = opt.get();
+            ApiAssert.fail(!flwProcessFormService.saveForm(flwInstance.getId(), dto.getProcessForm()), "保存保单失败");
+            return flwInstance.getId();
+        }
+        return null;
     }
 
     @Override

+ 12 - 3
src/main/java/com/aizuda/boot/modules/test/controller/TestPurchaseOrderController.java

@@ -1,20 +1,22 @@
 package com.aizuda.boot.modules.test.controller;
 
+import com.aizuda.boot.modules.flw.flow.FlowHelper;
+import com.aizuda.boot.modules.test.entity.TestPurchaseOrder;
+import com.aizuda.boot.modules.test.entity.dto.TestProcessStartDTO;
+import com.aizuda.boot.modules.test.service.ITestPurchaseOrderService;
 import com.aizuda.core.api.ApiController;
 import com.aizuda.core.api.PageParam;
 import com.aizuda.core.validation.Create;
 import com.aizuda.core.validation.Update;
-import com.aizuda.boot.modules.test.entity.TestPurchaseOrder;
-import com.aizuda.boot.modules.test.service.ITestPurchaseOrderService;
 import com.baomidou.kisso.annotation.Permission;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.constraints.NotEmpty;
 import lombok.AllArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import jakarta.validation.constraints.NotEmpty;
 import java.util.List;
 
 /**
@@ -37,6 +39,13 @@ public class TestPurchaseOrderController extends ApiController {
         return testPurchaseOrderService.page(dto.page(), dto.getData());
     }
 
+    @Operation(summary = "发起流程")
+    @Permission("flw:testPurchaseOrder:launch")
+    @PostMapping("/launch")
+    public boolean launchProcess(@Validated @RequestBody TestProcessStartDTO dto) {
+        return testPurchaseOrderService.launchProcess(dto, FlowHelper.getFlowCreator());
+    }
+
     @Operation(summary = "查询 id 信息")
     @Permission("sys:testPurchaseOrder:get")
     @GetMapping("/get")

+ 2 - 2
src/main/java/com/aizuda/boot/modules/test/entity/TestPurchaseOrder.java

@@ -30,9 +30,9 @@ public class TestPurchaseOrder extends BaseEntity {
 	@Size(max = 255)
 	private String content;
 
-	@Schema(description = "审批状态 0,待审批 1,已拒绝 2,已通过")
+	@Schema(description = "审批状态 0,待审批 1,审批中 2,已通过 3,已拒绝")
 	@PositiveOrZero
-	private Short status;
+	private Integer status;
 
 	@Schema(description = "流程实例ID")
 	@PositiveOrZero

+ 24 - 0
src/main/java/com/aizuda/boot/modules/test/entity/dto/TestProcessStartDTO.java

@@ -0,0 +1,24 @@
+package com.aizuda.boot.modules.test.entity.dto;
+
+import com.aizuda.boot.modules.flw.entity.dto.ProcessStartDTO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class TestProcessStartDTO {
+
+    @Schema(description = "测试业务ID")
+    @NotNull
+    private Long id;
+
+    @Schema(description = "测试业务表单属性")
+    private String test;
+
+    @Schema(description = "流程启动对象")
+    @NotNull
+    private ProcessStartDTO processStart;
+
+}

+ 3 - 0
src/main/java/com/aizuda/boot/modules/test/service/ITestPurchaseOrderService.java

@@ -1,5 +1,7 @@
 package com.aizuda.boot.modules.test.service;
 
+import com.aizuda.boot.modules.test.entity.dto.TestProcessStartDTO;
+import com.aizuda.bpm.engine.core.FlowCreator;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.aizuda.service.service.IBaseService;
 import com.aizuda.boot.modules.test.entity.TestPurchaseOrder;
@@ -14,4 +16,5 @@ public interface ITestPurchaseOrderService extends IBaseService<TestPurchaseOrde
 
     Page<TestPurchaseOrder> page(Page<TestPurchaseOrder> page, TestPurchaseOrder testPurchaseOrder);
 
+    boolean launchProcess(TestProcessStartDTO dto, FlowCreator flowCreator);
 }

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

@@ -1,14 +1,19 @@
 package com.aizuda.boot.modules.test.service.impl;
 
-import com.aizuda.core.api.ApiAssert;
+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.core.FlowCreator;
+import com.aizuda.core.api.ApiAssert;
 import com.aizuda.service.service.BaseServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 测试采购单 服务实现类
@@ -17,7 +22,9 @@ import org.springframework.stereotype.Service;
  * @since 2024-06-10
  */
 @Service
+@AllArgsConstructor
 public class TestPurchaseOrderServiceImpl extends BaseServiceImpl<TestPurchaseOrderMapper, TestPurchaseOrder> implements ITestPurchaseOrderService {
+    private IFlwProcessService flwProcessService;
 
     @Override
     public Page<TestPurchaseOrder> page(Page<TestPurchaseOrder> page, TestPurchaseOrder testPurchaseOrder) {
@@ -30,4 +37,17 @@ public class TestPurchaseOrderServiceImpl extends BaseServiceImpl<TestPurchaseOr
         ApiAssert.fail(null == testPurchaseOrder.getId(), "主键不存在无法更新");
         return super.updateById(testPurchaseOrder);
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean launchProcess(TestProcessStartDTO dto, FlowCreator flowCreator) {
+        Long flwInstanceId = flwProcessService.launchProcess(dto.getProcessStart(), flowCreator);
+        ApiAssert.fail(null == flwInstanceId, "流程发起失败");
+        TestPurchaseOrder tpo = new TestPurchaseOrder();
+        tpo.setId(dto.getId());
+        tpo.setFlwInstanceId(flwInstanceId);
+        // 设置为审批状态
+        tpo.setStatus(1);
+        return super.updateById(tpo);
+    }
 }