From cc44920da3d40b8248b67560026e891afdd1a6ab Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期四, 08 五月 2025 17:57:14 +0800
Subject: [PATCH] 1.查询可以被引用的部件接口开发完成 2.借用部件(可批量) 开发完成 3.修改原有新增、修改部件接口 完成 4.修改原有删除文档与导入文档接口 完成 5.修改工作流问题

---
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java |  185 +++++++++++++++++++++++++++++++--------------
 1 files changed, 126 insertions(+), 59 deletions(-)

diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
index 3fe1de0..6b715e9 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
@@ -1,20 +1,20 @@
 package org.jeecg.modules.flowable.service.impl;
 
-
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
-import org.flowable.bpmn.model.Process;
 import org.flowable.bpmn.model.*;
+import org.flowable.bpmn.model.Process;
 import org.flowable.common.engine.api.FlowableException;
 import org.flowable.common.engine.api.FlowableObjectNotFoundException;
 import org.flowable.common.engine.impl.identity.Authentication;
@@ -33,19 +33,18 @@
 import org.flowable.task.api.Task;
 import org.flowable.task.api.TaskQuery;
 import org.flowable.task.api.history.HistoricTaskInstance;
-import org.flowable.task.api.history.HistoricTaskInstanceQuery;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.SpringContextUtils;
+import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto;
 import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
 import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl;
-import org.jeecg.modules.flowable.apithird.entity.ActStatus;
-import org.jeecg.modules.flowable.apithird.entity.SysUser;
-import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
-import org.jeecg.modules.flowable.apithird.service.IFlowThirdService;
 import org.jeecg.modules.flowable.apithird.common.constant.ProcessConstants;
 import org.jeecg.modules.flowable.apithird.common.enums.FlowComment;
 import org.jeecg.modules.flowable.apithird.common.exception.CustomException;
+import org.jeecg.modules.flowable.apithird.entity.SysUser;
+import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
+import org.jeecg.modules.flowable.apithird.service.IFlowThirdService;
 import org.jeecg.modules.flowable.domain.dto.FlowCommentDto;
 import org.jeecg.modules.flowable.domain.dto.FlowNextDto;
 import org.jeecg.modules.flowable.domain.dto.FlowTaskDto;
@@ -96,6 +95,10 @@
             taskService.saveTask(task);
         }
         SysUser loginUser = iFlowThirdService.getLoginUser();
+        //鍒ゆ柇鐢ㄦ埛鏄惁鏈夋潈闄�
+        if (!task.getAssignee().equals(loginUser.getUsername())){
+            return Result.error("褰撳墠鐢ㄦ埛鏃犳潈闄�");
+        }
         if (DelegationState.PENDING.equals(task.getDelegationState())) {
             taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.DELEGATE.getType(), taskVo.getComment());
             //taskService.resolveTask(taskVo.getTaskId(), taskVo.getValues());
@@ -103,7 +106,6 @@
             System.out.println("taskVo.getTaskId()--->taskVo.getInstanceId()--->FlowComment.NORMAL.getType()--->taskVo.getComment()"+taskVo.getTaskId() + "---" + taskVo.getInstanceId() + "---" + FlowComment.NORMAL.getType() + "---"+taskVo.getComment() );
             taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.NORMAL.getType(), taskVo.getComment());
             taskService.setAssignee(taskVo.getTaskId(), loginUser.getUsername());
-            //taskService.complete(taskVo.getTaskId(), taskVo.getValues());
         }
         /*======================瀹℃壒缁撴潫  鍥炶皟浠ュ強鍏抽敭鏁版嵁淇濆瓨======================*/
         //涓氬姟鏁版嵁id
