xiangpei
2025-03-21 325eae7955d25e716684a3ae15e9aeed7951259a
驳回删除日志、总体流程日志查询调整
6个文件已修改
88 ■■■■ 已修改文件
business/src/main/java/com/ycl/controller/FlowLogController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flowable/src/main/java/com/ycl/domain/vo/FlowTaskVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
flowable/src/main/resources/mapper/ProcessLogMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/controller/FlowLogController.java
@@ -39,6 +39,7 @@
    @ApiOperation(value = "流程推进日志", notes = "流程推进日志")
//    @PreAuthorize("@ss.hasPermi('flowLog:page')")
    public Result projectProcessLogPage(ProcessLogQuery query) {
        query.setDeleted(null);
        return processLogService.projectProcessLogPage(query);
    }
}
business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -6,6 +6,7 @@
import com.alibaba.fastjson2.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ycl.common.base.Result;
import com.ycl.common.constant.ProcessConstants;
@@ -24,6 +25,7 @@
import com.ycl.domain.dto.FlowTaskDto;
import com.ycl.domain.dto.FlowViewerDto;
import com.ycl.domain.entity.ProcessCoding;
import com.ycl.domain.entity.ProcessLog;
import com.ycl.domain.entity.ProjectProcess;
import com.ycl.domain.entity.SysForm;
import com.ycl.domain.json.RejectData;
@@ -329,8 +331,18 @@
        if (taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult().isSuspended()) {
            throw new CustomException("任务处于挂起状态!");
        }
        // 当前任务 task
        Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult();
        ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(projectProcessMapper)
                .eq(ProjectProcess::getProcessInsId, task.getProcessInstanceId())
                .eq(ProjectProcess::getProcessDefId, task.getProcessDefinitionId())
                .one();
        if (Objects.isNull(projectProcess)) {
            throw new CustomException("项目流程未绑定");
        }
        // 获取流程定义信息
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult();
        // 获取所有节点信息
