Просмотр исходного кода

完善优化工作流管理接口

hubin 1 год назад
Родитель
Сommit
5f0d505971
23 измененных файлов с 667 добавлено и 99 удалено
  1. 12 19
      src/main/java/com/aizuda/boot/modules/flw/controller/FlwProcessCategoryController.java
  2. 66 7
      src/main/java/com/aizuda/boot/modules/flw/controller/FlwProcessController.java
  3. 2 2
      src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessActor.java
  4. 0 2
      src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessCategory.java
  5. 2 2
      src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessConfigure.java
  6. 40 31
      src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessPermission.java
  7. 8 0
      src/main/java/com/aizuda/boot/modules/flw/entity/dto/FlwProcessActorDTO.java
  8. 22 0
      src/main/java/com/aizuda/boot/modules/flw/entity/dto/FlwProcessDTO.java
  9. 10 0
      src/main/java/com/aizuda/boot/modules/flw/entity/dto/FlwProcessPermissionDTO.java
  10. 43 0
      src/main/java/com/aizuda/boot/modules/flw/entity/vo/FlwProcessCategoryVO.java
  11. 46 0
      src/main/java/com/aizuda/boot/modules/flw/entity/vo/FlwProcessVO.java
  12. 13 0
      src/main/java/com/aizuda/boot/modules/flw/mapper/FlowlongMapper.java
  13. 15 0
      src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessActorService.java
  14. 4 4
      src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessCategoryService.java
  15. 35 0
      src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessConfigureService.java
  16. 24 0
      src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessPermissionService.java
  17. 53 1
      src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessService.java
  18. 18 0
      src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessActorServiceImpl.java
  19. 13 10
      src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessCategoryServiceImpl.java
  20. 37 0
      src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessConfigureServiceImpl.java
  21. 27 0
      src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessPermissionServiceImpl.java
  22. 168 21
      src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessServiceImpl.java
  23. 9 0
      src/main/resources/mapper/FlowlongMapper.xml

+ 12 - 19
src/main/java/com/aizuda/boot/modules/flw/controller/FlwProcessCategoryController.java

@@ -1,19 +1,21 @@
 package com.aizuda.boot.modules.flw.controller;
 
+import com.aizuda.boot.modules.flw.entity.FlwProcessCategory;
+import com.aizuda.boot.modules.flw.service.IFlwProcessCategoryService;
 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.flw.entity.FlwProcessCategory;
-import com.aizuda.boot.modules.flw.service.IFlwProcessCategoryService;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.kisso.annotation.Permission;
 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 org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-import jakarta.validation.constraints.NotEmpty;
 import java.util.List;
 
 /**
@@ -29,33 +31,24 @@ import java.util.List;
 public class FlwProcessCategoryController extends ApiController {
     private IFlwProcessCategoryService flwProcessCategoryService;
 
-    @Operation(summary = "分页列表")
-    @PostMapping("/page")
-    public Page<FlwProcessCategory> getPage(@RequestBody PageParam<FlwProcessCategory> dto) {
-        return flwProcessCategoryService.page(dto.page(), dto.getData());
-    }
-
-    @Operation(summary = "查询 id 信息")
-    @GetMapping("/get")
-    public FlwProcessCategory get(@RequestParam Long id) {
-        return flwProcessCategoryService.getById(id);
-    }
-
     @Operation(summary = "根据 id 修改信息")
+    @Permission("flw:processCategory:update")
     @PostMapping("/update")
     public boolean update(@Validated(Update.class) @RequestBody FlwProcessCategory flwProcessCategory) {
         return flwProcessCategoryService.updateById(flwProcessCategory);
     }
 
     @Operation(summary = "创建添加")
+    @Permission("flw:processCategory:create")
     @PostMapping("/create")
     public boolean create(@Validated(Create.class) @RequestBody FlwProcessCategory flwProcessCategory) {
         return flwProcessCategoryService.save(flwProcessCategory);
     }
 
     @Operation(summary = "根据 ids 删除")
+    @Permission("flw:processCategory:delete")
     @PostMapping("/delete")
     public boolean delete(@NotEmpty @RequestBody List<Long> ids) {
-        return flwProcessCategoryService.removeByIds(ids);
+        return flwProcessCategoryService.removeCategoryByIds(ids);
     }
 }

+ 66 - 7
src/main/java/com/aizuda/boot/modules/flw/controller/FlwProcessController.java

@@ -1,16 +1,19 @@
 package com.aizuda.boot.modules.flw.controller;
 
 import com.aizuda.boot.modules.flw.entity.dto.FlwProcessDTO;
+import com.aizuda.boot.modules.flw.entity.vo.FlwProcessCategoryVO;
 import com.aizuda.boot.modules.flw.service.IFlwProcessService;
+import com.aizuda.boot.modules.system.entity.SysConfigure;
 import com.aizuda.core.api.ApiController;
 import com.baomidou.kisso.annotation.Permission;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 流程定义 前端控制器
@@ -18,18 +21,74 @@ import org.springframework.web.bind.annotation.RestController;
  * @author 青苗
  * @since 2023-09-07
  */
