Commit 55a6ec78e4298a4039554183cd1888f3f5715e0e

Authored by YunaiV
1 parent 1031b78f

实现我的流程的后端 API 接口

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http
1   -### 请求 /login 接口 => 成功
  1 +### 请求 /bpm/process-instance/create 接口 => 成功
2 2 POST {{baseUrl}}/bpm/process-instance/create
3 3 Content-Type: application/json
4 4 tenant-id: 1
... ... @@ -11,3 +11,8 @@ Authorization: Bearer {{token}}
11 11 "b": "2"
12 12 }
13 13 }
  14 +
  15 +### 请求 /bpm/process-instance/my-page 接口 => 成功
  16 +GET {{baseUrl}}/bpm/process-instance/my-page
  17 +tenant-id: 1
  18 +Authorization: Bearer {{token}}
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.controller.task;
2 2  
3 3 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO;
  4 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO;
  5 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO;
4 6 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService;
5 7 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  8 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 9 import io.swagger.annotations.Api;
7 10 import io.swagger.annotations.ApiOperation;
8 11 import org.springframework.validation.annotation.Validated;
9   -import org.springframework.web.bind.annotation.PostMapping;
10   -import org.springframework.web.bind.annotation.RequestBody;
11   -import org.springframework.web.bind.annotation.RequestMapping;
12   -import org.springframework.web.bind.annotation.RestController;
  12 +import org.springframework.web.bind.annotation.*;