@@ -157,8 +159,8 @@
 
         if (task2!=null && task.getTaskDefinitionKey().equals(task2.getTaskDefinitionKey())){
         //    * 褰撳墠鑺傜偣鏄細绛捐妭鐐癸紝娌℃湁璧板畬
-            business.setActStatus(ActStatus.doing)
-                    .setTaskId(task2.getId())
+            business.setTaskId(task2.getId())
+//                    .setActStatus(ActStatus.doing)
                     .setDoneUsers(doneUserList.toJSONString())
             ;
             String todoUsersStr = business.getTodoUsers();
@@ -202,8 +204,9 @@
                     //    鍓嶇浼犲叆鍊欓�変汉
                     collect_username = candidateUsers;
                 }
-                business.setActStatus(ActStatus.doing)
+                business
                         .setTaskId(task2.getId())
+//                        .setActStatus(ActStatus.doing)
                         .setTaskNameId(nextTask.getId())
                         .setTaskName(nextTask.getName())
                         .setPriority(nextTask.getPriority())
@@ -234,7 +237,7 @@
 
             } else {
                 //    **娌℃湁涓嬩竴涓妭鐐癸紝娴佺▼宸茬粡缁撴潫浜�
-                business.setActStatus(ActStatus.pass)
+                business
                         .setDoneUsers(doneUserList.toJSONString())
                         .setTodoUsers("")
                         .setTaskId("")
@@ -250,11 +253,13 @@
         if (flowCallBackService!=null)flowCallBackService.afterFlowHandle(business);
         return Result.OK();
     }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeByDateId(FlowTaskVo flowTaskVo){
         return this.complete(flowTaskVo);
     }
+
     @Override
     public void taskRejectByDataId(FlowTaskVo flowTaskVo){
         FlowMyBusiness business = flowMyBusinessService.getByDataId(flowTaskVo.getDataId());
@@ -409,8 +414,9 @@
             if (!doneUserList.contains(loginUser.getUsername())){
                 doneUserList.add(loginUser.getUsername());
             }
-            business.setActStatus(ActStatus.reject)
+            business
                     .setTaskId(task2.getId())
+//                    .setActStatus(ActStatus.reject)
                     .setTaskNameId(task2.getTaskDefinitionKey())
                     .setTaskName(task2.getName())
                     .setDoneUsers(doneUserList.toJSONString())
@@ -588,8 +594,9 @@
                 //**璺宠浆鍒扮洰鏍囪妭鐐�
             List<Task> task2List = taskService.createTaskQuery().processInstanceId(business.getProcessInstanceId()).active().list();
             Task targetTask = task2List.get(0);
-                business.setActStatus(ActStatus.reject)
+                business
                         .setTaskId(targetTask.getId())
+//                        .setActStatus(ActStatus.reject)
                         .setTaskNameId(targetTask.getTaskDefinitionKey())
                         .setTaskName(targetTask.getName())
                         .setPriority(targetTask.getPriority()+"")
@@ -661,6 +668,29 @@
         flowTaskVo.setTaskId(business.getTaskId());
         return findReturnTaskList(flowTaskVo);
     }
