From 96a893bcc673085f7d6fe3bc5ca7dc34e7ca1db2 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期三, 12 二月 2025 17:44:25 +0800 Subject: [PATCH] flowable模块中的FlowTaskService及controller移动到business模块,完成任务和驳回任务添加日志 --- business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java | 52 +++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 45 insertions(+), 7 deletions(-) diff --git a/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java similarity index 96% rename from flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java rename to business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java index e0ff79b..ca2edcc 100644 --- a/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject; 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.plugins.pagination.Page; import com.ycl.common.constant.ProcessConstants; import com.ycl.common.core.domain.AjaxResult; @@ -13,6 +14,7 @@ import com.ycl.common.core.domain.entity.SysRole; import com.ycl.common.core.domain.entity.SysUser; import com.ycl.common.enums.FlowComment; +import com.ycl.common.enums.business.ProcessLogEventTypeEnum; import com.ycl.common.exception.CustomException; import com.ycl.common.utils.SecurityUtils; import com.ycl.domain.dto.FlowCommentDto; @@ -20,21 +22,25 @@ import com.ycl.domain.dto.FlowTaskDto; import com.ycl.domain.dto.FlowViewerDto; import com.ycl.domain.entity.ProcessCoding; +import com.ycl.domain.entity.ProjectProcess; import com.ycl.domain.entity.SysForm; +import com.ycl.domain.json.RejectData; import com.ycl.domain.vo.FlowQueryVo; import com.ycl.domain.vo.FlowTaskVo; import com.ycl.domain.vo.FormDetailVO; +import com.ycl.event.event.TaskLogEvent; import com.ycl.factory.FlowServiceFactory; import com.ycl.flow.CustomProcessDiagramGenerator; import com.ycl.flow.FindNextNodeUtil; import com.ycl.flow.FlowableUtils; import com.ycl.mapper.ProcessCodingMapper; -import com.ycl.service.ProcessLogService; -import com.ycl.service.IFlowTaskService; -import com.ycl.service.ISysDeployFormService; -import com.ycl.service.ISysFormService; +import com.ycl.mapper.ProjectProcessMapper; +import com.ycl.service.*; import com.ycl.service.common.TaskCommonService; -import com.ycl.system.service.*; +import com.ycl.system.service.ISysDeptService; +import com.ycl.system.service.ISysDictTypeService; +import com.ycl.system.service.ISysRoleService; +import com.ycl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -61,6 +67,7 @@ import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstanceQuery; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -94,6 +101,8 @@ private final TaskCommonService taskCommonService; private final ProcessCodingMapper processCodingMapper; private final ProcessLogService processLogService; + private final ApplicationEventPublisher publisher; + private final ProjectProcessMapper projectProcessMapper; /** * 瀹屾垚瀹℃牳浠诲姟 @@ -133,7 +142,13 @@ if (Objects.isNull(task)) { return AjaxResult.error("浠诲姟涓嶅瓨鍦�"); } - + ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(projectProcessMapper) + .eq(ProjectProcess::getProcessInsId, task.getProcessInstanceId()) + .eq(ProjectProcess::getProcessDefId, task.getProcessDefinitionId()) + .one(); + if (Objects.isNull(projectProcess)) { + return AjaxResult.error("椤圭洰娴佺▼鏈粦瀹�"); + } Map<String, Object> processVariables = new HashMap<>(); //鏌ュ嚭瀛楀吀涓渶瑕佹敞鍏ョ殑瀛楁淇℃伅 List<String> dictList = sysDictDService.selectDictDataByType("flow_variables").stream().map(SysDictData::getDictValue).collect(Collectors.toList()); @@ -157,6 +172,14 @@ taskService.claim(taskId, SecurityUtils.getUserId() + ""); taskService.complete(taskId, newV); } + // 淇濆瓨鏃ュ織 + publisher.publishEvent(new TaskLogEvent(this, null, + SecurityUtils.getUserId(), + projectProcess.getProjectId(), + projectProcess.getProcessInsId(), + taskId, + ProcessLogEventTypeEnum.FINISHED, + null)); return AjaxResult.success("鎻愪氦鎴愬姛"); } @@ -166,6 +189,7 @@ * @param flowTaskVo */ @Override + @Transactional(rollbackFor = Exception.class) public void taskReject(FlowTaskVo flowTaskVo) { if (taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult().isSuspended()) { throw new CustomException("浠诲姟澶勪簬鎸傝捣鐘舵��!"); @@ -281,7 +305,21 @@ } 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, + SecurityUtils.getUserId(), + projectProcess.getProjectId(), + projectProcess.getProcessInsId(), + flowTaskVo.getTaskId(), + ProcessLogEventTypeEnum.REJECT, + new RejectData(flowTaskVo.getComment()))); } /** -- Gitblit v1.8.0