13 13  
14 14 import javax.annotation.Resource;
15 15 import javax.validation.Valid;
... ... @@ -26,11 +26,19 @@ public class BpmProcessInstanceController {
26 26 @Resource
27 27 private BpmProcessInstanceService processInstanceService;
28 28  
  29 + // TODO 芋艿:权限
  30 +
29 31 @PostMapping("/create")
30 32 @ApiOperation("新建流程实例")
31 33 public CommonResult<String> createProcessInstance(@Valid @RequestBody BpmProcessInstanceCreateReqVO createReqVO) {
32 34 return success(processInstanceService.createProcessInstance(getLoginUserId(), createReqVO));
33   -// processInstanceService.getMyProcessInstancePage(getLoginUserId());
  35 + }
  36 +
  37 + @GetMapping("/my-page")
  38 + @ApiOperation(value = "获得我的实例分页列表", notes = "在【我的流程】菜单中,进行调用")
  39 + public CommonResult<PageResult<BpmProcessInstancePageItemRespVO>> getMyProcessInstancePage(
  40 + @Valid BpmProcessInstanceMyPageReqVO pageReqVO) {
  41 + return success(processInstanceService.getMyProcessInstancePage(getLoginUserId(), pageReqVO));
34 42 }
35 43  
36 44 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java
... ... @@ -9,8 +9,6 @@ import java.util.Map;
9 9  
10 10 @ApiModel("流程实例的创建 Request VO")
11 11 @Data
12   -//@EqualsAndHashCode(callSuper = true)
13   -//@ToString(callSuper = true)
14 12 public class BpmProcessInstanceCreateReqVO {
15 13  
16 14 @ApiModelProperty(value = "流程定义的编号", required = true, example = "1024")
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.annotations.ApiModel;
  5 +import io.swagger.annotations.ApiModelProperty;
  6 +import lombok.Data;
  7 +import lombok.EqualsAndHashCode;
  8 +import lombok.ToString;
  9 +import org.springframework.format.annotation.DateTimeFormat;
4 10  
  11 +import java.util.Date;
  12 +
  13 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  14 +
  15 +@ApiModel("流程实例的分页 Item Response VO")
  16 +@Data
  17 +@EqualsAndHashCode(callSuper = true)
  18 +@ToString(callSuper = true)
5 19 public class BpmProcessInstanceMyPageReqVO extends PageParam {
  20 +
  21 + @ApiModelProperty(value = "流程名称", example = "芋道")
  22 + private String name;
  23 +
  24 + @ApiModelProperty(value = "流程定义的编号", example = "2048")
  25 + private String processDefinitionId;
  26 +
  27 + @ApiModelProperty(value = "流程实例的状态", notes = "参见 bpm_process_instance_status", example = "1")
  28 + private Integer status;
  29 +
  30 + @ApiModelProperty(value = "流程实例的结果", notes = "参见 bpm_process_instance_result", example = "2")
  31 + private Integer result;
  32 +
  33 + @ApiModelProperty(value = "开始的创建时间")
  34 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  35 + private Date beginCreateTime;
  36 +
  37 + @ApiModelProperty(value = "结束的创建时间")
  38 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  39 + private Date endCreateTime;
  40 +
6 41 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +
  7 +import java.util.Date;
  8 +
  9 +@ApiModel("流程实例的分页 Item Response VO")
  10 +@Data
  11 +public class BpmProcessInstancePageItemRespVO {
  12 +
  13 + @ApiModelProperty(value = "流程实例的编号", required = true, example = "1024")
  14 + private String id;
  15 +
  16 + @ApiModelProperty(value = "流程名称", required = true, example = "芋道")
  17 + private String name;
  18 +
  19 + @ApiModelProperty(value = "流程定义的编号", required = true, example = "2048")
  20 + private String processDefinitionId;
  21 +
  22 + @ApiModelProperty(value = "流程分类", required = true, notes = "参见 bpm_model_category 数据字典", example = "1")
  23 + private String category;
  24 +
  25 + @ApiModelProperty(value = "流程实例的状态", required = true, notes = "参见 bpm_process_instance_status", example = "1")
  26 + private Integer status;
  27 +
  28 + @ApiModelProperty(value = "流程实例的结果", required = true, notes = "参见 bpm_process_instance_result", example = "2")
  29 + private Integer result;
  30 +
  31 + @ApiModelProperty(value = "创建时间", required = true)
  32 + private Date createTime;
  33 +
  34 + // TODO 芋艿:tasks
  35 +
  36 +}
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.convert.task;
2 2  
  3 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO;
3 4 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import org.activiti.engine.repository.ProcessDefinition;
4 7 import org.activiti.engine.runtime.ProcessInstance;
5 8 import org.mapstruct.Mapper;
6 9 import org.mapstruct.Mapping;
7 10 import org.mapstruct.Mappings;
8 11 import org.mapstruct.factory.Mappers;
9 12  
  13 +import java.util.List;
  14 +
10 15 /**
11 16 * 流程实例 Convert
12 17 *
... ... @@ -18,10 +23,20 @@ public interface BpmProcessInstanceConvert {
18 23 BpmProcessInstanceConvert INSTANCE = Mappers.getMapper(BpmProcessInstanceConvert.class);
19 24  
20 25 @Mappings({
21   - @Mapping(source = "startUserId", target = "userId"),
22   - @Mapping(source = "id", target = "processInstanceId"),
23   - @Mapping(source = "startTime", target = "createTime")
  26 + @Mapping(source = "instance.startUserId", target = "userId"),
  27 + @Mapping(source = "instance.id", target = "processInstanceId"),
  28 + @Mapping(source = "instance.startTime", target = "createTime"),
  29 + @Mapping(source = "definition.id", target = "processDefinitionId"),
  30 + @Mapping(source = "definition.name", target = "name"),
  31 + @Mapping(source = "definition.category", target = "category")
24 32 })
25   - BpmProcessInstanceExtDO convert(ProcessInstance bean);
  33 + BpmProcessInstanceExtDO convert(ProcessInstance instance, ProcessDefinition definition);
  34 +
  35 + PageResult<BpmProcessInstancePageItemRespVO> convertPage(PageResult<BpmProcessInstanceExtDO> page);
  36 +
  37 + List<BpmProcessInstancePageItemRespVO> convertList(List<BpmProcessInstanceExtDO> list);
  38 +
  39 + @Mapping(source = "processInstanceId", target = "id")
  40 + BpmProcessInstancePageItemRespVO convert(BpmProcessInstanceExtDO bean);
26 41  
27 42 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java
... ... @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
6 6 import com.baomidou.mybatisplus.annotation.TableName;
7 7 import lombok.*;
8 8 import org.activiti.engine.history.HistoricProcessInstance;
  9 +import org.activiti.engine.repository.ProcessDefinition;
9 10 import org.activiti.engine.runtime.ProcessInstance;
10 11  
11 12 /**
... ... @@ -18,9 +19,9 @@ import org.activiti.engine.runtime.ProcessInstance;
18 19 @Data
19 20 @EqualsAndHashCode(callSuper = true)
20 21 @ToString(callSuper = true)
21   -@Builder
22   -@NoArgsConstructor
23   -@AllArgsConstructor
  22 +//@Builder
  23 +//@NoArgsConstructor
  24 +//@AllArgsConstructor
24 25 public class BpmProcessInstanceExtDO extends BaseDO {
25 26  
26 27 /**
... ... @@ -42,13 +43,26 @@ public class BpmProcessInstanceExtDO extends BaseDO {
42 43 */
43 44 private String processInstanceId;
44 45 /**
  46 + * 流程定义的编号
  47 + *
  48 + * 关联 {@link ProcessDefinition#getId()}
  49 + */
  50 + private String processDefinitionId;
  51 + /**
  52 + * 流程分类
  53 + *
  54 + * 冗余 {@link ProcessDefinition#getCategory()}
  55 + * 数据字典 bpm_model_category
  56 + */
  57 + private String category;
  58 + /**
45 59 * 流程实例的状态
46 60 *
47 61 * 枚举 {@link BpmProcessInstanceStatusEnum}
48 62 */
49 63 private Integer status;
50 64 /**
51   - * 结果
  65 + * 流程实例的结果
52 66 *
53 67 * 枚举 {@link BpmProcessInstanceResultEnum}
54 68 */
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task;
2 2  
  3 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO;
3 4 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
4   -import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  7 +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
5 8 import org.apache.ibatis.annotations.Mapper;
6 9  
7 10 @Mapper
8   -public interface BpmProcessInstanceExtMapper extends BaseMapper<BpmProcessInstanceExtDO> {
  11 +public interface BpmProcessInstanceExtMapper extends BaseMapperX<BpmProcessInstanceExtDO> {
  12 +
  13 + default PageResult<BpmProcessInstanceExtDO> selectPage(Long userId, BpmProcessInstanceMyPageReqVO reqVO) {
  14 + return selectPage(reqVO, new QueryWrapperX<BpmProcessInstanceExtDO>()
  15 + .eqIfPresent("user_id", userId)
  16 + .likeIfPresent("name", reqVO.getName())
  17 + .eqIfPresent("process_definition_id", reqVO.getProcessDefinitionId())
  18 + .eqIfPresent("status", reqVO.getStatus())
  19 + .eqIfPresent("result", reqVO.getResult())
  20 + .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
  21 + .orderByDesc("id"));
  22 + }
  23 +
9 24 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.service.task;
2 2  
3 3 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO;
4   -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener.BpmProcessInstanceEventListener;
  4 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO;
  5 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 7  
6 8 import javax.validation.Valid;
7 9  
... ... @@ -21,6 +23,14 @@ public interface BpmProcessInstanceService {
21 23 */
22 24 String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqVO createReqVO);
23 25  
24   - void getMyProcessInstancePage(Long userId);
  26 + /**
  27 + * 获得流程实例的分页
  28 + *
  29 + * @param userId 用户编号
  30 + * @param pageReqVO 分页请求
  31 + * @return 流程实例的分页
  32 + */
  33 + PageResult<BpmProcessInstancePageItemRespVO> getMyProcessInstancePage(Long userId,
  34 + @Valid BpmProcessInstanceMyPageReqVO pageReqVO);
25 35  
26 36 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl;
2 2  
  3 +import cn.hutool.core.collection.CollUtil;
3 4 import cn.hutool.core.lang.Assert;
4 5 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO;
  6 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO;
  7 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO;
5 8 import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert;
6 9 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
7 10 import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanceExtMapper;
... ... @@ -11,6 +14,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDef
11 14 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService;
12 15 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
13 16 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  17 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
14 18 import lombok.extern.slf4j.Slf4j;
15 19 import org.activiti.engine.HistoryService;
16 20 import org.activiti.engine.RuntimeService;
... ... @@ -81,7 +85,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
81 85 // 设置流程名字
82 86 runtimeService.setProcessInstanceName(instance.getId(), definition.getName());
83 87 // 记录流程实例的拓展表
84   - createProcessInstanceExt(instance, definition.getName());
  88 + createProcessInstanceExt(instance, definition);
85 89  
86 90 // 添加初始的评论 TODO 芋艿:在思考下
87 91 Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).singleResult();
... ... @@ -101,22 +105,34 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
101 105 /**
102 106 * 创建流程实例的拓展
103 107 *
  108 + * @param definition 流程定义
104 109 * @param instance 流程实例
105   - * @param name 实例名。此时,instance 的 name 为空,所以需要传递该参数
106 110 */
107   - private void createProcessInstanceExt(ProcessInstance instance, String name) {
108   - BpmProcessInstanceExtDO instanceExt = BpmProcessInstanceConvert.INSTANCE.convert(instance);
109   - instanceExt.setName(name);
  111 + private void createProcessInstanceExt(ProcessInstance instance, ProcessDefinition definition) {
  112 + BpmProcessInstanceExtDO instanceExt = BpmProcessInstanceConvert.INSTANCE.convert(instance, definition);
110 113 instanceExt.setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus());
111 114 instanceExt.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
112 115 processInstanceExtMapper.insert(instanceExt);
113 116 }
114 117  
  118 + @Override
  119 + public PageResult<BpmProcessInstancePageItemRespVO> getMyProcessInstancePage(Long userId,
  120 + BpmProcessInstanceMyPageReqVO pageReqVO) {
  121 + // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页
  122 + PageResult<BpmProcessInstanceExtDO> pageResult = processInstanceExtMapper.selectPage(userId, pageReqVO);
  123 + if (CollUtil.isEmpty(pageResult.getList())) {
  124 + return new PageResult<>(pageResult.getTotal());
  125 + }
  126 + // TODO 芋艿:tasks
  127 + // 转换返回
  128 + return BpmProcessInstanceConvert.INSTANCE.convertPage(pageResult);
  129 + }
  130 +
115 131 public void getMyProcessInstancePage(Long userId) {
116 132 // id title 所属流程 当前审批环节 状态 结果 创建时间 提交申请时间 【标题、状态】「ActBusiness」
117 133 // id title 流程类别 流程版本 提交时间 流程状态 耗时 当前节点 办理 【标题、提交时间】「HistoricProcessInstanceQuery」
118 134  
119   - // id title 所属流程 流程类别 创建时间 状态 当前审批环节 【标题、状态】
  135 + // id name 所属流程 流程类别 创建时间 状态 当前审批环节 【标题、流程、时间、状态、结果】
120 136  
121 137 runtimeService.createProcessInstanceQuery().list();
122 138 HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery()
... ...