+
+    /**
+     * 缁撴潫娴佺▼
+     * @param processInstanceId 娴佺▼瀹炰緥 ID
+     * @param deleteReason 瀹氫箟鍒犻櫎鍘熷洜
+     */
+    public Result<?> end(String processInstanceId, String deleteReason) {
+        try {
+            // 寮哄埗缁撴潫娴佺▼瀹炰緥
+            runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
+            // 鍒犻櫎鍏宠仈娴佺▼鐨勪笟鍔�
+            FlowMyBusiness flowMyBusiness=flowMyBusinessService.getFlowMyBusiness(processInstanceId);
+            flowMyBusinessService.removeById(flowMyBusiness.getId());
+            System.out.println("Process instance with ID " + processInstanceId + " has been forcefully ended.");
+        } catch (Exception e) {
+            System.err.println("Failed to force end process instance: " + e.getMessage());
+        }
+
+        // 鍏抽棴娴佺▼寮曟搸
+        processEngine.close();
+        return Result.OK("娴佺▼宸茬粨鏉�");
+    }
+
     /**
      * 鑾峰彇鎵�鏈夊彲鍥為��鐨勮妭鐐�
      *
@@ -872,7 +902,7 @@
         String myTaskId = null;
         HistoricTaskInstance myTask = null;
         for (HistoricTaskInstance hti : htiList) {
-            if (loginUser.getUsername().toString().equals(hti.getAssignee())) {
+            if (loginUser.getUsername().equals(hti.getAssignee())) {
                 myTaskId = hti.getId();
                 myTask = hti;
                 break;
@@ -907,6 +937,63 @@
 
 
         return Result.OK();
+    }
+
+
+    /**
+     * 鍒ゆ柇澶氫釜浠诲姟鏄惁澶勪簬鍚屼竴娴佺▼鑺傜偣
+     * @param taskIds 閫楀彿鍒嗛殧鐨勪换鍔D瀛楃涓�
+     * @return 缁熶竴缁撴灉灏佽
+     */
+    @Override
+    public Result isSameNode(String taskIds) {
+        // 1. 鍙傛暟鏍¢獙
+        if (StringUtils.isBlank(taskIds)) {
+            return Result.error("浠诲姟ID涓嶈兘涓虹┖");
+        }
+
+        // 2. 鍒嗗壊浠诲姟ID
+        String[] taskIdArray = taskIds.split(",");
+        if (taskIdArray.length == 0) {
+            return Result.error("鏈彁渚涙湁鏁堢殑浠诲姟ID");
+        }
+
+        // 3. 鍗曚换鍔$洿鎺ヨ繑鍥瀟rue
+        if (taskIdArray.length == 1) {
+            return Result.ok(true);
+        }
+
+        // 4. 澶氫换鍔℃鏌ラ�昏緫
+        String referenceNodeId = null;
+        String currentNodeId = null;
+        for (String taskId : taskIdArray) {
+            // 4.1 鏌ヨ浠诲姟瀹炰緥
+            Task task = taskService.createTaskQuery()
+                    .taskId(taskId.trim())
+                    .singleResult();
+
+            // 4.2 浠诲姟涓嶅瓨鍦ㄥ鐞�
+            if (task == null) {
+                return Result.error("浠诲姟涓嶅瓨鍦�: " + taskId);
+            }
+
+            // 4.3 鑾峰彇鑺傜偣鏍囪瘑锛圱askDefinitionKey锛�
+            currentNodeId = task.getTaskDefinitionKey();
+
+            // 4.4 棣栨閬嶅巻鍒濆鍖栧弬鑰冭妭鐐�
+            if (referenceNodeId == null) {
+                referenceNodeId = currentNodeId;
+                continue;
+            }
+
+            // 4.5 鑺傜偣涓嶄竴鑷寸洿鎺ヨ繑鍥�
+            if (!referenceNodeId.equals(currentNodeId)) {
+                return Result.ok("鑺傜偣涓嶄竴鑷�");
+            }
+        }
+
+        // 5. 鎵�鏈変换鍔¤妭鐐逛竴鑷�
+        return Result.ok(currentNodeId);
     }
 
     /**
@@ -970,56 +1057,36 @@
      * @return
      */
     @Override
