From 325eae7955d25e716684a3ae15e9aeed7951259a Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 21 三月 2025 11:04:04 +0800 Subject: [PATCH] 驳回删除日志、总体流程日志查询调整 --- business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 44 ++++++++------ business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java | 69 +++++++++++++++++----- flowable/src/main/resources/mapper/ProcessLogMapper.xml | 6 + flowable/src/main/java/com/ycl/domain/vo/FlowTaskVo.java | 2 business/src/main/java/com/ycl/controller/FlowLogController.java | 1 flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java | 4 + 6 files changed, 87 insertions(+), 39 deletions(-) diff --git a/business/src/main/java/com/ycl/controller/FlowLogController.java b/business/src/main/java/com/ycl/controller/FlowLogController.java index d88902f..7ea22a7 100644 --- a/business/src/main/java/com/ycl/controller/FlowLogController.java +++ b/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); } } diff --git a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java index fdf46b4..47599e1 100644 --- a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java +++ b/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)锛宼argetIds 璺宠浆鍒扮殑鑺傜偣(澶�) 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 鎯呭喌锛宑urrentIds 褰撳墠瑕佽烦杞殑鑺傜偣鍒楄〃(1鎴栧)锛宼argetIds.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()); } }); diff --git a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java index 439f6bc..c747293 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/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()); // 鏌ヨ瀹為檯澶勭悊浜� - 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()); + 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,14 +1436,16 @@ vo.setCreateTime(hisTask.getStartTime()); // 鏌ヨ瀹為檯澶勭悊浜� - long handlerUserId = Long.parseLong(hisTask.getAssignee()); - SysUser handlerUser = sysUserService.selectUserById(handlerUserId); - if (Objects.nonNull(handlerUser)) { - vo.getHandlerId().add(handlerUserId); - vo.getHandlerName().add(this.getUserShowName(handlerUser)); - if (Objects.nonNull(handlerUser.getDept())) { - vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId()); - vo.getHandlerUnitName().add(handlerUser.getDept().getDeptName()); + if (StringUtils.isNotBlank(hisTask.getAssignee())) { + long handlerUserId = Long.parseLong(hisTask.getAssignee()); + SysUser handlerUser = sysUserService.selectUserById(handlerUserId); + if (Objects.nonNull(handlerUser)) { + vo.getHandlerId().add(handlerUserId); + vo.getHandlerName().add(this.getUserShowName(handlerUser)); + if (Objects.nonNull(handlerUser.getDept())) { + vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId()); + vo.getHandlerUnitName().add(handlerUser.getDept().getDeptName()); + } } } vo.setTaskDefinitionKey(hisTask.getTaskDefinitionKey()); @@ -1826,12 +1830,14 @@ vo.setCreateTime(hisTask.getStartTime()); // 鏌ヨ瀹為檯澶勭悊浜� - long handlerUserId = Long.parseLong(hisTask.getAssignee()); - SysUser handlerUser = sysUserService.selectUserById(handlerUserId); - if (Objects.nonNull(handlerUser)) { - vo.getHandlerId().add(handlerUserId); - if (Objects.nonNull(handlerUser.getDept())) { - vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId()); + if (StringUtils.isNotBlank(hisTask.getAssignee())) { + long handlerUserId = Long.parseLong(hisTask.getAssignee()); + SysUser handlerUser = sysUserService.selectUserById(handlerUserId); + if (Objects.nonNull(handlerUser)) { + vo.getHandlerId().add(handlerUserId); + if (Objects.nonNull(handlerUser.getDept())) { + vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId()); + } } } this.setHandler(vo, hisTask.getIdentityLinks()); diff --git a/flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java b/flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java index 000437a..cc071bb 100644 --- a/flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java +++ b/flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java @@ -39,5 +39,9 @@ */ private String processInsId; + /** + * 閫昏緫鍒犻櫎 + */ + private Integer deleted = 0; } diff --git a/flowable/src/main/java/com/ycl/domain/vo/FlowTaskVo.java b/flowable/src/main/java/com/ycl/domain/vo/FlowTaskVo.java index 90962be..68469a7 100644 --- a/flowable/src/main/java/com/ycl/domain/vo/FlowTaskVo.java +++ b/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") diff --git a/flowable/src/main/resources/mapper/ProcessLogMapper.xml b/flowable/src/main/resources/mapper/ProcessLogMapper.xml index 8b788c5..c638af4 100644 --- a/flowable/src/main/resources/mapper/ProcessLogMapper.xml +++ b/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> -- Gitblit v1.8.0