-@Tag(name = "流程分类")
+@Tag(name = "流程定义")
 @RestController
 @AllArgsConstructor
 @RequestMapping("/v1/process")
 public class FlwProcessController extends ApiController {
     private IFlwProcessService flwProcessService;
 
+    @Operation(summary = "获取所有分类流程定义列表")
+    @Permission("flw:processCategory:listAll")
+    @Parameters({
+            @Parameter(name = "keyword", description = "关键词")
+    })
+    @PostMapping("/list-category")
+    public List<FlwProcessCategoryVO> listCategory(@RequestParam(required = false) String keyword) {
+        return flwProcessService.listCategoryAll(keyword);
+    }
+
+    @Operation(summary = "查询 id 信息")
+    @Permission("sys:processCategory:get")
+    @GetMapping("/get")
+    public FlwProcessDTO get(@RequestParam Long id) {
+        return flwProcessService.getDtoById(id);
+    }
+
+    @Operation(summary = "查询 id 克隆流程定义信息")
+    @Permission("sys:processCategory:clone")
+    @GetMapping("/clone")
+    public boolean clone(@RequestParam Long id) {
+        return flwProcessService.cloneById(id);
+    }
+
     @Operation(summary = "创建添加")
     @Permission("flw:process:create")
     @PostMapping("/create")
-    public boolean create(@RequestBody FlwProcessDTO dto) {
-        return flwProcessService.save(dto);
+    public Long create(@RequestBody FlwProcessDTO dto) {
+        return flwProcessService.saveDto(dto);
+    }
+
+    @Operation(summary = "根据流程定义ID删除流程定义相关信息")
+    @Parameters({
+            @Parameter(name = "id", description = "主键ID")
+    })
+    @Permission("flw:process:delete")
+    @PostMapping("/delete")
+    public boolean delete(@RequestParam Long id) {
+        return flwProcessService.removeProcessInfo(id);
+    }
+
+    @Operation(summary = "根据流程定义ID更新排序")
+    @Permission("flw:process:updateSort")
+    @Parameters({
+            @Parameter(name = "id", description = "主键ID"),
+            @Parameter(name = "sort", description = "排序号")
+    })
+    @PostMapping("/update-sort-{id}")
+    public boolean updateSort(@PathVariable("id") Long id, @RequestParam Integer sort) {
+        return flwProcessService.updateSortById(id, sort);
+    }
+
+    @Operation(summary = "根据流程定义ID更新流程状态")
+    @Permission("flw:process:updateSate")
+    @Parameters({
+            @Parameter(name = "id", description = "主键ID"),
+            @Parameter(name = "state", description = "流程状态 0,不可用 1,可用")
+    })
+    @PostMapping("/update-state-{id}")
+    public boolean updateSate(@PathVariable("id") Long id, @RequestParam Integer state) {
+        return flwProcessService.updateSateById(id, state);
     }
 
 }

+ 2 - 2
src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessActor.java

@@ -1,6 +1,6 @@
 package com.aizuda.boot.modules.flw.entity;
 
-import com.aizuda.core.bean.BaseEntity;
+import com.aizuda.core.bean.SuperEntity;
 import com.aizuda.core.validation.Create;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
@@ -19,7 +19,7 @@ import lombok.Setter;
 @Getter
 @Setter
 @Schema(name = "FlwProcessActor", description = "流程定义参与者")
-public class FlwProcessActor extends BaseEntity {
+public class FlwProcessActor extends SuperEntity {
 
 	@Schema(description = "流程定义ID")
 	@NotNull(groups = Create.class)

+ 0 - 2
src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessCategory.java

@@ -4,7 +4,6 @@ import com.aizuda.core.bean.BaseEntity;
 import com.aizuda.core.validation.Create;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.PositiveOrZero;
 import jakarta.validation.constraints.Size;
 import lombok.Getter;
@@ -31,7 +30,6 @@ public class FlwProcessCategory extends BaseEntity {
 	private String remark;
 
 	@Schema(description = "排序")
-	@NotNull(groups = Create.class)
 	@PositiveOrZero
 	private Integer sort;
 

+ 2 - 2
src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessConfigure.java

@@ -1,6 +1,6 @@
 package com.aizuda.boot.modules.flw.entity;
 
-import com.aizuda.core.bean.BaseEntity;
+import com.aizuda.core.bean.SuperEntity;
 import com.aizuda.core.validation.Create;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
@@ -20,7 +20,7 @@ import lombok.Setter;
 @Getter
 @Setter
 @Schema(name = "FlwProcessConfigure", description = "流程定义配置")
-public class FlwProcessConfigure extends BaseEntity {
+public class FlwProcessConfigure extends SuperEntity {
 
 	@Schema(description = "流程定义ID")
 	@NotNull(groups = Create.class)

+ 40 - 31
src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessPermission.java

@@ -1,6 +1,6 @@
 package com.aizuda.boot.modules.flw.entity;
 
-import com.aizuda.core.bean.BaseEntity;
+import com.aizuda.core.bean.SuperEntity;
 import com.aizuda.core.validation.Create;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotNull;
@@ -9,6 +9,8 @@ import jakarta.validation.constraints.Size;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Objects;
+
 /**
  * 流程定义权限
  *
@@ -18,35 +20,42 @@ import lombok.Setter;
 @Getter
 @Setter
 @Schema(name = "FlwProcessPermission", description = "流程定义权限")
-public class FlwProcessPermission extends BaseEntity {
-
-	@Schema(description = "流程定义ID")
-	@NotNull(groups = Create.class)
-	@PositiveOrZero
-	private Long processId;
-
-	@Schema(description = "用户ID")
-	@NotNull(groups = Create.class)
-	@PositiveOrZero
-	private Long userId;
-
-	@Schema(description = "用户名")
-	@Size(max = 50)
-	private String userName;
-
-	@Schema(description = "允许编辑/停用/删除审批 0,否 1,是")
-	@NotNull(groups = Create.class)
-	@PositiveOrZero
-	private Integer operateApproval;
-
-	@Schema(description = "允许添加/移除审批负责人 0,否 1,是")
-	@NotNull(groups = Create.class)
-	@PositiveOrZero
-	private Integer operateOwner;
-
-	@Schema(description = "允许审批数据查询与操作 0,否 1,是")
-	@NotNull(groups = Create.class)
-	@PositiveOrZero
-	private Integer operateData;
+public class FlwProcessPermission extends SuperEntity {
+
+    @Schema(description = "流程定义ID")
+    @NotNull(groups = Create.class)
+    @PositiveOrZero
+    private Long processId;
+
+    @Schema(description = "用户ID")
+    @NotNull(groups = Create.class)
+    @PositiveOrZero
+    private Long userId;
+
+    @Schema(description = "用户名")
+    @Size(max = 50)
+    private String userName;
+
+    @Schema(description = "允许编辑/停用/删除审批 0,否 1,是")
+    @NotNull(groups = Create.class)
+    @PositiveOrZero
+    private Integer operateApproval;
+
+    @Schema(description = "允许添加/移除审批负责人 0,否 1,是")
+    @NotNull(groups = Create.class)
+    @PositiveOrZero
+    private Integer operateOwner;
+
+    @Schema(description = "允许审批数据查询与操作 0,否 1,是")
+    @NotNull(groups = Create.class)
+    @PositiveOrZero
+    private Integer operateData;
+
+    /**
+     * 是否允许操作审批
+     */
+    public boolean allowOperateApproval() {
+        return Objects.equals(1, operateApproval);
+    }
 
 }

+ 8 - 0
src/main/java/com/aizuda/boot/modules/flw/entity/dto/FlwProcessActorDTO.java

@@ -24,6 +24,14 @@ public class FlwProcessActorDTO {
     @Schema(description = "参与者类型 0,用户 1,部门 2,用户组")
     private Integer actorType;
 
+    public static FlwProcessActorDTO of(FlwProcessActor flwProcessActor) {
+        FlwProcessActorDTO dto = new FlwProcessActorDTO();
+        dto.setActorId(flwProcessActor.getActorId());
+        dto.setActorName(flwProcessActor.getActorName());
+        dto.setActorType(flwProcessActor.getActorType());
+        return dto;
+    }
+
     public FlwProcessActor toFlwProcessActor(Long processId) {
         FlwProcessActor fpa = new FlwProcessActor();
         fpa.setProcessId(processId);

+ 22 - 0
src/main/java/com/aizuda/boot/modules/flw/entity/dto/FlwProcessDTO.java

@@ -2,9 +2,11 @@ package com.aizuda.boot.modules.flw.entity.dto;
 
 
 import com.aizuda.boot.modules.flw.entity.FlwProcessSetting;
+import com.flowlong.bpm.engine.entity.FlwProcess;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
 
 import java.util.List;
 
@@ -18,6 +20,9 @@ import java.util.List;
 @Setter
 public class FlwProcessDTO {
 
+    @Schema(description = "流程定义ID")
+    private Long processId;
+
     @Schema(description = "流程定义名称")
     private String processName;
 
@@ -48,4 +53,21 @@ public class FlwProcessDTO {
     @Schema(description = "流程定义配置")
     private FlwProcessSetting processSetting;
 
+    public String getProcessName() {
+        if (StringUtils.isBlank(processName)) {
+            return "未命名审批";
+        }
+        return this.processName;
+    }
+
+    public static FlwProcessDTO of(FlwProcess flwProcess) {
+        FlwProcessDTO dto = new FlwProcessDTO();
+        dto.setProcessId(flwProcess.getId());
+        dto.setProcessName(flwProcess.getProcessName());
+        dto.setDisplayName(flwProcess.getDisplayName());
+        dto.setProcessIcon(flwProcess.getProcessIcon());
+        dto.setUseScope(flwProcess.getUseScope());
+        dto.setModelContent(flwProcess.getModelContent());
+        return dto;
+    }
 }

+ 10 - 0
src/main/java/com/aizuda/boot/modules/flw/entity/dto/FlwProcessPermissionDTO.java

@@ -30,6 +30,16 @@ public class FlwProcessPermissionDTO {
     @Schema(description = "允许审批数据查询与操作 0,否 1,是")
     private Integer operateData;
 
+    public static FlwProcessPermissionDTO of(FlwProcessPermission flwProcessPermission) {
+        FlwProcessPermissionDTO dto = new FlwProcessPermissionDTO();
+        dto.setUserId(flwProcessPermission.getUserId());
+        dto.setUserName(flwProcessPermission.getUserName());
+        dto.setOperateApproval(flwProcessPermission.getOperateApproval());
+        dto.setOperateOwner(flwProcessPermission.getOperateOwner());
+        dto.setOperateData(flwProcessPermission.getOperateData());
+        return dto;
+    }
+
     public FlwProcessPermission toFlwProcessPermission(Long processId) {
         FlwProcessPermission fpp = new FlwProcessPermission();
         fpp.setProcessId(processId);

+ 43 - 0
src/main/java/com/aizuda/boot/modules/flw/entity/vo/FlwProcessCategoryVO.java

@@ -0,0 +1,43 @@
+package com.aizuda.boot.modules.flw.entity.vo;
+
+import com.aizuda.boot.modules.flw.entity.FlwProcessCategory;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 流程定义分类VO
+ *
+ * @author 青苗
+ * @since 2023-09-07
+ */
+@Getter
+@Setter
+public class FlwProcessCategoryVO {
+
+    @Schema(description = "流程分类ID")
+    private Long categoryId;
+
+    @Schema(description = "流程分类名称")
+    private String categoryName;
+
+    @Schema(description = "备注")
+    private String categoryRemark;
+
+    @Schema(description = "排序")
+    private Integer categorySort;
+
+    @Schema(description = "流程定义信息列表")
+    private List<FlwProcessVO> processList;
+
+    public static FlwProcessCategoryVO of(FlwProcessCategory fpc) {
+        FlwProcessCategoryVO vo = new FlwProcessCategoryVO();
+        vo.setCategoryId(fpc.getId());
+        vo.setCategoryName(fpc.getName());
+        vo.setCategoryRemark(fpc.getRemark());
+        vo.setCategorySort(fpc.getSort());
+        return vo;
+    }
+}

+ 46 - 0
src/main/java/com/aizuda/boot/modules/flw/entity/vo/FlwProcessVO.java

@@ -0,0 +1,46 @@
+package com.aizuda.boot.modules.flw.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 流程定义分类VO
+ *
+ * @author 青苗
+ * @since 2023-09-07
+ */
+@Getter
+@Setter
+public class FlwProcessVO {
+
+    @JsonIgnore
+    @Schema(description = "流程分类ID")
+    private String categoryId;
+
+    @Schema(description = "流程定义ID")
+    private String processId;
+
+    @Schema(description = "流程定义名称")
+    private String processName;
+
+    @Schema(description = "流程定义说明")
+    private String displayName;
+
+    @Schema(description = "流程定义图标地址")
+    private String processIcon;
+
+    @Schema(description = "流程定义版本")
+    private Integer processVersion;
+
+    @Schema(description = "使用范围 0,全员 1,指定人员(业务关联) 2,均不可提交")
+    private Integer useScope;
+
+    @Schema(description = "流程状态 0,不可用 1,可用")
+    private Integer processState;
+
+    @Schema(description = "流程定义排序")
+    private Integer processSort;
+
+}

+ 13 - 0
src/main/java/com/aizuda/boot/modules/flw/mapper/FlowlongMapper.java

@@ -0,0 +1,13 @@
+package com.aizuda.boot.modules.flw.mapper;
+
+import com.aizuda.boot.modules.flw.entity.vo.FlwProcessVO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface FlowlongMapper {
+
+    List<FlwProcessVO> selectFlwProcessList();
+
+}

+ 15 - 0
src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessActorService.java

@@ -23,4 +23,19 @@ public interface IFlwProcessActorService extends IBaseService<FlwProcessActor> {
      */
     boolean saveProcessActors(Long processId, List<FlwProcessActorDTO> dtoList);
 
+    /**
+     * 根据流程定义ID删除流程定义参与者
+     *
+     * @param processId 流程定义ID
+     * @return
+     */
+    boolean removeByProcessId(Long processId);
+
+    /**
+     * 根据流程定义ID查询程定义参与者列表
+     *
+     * @param processId 流程定义ID
+     * @return
+     */
+    List<FlwProcessActor> getByProcessId(Long processId);
 }

+ 4 - 4
src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessCategoryService.java

@@ -1,8 +1,9 @@
 package com.aizuda.boot.modules.flw.service;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.aizuda.service.service.IBaseService;
 import com.aizuda.boot.modules.flw.entity.FlwProcessCategory;
+import com.aizuda.service.service.IBaseService;
+
+import java.util.List;
 
 /**
  * 流程分类 服务类
@@ -12,6 +13,5 @@ import com.aizuda.boot.modules.flw.entity.FlwProcessCategory;
  */
 public interface IFlwProcessCategoryService extends IBaseService<FlwProcessCategory> {
 
-    Page<FlwProcessCategory> page(Page<FlwProcessCategory> page, FlwProcessCategory flwProcessCategory);
-
+    boolean removeCategoryByIds(List<Long> ids);
 }

+ 35 - 0
src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessConfigureService.java

@@ -1,8 +1,11 @@
 package com.aizuda.boot.modules.flw.service;
 
 import com.aizuda.boot.modules.flw.entity.FlwProcessConfigure;
+import com.aizuda.boot.modules.flw.entity.dto.FlwProcessDTO;
 import com.aizuda.service.service.IBaseService;
 
+import java.util.List;
+
 /**
  * 流程定义配置 服务类
  *
@@ -11,4 +14,36 @@ import com.aizuda.service.service.IBaseService;
  */
 public interface IFlwProcessConfigureService extends IBaseService<FlwProcessConfigure> {
 
+    /**
+     * 根据流程定义DTO对象保存配置
+     *
+     * @param processId 流程定义ID
+     * @param dto       流程定义DTO
+     * @return
+     */
+    boolean saveByDto(Long processId, FlwProcessDTO dto);
+
+    /**
+     * 根据流程定义ID删除流程定义配置
+     *
+     * @param processId 流程定义ID
+     * @return
+     */
+    boolean removeByProcessId(Long processId);
+
+    /**
+     * 查询是否存在指定分类ID流程定义信息
+     *
+     * @param categoryIdList 流程分类ID列表
+     * @return
+     */
+    boolean existByCategoryIds(List<Long> categoryIdList);
+
+    /**
+     * 根据流程定义ID流程定义配置
+     *
+     * @param processId 流程定义ID
+     * @return
+     */
+    FlwProcessConfigure getByProcessId(Long processId);
 }

+ 24 - 0
src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessPermissionService.java

@@ -23,4 +23,28 @@ public interface IFlwProcessPermissionService extends IBaseService<FlwProcessPer
      */
     boolean saveProcessPermissions(Long processId, List<FlwProcessPermissionDTO> dtoList);
 
+    /**
+     * 根据流程定义ID删除流程定义权限
+     *
+     * @param processId 流程定义ID
+     * @return
+     */
+    boolean removeByProcessId(Long processId);
+
+    /**
+     * 根据流程定义ID查询流程定义权限列表
+     *
+     * @param processId 流程定义ID
+     * @return
+     */
+    List<FlwProcessPermission> getByProcessId(Long processId);
+
+    /**
+     * 根据用户ID获取指定流程定义ID的权限信息
+     *
+     * @param userId    用户ID
+     * @param processId 流程定义ID
+     * @return
+     */
+    FlwProcessPermission getByUserIdAndProcessId(Long userId, Long processId);
 }

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

@@ -1,9 +1,12 @@
 package com.aizuda.boot.modules.flw.service;
 
 import com.aizuda.boot.modules.flw.entity.dto.FlwProcessDTO;
+import com.aizuda.boot.modules.flw.entity.vo.FlwProcessCategoryVO;
 import com.aizuda.service.service.IBaseService;
 import com.flowlong.bpm.engine.entity.FlwProcess;
 
+import java.util.List;
+
 /**
  * 流程分类 服务类
  *
@@ -12,12 +15,61 @@ import com.flowlong.bpm.engine.entity.FlwProcess;
  */
 public interface IFlwProcessService extends IBaseService<FlwProcess> {
 
+    /**
+     * 流程定义分类查询所有流程定义列表
+     *
+     * @param keyword 搜索关键词
+     * @return
+     */
+    List<FlwProcessCategoryVO> listCategoryAll(String keyword);
+
+    /**
+     * 根据ID查询流程定义相关信息
+     *
+     * @param id 流程定义ID
+     * @return
+     */
+    FlwProcessDTO getDtoById(Long id);
+
     /**
      * 创建添加流程定义配置
      *
      * @param dto 流程定义配置 DTO
+     * @return 流程定义ID
+     */
+    Long saveDto(FlwProcessDTO dto);
+
+    /**
+     * 根据ID删除流程定义相关信息
+     *
+     * @param id 流程定义ID
      * @return
      */
-    boolean save(FlwProcessDTO dto);
+    boolean removeProcessInfo(Long id);
 
+    /**
+     * 根据ID更新流程定义排序
+     *
+     * @param id   流程定义ID
+     * @param sort 流程定义排序
+     * @return
+     */
+    boolean updateSortById(Long id, Integer sort);
+
+    /**
+     * 根据ID更新流程定义流程状态
+     *
+     * @param id    流程定义ID
+     * @param state 流程状态 0,不可用 1,可用
+     * @return
+     */
+    boolean updateSateById(Long id, Integer state);
+
+    /**
+     * 根据ID克隆流程定义信息
+     *
+     * @param id 流程定义ID
+     * @return
+     */
+    boolean cloneById(Long id);
 }

+ 18 - 0
src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessActorServiceImpl.java

@@ -5,6 +5,8 @@ import com.aizuda.boot.modules.flw.entity.dto.FlwProcessActorDTO;
 import com.aizuda.boot.modules.flw.mapper.FlwProcessActorMapper;
 import com.aizuda.boot.modules.flw.service.IFlwProcessActorService;
 import com.aizuda.service.service.BaseServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -21,7 +23,23 @@ public class FlwProcessActorServiceImpl extends BaseServiceImpl<FlwProcessActorM
 
     @Override
     public boolean saveProcessActors(Long processId, List<FlwProcessActorDTO> dtoList) {
+        // 先删除流程定义ID历史数据
+        this.removeByProcessId(processId);
+        // 保存流程定义参与者列表
         return super.saveBatch(dtoList.stream().map(t -> t.toFlwProcessActor(processId)).collect(Collectors.toList()));
     }
 
+    @Override
+    public boolean removeByProcessId(Long processId) {
+        return super.remove(this.getWrappers(processId));
+    }
+
+    private LambdaQueryWrapper<FlwProcessActor> getWrappers(Long processId) {
+        return Wrappers.<FlwProcessActor>lambdaQuery().eq(FlwProcessActor::getProcessId, processId);
+    }
+
+    @Override
+    public List<FlwProcessActor> getByProcessId(Long processId) {
+        return super.list(this.getWrappers(processId));
+    }
 }

+ 13 - 10
src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessCategoryServiceImpl.java

@@ -1,15 +1,16 @@
 package com.aizuda.boot.modules.flw.service.impl;
 
-import com.aizuda.core.api.ApiAssert;
 import com.aizuda.boot.modules.flw.entity.FlwProcessCategory;
 import com.aizuda.boot.modules.flw.mapper.FlwProcessCategoryMapper;
 import com.aizuda.boot.modules.flw.service.IFlwProcessCategoryService;
+import com.aizuda.boot.modules.flw.service.IFlwProcessConfigureService;
+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 java.util.List;
+
 /**
  * 流程分类 服务实现类
  *
@@ -17,17 +18,19 @@ import org.springframework.stereotype.Service;
  * @since 2023-09-07
  */
 @Service
+@AllArgsConstructor
 public class FlwProcessCategoryServiceImpl extends BaseServiceImpl<FlwProcessCategoryMapper, FlwProcessCategory> implements IFlwProcessCategoryService {
-
-    @Override
-    public Page<FlwProcessCategory> page(Page<FlwProcessCategory> page, FlwProcessCategory flwProcessCategory) {
-        LambdaQueryWrapper<FlwProcessCategory> lqw = Wrappers.lambdaQuery(flwProcessCategory);
-        return super.page(page, lqw);
-    }
+    private IFlwProcessConfigureService flwProcessConfigureService;
 
     @Override
     public boolean updateById(FlwProcessCategory flwProcessCategory) {
         ApiAssert.fail(null == flwProcessCategory.getId(), "主键不存在无法更新");
         return super.updateById(flwProcessCategory);
     }
+
+    @Override
+    public boolean removeCategoryByIds(List<Long> ids) {
+        ApiAssert.fail(flwProcessConfigureService.existByCategoryIds(ids), "存在流程定义关联不允许删除");
+        return super.removeByIds(ids);
+    }
 }

+ 37 - 0
src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessConfigureServiceImpl.java

@@ -1,11 +1,16 @@
 package com.aizuda.boot.modules.flw.service.impl;
 
 import com.aizuda.boot.modules.flw.entity.FlwProcessConfigure;
+import com.aizuda.boot.modules.flw.entity.dto.FlwProcessDTO;
 import com.aizuda.boot.modules.flw.mapper.FlwProcessConfigureMapper;
 import com.aizuda.boot.modules.flw.service.IFlwProcessConfigureService;
 import com.aizuda.service.service.BaseServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 流程定义配置 服务实现类
  *
@@ -15,4 +20,36 @@ import org.springframework.stereotype.Service;
 @Service
 public class FlwProcessConfigureServiceImpl extends BaseServiceImpl<FlwProcessConfigureMapper, FlwProcessConfigure> implements IFlwProcessConfigureService {
 
+    @Override
+    public boolean saveByDto(Long processId, FlwProcessDTO dto) {
+        // 删除流程定义ID历史数据
+        this.removeByProcessId(processId);
+        // 保存最新配置
+        FlwProcessConfigure fpc = new FlwProcessConfigure();
+        fpc.setProcessId(processId);
+        fpc.setCategoryId(dto.getCategoryId());
+        fpc.setProcessSetting(dto.getProcessSetting());
+        fpc.setProcessForm(dto.getProcessForm());
+        return super.save(fpc);
+    }
+
+    @Override
+    public boolean removeByProcessId(Long processId) {
+        return super.remove(this.getWrappers(processId));
+    }
+
+    private LambdaQueryWrapper<FlwProcessConfigure> getWrappers(Long processId) {
+        return Wrappers.<FlwProcessConfigure>lambdaQuery().eq(FlwProcessConfigure::getProcessId, processId);
+    }
+
+    @Override
+    public FlwProcessConfigure getByProcessId(Long processId) {
+        return super.getOne(this.getWrappers(processId));
+    }
+
+    @Override
+    public boolean existByCategoryIds(List<Long> categoryIdList) {
+        return super.count(Wrappers.<FlwProcessConfigure>lambdaQuery()
+                .in(FlwProcessConfigure::getCategoryId, categoryIdList)) > 0;
+    }
 }

+ 27 - 0
src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessPermissionServiceImpl.java

@@ -5,6 +5,8 @@ import com.aizuda.boot.modules.flw.entity.dto.FlwProcessPermissionDTO;
 import com.aizuda.boot.modules.flw.mapper.FlwProcessPermissionMapper;
 import com.aizuda.boot.modules.flw.service.IFlwProcessPermissionService;
 import com.aizuda.service.service.BaseServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -21,6 +23,31 @@ public class FlwProcessPermissionServiceImpl extends BaseServiceImpl<FlwProcessP
 
     @Override
     public boolean saveProcessPermissions(Long processId, List<FlwProcessPermissionDTO> dtoList) {
+        // 先删除流程定义ID历史数据
+        this.removeByProcessId(processId);
+        // 保存流程定义权限列表
         return super.saveBatch(dtoList.stream().map(t -> t.toFlwProcessPermission(processId)).collect(Collectors.toList()));
     }
+
+    @Override
+    public boolean removeByProcessId(Long processId) {
+        return super.remove(this.getWrappers(processId));
+    }
+
+    private LambdaQueryWrapper<FlwProcessPermission> getWrappers(Long processId) {
+        return Wrappers.<FlwProcessPermission>lambdaQuery().eq(FlwProcessPermission::getProcessId, processId);
+    }
+
+    @Override
+    public List<FlwProcessPermission> getByProcessId(Long processId) {
+        return super.list(this.getWrappers(processId));
+    }
+
+    @Override
+    public FlwProcessPermission getByUserIdAndProcessId(Long userId, Long processId) {
+        FlwProcessPermission fpp = new FlwProcessPermission();
+        fpp.setUserId(userId);
+        fpp.setProcessId(processId);
+        return super.getOne(Wrappers.query(fpp));
+    }
 }

+ 168 - 21
src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessServiceImpl.java

@@ -1,24 +1,33 @@
 package com.aizuda.boot.modules.flw.service.impl;
 
+import com.aizuda.boot.modules.flw.entity.FlwProcessActor;
+import com.aizuda.boot.modules.flw.entity.FlwProcessCategory;
 import com.aizuda.boot.modules.flw.entity.FlwProcessConfigure;
-import com.aizuda.boot.modules.flw.entity.FlwProcessSetting;
+import com.aizuda.boot.modules.flw.entity.FlwProcessPermission;
 import com.aizuda.boot.modules.flw.entity.dto.FlwProcessActorDTO;
 import com.aizuda.boot.modules.flw.entity.dto.FlwProcessDTO;
 import com.aizuda.boot.modules.flw.entity.dto.FlwProcessPermissionDTO;
-import com.aizuda.boot.modules.flw.service.IFlwProcessActorService;
-import com.aizuda.boot.modules.flw.service.IFlwProcessConfigureService;
-import com.aizuda.boot.modules.flw.service.IFlwProcessPermissionService;
-import com.aizuda.boot.modules.flw.service.IFlwProcessService;
+import com.aizuda.boot.modules.flw.entity.vo.FlwProcessCategoryVO;
+import com.aizuda.boot.modules.flw.entity.vo.FlwProcessVO;
+import com.aizuda.boot.modules.flw.mapper.FlowlongMapper;
+import com.aizuda.boot.modules.flw.service.*;
 import com.aizuda.core.api.ApiAssert;
+import com.aizuda.service.web.UserSession;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.flowlong.bpm.engine.core.mapper.FlwProcessMapper;
 import com.flowlong.bpm.engine.entity.FlwProcess;
 import lombok.AllArgsConstructor;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 流程分类 服务实现类
@@ -29,43 +38,181 @@ import java.util.Objects;
 @Service
 @AllArgsConstructor
 public class FlwProcessServiceImpl extends ServiceImpl<FlwProcessMapper, FlwProcess> implements IFlwProcessService {
-    private IFlwProcessActorService flwProcessActorService;
+    private IFlwProcessCategoryService flwProcessCategoryService;
     private IFlwProcessPermissionService flwProcessPermissionService;
     private IFlwProcessConfigureService flwProcessConfigureService;
+    private IFlwProcessActorService flwProcessActorService;
+    private FlowlongMapper flowlongMapper;
+
+    @Override
+    public List<FlwProcessCategoryVO> listCategoryAll(String keyword) {
+        List<FlwProcessCategoryVO> voList = new ArrayList<>();
+        List<FlwProcessCategory> categoryList = this.listProcessCategoryByKeyword();
+        // 全部查询
+        if (CollectionUtils.isNotEmpty(categoryList)) {
+            List<FlwProcessVO> flwProcessVOList = flowlongMapper.selectFlwProcessList();
+            if (null == keyword) {
+                // 不存在关键词查询
+                voList = categoryList.stream().map(t -> FlwProcessCategoryVO.of(t)).collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(flwProcessVOList)) {
+                    voList.forEach(t -> t.setProcessList(flwProcessVOList.stream().filter(f -> Objects.equals(t.getCategoryId(), f.getCategoryId()))
+                            .collect(Collectors.toList())));
+                }
+            } else {
+                // 关键词查询
+                for (FlwProcessCategory category : categoryList) {
+                    FlwProcessCategoryVO vo = FlwProcessCategoryVO.of(category);
+                    List<FlwProcessVO> processList = flwProcessVOList.stream().filter(t -> Objects.equals(t.getCategoryId(), category.getId())
+                            && t.getProcessName().contains(keyword)).collect(Collectors.toList());
+                    if (category.getName().contains(keyword)) {
+                        // 匹配分类名称
+                        if (CollectionUtils.isEmpty(processList)) {
+                            vo.setProcessList(flwProcessVOList.stream().filter(f -> Objects.equals(f.getCategoryId(), category.getId()))
+                                    .collect(Collectors.toList()));
+                        } else {
+                            vo.setProcessList(processList);
+                        }
+                        voList.add(vo);
+                    } else if (CollectionUtils.isNotEmpty(processList)) {
+                        // 匹配流程定义
+                        vo.setProcessList(processList);
+                        voList.add(vo);
+                    }
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 所有流程定义分类列表
+     */
+    protected List<FlwProcessCategory> listProcessCategoryByKeyword() {
+        LambdaQueryWrapper<FlwProcessCategory> lqw = Wrappers.lambdaQuery();
+        lqw.orderByDesc(FlwProcessCategory::getSort);
+        return flwProcessCategoryService.list(lqw);
+    }
 
     @Override
-    public boolean save(FlwProcessDTO dto) {
+    public FlwProcessDTO getDtoById(Long id) {
+        FlwProcess flwProcess = this.checkById(id);
+        FlwProcessDTO dto = FlwProcessDTO.of(flwProcess);
+        // 流程参与者
+        List<FlwProcessActor> flwProcessActors = flwProcessActorService.getByProcessId(id);
+        if (CollectionUtils.isNotEmpty(flwProcessActors)) {
+            dto.setProcessActorList(flwProcessActors.stream().map(t -> FlwProcessActorDTO.of(t)).collect(Collectors.toList()));
+        }
+        // 流程权限
+        List<FlwProcessPermission> flwProcessPermissions = flwProcessPermissionService.getByProcessId(id);
+        if (CollectionUtils.isNotEmpty(flwProcessPermissions)) {
+            dto.setProcessPermissionList(flwProcessPermissions.stream().map(t -> FlwProcessPermissionDTO.of(t)).collect(Collectors.toList()));
+        }
+        // 流程配置
+        FlwProcessConfigure configure = flwProcessConfigureService.getByProcessId(id);
+        if (null != configure) {
+            dto.setCategoryId(configure.getCategoryId());
+            dto.setProcessSetting(configure.getProcessSetting());
+            dto.setProcessForm(configure.getProcessForm());
+        }
+        return dto;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Long saveDto(FlwProcessDTO dto) {
+        ApiAssert.fail(null == dto.getCategoryId(), "流程定义分类ID不存在");
+        // 流程定义ID
+        Long processId = dto.getProcessId();
         FlwProcess flwProcess = new FlwProcess();
         flwProcess.setProcessName(dto.getProcessName());
         flwProcess.setDisplayName(dto.getDisplayName());
         flwProcess.setProcessIcon(dto.getProcessIcon());
         flwProcess.setUseScope(dto.getUseScope());
         flwProcess.setModelContent(dto.getModelContent());
-        ApiAssert.fail(!super.save(flwProcess), "流程定义保存失败");
+        if (null == processId) {
+            // 设置创建者信息
+            UserSession userSession = UserSession.getLoginInfo();
+            flwProcess.setCreateId(String.valueOf(userSession.getId()));
+            flwProcess.setCreateBy(userSession.getUsername());
+            flwProcess.setCreateTime(new Date());
+            ApiAssert.fail(!super.save(flwProcess), "流程定义保存失败");
+            processId = flwProcess.getId();
+        } else {
+            flwProcess.setId(processId);
+            ApiAssert.fail(!super.updateById(flwProcess), "流程定义保存失败");
+        }
         // 1,指定人员(谁可以提交该审批)
         if (Objects.equals(1, dto.getUseScope())) {
             List<FlwProcessActorDTO> processActorList = dto.getProcessActorList();
             if (CollectionUtils.isNotEmpty(processActorList)) {
-                ApiAssert.fail(!flwProcessActorService.saveProcessActors(flwProcess.getId(),
-                        processActorList), "流程定义指定提交人员保存失败");
+                ApiAssert.fail(!flwProcessActorService.saveProcessActors(processId, processActorList),
+                        "流程定义指定提交人员保存失败");
             }
         }
         // 流程定义权限
         List<FlwProcessPermissionDTO> processPermissionList = dto.getProcessPermissionList();
         if (CollectionUtils.isNotEmpty(processPermissionList)) {
-            ApiAssert.fail(!flwProcessPermissionService.saveProcessPermissions(flwProcess.getId(),
-                    processPermissionList), "流程定义管理权限保存失败");
+            ApiAssert.fail(!flwProcessPermissionService.saveProcessPermissions(processId, processPermissionList),
+                    "流程定义管理权限保存失败");
         }
         // 保存流程定义配置
-        FlwProcessSetting processSetting = dto.getProcessSetting();
-        if (null != processSetting) {
-            FlwProcessConfigure fpc = new FlwProcessConfigure();
-            fpc.setProcessId(flwProcess.getId());
-            fpc.setCategoryId(dto.getCategoryId());
-            fpc.setProcessSetting(processSetting);
-            fpc.setProcessForm(dto.getProcessForm());
-            ApiAssert.fail(!flwProcessConfigureService.save(fpc), "流程定义配置保存失败");
+        if (null != dto.getCategoryId()) {
+            ApiAssert.fail(!flwProcessConfigureService.saveByDto(processId, dto), "流程定义配置保存失败");
         }
-        return true;
+        return processId;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean removeProcessInfo(Long id) {
+        // 检查流程定义操作权限
+        this.checkOperateApproval(id);
+        // 删除相关流程定义信息
+        flwProcessActorService.removeByProcessId(id);
+        flwProcessPermissionService.removeByProcessId(id);
+        flwProcessConfigureService.removeByProcessId(id);
+        return super.removeById(id);
+    }
+
+    protected void checkOperateApproval(Long processId) {
+        UserSession userSession = UserSession.getLoginInfo();
+        if (null == userSession || !UserSession.isAdmin(userSession.getId())) {
+            FlwProcessPermission fpp = getFlwProcessPermissionByProcessId(processId);
+            ApiAssert.fail(null == fpp || !fpp.allowOperateApproval(), "无权限编辑操作审批流程");
+        }
+    }
+
+    protected FlwProcessPermission getFlwProcessPermissionByProcessId(Long processId) {
+        UserSession userSession = UserSession.getLoginInfo();
+        return flwProcessPermissionService.getByUserIdAndProcessId(userSession.getId(), processId);
+    }
+
+    @Override
+    public boolean updateSortById(Long id, Integer sort) {
+        // 检查流程定义操作权限
+        this.checkOperateApproval(id);
+        // 更新流程定义排序
+        FlwProcess flwProcess = new FlwProcess();
+        flwProcess.setId(id);
+        flwProcess.setSort(sort);
+        return super.updateById(flwProcess);
+    }
+
+    @Override
+    public boolean updateSateById(Long id, Integer state) {
+        // 检查流程定义操作权限
+        this.checkOperateApproval(id);
+        // 更新流程定义排序
+        FlwProcess flwProcess = new FlwProcess();
+        flwProcess.setId(id);
+        flwProcess.setProcessState(Objects.equals(1, state) ? 1 : 0);
+        return super.updateById(flwProcess);
+    }
+
+    @Override
+    public boolean cloneById(Long id) {
+        FlwProcessDTO dto = this.getDtoById(id);
+        dto.setProcessId(null);
+        return null != this.saveDto(dto);
     }
 }

+ 9 - 0
src/main/resources/mapper/FlowlongMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.aizuda.boot.modules.flw.mapper.FlowlongMapper">
+
+    <select id="selectFlwProcessList" resultType="com.aizuda.boot.modules.flw.entity.vo.FlwProcessVO">
+        SELECT t2.category_id,t2.process_id,t1.process_name,t1.display_name,t1.process_icon,t1.process_version,t1.use_scope,t1.process_state
+             ,t1.sort AS process_sort FROM flw_process t1 JOIN  flw_process_configure t2 ON t1.id=t2.process_id
+    </select>
+</mapper>