-    public Result finishedList(Integer pageNum, Integer pageSize) {
-        Page<FlowTaskDto> page = new Page<>();
+    public Result finishedList(Integer pageNum, Integer pageSize, FlowMyBusinessDto flowMyBusinessDto) {
+        //淇敼鏌ヨ锛屾坊鍔犳煡璇㈡潯浠�
+        Page page = new Page(pageNum, pageSize);
         String username = iFlowThirdService.getLoginUser().getUsername();
-        HistoricTaskInstanceQuery taskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
-                .includeProcessVariables()
-                .finished()
-                .taskAssignee(username)
-                .orderByHistoricTaskInstanceEndTime()
-                .desc();
-        List<HistoricTaskInstance> historicTaskInstanceList = taskInstanceQuery.listPage((pageNum - 1)*pageSize, pageSize);
-        List<FlowTaskDto> hisTaskList = Lists.newArrayList();
-        for (HistoricTaskInstance histTask : historicTaskInstanceList) {
-            FlowTaskDto flowTask = new FlowTaskDto();
-            // 褰撳墠娴佺▼淇℃伅
-            flowTask.setTaskId(histTask.getId());
-            // 瀹℃壒浜哄憳淇℃伅
-            flowTask.setCreateTime(histTask.getCreateTime());
-            flowTask.setFinishTime(histTask.getEndTime());
-            flowTask.setDuration(getDate(histTask.getDurationInMillis()));
-            flowTask.setProcDefId(histTask.getProcessDefinitionId());
-            flowTask.setTaskDefKey(histTask.getTaskDefinitionKey());
-            flowTask.setTaskName(histTask.getName());
-            flowTask.setDescription(flowMyBusinessService.getByProcessInstanceId(histTask.getProcessInstanceId()).getTitle());
-            // 娴佺▼瀹氫箟淇℃伅
-            ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
-                    .processDefinitionId(histTask.getProcessDefinitionId())
-                    .singleResult();
-            flowTask.setDeployId(pd.getDeploymentId());
-            flowTask.setProcDefName(pd.getName());
-            flowTask.setProcDefVersion(pd.getVersion());
-            flowTask.setProcInsId(histTask.getProcessInstanceId());
-            flowTask.setHisProcInsId(histTask.getProcessInstanceId());
-
+        flowMyBusinessDto.setCurrentUser(username);
+        List<FlowTaskDto> list = flowMyBusinessService.ListMyBusiness(flowMyBusinessDto);
+        list.forEach(flowTaskDto -> {
             // 娴佺▼鍙戣捣浜轰俊鎭�
             HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
-                    .processInstanceId(histTask.getProcessInstanceId())
+                    .processInstanceId(flowTaskDto.getProcInsId())
                     .singleResult();
             SysUser startUser = iFlowThirdService.getUserByUsername(historicProcessInstance.getStartUserId());
-            flowTask.setStartUserId(startUser.getUsername());
-            flowTask.setStartUserName(startUser.getRealname());
+            if (startUser!=null){
+                flowTaskDto.setStartUserId(startUser.getUsername());
+                flowTaskDto.setStartUserName(startUser.getRealname());
+            }
             List<String> departNamesByUsername = iFlowThirdService.getDepartNamesByUsername(historicProcessInstance.getStartUserId());
-            flowTask.setStartDeptName(CollUtil.join(departNamesByUsername,"锛�"));
-            hisTaskList.add(flowTask);
-        }
-        page.setTotal(hisTaskList.size());
-        page.setRecords(hisTaskList);
-//        Map<String, Object> result = new HashMap<>();
-//        result.put("result",page);
-//        result.put("finished",true);
-        return Result.OK(page);
+            flowTaskDto.setStartDeptName(CollUtil.join(departNamesByUsername,"锛�"));
+            if (flowTaskDto.getTodoUsers() == null){
+                flowTaskDto.setTodoUsers("");
+            }else {
+                //鍘婚櫎[]
+                flowTaskDto.setTodoUsers(flowTaskDto.getTodoUsers().replaceAll("\\[", "").replaceAll("\\]", ""));
+                flowTaskDto.setTodoUsers(flowTaskDto.getTodoUsers().replaceAll("\"", ""));
+            }
+        });
+        IPage<FlowTaskDto> flowTaskDtoIPage = new Page<>();
+        flowTaskDtoIPage.setRecords(list);
+        flowTaskDtoIPage.setTotal(page.getTotal());
+        return Result.OK(flowTaskDtoIPage);
     }
 
     private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {

--
Gitblit v1.9.3