Commit d43006dce877cf6a2e9164ffae2ecea6808f3459
1 parent
e52200a2
增加初步驳回功能
dom4j增加失败
Showing
50 changed files
with
1079 additions
and
169 deletions
sql/ruoyi-vue-pro.sql
| @@ -546,6 +546,7 @@ COMMIT; | @@ -546,6 +546,7 @@ COMMIT; | ||
| 546 | DROP TABLE IF EXISTS `bpm_task_ext`; | 546 | DROP TABLE IF EXISTS `bpm_task_ext`; |
| 547 | CREATE TABLE `bpm_task_ext` ( | 547 | CREATE TABLE `bpm_task_ext` ( |
| 548 | `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', | 548 | `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', |
| 549 | + `task_def_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '流程任务key', | ||
| 549 | `assignee_user_id` bigint DEFAULT NULL COMMENT '任务的审批人', | 550 | `assignee_user_id` bigint DEFAULT NULL COMMENT '任务的审批人', |
| 550 | `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '任务的名字', | 551 | `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '任务的名字', |
| 551 | `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务的编号', | 552 | `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务的编号', |
yudao-dependencies/pom.xml
| @@ -65,6 +65,7 @@ | @@ -65,6 +65,7 @@ | ||
| 65 | <tencentcloud-sdk-java.version>3.1.471</tencentcloud-sdk-java.version> | 65 | <tencentcloud-sdk-java.version>3.1.471</tencentcloud-sdk-java.version> |
| 66 | <yunpian-java-sdk.version>1.2.7</yunpian-java-sdk.version> | 66 | <yunpian-java-sdk.version>1.2.7</yunpian-java-sdk.version> |
| 67 | <justauth.version>1.4.0</justauth.version> | 67 | <justauth.version>1.4.0</justauth.version> |
| 68 | + <dom4j.version>2.1.3</dom4j.version> | ||
| 68 | </properties> | 69 | </properties> |
| 69 | 70 | ||
| 70 | <dependencyManagement> | 71 | <dependencyManagement> |
| @@ -578,7 +579,13 @@ | @@ -578,7 +579,13 @@ | ||
| 578 | <artifactId>justauth-spring-boot-starter</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) --> | 579 | <artifactId>justauth-spring-boot-starter</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) --> |
| 579 | <version>${justauth.version}</version> | 580 | <version>${justauth.version}</version> |
| 580 | </dependency> | 581 | </dependency> |
| 581 | - | 582 | + <!-- https://mvnrepository.com/artifact/org.dom4j/dom4j --> |
| 583 | + <!-- XML读写框架 --> | ||
| 584 | + <dependency> | ||
| 585 | + <groupId>org.dom4j</groupId> | ||
| 586 | + <artifactId>dom4j</artifactId> | ||
| 587 | + <version>${dom4j.version}</version> | ||
| 588 | + </dependency> | ||
| 582 | </dependencies> | 589 | </dependencies> |
| 583 | </dependencyManagement> | 590 | </dependencyManagement> |
| 584 | 591 |
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/swagger/config/YudaoSwaggerAutoConfiguration.java
| @@ -58,7 +58,8 @@ public class YudaoSwaggerAutoConfiguration { | @@ -58,7 +58,8 @@ public class YudaoSwaggerAutoConfiguration { | ||
| 58 | .build() | 58 | .build() |
| 59 | .securitySchemes(securitySchemes()) | 59 | .securitySchemes(securitySchemes()) |
| 60 | .globalRequestParameters(globalRequestParameters()) | 60 | .globalRequestParameters(globalRequestParameters()) |
| 61 | - .securityContexts(securityContexts()); | 61 | + .securityContexts(securityContexts()) |
| 62 | + .host("http://localhost:48080"); | ||
| 62 | } | 63 | } |
| 63 | 64 | ||
| 64 | // ========== apiInfo ========== | 65 | // ========== apiInfo ========== |
yudao-module-bpm/yudao-module-bpm-biz/pom.xml
| @@ -10,6 +10,10 @@ | @@ -10,6 +10,10 @@ | ||
| 10 | <modelVersion>4.0.0</modelVersion> | 10 | <modelVersion>4.0.0</modelVersion> |
| 11 | <artifactId>yudao-module-bpm-biz</artifactId> | 11 | <artifactId>yudao-module-bpm-biz</artifactId> |
| 12 | 12 | ||
| 13 | + <properties> | ||
| 14 | + <dom4j.version>2.1.3</dom4j.version> | ||
| 15 | + </properties> | ||
| 16 | + | ||
| 13 | <name>${project.artifactId}</name> | 17 | <name>${project.artifactId}</name> |
| 14 | <description> | 18 | <description> |
| 15 | bpm-base 模块,实现公用的工作流的逻辑,提供给 bpm-activiti 和 bpm-flowable 复用 | 19 | bpm-base 模块,实现公用的工作流的逻辑,提供给 bpm-activiti 和 bpm-flowable 复用 |
| @@ -36,6 +40,10 @@ | @@ -36,6 +40,10 @@ | ||
| 36 | <groupId>cn.iocoder.boot</groupId> | 40 | <groupId>cn.iocoder.boot</groupId> |
| 37 | <artifactId>yudao-spring-boot-starter-biz-data-permission</artifactId> | 41 | <artifactId>yudao-spring-boot-starter-biz-data-permission</artifactId> |
| 38 | </dependency> | 42 | </dependency> |
| 43 | + <dependency> | ||
| 44 | + <groupId>cn.iocoder.boot</groupId> | ||
| 45 | + <artifactId>yudao-spring-boot-starter-biz-tenant</artifactId> | ||
| 46 | + </dependency> | ||
| 39 | 47 | ||
| 40 | <!-- Web 相关 --> | 48 | <!-- Web 相关 --> |
| 41 | <dependency> | 49 | <dependency> |
| @@ -77,5 +85,11 @@ | @@ -77,5 +85,11 @@ | ||
| 77 | <version>1.4.196</version> | 85 | <version>1.4.196</version> |
| 78 | <scope>test</scope> | 86 | <scope>test</scope> |
| 79 | </dependency> | 87 | </dependency> |
| 88 | + <!-- https://mvnrepository.com/artifact/org.dom4j/dom4j --> | ||
| 89 | + <!-- XML读写框架 --> | ||
| 90 | + <dependency> | ||
| 91 | + <groupId>org.dom4j</groupId> | ||
| 92 | + <artifactId>dom4j</artifactId> | ||
| 93 | + </dependency> | ||
| 80 | </dependencies> | 94 | </dependencies> |
| 81 | </project> | 95 | </project> |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java
| @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; | @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; | ||
| 7 | import io.swagger.annotations.Api; | 7 | import io.swagger.annotations.Api; |
| 8 | import io.swagger.annotations.ApiImplicitParam; | 8 | import io.swagger.annotations.ApiImplicitParam; |
| 9 | import io.swagger.annotations.ApiOperation; | 9 | import io.swagger.annotations.ApiOperation; |
| 10 | +import org.apache.ibatis.annotations.Param; | ||
| 10 | import org.flowable.bpmn.model.BpmnModel; | 11 | import org.flowable.bpmn.model.BpmnModel; |
| 11 | import org.flowable.engine.TaskService; | 12 | import org.flowable.engine.TaskService; |
| 12 | import org.springframework.security.access.prepost.PreAuthorize; | 13 | import org.springframework.security.access.prepost.PreAuthorize; |
| @@ -17,6 +18,7 @@ import javax.annotation.Resource; | @@ -17,6 +18,7 @@ import javax.annotation.Resource; | ||
| 17 | import javax.validation.Valid; | 18 | import javax.validation.Valid; |
| 18 | 19 | ||
| 19 | import java.util.List; | 20 | import java.util.List; |
| 21 | +import java.util.Objects; | ||
| 20 | 22 | ||
| 21 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 23 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 22 | import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; | 24 | import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; |
| @@ -49,10 +51,17 @@ public class BpmTaskController { | @@ -49,10 +51,17 @@ public class BpmTaskController { | ||
| 49 | @ApiImplicitParam(name = "processInstanceId", value = "流程实例的编号", required = true, dataTypeClass = String.class) | 51 | @ApiImplicitParam(name = "processInstanceId", value = "流程实例的编号", required = true, dataTypeClass = String.class) |
| 50 | @PreAuthorize("@ss.hasPermission('bpm:task:query')") | 52 | @PreAuthorize("@ss.hasPermission('bpm:task:query')") |
| 51 | public CommonResult<List<BpmTaskRespVO>> getTaskListByProcessInstanceId( | 53 | public CommonResult<List<BpmTaskRespVO>> getTaskListByProcessInstanceId( |
| 52 | - @RequestParam("processInstanceId") String processInstanceId) { | 54 | + @RequestParam("processInstanceId") String processInstanceId) { |
| 53 | return success(taskService.getTaskListByProcessInstanceId(processInstanceId)); | 55 | return success(taskService.getTaskListByProcessInstanceId(processInstanceId)); |
| 54 | } | 56 | } |
| 55 | 57 | ||
| 58 | + @GetMapping("/get") | ||
| 59 | + @ApiOperation(value = "获取审批单详情", notes = "包括完成的、未完成的") | ||
| 60 | + @ApiImplicitParam(name = "taskId", value = "任务Id", required = true, dataTypeClass = String.class) | ||
| 61 | + public CommonResult<Object> getTask(@Param("taskId") String processInstanceId) { | ||
| 62 | + return success(taskService.getTaskInfo(processInstanceId)); | ||
| 63 | + } | ||
| 64 | + | ||
| 56 | @PutMapping("/approve") | 65 | @PutMapping("/approve") |
| 57 | @ApiOperation("通过任务") | 66 | @ApiOperation("通过任务") |
| 58 | @PreAuthorize("@ss.hasPermission('bpm:task:update')") | 67 | @PreAuthorize("@ss.hasPermission('bpm:task:update')") |
| @@ -76,13 +85,14 @@ public class BpmTaskController { | @@ -76,13 +85,14 @@ public class BpmTaskController { | ||
| 76 | taskService.updateTaskAssignee(getLoginUserId(), reqVO); | 85 | taskService.updateTaskAssignee(getLoginUserId(), reqVO); |
| 77 | return success(true); | 86 | return success(true); |
| 78 | } | 87 | } |
| 88 | + | ||
| 79 | @PutMapping("/back") | 89 | @PutMapping("/back") |
| 80 | @ApiOperation(value = "回退") | 90 | @ApiOperation(value = "回退") |
| 81 | -// @PreAuthorize("@ss.hasPermission('bpm:task:back')") | ||
| 82 | - public CommonResult<Boolean> backTask(@Valid @RequestBody BpmTaskUpdateAssigneeReqVO reqVO) { | 91 | + // @PreAuthorize("@ss.hasPermission('bpm:task:back')") |
| 92 | + public CommonResult<Boolean> backTask(@Valid @RequestBody BpmTaskBackReqVO reqVO) { | ||
| 83 | //先硬编码到 回退到第一个审批节点 | 93 | //先硬编码到 回退到第一个审批节点 |
| 84 | - String destinationTaskDefKey = "task01"; | ||
| 85 | - taskService.backTask(reqVO.getId(),destinationTaskDefKey); | ||
| 86 | - return success(true); | 94 | + // String destinationTaskDefKey = "task01"; |
| 95 | + return taskService.backTask(reqVO); | ||
| 96 | + | ||
| 87 | } | 97 | } |
| 88 | } | 98 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskBackReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModelProperty; | ||
| 4 | +import lombok.AllArgsConstructor; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.NoArgsConstructor; | ||
| 7 | + | ||
| 8 | +import javax.validation.constraints.NotEmpty; | ||
| 9 | +import javax.validation.constraints.NotNull; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * @author kemengkai | ||
| 13 | + * @create 2022-05-07 08:05 | ||
| 14 | + */ | ||
| 15 | +@Data | ||
| 16 | +@AllArgsConstructor | ||
| 17 | +@NoArgsConstructor | ||
| 18 | +public class BpmTaskBackReqVO { | ||
| 19 | + | ||
| 20 | + @ApiModelProperty(value = "用户id", required = true, example = "1") | ||
| 21 | + @NotEmpty(message = "用户id不能为空") | ||
| 22 | + private String userId; | ||
| 23 | + | ||
| 24 | + @ApiModelProperty(value = "流程编号id", required = true, example = "730da750-cc4f-11ec-b58e-1e429355e4a0") | ||
| 25 | + @NotEmpty(message = "流程编号id不能为空") | ||
| 26 | + private String procInstId; | ||
| 27 | + | ||
| 28 | + @ApiModelProperty(value = "当前任务id", required = true, example = "730da750-cc4f-11ec-b58e-1e429355e4a0") | ||
| 29 | + @NotEmpty(message = "当前任务id不能为空") | ||
| 30 | + private String taskId; | ||
| 31 | + | ||
| 32 | + @ApiModelProperty(value = "当前流程任务id", required = true, example = "Activity_1jlembv") | ||
| 33 | + @NotNull(message = "当前流程任务id不能为空") | ||
| 34 | + private String oldTaskDefKey; | ||
| 35 | + | ||
| 36 | + @ApiModelProperty(value = "准备回退的流程任务id", required = true, example = "task01") | ||
| 37 | + @NotNull(message = "准备回退流程任务id不能为空") | ||
| 38 | + private String newTaskDefKey; | ||
| 39 | + | ||
| 40 | + @ApiModelProperty(value = "审批结果", required = true, example = "任务驳回") | ||
| 41 | + @NotNull(message = "审批结果") | ||
| 42 | + private String comment; | ||
| 43 | +} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmActivityConvert.java
| 1 | package cn.iocoder.yudao.module.bpm.convert.task; | 1 | package cn.iocoder.yudao.module.bpm.convert.task; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; | 3 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; |
| 4 | +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmActivityDO; | ||
| 4 | import org.flowable.engine.history.HistoricActivityInstance; | 5 | import org.flowable.engine.history.HistoricActivityInstance; |
| 5 | import org.mapstruct.Mapper; | 6 | import org.mapstruct.Mapper; |
| 6 | import org.mapstruct.Mapping; | 7 | import org.mapstruct.Mapping; |
| @@ -19,11 +20,11 @@ public interface BpmActivityConvert { | @@ -19,11 +20,11 @@ public interface BpmActivityConvert { | ||
| 19 | 20 | ||
| 20 | BpmActivityConvert INSTANCE = Mappers.getMapper(BpmActivityConvert.class); | 21 | BpmActivityConvert INSTANCE = Mappers.getMapper(BpmActivityConvert.class); |
| 21 | 22 | ||
| 22 | - List<BpmActivityRespVO> convertList(List<HistoricActivityInstance> list); | 23 | + List<BpmActivityRespVO> convertList(List<BpmActivityDO> list); |
| 23 | 24 | ||
| 24 | @Mappings({ | 25 | @Mappings({ |
| 25 | @Mapping(source = "activityId", target = "key"), | 26 | @Mapping(source = "activityId", target = "key"), |
| 26 | @Mapping(source = "activityType", target = "type") | 27 | @Mapping(source = "activityType", target = "type") |
| 27 | }) | 28 | }) |
| 28 | - BpmActivityRespVO convert(HistoricActivityInstance bean); | 29 | + BpmActivityRespVO convert(BpmActivityDO bean); |
| 29 | } | 30 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java
| 1 | package cn.iocoder.yudao.module.bpm.convert.task; | 1 | package cn.iocoder.yudao.module.bpm.convert.task; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.util.BooleanUtil; | ||
| 3 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 4 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 4 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | 5 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 5 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskDonePageItemRespVO; | 6 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskDonePageItemRespVO; |
| 6 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; | 7 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; |
| 7 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskTodoPageItemRespVO; | 8 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskTodoPageItemRespVO; |
| 8 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; | 9 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; |
| 10 | +import cn.iocoder.yudao.module.bpm.domain.enums.task.BpmProcessInstanceResultEnum; | ||
| 9 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; | 11 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; |
| 10 | import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; | 12 | import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; |
| 11 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | 13 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| @@ -17,9 +19,10 @@ import org.flowable.task.api.Task; | @@ -17,9 +19,10 @@ import org.flowable.task.api.Task; | ||
| 17 | import org.flowable.task.api.history.HistoricTaskInstance; | 19 | import org.flowable.task.api.history.HistoricTaskInstance; |
| 18 | import org.mapstruct.*; | 20 | import org.mapstruct.*; |
| 19 | import org.mapstruct.factory.Mappers; | 21 | import org.mapstruct.factory.Mappers; |
| 22 | +import org.springframework.beans.BeanUtils; | ||
| 20 | 23 | ||
| 21 | -import java.util.List; | ||
| 22 | -import java.util.Map; | 24 | +import java.util.*; |
| 25 | +import java.util.stream.Collectors; | ||
| 23 | 26 | ||
| 24 | /** | 27 | /** |
| 25 | * Bpm 任务 Convert | 28 | * Bpm 任务 Convert |
| @@ -31,8 +34,37 @@ public interface BpmTaskConvert { | @@ -31,8 +34,37 @@ public interface BpmTaskConvert { | ||
| 31 | 34 | ||
| 32 | BpmTaskConvert INSTANCE = Mappers.getMapper(BpmTaskConvert.class); | 35 | BpmTaskConvert INSTANCE = Mappers.getMapper(BpmTaskConvert.class); |
| 33 | 36 | ||
| 34 | - default List<BpmTaskTodoPageItemRespVO> convertList1(List<Task> tasks, Map<String, ProcessInstance> processInstanceMap, | ||
| 35 | - Map<Long, AdminUserRespDTO> userMap) { | 37 | + /** |
| 38 | + * 复制对象 | ||
| 39 | + * | ||
| 40 | + * @param source 源 要复制的对象 | ||
| 41 | + * @param target 目标 复制到此对象 | ||
| 42 | + * @param <T> | ||
| 43 | + * | ||
| 44 | + * @return | ||
| 45 | + */ | ||
| 46 | + public static <T> T copy(Object source, Class<T> target) { | ||
| 47 | + if (source == null || target == null) { | ||
| 48 | + return null; | ||
| 49 | + } | ||
| 50 | + try { | ||
| 51 | + T newInstance = target.newInstance(); | ||
| 52 | + BeanUtils.copyProperties(source, newInstance); | ||
| 53 | + return newInstance; | ||
| 54 | + } catch (Exception e) { | ||
| 55 | + throw new RuntimeException(e); | ||
| 56 | + } | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + default <T, K> List<K> copyList(List<T> source, Class<K> target) { | ||
| 60 | + if (null == source || source.isEmpty()) { | ||
| 61 | + return Collections.emptyList(); | ||
| 62 | + } | ||
| 63 | + return source.stream().map(e -> copy(e, target)).collect(Collectors.toList()); | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + default List<BpmTaskTodoPageItemRespVO> convertList1(List<Task> tasks, | ||
| 67 | + Map<String, ProcessInstance> processInstanceMap, Map<Long, AdminUserRespDTO> userMap) { | ||
| 36 | return CollectionUtils.convertList(tasks, task -> { | 68 | return CollectionUtils.convertList(tasks, task -> { |
| 37 | BpmTaskTodoPageItemRespVO respVO = convert1(task); | 69 | BpmTaskTodoPageItemRespVO respVO = convert1(task); |
| 38 | ProcessInstance processInstance = processInstanceMap.get(task.getProcessInstanceId()); | 70 | ProcessInstance processInstance = processInstanceMap.get(task.getProcessInstanceId()); |
| @@ -49,13 +81,12 @@ public interface BpmTaskConvert { | @@ -49,13 +81,12 @@ public interface BpmTaskConvert { | ||
| 49 | 81 | ||
| 50 | @Named("convertSuspendedToSuspensionState") | 82 | @Named("convertSuspendedToSuspensionState") |
| 51 | default Integer convertSuspendedToSuspensionState(boolean suspended) { | 83 | default Integer convertSuspendedToSuspensionState(boolean suspended) { |
| 52 | - return suspended ? SuspensionState.SUSPENDED.getStateCode() : | ||
| 53 | - SuspensionState.ACTIVE.getStateCode(); | 84 | + return suspended ? SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode(); |
| 54 | } | 85 | } |
| 55 | 86 | ||
| 56 | - default List<BpmTaskDonePageItemRespVO> convertList2(List<HistoricTaskInstance> tasks, Map<String, BpmTaskExtDO> bpmTaskExtDOMap, | ||
| 57 | - Map<String, HistoricProcessInstance> historicProcessInstanceMap, | ||
| 58 | - Map<Long, AdminUserRespDTO> userMap) { | 87 | + default List<BpmTaskDonePageItemRespVO> convertList2(List<HistoricTaskInstance> tasks, |
| 88 | + Map<String, BpmTaskExtDO> bpmTaskExtDOMap, Map<String, HistoricProcessInstance> historicProcessInstanceMap, | ||
| 89 | + Map<Long, AdminUserRespDTO> userMap) { | ||
| 59 | return CollectionUtils.convertList(tasks, task -> { | 90 | return CollectionUtils.convertList(tasks, task -> { |
| 60 | BpmTaskDonePageItemRespVO respVO = convert2(task); | 91 | BpmTaskDonePageItemRespVO respVO = convert2(task); |
| 61 | BpmTaskExtDO taskExtDO = bpmTaskExtDOMap.get(task.getId()); | 92 | BpmTaskExtDO taskExtDO = bpmTaskExtDOMap.get(task.getId()); |
| @@ -71,18 +102,16 @@ public interface BpmTaskConvert { | @@ -71,18 +102,16 @@ public interface BpmTaskConvert { | ||
| 71 | 102 | ||
| 72 | BpmTaskDonePageItemRespVO convert2(HistoricTaskInstance bean); | 103 | BpmTaskDonePageItemRespVO convert2(HistoricTaskInstance bean); |
| 73 | 104 | ||
| 74 | - @Mappings({ | ||
| 75 | - @Mapping(source = "processInstance.id", target = "id"), | ||
| 76 | - @Mapping(source = "processInstance.name", target = "name"), | ||
| 77 | - @Mapping(source = "processInstance.startUserId", target = "startUserId"), | ||
| 78 | - @Mapping(source = "processInstance.processDefinitionId", target = "processDefinitionId"), | ||
| 79 | - @Mapping(source = "startUser.nickname", target = "startUserNickname") | ||
| 80 | - }) | 105 | + @Mappings({@Mapping(source = "processInstance.id", target = "id"), |
| 106 | + @Mapping(source = "processInstance.name", target = "name"), | ||
| 107 | + @Mapping(source = "processInstance.startUserId", target = "startUserId"), | ||
| 108 | + @Mapping(source = "processInstance.processDefinitionId", target = "processDefinitionId"), | ||
| 109 | + @Mapping(source = "startUser.nickname", target = "startUserNickname")}) | ||
| 81 | BpmTaskTodoPageItemRespVO.ProcessInstance convert(ProcessInstance processInstance, AdminUserRespDTO startUser); | 110 | BpmTaskTodoPageItemRespVO.ProcessInstance convert(ProcessInstance processInstance, AdminUserRespDTO startUser); |
| 82 | 111 | ||
| 83 | - default List<BpmTaskRespVO> convertList3(List<HistoricTaskInstance> tasks, Map<String, BpmTaskExtDO> bpmTaskExtDOMap, | ||
| 84 | - HistoricProcessInstance processInstance, Map<Long, AdminUserRespDTO> userMap, | ||
| 85 | - Map<Long, DeptRespDTO> deptMap) { | 112 | + default List<BpmTaskRespVO> convertList3(List<HistoricTaskInstance> tasks, |
| 113 | + Map<String, BpmTaskExtDO> bpmTaskExtDOMap, HistoricProcessInstance processInstance, | ||
| 114 | + Map<Long, AdminUserRespDTO> userMap, Map<Long, DeptRespDTO> deptMap) { | ||
| 86 | return CollectionUtils.convertList(tasks, task -> { | 115 | return CollectionUtils.convertList(tasks, task -> { |
| 87 | BpmTaskRespVO respVO = convert3(task); | 116 | BpmTaskRespVO respVO = convert3(task); |
| 88 | BpmTaskExtDO taskExtDO = bpmTaskExtDOMap.get(task.getId()); | 117 | BpmTaskExtDO taskExtDO = bpmTaskExtDOMap.get(task.getId()); |
| @@ -111,37 +140,56 @@ public interface BpmTaskConvert { | @@ -111,37 +140,56 @@ public interface BpmTaskConvert { | ||
| 111 | @Mapping(target = "id", ignore = true) | 140 | @Mapping(target = "id", ignore = true) |
| 112 | void copyTo(BpmTaskExtDO from, @MappingTarget BpmTaskDonePageItemRespVO to); | 141 | void copyTo(BpmTaskExtDO from, @MappingTarget BpmTaskDonePageItemRespVO to); |
| 113 | 142 | ||
| 114 | - @Mappings({ | ||
| 115 | - @Mapping(source = "processInstance.id", target = "id"), | ||
| 116 | - @Mapping(source = "processInstance.name", target = "name"), | ||
| 117 | - @Mapping(source = "processInstance.startUserId", target = "startUserId"), | ||
| 118 | - @Mapping(source = "processInstance.processDefinitionId", target = "processDefinitionId"), | ||
| 119 | - @Mapping(source = "startUser.nickname", target = "startUserNickname") | ||
| 120 | - }) | ||
| 121 | - BpmTaskTodoPageItemRespVO.ProcessInstance convert(HistoricProcessInstance processInstance, AdminUserRespDTO startUser); | ||
| 122 | - | ||
| 123 | - default BpmTaskExtDO convert2TaskExt(Task task){ | ||
| 124 | - BpmTaskExtDO taskExtDO = new BpmTaskExtDO() | ||
| 125 | - .setTaskId(task.getId()) | ||
| 126 | - .setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())) | ||
| 127 | - .setName(task.getName()) | ||
| 128 | - .setProcessDefinitionId(task.getProcessDefinitionId()) | ||
| 129 | - .setProcessInstanceId(task.getProcessInstanceId()); | 143 | + @Mappings({@Mapping(source = "processInstance.id", target = "id"), |
| 144 | + @Mapping(source = "processInstance.name", target = "name"), | ||
| 145 | + @Mapping(source = "processInstance.startUserId", target = "startUserId"), | ||
| 146 | + @Mapping(source = "processInstance.processDefinitionId", target = "processDefinitionId"), | ||
| 147 | + @Mapping(source = "startUser.nickname", target = "startUserNickname")}) | ||
| 148 | + BpmTaskTodoPageItemRespVO.ProcessInstance convert(HistoricProcessInstance processInstance, | ||
| 149 | + AdminUserRespDTO startUser); | ||
| 150 | + | ||
| 151 | + default BpmTaskExtDO convert2TaskExt(Task task) { | ||
| 152 | + BpmTaskExtDO taskExtDO = new BpmTaskExtDO().setTaskId(task.getId()).setTaskDefKey(task.getTaskDefinitionKey()) | ||
| 153 | + .setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())).setName(task.getName()) | ||
| 154 | + .setProcessDefinitionId(task.getProcessDefinitionId()).setProcessInstanceId(task.getProcessInstanceId()); | ||
| 130 | taskExtDO.setCreateTime(task.getCreateTime()); | 155 | taskExtDO.setCreateTime(task.getCreateTime()); |
| 131 | return taskExtDO; | 156 | return taskExtDO; |
| 132 | } | 157 | } |
| 133 | 158 | ||
| 134 | - default BpmMessageSendWhenTaskCreatedReqDTO convert(ProcessInstance processInstance, AdminUserRespDTO startUser, Task task) { | 159 | + default BpmMessageSendWhenTaskCreatedReqDTO convert(ProcessInstance processInstance, AdminUserRespDTO startUser, |
| 160 | + Task task) { | ||
| 135 | BpmMessageSendWhenTaskCreatedReqDTO reqDTO = new BpmMessageSendWhenTaskCreatedReqDTO(); | 161 | BpmMessageSendWhenTaskCreatedReqDTO reqDTO = new BpmMessageSendWhenTaskCreatedReqDTO(); |
| 136 | reqDTO.setProcessInstanceId(processInstance.getProcessInstanceId()) | 162 | reqDTO.setProcessInstanceId(processInstance.getProcessInstanceId()) |
| 137 | - .setProcessInstanceName(processInstance.getName()) | ||
| 138 | - .setStartUserId(startUser.getId()) | ||
| 139 | - .setStartUserNickname(startUser.getNickname()) | ||
| 140 | - .setTaskId(task.getId()) | ||
| 141 | - .setTaskName(task.getName()) | ||
| 142 | - .setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())); | 163 | + .setProcessInstanceName(processInstance.getName()).setStartUserId(startUser.getId()) |
| 164 | + .setStartUserNickname(startUser.getNickname()).setTaskId(task.getId()).setTaskName(task.getName()) | ||
| 165 | + .setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())); | ||
| 143 | return reqDTO; | 166 | return reqDTO; |
| 144 | } | 167 | } |
| 145 | -} | ||
| 146 | - | ||
| 147 | 168 | ||
| 169 | + /** | ||
| 170 | + * bpmTaskExtDo 类数据去重 | ||
| 171 | + * | ||
| 172 | + * @param bpmTaskExtDOList bpmTaskExtDo 类列表 | ||
| 173 | + * | ||
| 174 | + * @return 返回新的list | ||
| 175 | + */ | ||
| 176 | + default List<BpmTaskExtDO> distinct(List<BpmTaskExtDO> bpmTaskExtDOList) { | ||
| 177 | + HashMap<String, BpmTaskExtDO> tmpMap = new HashMap<>(50); | ||
| 178 | + List<BpmTaskExtDO> result = new ArrayList<>(); | ||
| 179 | + for (BpmTaskExtDO bpmTaskExtDO : bpmTaskExtDOList) { | ||
| 180 | + boolean containsResult = tmpMap.containsKey(bpmTaskExtDO.getTaskDefKey()); | ||
| 181 | + if (BooleanUtil.isFalse(containsResult)) { | ||
| 182 | + tmpMap.put(bpmTaskExtDO.getTaskDefKey(), bpmTaskExtDO); | ||
| 183 | + } | ||
| 184 | + BpmTaskExtDO tmpBpmTaskExtDO = tmpMap.get(bpmTaskExtDO.getTaskDefKey()); | ||
| 185 | + if (bpmTaskExtDO.getTaskDefKey().equals(tmpBpmTaskExtDO.getTaskDefKey())) { | ||
| 186 | + if (!bpmTaskExtDO.getResult().equals(BpmProcessInstanceResultEnum.PROCESS.getResult())) { | ||
| 187 | + tmpMap.remove(bpmTaskExtDO.getTaskDefKey()); | ||
| 188 | + tmpMap.put(bpmTaskExtDO.getTaskDefKey(), bpmTaskExtDO); | ||
| 189 | + } | ||
| 190 | + } | ||
| 191 | + } | ||
| 192 | + tmpMap.forEach((key, var) -> result.add(var)); | ||
| 193 | + return result; | ||
| 194 | + } | ||
| 195 | +} | ||
| 148 | \ No newline at end of file | 196 | \ No newline at end of file |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java
| 1 | package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; | 1 | package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; | 4 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmModelFormTypeEnum; |
| 5 | import com.baomidou.mybatisplus.annotation.TableField; | 5 | import com.baomidou.mybatisplus.annotation.TableField; |
| 6 | import com.baomidou.mybatisplus.annotation.TableId; | 6 | import com.baomidou.mybatisplus.annotation.TableId; |
| 7 | import com.baomidou.mybatisplus.annotation.TableName; | 7 | import com.baomidou.mybatisplus.annotation.TableName; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java
| @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; | @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; | 4 | import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; |
| 5 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; | ||
| 6 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; | 5 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmTaskAssignRuleTypeEnum; |
| 6 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmTaskRuleScriptEnum; | ||
| 7 | import com.baomidou.mybatisplus.annotation.TableField; | 7 | import com.baomidou.mybatisplus.annotation.TableField; |
| 8 | import com.baomidou.mybatisplus.annotation.TableId; | 8 | import com.baomidou.mybatisplus.annotation.TableId; |
| 9 | import com.baomidou.mybatisplus.annotation.TableName; | 9 | import com.baomidou.mybatisplus.annotation.TableName; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java
| 1 | package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; | 1 | package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; | 3 | +import cn.iocoder.yudao.module.bpm.domain.enums.task.BpmProcessInstanceResultEnum; |
| 4 | import lombok.*; | 4 | import lombok.*; |
| 5 | import java.util.*; | 5 | import java.util.*; |
| 6 | import com.baomidou.mybatisplus.annotation.*; | 6 | import com.baomidou.mybatisplus.annotation.*; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmActivityDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.bpm.dal.dataobject.task; | ||
| 2 | + | ||
| 3 | +import com.fasterxml.jackson.annotation.JsonFormat; | ||
| 4 | +import lombok.*; | ||
| 5 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 6 | + | ||
| 7 | +import java.util.Date; | ||
| 8 | + | ||
| 9 | +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 10 | +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * 任务流程关联表 | ||
| 14 | + * | ||
| 15 | + * @author kemengkai | ||
| 16 | + * @create 2022-05-09 10:33 | ||
| 17 | + */ | ||
| 18 | +@Data | ||
| 19 | +@AllArgsConstructor | ||
| 20 | +@NoArgsConstructor | ||
| 21 | +public class BpmActivityDO { | ||
| 22 | + | ||
| 23 | + /** | ||
| 24 | + * 任务流程关联id | ||
| 25 | + */ | ||
| 26 | + private String id; | ||
| 27 | + | ||
| 28 | + /** | ||
| 29 | + * 审批结果 | ||
| 30 | + */ | ||
| 31 | + private Integer rev; | ||
| 32 | + | ||
| 33 | + /** | ||
| 34 | + * 任务流程部署id | ||
| 35 | + */ | ||
| 36 | + private String procDefId; | ||
| 37 | + | ||
| 38 | + /** | ||
| 39 | + * 任务流程id | ||
| 40 | + */ | ||
| 41 | + private String processInstanceId; | ||
| 42 | + | ||
| 43 | + /** | ||
| 44 | + * 任务执行id | ||
| 45 | + */ | ||
| 46 | + private String executionId; | ||
| 47 | + | ||
| 48 | + /** | ||
| 49 | + * 任务key | ||
| 50 | + */ | ||
| 51 | + private String activityId; | ||
| 52 | + | ||
| 53 | + /** | ||
| 54 | + * 任务id | ||
| 55 | + */ | ||
| 56 | + private String taskId; | ||
| 57 | + | ||
| 58 | + /** | ||
| 59 | + * 调用流程id | ||
| 60 | + */ | ||
| 61 | + private String callProcInstId; | ||
| 62 | + | ||
| 63 | + /** | ||
| 64 | + * 任务名称 | ||
| 65 | + */ | ||
| 66 | + private String activityName; | ||
| 67 | + | ||
| 68 | + /** | ||
| 69 | + * 任务类型 | ||
| 70 | + */ | ||
| 71 | + private String activityType; | ||
| 72 | + | ||
| 73 | + /** | ||
| 74 | + * 任务审批人id | ||
| 75 | + */ | ||
| 76 | + private String assignee; | ||
| 77 | + | ||
| 78 | + /** | ||
| 79 | + * 任务开始时间 | ||
| 80 | + */ | ||
| 81 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 82 | + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT) | ||
| 83 | + private Date startTime; | ||
| 84 | + | ||
| 85 | + /** | ||
| 86 | + * 任务结束时间 | ||
| 87 | + */ | ||
| 88 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 89 | + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT) | ||
| 90 | + private Date endTime; | ||
| 91 | + | ||
| 92 | + private Integer transactionOrder; | ||
| 93 | + | ||
| 94 | + private Long duration; | ||
| 95 | + | ||
| 96 | + /** | ||
| 97 | + * 删除结果 | ||
| 98 | + */ | ||
| 99 | + private String deleteReason; | ||
| 100 | + | ||
| 101 | + /** | ||
| 102 | + * 租户id | ||
| 103 | + */ | ||
| 104 | + private String tenantId; | ||
| 105 | +} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java
| 1 | package cn.iocoder.yudao.module.bpm.dal.dataobject.task; | 1 | package cn.iocoder.yudao.module.bpm.dal.dataobject.task; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; | ||
| 5 | -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; | 4 | +import cn.iocoder.yudao.module.bpm.domain.enums.task.BpmProcessInstanceResultEnum; |
| 5 | +import cn.iocoder.yudao.module.bpm.domain.enums.task.BpmProcessInstanceStatusEnum; | ||
| 6 | import com.baomidou.mybatisplus.annotation.TableField; | 6 | import com.baomidou.mybatisplus.annotation.TableField; |
| 7 | import com.baomidou.mybatisplus.annotation.TableId; | 7 | import com.baomidou.mybatisplus.annotation.TableId; |
| 8 | import com.baomidou.mybatisplus.annotation.TableName; | 8 | import com.baomidou.mybatisplus.annotation.TableName; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmTaskExtDO.java
| 1 | package cn.iocoder.yudao.module.bpm.dal.dataobject.task; | 1 | package cn.iocoder.yudao.module.bpm.dal.dataobject.task; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; | 4 | +import cn.iocoder.yudao.module.bpm.domain.enums.task.BpmProcessInstanceResultEnum; |
| 5 | import com.baomidou.mybatisplus.annotation.TableId; | 5 | import com.baomidou.mybatisplus.annotation.TableId; |
| 6 | import com.baomidou.mybatisplus.annotation.TableName; | 6 | import com.baomidou.mybatisplus.annotation.TableName; |
| 7 | import lombok.Data; | 7 | import lombok.Data; |
| @@ -27,6 +27,11 @@ public class BpmTaskExtDO extends BaseDO { | @@ -27,6 +27,11 @@ public class BpmTaskExtDO extends BaseDO { | ||
| 27 | */ | 27 | */ |
| 28 | @TableId | 28 | @TableId |
| 29 | private Long id; | 29 | private Long id; |
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * 流程任务key | ||
| 33 | + */ | ||
| 34 | + private String taskDefKey; | ||
| 30 | /** | 35 | /** |
| 31 | * 任务的审批人 | 36 | * 任务的审批人 |
| 32 | * | 37 | * |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmActivityMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.bpm.dal.mysql.task; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 4 | +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmActivityDO; | ||
| 5 | +import org.apache.ibatis.annotations.Mapper; | ||
| 6 | +import org.apache.ibatis.annotations.Param; | ||
| 7 | + | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * @author kemengkai | ||
| 12 | + * @create 2022-05-09 09:26 | ||
| 13 | + */ | ||
| 14 | +@Mapper | ||
| 15 | +public interface BpmActivityMapper extends BaseMapperX<BpmActivityDO> { | ||
| 16 | + | ||
| 17 | + /** | ||
| 18 | + * 获取所有历史任务 | ||
| 19 | + * | ||
| 20 | + * @return 返回历史任务 | ||
| 21 | + */ | ||
| 22 | + List<BpmActivityDO> listAll(); | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 获取指定流程的历史任务 | ||
| 26 | + * | ||
| 27 | + * @param procInstId 流程id | ||
| 28 | + * | ||
| 29 | + * @return 返回历史任务 | ||
| 30 | + */ | ||
| 31 | + List<BpmActivityDO> listAllByProcInstIdAndDelete(@Param("procInstId") String procInstId); | ||
| 32 | + | ||
| 33 | + /** | ||
| 34 | + * 逻辑删除hiActInst表任务 | ||
| 35 | + * | ||
| 36 | + * @param taskIdList 任务列表 | ||
| 37 | + * | ||
| 38 | + * @return 返回是否成功 | ||
| 39 | + */ | ||
| 40 | + Boolean delHiActInstByTaskId(@Param("taskIdList") List<String> taskIdList); | ||
| 41 | + | ||
| 42 | + /** | ||
| 43 | + * 逻辑删除hiTaskInst任务 | ||
| 44 | + * | ||
| 45 | + * @param taskIdList 任务列表 | ||
| 46 | + * | ||
| 47 | + * @return 返回是否成功 | ||
| 48 | + */ | ||
| 49 | + Boolean delHiTaskInstByTaskId(@Param("taskIdList") List<String> taskIdList); | ||
| 50 | +} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java
| 1 | package cn.iocoder.yudao.module.bpm.dal.mysql.task; | 1 | package cn.iocoder.yudao.module.bpm.dal.mysql.task; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; | ||
| 3 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; | 4 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 6 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| @@ -20,14 +21,43 @@ public interface BpmTaskExtMapper extends BaseMapperX<BpmTaskExtDO> { | @@ -20,14 +21,43 @@ public interface BpmTaskExtMapper extends BaseMapperX<BpmTaskExtDO> { | ||
| 20 | return selectList(BpmTaskExtDO::getTaskId, taskIds); | 21 | return selectList(BpmTaskExtDO::getTaskId, taskIds); |
| 21 | } | 22 | } |
| 22 | 23 | ||
| 24 | + /** | ||
| 25 | + * 查询任务 | ||
| 26 | + * | ||
| 27 | + * @param procInstId 流程id | ||
| 28 | + * | ||
| 29 | + * @return 返回任务列表 | ||
| 30 | + */ | ||
| 31 | + @TenantIgnore | ||
| 32 | + List<BpmTaskExtDO> listByProcInstId(@Param("procInstId") String procInstId); | ||
| 33 | + | ||
| 23 | default List<BpmTaskExtDO> selectListByProcessInstanceId(String processInstanceId) { | 34 | default List<BpmTaskExtDO> selectListByProcessInstanceId(String processInstanceId) { |
| 24 | return selectList("process_instance_id", processInstanceId); | 35 | return selectList("process_instance_id", processInstanceId); |
| 25 | } | 36 | } |
| 26 | 37 | ||
| 27 | /** | 38 | /** |
| 28 | - * 修改或签任务信息 | 39 | + * 删除非当前相同taskDefKey非进行中的任务 |
| 29 | * | 40 | * |
| 30 | * @param entity 任务信息 | 41 | * @param entity 任务信息 |
| 31 | */ | 42 | */ |
| 32 | - void updateUserOrSignTask(@Param("entity") BpmTaskExtDO entity); | 43 | + void delTaskByProcInstIdAndTaskIdAndTaskDefKey(@Param("entity") BpmTaskExtDO entity); |
| 44 | + | ||
| 45 | + /** | ||
| 46 | + * 任务驳回 | ||
| 47 | + * | ||
| 48 | + * @param taskId 任务列表 | ||
| 49 | + * @param comment 驳回理由 | ||
| 50 | + * | ||
| 51 | + * @return 返回驳回结果,是否成功 | ||
| 52 | + */ | ||
| 53 | + Boolean backByTaskId(@Param("taskId") String taskId, @Param("comment") String comment); | ||
| 54 | + | ||
| 55 | + /** | ||
| 56 | + * 逻辑删除任务 | ||
| 57 | + * | ||
| 58 | + * @param taskIdList 任务id列表 | ||
| 59 | + * | ||
| 60 | + * @return 返回是否成功 | ||
| 61 | + */ | ||
| 62 | + Boolean delByTaskIds(@Param("taskIdList") List<String> taskIdList); | ||
| 33 | } | 63 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmModelFormTypeEnum.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/domain/enums/definition/BpmModelFormTypeEnum.java
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/domain/enums/definition/BpmTaskAssignRuleTypeEnum.java
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmTaskRuleScriptEnum.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/domain/enums/definition/BpmTaskRuleScriptEnum.java
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/enums/message/BpmMessageEnum.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/domain/enums/message/BpmMessageEnum.java
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/domain/enums/task/BpmProcessInstanceDeleteReasonEnum.java
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceResultEnum.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/domain/enums/task/BpmProcessInstanceResultEnum.java
| 1 | -package cn.iocoder.yudao.module.bpm.enums.task; | 1 | +package cn.iocoder.yudao.module.bpm.domain.enums.task; |
| 2 | 2 | ||
| 3 | import lombok.AllArgsConstructor; | 3 | import lombok.AllArgsConstructor; |
| 4 | import lombok.Getter; | 4 | import lombok.Getter; |
| @@ -15,7 +15,8 @@ public enum BpmProcessInstanceResultEnum { | @@ -15,7 +15,8 @@ public enum BpmProcessInstanceResultEnum { | ||
| 15 | PROCESS(1, "处理中"), | 15 | PROCESS(1, "处理中"), |
| 16 | APPROVE(2, "通过"), | 16 | APPROVE(2, "通过"), |
| 17 | REJECT(3, "不通过"), | 17 | REJECT(3, "不通过"), |
| 18 | - CANCEL(4, "已取消"); | 18 | + CANCEL(4, "已取消"), |
| 19 | + BACK(5, "退回/驳回"); | ||
| 19 | 20 | ||
| 20 | /** | 21 | /** |
| 21 | * 结果 | 22 | * 结果 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/domain/enums/task/BpmProcessInstanceStatusEnum.java
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/domain/vo/ApproveProcInstVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.bpm.domain.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModelProperty; | ||
| 4 | +import lombok.AllArgsConstructor; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.NoArgsConstructor; | ||
| 7 | + | ||
| 8 | +import java.time.LocalDate; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 审批流程VO | ||
| 12 | + * | ||
| 13 | + * @author kemengkai | ||
| 14 | + */ | ||
| 15 | +@Data | ||
| 16 | +@AllArgsConstructor | ||
| 17 | +@NoArgsConstructor | ||
| 18 | +public class ApproveProcInstVO { | ||
| 19 | + | ||
| 20 | + @ApiModelProperty("任务id") | ||
| 21 | + private String id; | ||
| 22 | + @ApiModelProperty("任务部署key") | ||
| 23 | + private String taskDefKey; | ||
| 24 | + @ApiModelProperty("任务名称") | ||
| 25 | + private String name; | ||
| 26 | + @ApiModelProperty("审批人登录名") | ||
| 27 | + private String assignee; | ||
| 28 | + @ApiModelProperty("审批人姓名") | ||
| 29 | + private String assigneeName; | ||
| 30 | + @ApiModelProperty("审批回复") | ||
| 31 | + private String taskComment; | ||
| 32 | + @ApiModelProperty("审批完成时间") | ||
| 33 | + private LocalDate endTime; | ||
| 34 | +} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/config/BpmSecurityConfiguration.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.bpm.framework.bpm.config; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer; | ||
| 4 | +import org.springframework.context.annotation.Bean; | ||
| 5 | +import org.springframework.context.annotation.Configuration; | ||
| 6 | +import org.springframework.security.config.annotation.web.builders.HttpSecurity; | ||
| 7 | +import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * @author kemengkai | ||
| 11 | + * @create 2022-05-07 08:15 | ||
| 12 | + */ | ||
| 13 | +@Configuration("bpmSecurityConfiguration") | ||
| 14 | +public class BpmSecurityConfiguration { | ||
| 15 | + | ||
| 16 | + @Bean("bpmAuthorizeRequestsCustomizer") | ||
| 17 | + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { | ||
| 18 | + return new AuthorizeRequestsCustomizer() { | ||
| 19 | + | ||
| 20 | + @Override | ||
| 21 | + public void customize(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry) { | ||
| 22 | + // 任务回退接口 | ||
| 23 | + registry.antMatchers(buildAdminApi("/bpm/task/back")).permitAll(); | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + }; | ||
| 27 | + } | ||
| 28 | +} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceActivityBehavior.java
| @@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollUtil; | @@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollUtil; | ||
| 4 | import cn.hutool.core.util.StrUtil; | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | 5 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 6 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; | 6 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; |
| 7 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; | 7 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmTaskAssignRuleTypeEnum; |
| 8 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTaskAssignScript; | 8 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTaskAssignScript; |
| 9 | import cn.iocoder.yudao.module.bpm.service.definition.BpmTaskAssignRuleService; | 9 | import cn.iocoder.yudao.module.bpm.service.definition.BpmTaskAssignRuleService; |
| 10 | import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; | 10 | import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmUserTaskActivityBehavior.java
| @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||
| 7 | import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; | 7 | import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; |
| 8 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; | 8 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; |
| 9 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; | 9 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; |
| 10 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; | 10 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmTaskAssignRuleTypeEnum; |
| 11 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTaskAssignScript; | 11 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTaskAssignScript; |
| 12 | import cn.iocoder.yudao.module.bpm.service.definition.BpmTaskAssignRuleService; | 12 | import cn.iocoder.yudao.module.bpm.service.definition.BpmTaskAssignRuleService; |
| 13 | import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; | 13 | import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/BpmTaskAssignScript.java
| 1 | package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script; | 1 | package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; | 3 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmTaskRuleScriptEnum; |
| 4 | import org.flowable.task.service.impl.persistence.entity.TaskEntity; | 4 | import org.flowable.task.service.impl.persistence.entity.TaskEntity; |
| 5 | 5 | ||
| 6 | import java.util.Set; | 6 | import java.util.Set; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java
| 1 | package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.impl; | 1 | package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.impl; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; | 3 | import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; |
| 4 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; | 4 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmTaskRuleScriptEnum; |
| 5 | import org.flowable.task.service.impl.persistence.entity.TaskEntity; | 5 | import org.flowable.task.service.impl.persistence.entity.TaskEntity; |
| 6 | import org.springframework.stereotype.Component; | 6 | import org.springframework.stereotype.Component; |
| 7 | 7 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java
| 1 | package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.impl; | 1 | package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.impl; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; | 3 | import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; |
| 4 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; | 4 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmTaskRuleScriptEnum; |
| 5 | import org.flowable.task.service.impl.persistence.entity.TaskEntity; | 5 | import org.flowable.task.service.impl.persistence.entity.TaskEntity; |
| 6 | import org.springframework.stereotype.Component; | 6 | import org.springframework.stereotype.Component; |
| 7 | 7 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskAssignStartUserScript.java
| @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.impl | @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.impl | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.util.collection.SetUtils; | 3 | import cn.iocoder.yudao.framework.common.util.collection.SetUtils; |
| 4 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | 4 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 5 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; | 5 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmTaskRuleScriptEnum; |
| 6 | 6 | ||
| 7 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTaskAssignScript; | 7 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTaskAssignScript; |
| 8 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; | 8 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceImpl.java
| @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.bpm.convert.definition.BpmFormConvert; | @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.bpm.convert.definition.BpmFormConvert; | ||
| 9 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; | 9 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; |
| 10 | import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmFormMapper; | 10 | import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmFormMapper; |
| 11 | import cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants; | 11 | import cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants; |
| 12 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; | 12 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmModelFormTypeEnum; |
| 13 | import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmFormFieldRespDTO; | 13 | import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmFormFieldRespDTO; |
| 14 | import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | 14 | import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; |
| 15 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 15 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java
| @@ -10,7 +10,7 @@ import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; | @@ -10,7 +10,7 @@ import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; | ||
| 10 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*; | 10 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*; |
| 11 | import cn.iocoder.yudao.module.bpm.convert.definition.BpmModelConvert; | 11 | import cn.iocoder.yudao.module.bpm.convert.definition.BpmModelConvert; |
| 12 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; | 12 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; |
| 13 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; | 13 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmModelFormTypeEnum; |
| 14 | import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; | 14 | import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; |
| 15 | import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; | 15 | import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; |
| 16 | import lombok.extern.slf4j.Slf4j; | 16 | import lombok.extern.slf4j.Slf4j; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java
| @@ -13,7 +13,7 @@ import cn.iocoder.yudao.module.bpm.convert.definition.BpmTaskAssignRuleConvert; | @@ -13,7 +13,7 @@ import cn.iocoder.yudao.module.bpm.convert.definition.BpmTaskAssignRuleConvert; | ||
| 13 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; | 13 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; |
| 14 | import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; | 14 | import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; |
| 15 | import cn.iocoder.yudao.module.bpm.enums.DictTypeConstants; | 15 | import cn.iocoder.yudao.module.bpm.enums.DictTypeConstants; |
| 16 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; | 16 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmTaskAssignRuleTypeEnum; |
| 17 | import cn.iocoder.yudao.module.system.api.dept.DeptApi; | 17 | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| 18 | import cn.iocoder.yudao.module.system.api.dept.PostApi; | 18 | import cn.iocoder.yudao.module.system.api.dept.PostApi; |
| 19 | import cn.iocoder.yudao.module.system.api.dict.DictDataApi; | 19 | import cn.iocoder.yudao.module.system.api.dict.DictDataApi; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java
| 1 | package cn.iocoder.yudao.module.bpm.service.definition.dto; | 1 | package cn.iocoder.yudao.module.bpm.service.definition.dto; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; | 3 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmModelFormTypeEnum; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | 5 | ||
| 6 | /** | 6 | /** |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java
| @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.bpm.service.definition.dto; | @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.bpm.service.definition.dto; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.util.StrUtil; | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; | 5 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmModelFormTypeEnum; |
| 6 | import lombok.Data; | 6 | import lombok.Data; |
| 7 | 7 | ||
| 8 | import javax.validation.constraints.AssertTrue; | 8 | import javax.validation.constraints.AssertTrue; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java
| @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.bpm.service.message; | @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.bpm.service.message; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.web.config.WebProperties; | 3 | import cn.iocoder.yudao.framework.web.config.WebProperties; |
| 4 | import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert; | 4 | import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert; |
| 5 | -import cn.iocoder.yudao.module.bpm.enums.message.BpmMessageEnum; | 5 | +import cn.iocoder.yudao.module.bpm.domain.enums.message.BpmMessageEnum; |
| 6 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; | 6 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; |
| 7 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; | 7 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; |
| 8 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; | 8 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveServiceImpl.java
| @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; | @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; | ||
| 9 | import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert; | 9 | import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert; |
| 10 | import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; | 10 | import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; |
| 11 | import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOALeaveMapper; | 11 | import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOALeaveMapper; |
| 12 | -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; | 12 | +import cn.iocoder.yudao.module.bpm.domain.enums.task.BpmProcessInstanceResultEnum; |
| 13 | import org.springframework.stereotype.Service; | 13 | import org.springframework.stereotype.Service; |
| 14 | import org.springframework.transaction.annotation.Transactional; | 14 | import org.springframework.transaction.annotation.Transactional; |
| 15 | import org.springframework.validation.annotation.Validated; | 15 | import org.springframework.validation.annotation.Validated; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmActivityServiceImpl.java
| 1 | package cn.iocoder.yudao.module.bpm.service.task; | 1 | package cn.iocoder.yudao.module.bpm.service.task; |
| 2 | 2 | ||
| 3 | -import cn.hutool.core.io.IoUtil; | ||
| 4 | -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 3 | +import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; |
| 5 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; | 4 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; |
| 6 | import cn.iocoder.yudao.module.bpm.convert.task.BpmActivityConvert; | 5 | import cn.iocoder.yudao.module.bpm.convert.task.BpmActivityConvert; |
| 7 | -import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; | 6 | +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmActivityDO; |
| 7 | +import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmActivityMapper; | ||
| 8 | import lombok.extern.slf4j.Slf4j; | 8 | import lombok.extern.slf4j.Slf4j; |
| 9 | 9 | ||
| 10 | -import org.flowable.bpmn.model.BpmnModel; | ||
| 11 | import org.flowable.engine.HistoryService; | 10 | import org.flowable.engine.HistoryService; |
| 12 | -import org.flowable.engine.history.HistoricActivityInstance; | ||
| 13 | -import org.flowable.engine.history.HistoricProcessInstance; | ||
| 14 | -import org.flowable.image.ProcessDiagramGenerator; | ||
| 15 | import org.springframework.stereotype.Service; | 11 | import org.springframework.stereotype.Service; |
| 16 | import org.springframework.validation.annotation.Validated; | 12 | import org.springframework.validation.annotation.Validated; |
| 17 | 13 | ||
| 18 | import javax.annotation.Resource; | 14 | import javax.annotation.Resource; |
| 19 | -import java.io.InputStream; | ||
| 20 | -import java.util.Collections; | ||
| 21 | import java.util.List; | 15 | import java.util.List; |
| 22 | 16 | ||
| 23 | -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 24 | -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_BPMN_MODEL_NOT_EXISTS; | ||
| 25 | -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS; | ||
| 26 | 17 | ||
| 27 | /** | 18 | /** |
| 28 | * BPM 活动实例 Service 实现类 | 19 | * BPM 活动实例 Service 实现类 |
| @@ -36,14 +27,15 @@ public class BpmActivityServiceImpl implements BpmActivityService { | @@ -36,14 +27,15 @@ public class BpmActivityServiceImpl implements BpmActivityService { | ||
| 36 | 27 | ||
| 37 | @Resource | 28 | @Resource |
| 38 | private HistoryService historyService; | 29 | private HistoryService historyService; |
| 30 | + @Resource | ||
| 31 | + private BpmActivityMapper bpmActivityMapper; | ||
| 39 | 32 | ||
| 40 | @Override | 33 | @Override |
| 41 | - public List<BpmActivityRespVO> getActivityListByProcessInstanceId(String processInstanceId) { | ||
| 42 | - List<HistoricActivityInstance> activityList = historyService.createHistoricActivityInstanceQuery() | ||
| 43 | - .processInstanceId(processInstanceId).list(); | ||
| 44 | - return BpmActivityConvert.INSTANCE.convertList(activityList); | 34 | + @TenantIgnore |
| 35 | + public List<BpmActivityRespVO> getActivityListByProcessInstanceId(String procInstId) { | ||
| 36 | +// List<HistoricActivityInstance> activityList = historyService.createHistoricActivityInstanceQuery() | ||
| 37 | +// .processInstanceId(procInstId).list(); | ||
| 38 | + List<BpmActivityDO> bpmActivityDOList = bpmActivityMapper.listAllByProcInstIdAndDelete(procInstId); | ||
| 39 | + return BpmActivityConvert.INSTANCE.convertList(bpmActivityDOList); | ||
| 45 | } | 40 | } |
| 46 | - | ||
| 47 | - | ||
| 48 | - | ||
| 49 | } | 41 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
| @@ -11,9 +11,9 @@ import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; | @@ -11,9 +11,9 @@ import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; | ||
| 11 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; | 11 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; |
| 12 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; | 12 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; |
| 13 | import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; | 13 | import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; |
| 14 | -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; | ||
| 15 | -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; | ||
| 16 | -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; | 14 | +import cn.iocoder.yudao.module.bpm.domain.enums.task.BpmProcessInstanceDeleteReasonEnum; |
| 15 | +import cn.iocoder.yudao.module.bpm.domain.enums.task.BpmProcessInstanceResultEnum; | ||
| 16 | +import cn.iocoder.yudao.module.bpm.domain.enums.task.BpmProcessInstanceStatusEnum; | ||
| 17 | import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventPublisher; | 17 | import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventPublisher; |
| 18 | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; | 18 | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| 19 | import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; | 19 | import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
| 1 | package cn.iocoder.yudao.module.bpm.service.task; | 1 | package cn.iocoder.yudao.module.bpm.service.task; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 5 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 5 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; | 6 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; |
| 6 | import org.flowable.task.api.Task; | 7 | import org.flowable.task.api.Task; |
| 7 | 8 | ||
| 8 | - | ||
| 9 | import javax.validation.Valid; | 9 | import javax.validation.Valid; |
| 10 | import java.util.List; | 10 | import java.util.List; |
| 11 | import java.util.Map; | 11 | import java.util.Map; |
| @@ -20,16 +20,19 @@ public interface BpmTaskService { | @@ -20,16 +20,19 @@ public interface BpmTaskService { | ||
| 20 | /** | 20 | /** |
| 21 | * 获得待办的流程任务分页 | 21 | * 获得待办的流程任务分页 |
| 22 | * | 22 | * |
| 23 | - * @param userId 用户编号 | 23 | + * @param userId 用户编号 |
| 24 | * @param pageReqVO 分页请求 | 24 | * @param pageReqVO 分页请求 |
| 25 | + * | ||
| 25 | * @return 流程任务分页 | 26 | * @return 流程任务分页 |
| 26 | */ | 27 | */ |
| 27 | PageResult<BpmTaskTodoPageItemRespVO> getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageReqVO); | 28 | PageResult<BpmTaskTodoPageItemRespVO> getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageReqVO); |
| 29 | + | ||
| 28 | /** | 30 | /** |
| 29 | * 获得已办的流程任务分页 | 31 | * 获得已办的流程任务分页 |
| 30 | * | 32 | * |
| 31 | - * @param userId 用户编号 | 33 | + * @param userId 用户编号 |
| 32 | * @param pageReqVO 分页请求 | 34 | * @param pageReqVO 分页请求 |
| 35 | + * | ||
| 33 | * @return 流程任务分页 | 36 | * @return 流程任务分页 |
| 34 | */ | 37 | */ |
| 35 | PageResult<BpmTaskDonePageItemRespVO> getDoneTaskPage(Long userId, BpmTaskDonePageReqVO pageReqVO); | 38 | PageResult<BpmTaskDonePageItemRespVO> getDoneTaskPage(Long userId, BpmTaskDonePageReqVO pageReqVO); |
| @@ -38,17 +41,19 @@ public interface BpmTaskService { | @@ -38,17 +41,19 @@ public interface BpmTaskService { | ||
| 38 | * 获得流程任务 Map | 41 | * 获得流程任务 Map |
| 39 | * | 42 | * |
| 40 | * @param processInstanceIds 流程实例的编号数组 | 43 | * @param processInstanceIds 流程实例的编号数组 |
| 44 | + * | ||
| 41 | * @return 流程任务 Map | 45 | * @return 流程任务 Map |
| 42 | */ | 46 | */ |
| 43 | default Map<String, List<Task>> getTaskMapByProcessInstanceIds(List<String> processInstanceIds) { | 47 | default Map<String, List<Task>> getTaskMapByProcessInstanceIds(List<String> processInstanceIds) { |
| 44 | return CollectionUtils.convertMultiMap(getTasksByProcessInstanceIds(processInstanceIds), | 48 | return CollectionUtils.convertMultiMap(getTasksByProcessInstanceIds(processInstanceIds), |
| 45 | - Task::getProcessInstanceId); | 49 | + Task::getProcessInstanceId); |
| 46 | } | 50 | } |
| 47 | 51 | ||
| 48 | /** | 52 | /** |
| 49 | * 获得流程任务列表 | 53 | * 获得流程任务列表 |
| 50 | * | 54 | * |
| 51 | * @param processInstanceIds 流程实例的编号数组 | 55 | * @param processInstanceIds 流程实例的编号数组 |
| 56 | + * | ||
| 52 | * @return 流程任务列表 | 57 | * @return 流程任务列表 |
| 53 | */ | 58 | */ |
| 54 | List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds); | 59 | List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds); |
| @@ -57,15 +62,25 @@ public interface BpmTaskService { | @@ -57,15 +62,25 @@ public interface BpmTaskService { | ||
| 57 | * 获得指令流程实例的流程任务列表,包括所有状态的 | 62 | * 获得指令流程实例的流程任务列表,包括所有状态的 |
| 58 | * | 63 | * |
| 59 | * @param processInstanceId 流程实例的编号 | 64 | * @param processInstanceId 流程实例的编号 |
| 65 | + * | ||
| 60 | * @return 流程任务列表 | 66 | * @return 流程任务列表 |
| 61 | */ | 67 | */ |
| 62 | List<BpmTaskRespVO> getTaskListByProcessInstanceId(String processInstanceId); | 68 | List<BpmTaskRespVO> getTaskListByProcessInstanceId(String processInstanceId); |
| 63 | 69 | ||
| 64 | /** | 70 | /** |
| 71 | + * 获取任务详情 | ||
| 72 | + * | ||
| 73 | + * @param processInstanceId 流程实例的编号 | ||
| 74 | + * | ||
| 75 | + * @return 流程任务列表 | ||
| 76 | + */ | ||
| 77 | + List<BpmTaskRespVO> getTaskInfo(String processInstanceId); | ||
| 78 | + | ||
| 79 | + /** | ||
| 65 | * 通过任务 | 80 | * 通过任务 |
| 66 | * | 81 | * |
| 67 | * @param userId 用户编号 | 82 | * @param userId 用户编号 |
| 68 | - * @param reqVO 通过请求 | 83 | + * @param reqVO 通过请求 |
| 69 | */ | 84 | */ |
| 70 | void approveTask(Long userId, @Valid BpmTaskApproveReqVO reqVO); | 85 | void approveTask(Long userId, @Valid BpmTaskApproveReqVO reqVO); |
| 71 | 86 | ||
| @@ -73,28 +88,30 @@ public interface BpmTaskService { | @@ -73,28 +88,30 @@ public interface BpmTaskService { | ||
| 73 | * 不通过任务 | 88 | * 不通过任务 |
| 74 | * | 89 | * |
| 75 | * @param userId 用户编号 | 90 | * @param userId 用户编号 |
| 76 | - * @param reqVO 不通过请求 | 91 | + * @param reqVO 不通过请求 |
| 77 | */ | 92 | */ |
| 78 | void rejectTask(Long userId, @Valid BpmTaskRejectReqVO reqVO); | 93 | void rejectTask(Long userId, @Valid BpmTaskRejectReqVO reqVO); |
| 94 | + | ||
| 79 | /** | 95 | /** |
| 80 | * 回退任务 | 96 | * 回退任务 |
| 81 | * | 97 | * |
| 82 | - * @param taskId 任务编号 | 98 | + * @param userId 用户id |
| 99 | + * @param reqVO 回退任务信息 | ||
| 83 | */ | 100 | */ |
| 84 | - void backTask(String taskId,String destinationTaskDefKey); | 101 | + CommonResult<Boolean> backTask(BpmTaskBackReqVO reqVO); |
| 85 | 102 | ||
| 86 | /** | 103 | /** |
| 87 | * 将流程任务分配给指定用户 | 104 | * 将流程任务分配给指定用户 |
| 88 | * | 105 | * |
| 89 | * @param userId 用户编号 | 106 | * @param userId 用户编号 |
| 90 | - * @param reqVO 分配请求 | 107 | + * @param reqVO 分配请求 |
| 91 | */ | 108 | */ |
| 92 | void updateTaskAssignee(Long userId, BpmTaskUpdateAssigneeReqVO reqVO); | 109 | void updateTaskAssignee(Long userId, BpmTaskUpdateAssigneeReqVO reqVO); |
| 93 | 110 | ||
| 94 | /** | 111 | /** |
| 95 | * 将流程任务分配给指定用户 | 112 | * 将流程任务分配给指定用户 |
| 96 | * | 113 | * |
| 97 | - * @param id 流程任务编号 | 114 | + * @param id 流程任务编号 |
| 98 | * @param userId 用户编号 | 115 | * @param userId 用户编号 |
| 99 | */ | 116 | */ |
| 100 | void updateTaskAssignee(String id, Long userId); | 117 | void updateTaskAssignee(String id, Long userId); |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| @@ -2,17 +2,21 @@ package cn.iocoder.yudao.module.bpm.service.task; | @@ -2,17 +2,21 @@ package cn.iocoder.yudao.module.bpm.service.task; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.util.StrUtil; | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | 7 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 7 | import cn.iocoder.yudao.framework.common.util.object.PageUtils; | 8 | import cn.iocoder.yudao.framework.common.util.object.PageUtils; |
| 9 | +import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; | ||
| 8 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; | 10 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; |
| 9 | import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert; | 11 | import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert; |
| 10 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; | 12 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; |
| 13 | +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmActivityDO; | ||
| 11 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; | 14 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; |
| 12 | import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; | 15 | import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; |
| 16 | +import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmActivityMapper; | ||
| 13 | import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmTaskExtMapper; | 17 | import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmTaskExtMapper; |
| 14 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; | ||
| 15 | -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; | 18 | +import cn.iocoder.yudao.module.bpm.domain.enums.definition.BpmTaskAssignRuleTypeEnum; |
| 19 | +import cn.iocoder.yudao.module.bpm.domain.enums.task.BpmProcessInstanceResultEnum; | ||
| 16 | import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; | 20 | import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; |
| 17 | import cn.iocoder.yudao.module.system.api.dept.DeptApi; | 21 | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| 18 | import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; | 22 | import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; |
| @@ -36,10 +40,12 @@ import org.springframework.transaction.support.TransactionSynchronizationManager | @@ -36,10 +40,12 @@ import org.springframework.transaction.support.TransactionSynchronizationManager | ||
| 36 | import javax.annotation.Resource; | 40 | import javax.annotation.Resource; |
| 37 | import javax.validation.Valid; | 41 | import javax.validation.Valid; |
| 38 | import java.util.*; | 42 | import java.util.*; |
| 43 | +import java.util.stream.Collectors; | ||
| 39 | 44 | ||
| 40 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 45 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 41 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; | 46 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| 42 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | 47 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| 48 | +import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; | ||
| 43 | import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; | 49 | import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; |
| 44 | 50 | ||
| 45 | /** | 51 | /** |
| @@ -50,7 +56,7 @@ import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; | @@ -50,7 +56,7 @@ import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; | ||
| 50 | */ | 56 | */ |
| 51 | @Slf4j | 57 | @Slf4j |
| 52 | @Service | 58 | @Service |
| 53 | -public class BpmTaskServiceImpl implements BpmTaskService{ | 59 | +public class BpmTaskServiceImpl implements BpmTaskService { |
| 54 | 60 | ||
| 55 | @Resource | 61 | @Resource |
| 56 | private TaskService taskService; | 62 | private TaskService taskService; |
| @@ -71,13 +77,14 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | @@ -71,13 +77,14 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | ||
| 71 | private BpmMessageService messageService; | 77 | private BpmMessageService messageService; |
| 72 | @Resource | 78 | @Resource |
| 73 | private BpmTaskAssignRuleMapper taskAssignRuleMapper; | 79 | private BpmTaskAssignRuleMapper taskAssignRuleMapper; |
| 80 | + @Resource | ||
| 81 | + private BpmActivityMapper bpmActivityMapper; | ||
| 74 | 82 | ||
| 75 | @Override | 83 | @Override |
| 76 | public PageResult<BpmTaskTodoPageItemRespVO> getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageVO) { | 84 | public PageResult<BpmTaskTodoPageItemRespVO> getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageVO) { |
| 77 | // 查询待办任务 | 85 | // 查询待办任务 |
| 78 | - TaskQuery taskQuery = taskService.createTaskQuery() | ||
| 79 | - .taskAssignee(String.valueOf(userId)) // 分配给自己 | ||
| 80 | - .orderByTaskCreateTime().desc(); // 创建时间倒序 | 86 | + TaskQuery taskQuery = taskService.createTaskQuery().taskAssignee(String.valueOf(userId)) // 分配给自己 |
| 87 | + .orderByTaskCreateTime().desc(); // 创建时间倒序 | ||
| 81 | if (StrUtil.isNotBlank(pageVO.getName())) { | 88 | if (StrUtil.isNotBlank(pageVO.getName())) { |
| 82 | taskQuery.taskNameLike("%" + pageVO.getName() + "%"); | 89 | taskQuery.taskNameLike("%" + pageVO.getName() + "%"); |
| 83 | } | 90 | } |
| @@ -94,23 +101,22 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | @@ -94,23 +101,22 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | ||
| 94 | } | 101 | } |
| 95 | 102 | ||
| 96 | // 获得 ProcessInstance Map | 103 | // 获得 ProcessInstance Map |
| 97 | - Map<String, ProcessInstance> processInstanceMap = processInstanceService.getProcessInstanceMap( | ||
| 98 | - convertSet(tasks, Task::getProcessInstanceId)); | 104 | + Map<String, ProcessInstance> processInstanceMap = |
| 105 | + processInstanceService.getProcessInstanceMap(convertSet(tasks, Task::getProcessInstanceId)); | ||
| 99 | // 获得 User Map | 106 | // 获得 User Map |
| 100 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( | 107 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| 101 | - convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); | 108 | + convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); |
| 102 | // 拼接结果 | 109 | // 拼接结果 |
| 103 | return new PageResult<>(BpmTaskConvert.INSTANCE.convertList1(tasks, processInstanceMap, userMap), | 110 | return new PageResult<>(BpmTaskConvert.INSTANCE.convertList1(tasks, processInstanceMap, userMap), |
| 104 | - taskQuery.count()); | 111 | + taskQuery.count()); |
| 105 | } | 112 | } |
| 106 | 113 | ||
| 107 | @Override | 114 | @Override |
| 108 | public PageResult<BpmTaskDonePageItemRespVO> getDoneTaskPage(Long userId, BpmTaskDonePageReqVO pageVO) { | 115 | public PageResult<BpmTaskDonePageItemRespVO> getDoneTaskPage(Long userId, BpmTaskDonePageReqVO pageVO) { |
| 109 | // 查询已办任务 | 116 | // 查询已办任务 |
| 110 | - HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery() | ||
| 111 | - .finished() // 已完成 | ||
| 112 | - .taskAssignee(String.valueOf(userId)) // 分配给自己 | ||
| 113 | - .orderByHistoricTaskInstanceEndTime().desc(); // 审批时间倒序 | 117 | + HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery().finished() // 已完成 |
| 118 | + .taskAssignee(String.valueOf(userId)) // 分配给自己 | ||
| 119 | + .orderByHistoricTaskInstanceEndTime().desc(); // 审批时间倒序 | ||
| 114 | if (StrUtil.isNotBlank(pageVO.getName())) { | 120 | if (StrUtil.isNotBlank(pageVO.getName())) { |
| 115 | taskQuery.taskNameLike("%" + pageVO.getName() + "%"); | 121 | taskQuery.taskNameLike("%" + pageVO.getName() + "%"); |
| 116 | } | 122 | } |
| @@ -127,17 +133,20 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | @@ -127,17 +133,20 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | ||
| 127 | } | 133 | } |
| 128 | 134 | ||
| 129 | // 获得 TaskExtDO Map | 135 | // 获得 TaskExtDO Map |
| 130 | - List<BpmTaskExtDO> bpmTaskExtDOs = taskExtMapper.selectListByTaskIds(convertSet(tasks, HistoricTaskInstance::getId)); | 136 | + List<BpmTaskExtDO> bpmTaskExtDOs = |
| 137 | + taskExtMapper.selectListByTaskIds(convertSet(tasks, HistoricTaskInstance::getId)); | ||
| 131 | Map<String, BpmTaskExtDO> bpmTaskExtDOMap = convertMap(bpmTaskExtDOs, BpmTaskExtDO::getTaskId); | 138 | Map<String, BpmTaskExtDO> bpmTaskExtDOMap = convertMap(bpmTaskExtDOs, BpmTaskExtDO::getTaskId); |
| 132 | // 获得 ProcessInstance Map | 139 | // 获得 ProcessInstance Map |
| 133 | - Map<String, HistoricProcessInstance> historicProcessInstanceMap = processInstanceService.getHistoricProcessInstanceMap( | 140 | + Map<String, HistoricProcessInstance> historicProcessInstanceMap = |
| 141 | + processInstanceService.getHistoricProcessInstanceMap( | ||
| 134 | convertSet(tasks, HistoricTaskInstance::getProcessInstanceId)); | 142 | convertSet(tasks, HistoricTaskInstance::getProcessInstanceId)); |
| 135 | // 获得 User Map | 143 | // 获得 User Map |
| 136 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( | 144 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| 137 | - convertSet(historicProcessInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); | 145 | + convertSet(historicProcessInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); |
| 138 | // 拼接结果 | 146 | // 拼接结果 |
| 139 | - return new PageResult<>(BpmTaskConvert.INSTANCE.convertList2(tasks, bpmTaskExtDOMap, historicProcessInstanceMap, userMap), | ||
| 140 | - taskQuery.count()); | 147 | + return new PageResult<>( |
| 148 | + BpmTaskConvert.INSTANCE.convertList2(tasks, bpmTaskExtDOMap, historicProcessInstanceMap, userMap), | ||
| 149 | + taskQuery.count()); | ||
| 141 | } | 150 | } |
| 142 | 151 | ||
| 143 | @Override | 152 | @Override |
| @@ -151,17 +160,22 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | @@ -151,17 +160,22 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | ||
| 151 | @Override | 160 | @Override |
| 152 | public List<BpmTaskRespVO> getTaskListByProcessInstanceId(String processInstanceId) { | 161 | public List<BpmTaskRespVO> getTaskListByProcessInstanceId(String processInstanceId) { |
| 153 | // 获得任务列表 | 162 | // 获得任务列表 |
| 154 | - List<HistoricTaskInstance> tasks = historyService.createHistoricTaskInstanceQuery() | ||
| 155 | - .processInstanceId(processInstanceId) | 163 | + List<HistoricTaskInstance> tasks = |
| 164 | + historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId) | ||
| 156 | .orderByHistoricTaskInstanceStartTime().desc() // 创建时间倒序 | 165 | .orderByHistoricTaskInstanceStartTime().desc() // 创建时间倒序 |
| 157 | .list(); | 166 | .list(); |
| 158 | if (CollUtil.isEmpty(tasks)) { | 167 | if (CollUtil.isEmpty(tasks)) { |
| 159 | return Collections.emptyList(); | 168 | return Collections.emptyList(); |
| 160 | } | 169 | } |
| 161 | - | ||
| 162 | // 获得 TaskExtDO Map | 170 | // 获得 TaskExtDO Map |
| 163 | - List<BpmTaskExtDO> bpmTaskExtDOs = taskExtMapper.selectListByTaskIds(convertSet(tasks, HistoricTaskInstance::getId)); | ||
| 164 | - Map<String, BpmTaskExtDO> bpmTaskExtDOMap = convertMap(bpmTaskExtDOs, BpmTaskExtDO::getTaskId); | 171 | + // List<BpmTaskExtDO> bpmTaskExtDOList = |
| 172 | + // taskExtMapper.selectListByTaskIds(convertSet(tasks, HistoricTaskInstance::getId)); | ||
| 173 | + | ||
| 174 | + List<BpmTaskExtDO> bpmTaskExtDOList = taskExtMapper.listByProcInstId(processInstanceId); | ||
| 175 | + // List<BpmTaskExtDO> bpmTaskExtDOList = BpmTaskConvert.INSTANCE.distinct(tmpBpmTaskExtDOList); | ||
| 176 | + // bpmTaskExtDOList.forEach(var -> log.info("var = " + var)); | ||
| 177 | + | ||
| 178 | + Map<String, BpmTaskExtDO> bpmTaskExtDoMap = convertMap(bpmTaskExtDOList, BpmTaskExtDO::getTaskId); | ||
| 165 | // 获得 ProcessInstance Map | 179 | // 获得 ProcessInstance Map |
| 166 | HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(processInstanceId); | 180 | HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(processInstanceId); |
| 167 | // 获得 User Map | 181 | // 获得 User Map |
| @@ -172,7 +186,25 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | @@ -172,7 +186,25 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | ||
| 172 | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); | 186 | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); |
| 173 | 187 | ||
| 174 | // 拼接数据 | 188 | // 拼接数据 |
| 175 | - return BpmTaskConvert.INSTANCE.convertList3(tasks, bpmTaskExtDOMap, processInstance, userMap, deptMap); | 189 | + return BpmTaskConvert.INSTANCE.convertList3(tasks, bpmTaskExtDoMap, processInstance, userMap, deptMap); |
| 190 | + } | ||
| 191 | + | ||
| 192 | + @Override | ||
| 193 | + public List<BpmTaskRespVO> getTaskInfo(String processInstanceId) { | ||
| 194 | + | ||
| 195 | + List<BpmTaskExtDO> bpmTaskExtDOList = taskExtMapper.listByProcInstId(processInstanceId); | ||
| 196 | + | ||
| 197 | + Map<String, BpmTaskExtDO> bpmTaskExtDoMap = convertMap(bpmTaskExtDOList, BpmTaskExtDO::getTaskId); | ||
| 198 | + // 获得 ProcessInstance Map | ||
| 199 | + HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(processInstanceId); | ||
| 200 | + // 获得 User Map | ||
| 201 | + Set<Long> userIds = bpmTaskExtDOList.stream().map(BpmTaskExtDO::getAssigneeUserId).collect(Collectors.toSet()); | ||
| 202 | + userIds.add(NumberUtils.parseLong(processInstance.getStartUserId())); | ||
| 203 | + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds); | ||
| 204 | + | ||
| 205 | + | ||
| 206 | + // 拼接数据 | ||
| 207 | + return new ArrayList<>(); | ||
| 176 | } | 208 | } |
| 177 | 209 | ||
| 178 | @Override | 210 | @Override |
| @@ -199,9 +231,9 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | @@ -199,9 +231,9 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | ||
| 199 | task.getTaskDefinitionKey()); | 231 | task.getTaskDefinitionKey()); |
| 200 | if (CollUtil.isNotEmpty(bpmTaskAssignRuleList) && bpmTaskAssignRuleList.size() > 0) { | 232 | if (CollUtil.isNotEmpty(bpmTaskAssignRuleList) && bpmTaskAssignRuleList.size() > 0) { |
| 201 | if (BpmTaskAssignRuleTypeEnum.USER_OR_SIGN.getType().equals(bpmTaskAssignRuleList.get(0).getType())) { | 233 | if (BpmTaskAssignRuleTypeEnum.USER_OR_SIGN.getType().equals(bpmTaskAssignRuleList.get(0).getType())) { |
| 202 | - taskExtMapper.updateUserOrSignTask( | ||
| 203 | - (BpmTaskExtDO)new BpmTaskExtDO().setTaskId(task.getId()).setName(task.getName()) | ||
| 204 | - .setProcessInstanceId(task.getProcessInstanceId()).setDeleted(true)); | 234 | + taskExtMapper.delTaskByProcInstIdAndTaskIdAndTaskDefKey( |
| 235 | + new BpmTaskExtDO().setTaskId(task.getId()).setTaskDefKey(task.getTaskDefinitionKey()) | ||
| 236 | + .setProcessInstanceId(task.getProcessInstanceId())); | ||
| 205 | } | 237 | } |
| 206 | } | 238 | } |
| 207 | } | 239 | } |
| @@ -220,18 +252,45 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | @@ -220,18 +252,45 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | ||
| 220 | processInstanceService.updateProcessInstanceExtReject(instance.getProcessInstanceId(), reqVO.getComment()); | 252 | processInstanceService.updateProcessInstanceExtReject(instance.getProcessInstanceId(), reqVO.getComment()); |
| 221 | 253 | ||
| 222 | // 更新任务拓展表为不通过 | 254 | // 更新任务拓展表为不通过 |
| 223 | - taskExtMapper.updateByTaskId(new BpmTaskExtDO().setTaskId(task.getId()) | ||
| 224 | - .setResult(BpmProcessInstanceResultEnum.REJECT.getResult()).setComment(reqVO.getComment())); | 255 | + taskExtMapper.updateByTaskId( |
| 256 | + new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.REJECT.getResult()) | ||
| 257 | + .setComment(reqVO.getComment())); | ||
| 225 | } | 258 | } |
| 226 | 259 | ||
| 227 | @Override | 260 | @Override |
| 228 | - public void backTask(String taskId,String destinationTaskDefKey) { | ||
| 229 | - Task currentTask = taskService.createTaskQuery().taskId(taskId).singleResult(); | 261 | + @Transactional(rollbackFor = Exception.class) |
| 262 | + @TenantIgnore | ||
| 263 | + public CommonResult<Boolean> backTask(BpmTaskBackReqVO reqVO) { | ||
| 264 | + Long userId = Long.valueOf(reqVO.getUserId()); | ||
| 265 | + // 校验任务存在 | ||
| 266 | + Task task = checkTask(userId, reqVO.getTaskId()); | ||
| 267 | + ArrayList<String> oldTaskDefKeyList = CollUtil.newArrayList(reqVO.getOldTaskDefKey()); | ||
| 268 | + | ||
| 269 | + // List<HistoricActivityInstance> hisActInstList = | ||
| 270 | + // historyService.createHistoricActivityInstanceQuery().processInstanceId(reqVO.getProcInstId()).list(); | ||
| 271 | + List<BpmActivityDO> bpmActivityDOList = bpmActivityMapper.listAllByProcInstIdAndDelete(reqVO.getProcInstId()); | ||
| 272 | + // List<BpmActivityDO> bpmActivityDOList = BpmTaskConvert.INSTANCE.copyList(hisActInstList, BpmActivityDO.class); | ||
| 273 | + // bpmActivityDOList.forEach(bpmActivityDO -> log.info("bpmActivityDO = " + bpmActivityDO)); | ||
| 274 | + List<String> taskIdList = bpmActivityDOList.stream().filter( | ||
| 275 | + bpmActivityDO -> bpmActivityDO.getActivityId().equals(reqVO.getOldTaskDefKey()) | ||
| 276 | + && !bpmActivityDO.getTaskId().equals(reqVO.getTaskId())).map(BpmActivityDO::getTaskId) | ||
| 277 | + .collect(Collectors.toList()); | ||
| 230 | 278 | ||
| 231 | - runtimeService.createChangeActivityStateBuilder() | ||
| 232 | - .processInstanceId(currentTask.getProcessInstanceId()) | ||
| 233 | - .moveActivityIdTo(currentTask.getTaskDefinitionKey(), destinationTaskDefKey) | ||
| 234 | - .changeState(); | 279 | + // 使用flowable更改任务节点 |
| 280 | + runtimeService.createChangeActivityStateBuilder().processInstanceId(reqVO.getProcInstId()) | ||
| 281 | + .moveActivityIdsToSingleActivityId(oldTaskDefKeyList, reqVO.getNewTaskDefKey()).changeState(); | ||
| 282 | + | ||
| 283 | + // 逻辑删除hiActInst表任务 | ||
| 284 | + Boolean delHiActInstResult = bpmActivityMapper.delHiActInstByTaskId(taskIdList); | ||
| 285 | + // 逻辑删除hiTaskInst表任务 | ||
| 286 | + Boolean delHiTaskInstResult = bpmActivityMapper.delHiTaskInstByTaskId(taskIdList); | ||
| 287 | + // 更新任务拓展表 | ||
| 288 | + Boolean backResult = taskExtMapper.backByTaskId(reqVO.getTaskId(), reqVO.getComment()); | ||
| 289 | + Boolean delTaskResult = taskExtMapper.delByTaskIds(taskIdList); | ||
| 290 | + if (!delHiActInstResult && !delHiTaskInstResult && !backResult && !delTaskResult) { | ||
| 291 | + throw new RuntimeException("任务驳回失败!!!"); | ||
| 292 | + } | ||
| 293 | + return CommonResult.success(true); | ||
| 235 | } | 294 | } |
| 236 | 295 | ||
| 237 | @Override | 296 | @Override |
| @@ -247,40 +306,40 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | @@ -247,40 +306,40 @@ public class BpmTaskServiceImpl implements BpmTaskService{ | ||
| 247 | taskService.setAssignee(id, String.valueOf(userId)); | 306 | taskService.setAssignee(id, String.valueOf(userId)); |
| 248 | } | 307 | } |
| 249 | 308 | ||
| 250 | - | ||
| 251 | @Override | 309 | @Override |
| 252 | public void createTaskExt(Task task) { | 310 | public void createTaskExt(Task task) { |
| 253 | - BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert2TaskExt(task) | ||
| 254 | - .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); | 311 | + BpmTaskExtDO taskExtDO = |
| 312 | + BpmTaskConvert.INSTANCE.convert2TaskExt(task).setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); | ||
| 255 | taskExtMapper.insert(taskExtDO); | 313 | taskExtMapper.insert(taskExtDO); |
| 256 | } | 314 | } |
| 257 | 315 | ||
| 258 | @Override | 316 | @Override |
| 259 | public void updateTaskExtComplete(Task task) { | 317 | public void updateTaskExtComplete(Task task) { |
| 260 | - BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert2TaskExt(task) | ||
| 261 | - .setEndTime(new Date()); | 318 | + BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert2TaskExt(task).setEndTime(new Date()); |
| 262 | taskExtMapper.updateByTaskId(taskExtDO); | 319 | taskExtMapper.updateByTaskId(taskExtDO); |
| 263 | } | 320 | } |
| 264 | 321 | ||
| 265 | @Override | 322 | @Override |
| 266 | public void updateTaskExtAssign(Task task) { | 323 | public void updateTaskExtAssign(Task task) { |
| 267 | - BpmTaskExtDO taskExtDO = new BpmTaskExtDO() | ||
| 268 | - .setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())) | ||
| 269 | - .setTaskId(task.getId()); | 324 | + BpmTaskExtDO taskExtDO = |
| 325 | + new BpmTaskExtDO().setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())).setTaskId(task.getId()); | ||
| 270 | taskExtMapper.updateByTaskId(taskExtDO); | 326 | taskExtMapper.updateByTaskId(taskExtDO); |
| 271 | // 发送通知。在事务提交时,批量执行操作,所以直接查询会无法查询到 ProcessInstance,所以这里是通过监听事务的提交来实现。 | 327 | // 发送通知。在事务提交时,批量执行操作,所以直接查询会无法查询到 ProcessInstance,所以这里是通过监听事务的提交来实现。 |
| 272 | TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { | 328 | TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { |
| 273 | @Override | 329 | @Override |
| 274 | public void afterCommit() { | 330 | public void afterCommit() { |
| 275 | - ProcessInstance processInstance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); | 331 | + ProcessInstance processInstance = |
| 332 | + processInstanceService.getProcessInstance(task.getProcessInstanceId()); | ||
| 276 | AdminUserRespDTO startUser = adminUserApi.getUser(Long.valueOf(processInstance.getStartUserId())); | 333 | AdminUserRespDTO startUser = adminUserApi.getUser(Long.valueOf(processInstance.getStartUserId())); |
| 277 | - messageService.sendMessageWhenTaskAssigned(BpmTaskConvert.INSTANCE.convert(processInstance, startUser, task)); | 334 | + messageService.sendMessageWhenTaskAssigned( |
| 335 | + BpmTaskConvert.INSTANCE.convert(processInstance, startUser, task)); | ||
| 278 | } | 336 | } |
| 279 | }); | 337 | }); |
| 280 | } | 338 | } |
| 281 | 339 | ||
| 282 | /** | 340 | /** |
| 283 | * 校验任务是否存在, 并且是否是分配给自己的任务 | 341 | * 校验任务是否存在, 并且是否是分配给自己的任务 |
| 342 | + * | ||
| 284 | * @param userId 用户 id | 343 | * @param userId 用户 id |
| 285 | * @param taskId task id | 344 | * @param taskId task id |
| 286 | */ | 345 | */ |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/business/hi/task/inst/domain/HistoricApproveTaskDTO.java
0 → 100644
| 1 | +package net.lab1024.smartadmin.module.business.approve.camunda.hi.task.inst.domain; | ||
| 2 | + | ||
| 3 | +import lombok.AllArgsConstructor; | ||
| 4 | +import lombok.Data; | ||
| 5 | +import lombok.NoArgsConstructor; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * @author kemengkai | ||
| 9 | + * @create 2022-01-11 15:09 | ||
| 10 | + */ | ||
| 11 | +@Data | ||
| 12 | +@AllArgsConstructor | ||
| 13 | +@NoArgsConstructor | ||
| 14 | +public class HistoricApproveTaskDTO { | ||
| 15 | + | ||
| 16 | + private String procInstId; | ||
| 17 | + private String name; | ||
| 18 | + private String assignee; | ||
| 19 | + | ||
| 20 | +} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/business/hi/task/inst/domain/vo/HiTaskinstVO.java
0 → 100644
| 1 | +package net.lab1024.smartadmin.module.business.approve.camunda.hi.task.inst.domain.vo; | ||
| 2 | + | ||
| 3 | +import lombok.Data; | ||
| 4 | +import java.util.Date; | ||
| 5 | +import com.fasterxml.jackson.annotation.JsonFormat; | ||
| 6 | +import io.swagger.annotations.ApiModelProperty; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * [ ] | ||
| 10 | + * | ||
| 11 | + * @author 孟凯 | ||
| 12 | + * @version 1.0 | ||
| 13 | + * @company 1024创新实验室( www.1024lab.net ) | ||
| 14 | + * @copyright (c) 1024创新实验室( www.1024lab.net )Inc. All rights reserved. | ||
| 15 | + * @date 2022-01-17 15:14:27 | ||
| 16 | + * @since JDK1.8 | ||
| 17 | + */ | ||
| 18 | +@Data | ||
| 19 | +public class HiTaskinstVO { | ||
| 20 | + @ApiModelProperty("ID_") | ||
| 21 | + private String id; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty("TASK_DEF_KEY_") | ||
| 24 | + private String taskDefKey; | ||
| 25 | + | ||
| 26 | + @ApiModelProperty("PROC_DEF_KEY_") | ||
| 27 | + private String procDefKey; | ||
| 28 | + | ||
| 29 | + @ApiModelProperty("PROC_DEF_ID_") | ||
| 30 | + private String procDefId; | ||
| 31 | + | ||
| 32 | + @ApiModelProperty("ROOT_PROC_INST_ID_") | ||
| 33 | + private String rootProcInstId; | ||
| 34 | + | ||
| 35 | + @ApiModelProperty("PROC_INST_ID_") | ||
| 36 | + private String procInstId; | ||
| 37 | + | ||
| 38 | + @ApiModelProperty("EXECUTION_ID_") | ||
| 39 | + private String executionId; | ||
| 40 | + | ||
| 41 | + @ApiModelProperty("CASE_DEF_KEY_") | ||
| 42 | + private String caseDefKey; | ||
| 43 | + | ||
| 44 | + @ApiModelProperty("CASE_DEF_ID_") | ||
| 45 | + private String caseDefId; | ||
| 46 | + | ||
| 47 | + @ApiModelProperty("CASE_INST_ID_") | ||
| 48 | + private String caseInstId; | ||
| 49 | + | ||
| 50 | + @ApiModelProperty("CASE_EXECUTION_ID_") | ||
| 51 | + private String caseExecutionId; | ||
| 52 | + | ||
| 53 | + @ApiModelProperty("ACT_INST_ID_") | ||
| 54 | + private String actInstId; | ||
| 55 | + | ||
| 56 | + @ApiModelProperty("NAME_") | ||
| 57 | + private String name; | ||
| 58 | + | ||
| 59 | + @ApiModelProperty("PARENT_TASK_ID_") | ||
| 60 | + private String parentTaskId; | ||
| 61 | + | ||
| 62 | + @ApiModelProperty("DESCRIPTION_") | ||
| 63 | + private String description; | ||
| 64 | + | ||
| 65 | + @ApiModelProperty("OWNER_") | ||
| 66 | + private String owner; | ||
| 67 | + | ||
| 68 | + @ApiModelProperty("ASSIGNEE_") | ||
| 69 | + private String assignee; | ||
| 70 | + | ||
| 71 | + @ApiModelProperty("START_TIME_") | ||
| 72 | + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | ||
| 73 | + private Date startTime; | ||
| 74 | + | ||
| 75 | + @ApiModelProperty("END_TIME_") | ||
| 76 | + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | ||
| 77 | + private Date endTime; | ||
| 78 | + | ||
| 79 | + @ApiModelProperty("DURATION_") | ||
| 80 | + private Long duration; | ||
| 81 | + | ||
| 82 | + @ApiModelProperty("DELETE_REASON_") | ||
| 83 | + private String deleteReason; | ||
| 84 | + | ||
| 85 | + @ApiModelProperty("PRIORITY_") | ||
| 86 | + private Integer priority; | ||
| 87 | + | ||
| 88 | + @ApiModelProperty("DUE_DATE_") | ||
| 89 | + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | ||
| 90 | + private Date dueDate; | ||
| 91 | + | ||
| 92 | + @ApiModelProperty("FOLLOW_UP_DATE_") | ||
| 93 | + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | ||
| 94 | + private Date followUpDate; | ||
| 95 | + | ||
| 96 | + @ApiModelProperty("TENANT_ID_") | ||
| 97 | + private String tenantId; | ||
| 98 | + | ||
| 99 | + @ApiModelProperty("REMOVAL_TIME_") | ||
| 100 | + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | ||
| 101 | + private Date removalTime; | ||
| 102 | + | ||
| 103 | + | ||
| 104 | + | ||
| 105 | +} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/business/hi/task/inst/service/HiTaskinstService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.business.hi.task.inst.service; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.bean.BeanUtil; | ||
| 4 | +import cn.hutool.core.collection.CollUtil; | ||
| 5 | +import cn.hutool.core.util.BooleanUtil; | ||
| 6 | +import cn.hutool.json.JSONUtil; | ||
| 7 | +import cn.iocoder.yudao.module.bpm.domain.vo.ApproveProcInstVO; | ||
| 8 | +import lombok.extern.slf4j.Slf4j; | ||
| 9 | +import org.flowable.common.engine.impl.de.odysseus.el.util.SimpleContext; | ||
| 10 | +import org.flowable.engine.HistoryService; | ||
| 11 | +import org.flowable.engine.RepositoryService; | ||
| 12 | +import org.flowable.engine.TaskService; | ||
| 13 | +import org.flowable.variable.api.history.HistoricVariableInstance; | ||
| 14 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 15 | +import org.springframework.stereotype.Service; | ||
| 16 | + | ||
| 17 | +import java.util.*; | ||
| 18 | + | ||
| 19 | +/** | ||
| 20 | + * [ ] | ||
| 21 | + * | ||
| 22 | + * @author 孟凯 | ||
| 23 | + * @version 1.0 | ||
| 24 | + * @company 1024创新实验室(www.1024lab.net) | ||
| 25 | + * @copyright (c) 1024创新实验室( www.1024lab.net )Inc. All rights reserved. | ||
| 26 | + * @date 2022-01-17 15:14:27 | ||
| 27 | + * @since JDK1.8 | ||
| 28 | + */ | ||
| 29 | +@Slf4j | ||
| 30 | +@Service | ||
| 31 | +public class HiTaskinstService { | ||
| 32 | + | ||
| 33 | + | ||
| 34 | + @Autowired | ||
| 35 | + private TaskService taskService; | ||
| 36 | + @Autowired | ||
| 37 | + private HistoryService historyService; | ||
| 38 | + @Autowired | ||
| 39 | + private RepositoryService repositoryService; | ||
| 40 | + | ||
| 41 | + /** | ||
| 42 | + * 获取任务具体流程信息 | ||
| 43 | + * | ||
| 44 | + * @param procInstId 流程id | ||
| 45 | + * @param procDefId 流程部署id | ||
| 46 | + * | ||
| 47 | + * @return 返回流程信息 | ||
| 48 | + */ | ||
| 49 | + public List<ApproveProcInstVO> taskGetComment(String procInstId, String procDefId) { | ||
| 50 | + Map<String, Object> variableMap = new HashMap<>(50); | ||
| 51 | + List<HistoricVariableInstance> hisVarInstList = | ||
| 52 | + historyService.createHistoricVariableInstanceQuery().processInstanceId(procInstId).list(); | ||
| 53 | + hisVarInstList.forEach(hisVarInst -> { | ||
| 54 | + variableMap.put(hisVarInst.getName(), hisVarInst.getValue()); | ||
| 55 | + }); | ||
| 56 | + | ||
| 57 | + List<ApproveProcInstVO> procInstVOList = hiTaskinstDao.listByProcInstIdAndNotDelete(procInstId); | ||
| 58 | + | ||
| 59 | + BpmnModelInstance bpmnModelInstance = repositoryService.getBpmnModel(procDefId); | ||
| 60 | + DomElement document1 = bpmnModelInstance.getDocument().getElementById(procDefId.split(":")[0]); | ||
| 61 | + LinkedHashMap<String, DomElement> domElementMap = new LinkedHashMap<>(50); | ||
| 62 | + getChildElementToMap(document1, domElementMap); | ||
| 63 | + getChildNode(procInstVOList, domElementMap, variableMap); | ||
| 64 | + return procInstVOList; | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + /** | ||
| 68 | + * 获取子节点信息,存储到map中 | ||
| 69 | + * | ||
| 70 | + * @param domElement 父节点 | ||
| 71 | + * @param domElementMap 节点map | ||
| 72 | + */ | ||
| 73 | + private void getChildElementToMap(DomElement domElement, LinkedHashMap<String, DomElement> domElementMap) { | ||
| 74 | + List<DomElement> childElements = domElement.getChildElements(); | ||
| 75 | + for (DomElement childElement : childElements) { | ||
| 76 | + if ("BPMNDiagram".equals(childElement.getLocalName())) { | ||
| 77 | + break; | ||
| 78 | + } | ||
| 79 | + if ("extensionElements".equals(childElement.getLocalName())) { | ||
| 80 | + break; | ||
| 81 | + } | ||
| 82 | + if (!"outgoing".equals(childElement.getLocalName()) && !"incoming".equals(childElement.getLocalName())) { | ||
| 83 | + domElementMap.put(childElement.getAttribute("id"), childElement); | ||
| 84 | + } | ||
| 85 | + getChildElementToMap(childElement, domElementMap); | ||
| 86 | + } | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + /** | ||
| 90 | + * 获取子节点信息 | ||
| 91 | + * | ||
| 92 | + * @param procInstVOList 流程VO列表 | ||
| 93 | + * @param domElementMap 节点map | ||
| 94 | + * @param variableMap 流程所有的变量 | ||
| 95 | + */ | ||
| 96 | + private void getChildNode(List<ApproveProcInstVO> procInstVOList, LinkedHashMap<String, DomElement> domElementMap, | ||
| 97 | + Map<String, Object> variableMap) { | ||
| 98 | + DomElement domElement = domElementMap.get(procInstVOList.get(procInstVOList.size() - 1).getTaskDefKey()); | ||
| 99 | + for (DomElement childElement : domElement.getChildElements()) { | ||
| 100 | + if ("outgoing".equals(childElement.getLocalName())) { | ||
| 101 | + DomElement tmpDomElement = domElementMap.get(childElement.getTextContent()); | ||
| 102 | + getChildNode(procInstVOList, domElementMap, variableMap, tmpDomElement); | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + /** | ||
| 108 | + * 获取子节点信息 | ||
| 109 | + * | ||
| 110 | + * @param procInstVOList 流程VO列表 | ||
| 111 | + * @param domElementMap 节点map | ||
| 112 | + * @param variableMap 流程所有的变量 | ||
| 113 | + * @param domElement 父节点信息 | ||
| 114 | + */ | ||
| 115 | + private void getChildNode(List<ApproveProcInstVO> procInstVOList, LinkedHashMap<String, DomElement> domElementMap, | ||
| 116 | + Map<String, Object> variableMap, DomElement domElement) { | ||
| 117 | + if ("exclusiveGateway".equals(domElement.getLocalName())) { | ||
| 118 | + DomElement domElementChild = getNodeExclusiveGateway(domElementMap, variableMap, domElement); | ||
| 119 | + getChildNode(procInstVOList, domElementMap, variableMap, domElementChild); | ||
| 120 | + } else if ("userTask".equals(domElement.getLocalName())) { | ||
| 121 | + getProcInstVO(procInstVOList, domElement, variableMap); | ||
| 122 | + for (DomElement childElement : domElement.getChildElements()) { | ||
| 123 | + if ("outgoing".equals(childElement.getLocalName())) { | ||
| 124 | + DomElement tmpDomElement = domElementMap.get(childElement.getTextContent()); | ||
| 125 | + DomElement domElementChild = getNodeBySequenceFlow(domElementMap, tmpDomElement); | ||
| 126 | + if ("endEvent".equals(domElementChild.getLocalName())) { | ||
| 127 | + return; | ||
| 128 | + } | ||
| 129 | + getChildNode(procInstVOList, domElementMap, variableMap, domElementChild); | ||
| 130 | + } | ||
| 131 | + } | ||
| 132 | + } else { | ||
| 133 | + DomElement domElementChild = getNodeBySequenceFlow(domElementMap, domElement); | ||
| 134 | + if (BeanUtil.isEmpty(domElementChild)) { | ||
| 135 | + throw new RuntimeException("无流程可执行!!!"); | ||
| 136 | + } | ||
| 137 | + if ("endEvent".equals(domElementChild.getLocalName())) { | ||
| 138 | + return; | ||
| 139 | + } | ||
| 140 | + getChildNode(procInstVOList, domElementMap, variableMap, domElementChild); | ||
| 141 | + } | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | + /** | ||
| 145 | + * 获取网关节点的子节点 | ||
| 146 | + * | ||
| 147 | + * @param domElementMap 流程所有的节点 | ||
| 148 | + * @param variableMap 流程所有的变量 | ||
| 149 | + * @param domElement 父节点信息 | ||
| 150 | + * | ||
| 151 | + * @return 返回子节点信息 | ||
| 152 | + */ | ||
| 153 | + private DomElement getNodeExclusiveGateway(LinkedHashMap<String, DomElement> domElementMap, | ||
| 154 | + Map<String, Object> variableMap, DomElement domElement) { | ||
| 155 | + Boolean elExpressionFlag = Boolean.FALSE; | ||
| 156 | + ArrayList<DomElement> nullChildSequenceFlowList = new ArrayList<>(); | ||
| 157 | + for (DomElement exclusiveGatewayChild : domElement.getChildElements()) { | ||
| 158 | + if ("outgoing".equals(exclusiveGatewayChild.getLocalName()) && BooleanUtil.isFalse(elExpressionFlag)) { | ||
| 159 | + DomElement sequenceFlowDomElement = domElementMap.get(exclusiveGatewayChild.getTextContent()); | ||
| 160 | + if (CollUtil.isNotEmpty(sequenceFlowDomElement.getChildElements()) | ||
| 161 | + && sequenceFlowDomElement.getChildElements().size() > 0) { | ||
| 162 | + for (DomElement conditionExpression : sequenceFlowDomElement.getChildElements()) { | ||
| 163 | + if ("conditionExpression".equals(conditionExpression.getLocalName())) { | ||
| 164 | + elExpressionFlag = elExpression(conditionExpression.getTextContent(), variableMap); | ||
| 165 | + if (BooleanUtil.isTrue(elExpressionFlag)) { | ||
| 166 | + break; | ||
| 167 | + } | ||
| 168 | + } | ||
| 169 | + } | ||
| 170 | + } else { | ||
| 171 | + nullChildSequenceFlowList.add(sequenceFlowDomElement); | ||
| 172 | + } | ||
| 173 | + if (elExpressionFlag) { | ||
| 174 | + return getNodeBySequenceFlow(domElementMap, sequenceFlowDomElement); | ||
| 175 | + } | ||
| 176 | + } | ||
| 177 | + } | ||
| 178 | + if (CollUtil.isEmpty(nullChildSequenceFlowList) && nullChildSequenceFlowList.size() < 1) { | ||
| 179 | + throw new RuntimeException("网关缺少无条件流程可执行!!!"); | ||
| 180 | + } | ||
| 181 | + if (nullChildSequenceFlowList.size() > 1) { | ||
| 182 | + throw new RuntimeException("无条件流程大于1条!!!"); | ||
| 183 | + } | ||
| 184 | + return getNodeBySequenceFlow(domElementMap, nullChildSequenceFlowList.get(0)); | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + /** | ||
| 188 | + * 获取流程序列流的子节点 | ||
| 189 | + * | ||
| 190 | + * @param domElementMap 流程所有节点 | ||
| 191 | + * @param domElement 父节点信息 | ||
| 192 | + * | ||
| 193 | + * @return 返回子节点 | ||
| 194 | + */ | ||
| 195 | + private DomElement getNodeBySequenceFlow(LinkedHashMap<String, DomElement> domElementMap, DomElement domElement) { | ||
| 196 | + String targetRef = domElement.getAttribute("targetRef"); | ||
| 197 | + return domElementMap.get(targetRef); | ||
| 198 | + } | ||
| 199 | + | ||
| 200 | + /** | ||
| 201 | + * 设置节点信息进ApproveProcInstVO | ||
| 202 | + * | ||
| 203 | + * @param procInstVOList ApproveProcInstVOList | ||
| 204 | + * @param domElement 节点信息 | ||
| 205 | + * @param variableMap 流程所有变量 | ||
| 206 | + */ | ||
| 207 | + private void getProcInstVO(List<ApproveProcInstVO> procInstVOList, DomElement domElement, | ||
| 208 | + Map<String, Object> variableMap) { | ||
| 209 | + String camundaNameSpaceUri = "http://camunda.org/schema/1.0/bpmn"; | ||
| 210 | + boolean userListFlag = false; | ||
| 211 | + List<Object> approveProcInstVOList = new ArrayList<>(); | ||
| 212 | + for (DomElement childElement : domElement.getChildElements()) { | ||
| 213 | + if ("multiInstanceLoopCharacteristics".equals(childElement.getLocalName())) { | ||
| 214 | + userListFlag = true; | ||
| 215 | + String collectionVar = childElement.getAttribute(camundaNameSpaceUri, "collection"); | ||
| 216 | + Object taskUserList = variableMap.get(collectionVar); | ||
| 217 | + approveProcInstVOList = JSONUtil.parseArray(taskUserList); | ||
| 218 | + } | ||
| 219 | + } | ||
| 220 | + | ||
| 221 | + if (userListFlag) { | ||
| 222 | + approveProcInstVOList.forEach(tmpAssignee -> { | ||
| 223 | + String assignee = String.valueOf(tmpAssignee); | ||
| 224 | + ApproveProcInstVO approveProcInstVO = new ApproveProcInstVO(); | ||
| 225 | + approveProcInstVO.setName(domElement.getAttribute("name")); | ||
| 226 | + approveProcInstVO.setTaskDefKey(domElement.getAttribute("id")); | ||
| 227 | + approveProcInstVO.setAssignee(assignee); | ||
| 228 | + approveProcInstVO.setAssigneeName(employeeDao.getByLoginName(assignee, 0).getActualName()); | ||
| 229 | + procInstVOList.add(approveProcInstVO); | ||
| 230 | + }); | ||
| 231 | + } else { | ||
| 232 | + ApproveProcInstVO approveProcInstVO = new ApproveProcInstVO(); | ||
| 233 | + approveProcInstVO.setName(domElement.getAttribute("name")); | ||
| 234 | + approveProcInstVO.setTaskDefKey(domElement.getAttribute("id")); | ||
| 235 | + approveProcInstVO.setAssignee(domElement.getAttribute(camundaNameSpaceUri, "assignee")); | ||
| 236 | + approveProcInstVO.setAssigneeName( | ||
| 237 | + employeeDao.getByLoginName(approveProcInstVO.getAssignee(), 0).getActualName()); | ||
| 238 | + procInstVOList.add(approveProcInstVO); | ||
| 239 | + } | ||
| 240 | + } | ||
| 241 | + | ||
| 242 | + /** | ||
| 243 | + * 网关分叉条件判断,网关分叉,必须要有默认出口 | ||
| 244 | + * | ||
| 245 | + * @param elExpression el表达式 | ||
| 246 | + * @param variableMap 流程所有变量 | ||
| 247 | + * | ||
| 248 | + * @return 返回true或false | ||
| 249 | + */ | ||
| 250 | + private Boolean elExpression(String elExpression, Map<String, Object> variableMap) { | ||
| 251 | + ExpressionFactory factory = new ExpressionFactoryImpl(); | ||
| 252 | + SimpleContext context = new SimpleContext(); | ||
| 253 | + for (String k : variableMap.keySet()) { | ||
| 254 | + if (variableMap.get(k) != null) { | ||
| 255 | + context.setVariable(k, | ||
| 256 | + factory.createValueExpression(variableMap.get(k), variableMap.get(k).getClass())); | ||
| 257 | + } | ||
| 258 | + } | ||
| 259 | + ValueExpression e = factory.createValueExpression(context, elExpression, Boolean.class); | ||
| 260 | + //el表达式和variables得到的结果 | ||
| 261 | + return (Boolean)e.getValue(context); | ||
| 262 | + } | ||
| 263 | +} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/BpmActivityMapper.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||
| 3 | +<mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmActivityMapper"> | ||
| 4 | + | ||
| 5 | + <update id="delHiActInstByTaskId"> | ||
| 6 | + UPDATE act_hi_actinst | ||
| 7 | + SET delete_reason_ = 'delete task' WHERE task_id_ IN | ||
| 8 | + <foreach collection="taskIdList" item="item" open="(" separator="," close=")"> | ||
| 9 | + #{item} | ||
| 10 | + </foreach> | ||
| 11 | + </update> | ||
| 12 | + <delete id="delHiTaskInstByTaskId"> | ||
| 13 | + UPDATE act_hi_taskinst | ||
| 14 | + SET delete_reason_ = 'delete task' WHERE id_ IN | ||
| 15 | + <foreach collection="taskIdList" item="item" open="(" separator="," close=")"> | ||
| 16 | + #{item} | ||
| 17 | + </foreach> | ||
| 18 | + </delete> | ||
| 19 | + | ||
| 20 | + <select id="listAll" resultType="cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmActivityDO"> | ||
| 21 | + SELECT * | ||
| 22 | + FROM act_hi_taskinst; | ||
| 23 | + </select> | ||
| 24 | + <select id="listAllByProcInstIdAndDelete" | ||
| 25 | + resultType="cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmActivityDO"> | ||
| 26 | + SELECT id_ AS `id`, | ||
| 27 | + rev_ AS `rev`, | ||
| 28 | + proc_def_id_ AS `proc_def_id`, | ||
| 29 | + proc_inst_id_ AS `process_instance_id`, | ||
| 30 | + execution_id_ AS `execution_id`, | ||
| 31 | + act_id_ AS `activity_id`, | ||
| 32 | + task_id_ AS `task_id`, | ||
| 33 | + call_proc_inst_id_ AS `call_proc_inst_id`, | ||
| 34 | + act_name_ AS `activity_name`, | ||
| 35 | + act_type_ AS `activity_type`, | ||
| 36 | + assignee_ AS `assignee`, | ||
| 37 | + start_time_ AS `start_time`, | ||
| 38 | + end_time_ AS `end_time`, | ||
| 39 | + transaction_order_ AS `transaction_order`, | ||
| 40 | + duration_ AS `duration`, | ||
| 41 | + delete_reason_ AS `delete_reason`, | ||
| 42 | + tenant_id_ AS `tenant_id` | ||
| 43 | + FROM act_hi_actinst aha | ||
| 44 | + WHERE aha.proc_inst_id_ = #{procInstId} | ||
| 45 | + AND aha.act_type_ != 'sequenceFlow' | ||
| 46 | + LIMIT 500; | ||
| 47 | + </select> | ||
| 48 | +</mapper> |
yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/BpmTaskExtMapper.xml
| @@ -2,8 +2,36 @@ | @@ -2,8 +2,36 @@ | ||
| 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| 3 | <mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmTaskExtMapper"> | 3 | <mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmTaskExtMapper"> |
| 4 | 4 | ||
| 5 | - | ||
| 6 | - <update id="updateUserOrSignTask"> | ||
| 7 | - UPDATE bpm_task_ext SET deleted=1 WHERE process_instance_id = #{entity.processInstanceId} AND name = #{entity.name} AND task_id != #{entity.taskId} | 5 | + |
| 6 | + <update id="delTaskByProcInstIdAndTaskIdAndTaskDefKey"> | ||
| 7 | + UPDATE bpm_task_ext | ||
| 8 | + SET deleted=1 | ||
| 9 | + WHERE process_instance_id = #{entity.processInstanceId} | ||
| 10 | + AND task_def_key = #{entity.taskDefKey} | ||
| 11 | + AND task_id != #{entity.taskId} | ||
| 12 | + </update> | ||
| 13 | + <update id="backByTaskId"> | ||
| 14 | + UPDATE bpm_task_ext | ||
| 15 | + SET result=2, | ||
| 16 | + `comment`=#{comment} | ||
| 17 | + WHERE task_id = #{taskId} | ||
| 8 | </update> | 18 | </update> |
| 19 | + <update id="delByTaskIds"> | ||
| 20 | + UPDATE bpm_task_ext | ||
| 21 | + SET result=1, | ||
| 22 | + `deleted`= true | ||
| 23 | + WHERE `task_id` IN | ||
| 24 | + <foreach collection="taskIdList" item="item" open="(" separator="," close=")"> | ||
| 25 | + #{item} | ||
| 26 | + </foreach> | ||
| 27 | + </update> | ||
| 28 | + | ||
| 29 | + <select id="listByProcInstId" resultType="cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO"> | ||
| 30 | + SELECT * | ||
| 31 | + FROM bpm_task_ext | ||
| 32 | + WHERE `process_instance_id` = #{procInstId} | ||
| 33 | + AND `deleted` = FALSE | ||
| 34 | + ORDER BY create_time | ||
| 35 | + LIMIT 500 | ||
| 36 | + </select> | ||
| 9 | </mapper> | 37 | </mapper> |
yudao-module-bpm/yudao-module-bpm-biz/src/test/java/cn/iocoder/yudao/module/bpm/MultiInstancesTest.java
| @@ -8,13 +8,13 @@ import org.flowable.engine.repository.ProcessDefinition; | @@ -8,13 +8,13 @@ import org.flowable.engine.repository.ProcessDefinition; | ||
| 8 | import org.flowable.engine.runtime.ProcessInstance; | 8 | import org.flowable.engine.runtime.ProcessInstance; |
| 9 | import org.flowable.engine.test.Deployment; | 9 | import org.flowable.engine.test.Deployment; |
| 10 | import org.flowable.task.api.Task; | 10 | import org.flowable.task.api.Task; |
| 11 | -import org.junit.Test; | 11 | +import org.junit.jupiter.api.Test; |
| 12 | 12 | ||
| 13 | import java.text.SimpleDateFormat; | 13 | import java.text.SimpleDateFormat; |
| 14 | import java.util.*; | 14 | import java.util.*; |
| 15 | 15 | ||
| 16 | -import static org.junit.Assert.assertEquals; | ||
| 17 | -import static org.junit.Assert.assertNotNull; | 16 | +import static org.junit.jupiter.api.Assertions.assertEquals; |
| 17 | +import static org.junit.jupiter.api.Assertions.assertNotNull; | ||
| 18 | 18 | ||
| 19 | /** | 19 | /** |
| 20 | * @author henryyan | 20 | * @author henryyan |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/security/config/SecurityConfiguration.java
| @@ -8,6 +8,7 @@ import org.springframework.security.config.annotation.web.configurers.Expression | @@ -8,6 +8,7 @@ import org.springframework.security.config.annotation.web.configurers.Expression | ||
| 8 | 8 | ||
| 9 | /** | 9 | /** |
| 10 | * System 模块的 Security 配置 | 10 | * System 模块的 Security 配置 |
| 11 | + * @author kemengkai | ||
| 11 | */ | 12 | */ |
| 12 | @Configuration("systemSecurityConfiguration") | 13 | @Configuration("systemSecurityConfiguration") |
| 13 | public class SecurityConfiguration { | 14 | public class SecurityConfiguration { |