@@ -423,6 +435,21 @@
        try {
            // 如果父级任务多于 1 个,说明当前节点不是并行节点,原因为不考虑多对多情况
            if (targetIds.size() > 1) {
                // 删除被驳回任务的所有日志
                for (String targetId : targetIds) {
                    List<HistoricTaskInstance> rejectHisTaskList = historyService.createHistoricTaskInstanceQuery()
                            .taskDefinitionKey(targetId)
                            .processInstanceId(projectProcess.getProcessInsId())
                            .orderByHistoricTaskInstanceStartTime()
                            .desc()
                            .list();
                    if (CollectionUtils.isNotEmpty(rejectHisTaskList)) {
                        new LambdaUpdateChainWrapper<>(processLogService.getBaseMapper())
                                .eq(ProcessLog::getTaskId, rejectHisTaskList.get(0).getId())
                                .eq(ProcessLog::getProcessInsId, projectProcess.getProcessInsId())
                                .remove();
                    }
                }
                // 1 对 多任务跳转,currentIds 当前节点(1),targetIds 跳转到的节点(多)
                runtimeService.createChangeActivityStateBuilder()
                        .processInstanceId(task.getProcessInstanceId()).
@@ -430,22 +457,30 @@
            }
            // 如果父级任务只有一个,因此当前任务可能为网关中的任务
            if (targetIds.size() == 1) {
                // 删除被驳回任务的所有日志
                List<HistoricTaskInstance> rejectHisTaskList = historyService.createHistoricTaskInstanceQuery()
                        .taskDefinitionKey(targetIds.get(0))
                        .processInstanceId(projectProcess.getProcessInsId())
                        .orderByHistoricTaskInstanceStartTime()
                        .desc()
                        .list();
                if (CollectionUtils.isNotEmpty(rejectHisTaskList)) {
                    new LambdaUpdateChainWrapper<>(processLogService.getBaseMapper())
                            .eq(ProcessLog::getTaskId, rejectHisTaskList.get(0).getId())
                            .eq(ProcessLog::getProcessInsId, projectProcess.getProcessInsId())
                            .remove();
                }
                // 1 对 1 或 多 对 1 情况,currentIds 当前要跳转的节点列表(1或多),targetIds.get(0) 跳转到的节点(1)
                runtimeService.createChangeActivityStateBuilder()
                        .processInstanceId(task.getProcessInstanceId())
                        .moveActivityIdsToSingleActivityId(currentIds, targetIds.get(0)).changeState();
            }
            historyService.deleteHistoricTaskInstance(flowTaskVo.getTaskId());
        } catch (FlowableObjectNotFoundException e) {
            throw new CustomException("未找到流程实例,流程可能已发生变化");
        } catch (FlowableException e) {
            throw new CustomException("无法取消或开始活动");
        }
        ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(projectProcessMapper)
                .eq(ProjectProcess::getProcessInsId, task.getProcessInstanceId())
                .eq(ProjectProcess::getProcessDefId, task.getProcessDefinitionId())
                .one();
        if (Objects.isNull(projectProcess)) {
            throw new CustomException("项目流程未绑定");
        }
        // 保存日志
        publisher.publishEvent(new TaskLogEvent(this, null,
@@ -978,17 +1013,17 @@
    public AjaxResult flowRecord(String procInsId) {
        Map<String, Object> map = new HashMap<String, Object>();
        if (StringUtils.isNotBlank(procInsId)) {
            List<HistoricActivityInstance> list = historyService
                    .createHistoricActivityInstanceQuery()
            List<HistoricTaskInstance> list = historyService
                    .createHistoricTaskInstanceQuery()
                    .processInstanceId(procInsId)
                    .orderByHistoricActivityInstanceStartTime()
                    .orderByHistoricTaskInstanceStartTime()
                    .desc().list();
            //扩展 获取这个流程实例的监控信息 key:TaskId value:实体类
            Map<String, ProcessCoding> processCodingMap = processCodingMapper.selectList(new QueryWrapper<ProcessCoding>().eq("process_ins_id", procInsId))
                    .stream()
                    .collect(Collectors.toMap(ProcessCoding::getTaskId, Function.identity()));
            List<FlowTaskDto> hisFlowList = new ArrayList<>();
            for (HistoricActivityInstance histIns : list) {
            for (HistoricTaskInstance histIns : list) {
                // 展示开始节点
//                if ("startEvent".equals(histIns.getActivityType())) {
//                    FlowTaskDto flowTask = new FlowTaskDto();
@@ -1006,10 +1041,10 @@
//                    flowTask.setFinishTime(histIns.getEndTime());
//                    hisFlowList.add(flowTask);
//                } else
                if (StringUtils.isNotBlank(histIns.getTaskId())) {
                if (StringUtils.isNotBlank(histIns.getId())) {
                    FlowTaskDto flowTask = new FlowTaskDto();
                    flowTask.setTaskId(histIns.getTaskId());
                    flowTask.setTaskName(histIns.getActivityName());
                    flowTask.setTaskId(histIns.getId());
                    flowTask.setTaskName(histIns.getName());
                    flowTask.setCreateTime(histIns.getStartTime());
                    flowTask.setFinishTime(histIns.getEndTime());
                    if (StringUtils.isNotBlank(histIns.getAssignee())) {
@@ -1019,7 +1054,7 @@
                        flowTask.setDeptName(Objects.nonNull(sysUser.getDept()) ? sysUser.getDept().getDeptName() : "");
                    }
                    // 展示审批人员
                    List<HistoricIdentityLink> linksForTask = historyService.getHistoricIdentityLinksForTask(histIns.getTaskId());
                    List<HistoricIdentityLink> linksForTask = historyService.getHistoricIdentityLinksForTask(histIns.getId());
                    StringBuilder stringBuilder = new StringBuilder();
                    for (HistoricIdentityLink identityLink : linksForTask) {
                        // 获选人,候选组/角色(多个)
@@ -1046,7 +1081,7 @@
                    flowTask.setDuration(histIns.getDurationInMillis() == null || histIns.getDurationInMillis() == 0 ? null : getDate(histIns.getDurationInMillis()));
                    //扩展 判断是否超时
                    ProcessCoding processCoding = processCodingMap.get(histIns.getTaskId());
                    ProcessCoding processCoding = processCodingMap.get(histIns.getId());
                    if (processCoding != null) {
                        //通过耗时判断是否是代办节点
                        //如果任务是代办节点
@@ -1065,7 +1100,7 @@
                    // 获取意见评论内容
                    List<Comment> commentList = taskService.getProcessInstanceComments(histIns.getProcessInstanceId());
                    commentList.forEach(comment -> {
                        if (histIns.getTaskId().equals(comment.getTaskId())) {
                        if (histIns.getId().equals(comment.getTaskId())) {
                            flowTask.setComment(FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build());
                        }
                    });
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -1168,11 +1168,13 @@
                vo.setExecutionId(hisTaskList.get(0).getExecutionId());
                vo.setCreateTime(hisTaskList.get(0).getStartTime());
                // 查询实际处理人
                if (StringUtils.isNotBlank(hisTaskList.get(0).getAssignee())) {
                long handlerUserId = Long.parseLong(hisTaskList.get(0).getAssignee());
                SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
                if (Objects.nonNull(handlerUser)) {
                    vo.setActualHandlerUserId(hisTaskList.get(0).getAssignee());
                    vo.setActualHandlerUserName(handlerUser.getNickName());
                    }
                }
                vo.setTaskDefinitionKey(hisTaskList.get(0).getTaskDefinitionKey());
                this.setHandler(vo, hisTaskList.get(0).getIdentityLinks());
@@ -1434,6 +1436,7 @@
                vo.setCreateTime(hisTask.getStartTime());
                // 查询实际处理人
                if (StringUtils.isNotBlank(hisTask.getAssignee())) {
                long handlerUserId = Long.parseLong(hisTask.getAssignee());
                SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
                if (Objects.nonNull(handlerUser)) {
@@ -1442,6 +1445,7 @@
                    if (Objects.nonNull(handlerUser.getDept())) {
                        vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId());
                        vo.getHandlerUnitName().add(handlerUser.getDept().getDeptName());
                        }
                    }
                }
                vo.setTaskDefinitionKey(hisTask.getTaskDefinitionKey());
@@ -1826,6 +1830,7 @@
                vo.setCreateTime(hisTask.getStartTime());
                // 查询实际处理人
                if (StringUtils.isNotBlank(hisTask.getAssignee())) {
                long handlerUserId = Long.parseLong(hisTask.getAssignee());
                SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
                if (Objects.nonNull(handlerUser)) {
@@ -1834,6 +1839,7 @@
                        vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId());
                    }
                }
                }
                this.setHandler(vo, hisTask.getIdentityLinks());
                vo.setTaskDefinitionKey(hisTask.getTaskDefinitionKey());
            }
flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java
@@ -39,5 +39,9 @@
     */
    private String processInsId;
    /**
     * 逻辑删除
     */
    private Integer deleted = 0;
}
flowable/src/main/java/com/ycl/domain/vo/FlowTaskVo.java
@@ -17,7 +17,7 @@
@ApiModel("工作流任务相关--请求参数")
public class FlowTaskVo {
    @ApiModelProperty("任务Id")
    @ApiModelProperty("当前任务Id")
    private String taskId;
    @ApiModelProperty("用户Id")
flowable/src/main/resources/mapper/ProcessLogMapper.xml
@@ -72,11 +72,13 @@
            t_process_log TFL
                LEFT JOIN sys_user SU ON SU.user_id = TFL.user_id
                LEFT JOIN sys_dept SD ON SU.dept_id = SD.dept_id
        WHERE
            TFL.deleted = 0 AND TFL.process_ins_id = #{query.processInsId}
        <where>
            <if test="query.deleted != null">TFL.deleted = #{query.deleted}</if>
            AND TFL.process_ins_id = #{query.processInsId}
            <if test="query.taskId != null and query.taskId != ''">AND TFL.task_id = #{query.taskId}</if>
            <if test="query.projectId != null and query.projectId != ''">AND TFL.project_id = #{query.projectId}</if>
            <if test="query.taskDefKey != null and query.taskDefKey != ''">AND TFL.task_def_key = #{query.taskDefKey}</if>
        </where>
        ORDER BY
            TFL.gmt_create DESC
    </select>