From 0ab9dfd8f122195e4e9f09bd50c59e0a47450bec Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 19 三月 2025 15:50:03 +0800
Subject: [PATCH] fix: resolve merge conflicts in .gitignore

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java |  171 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 132 insertions(+), 39 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java
index 9cd0bf1..14e744d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java
@@ -7,8 +7,11 @@
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.aizuda.bpm.engine.FlowLongEngine;
+import com.aizuda.bpm.engine.TaskService;
 import com.aizuda.bpm.engine.core.FlowCreator;
+import com.aizuda.bpm.engine.core.enums.InstanceState;
 import com.aizuda.bpm.engine.core.enums.TaskType;
+import com.aizuda.bpm.engine.dao.FlwInstanceDao;
 import com.aizuda.bpm.engine.entity.*;
 import com.aizuda.bpm.engine.model.NodeModel;
 import com.aizuda.bpm.mybatisplus.mapper.*;
@@ -19,11 +22,14 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.ImmutableMap;
 import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.common.core.domain.BaseModel;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.domain.model.LoginUserApplet;
 import com.ruoyi.common.enums.StateProcessActionEnum;
+import com.ruoyi.common.enums.TaskEventType;
 import com.ruoyi.common.exception.GlobalException;
 import com.ruoyi.common.exception.state.StateErrorCode;
 import com.ruoyi.common.utils.SecurityUtils;
@@ -47,6 +53,7 @@
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.function.Function;
+import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 @Service
@@ -64,6 +71,8 @@
     private FlwTaskActorMapper flwTaskActorMapper;
     @Autowired
     private FlwTaskMapper flwTaskMapper;
+    @Autowired
+    private TaskService taskService;
     @Autowired
     private StateTaskCenterService stateTaskCenterService;
     @Autowired
@@ -266,6 +275,83 @@
             stateTaskCenter.setFlowId(instance.getId().toString());
             stateTaskCenter.setRemark(processStartBO.getRemark());
             stateTaskCenter.setCreateBy(loginUser.getUser().getNickName());
+            stateTaskCenter.setVariable(JSONUtil.toJsonStr(processStartBO.getVariable()));
+            stateTaskCenter.setProjectId(JSONObject.parseObject(JSONUtil.toJsonStr(processStartBO.getVariable())).getString("projectId"));
+            stateTaskCenterService.save(stateTaskCenter);
+
+            // action记录
+            StateProcessInstanceAction stateProcessInstanceAction = new StateProcessInstanceAction();
+            stateProcessInstanceAction.setId(IdUtils.simpleUUID());
+            stateProcessInstanceAction.setInstanceId(instance.getId().toString());
+            stateProcessInstanceAction.setActionType(StateProcessActionEnum.START.getValue());
+            stateProcessInstanceAction.setAuditorId(creator.getCreateId());
+            stateProcessInstanceActionService.save(stateProcessInstanceAction);
+
+            // 添加拓展信息
+            StateProcessExtInstance stateProcessExtInstance = new StateProcessExtInstance();
+            stateProcessExtInstance.setId(instance.getId().toString());
+            stateProcessExtInstance.setTemplateId(lastTemplate.getId());
+            stateProcessExtInstance.setProcessId(flwProcess.getId().toString());
+
+            //保存version
+            stateProcessExtInstance.setProcessVersion(flwProcess.getProcessVersion());
+            stateProcessExtInstanceService.save(stateProcessExtInstance);
+        }
+        return true;
+    }
+
+    /**
+     * 启动流程
+     * @param processStartBO
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean startApplet(ProcessStartBO processStartBO) {
+        String userId = "1";
+        String nickName = "admin";
+        FlowCreator creator = FlowCreator.of(userId, nickName);
+        //查询流程绑定
+        StateProcessModule stateProcessModule = stateProcessModuleService.getOne(Wrappers.<StateProcessModule>lambdaQuery()
+                .eq(StateProcessModule::getCategory, processStartBO.getCategory()));
+        if (ObjectUtil.isNull(stateProcessModule) || ObjectUtil.isEmpty(stateProcessModule.getTemplateId())) {
+            throw new GlobalException("请先配置流程引擎模版!");
+        }
+        //查询模版,准备启动
+        StateProcessTemplate template = this.getById(stateProcessModule.getTemplateId());
+        StateProcessTemplate lastTemplate = this.getOne(Wrappers.<StateProcessTemplate>lambdaQuery()
+                .eq(StateProcessTemplate::getTemplateKey, template.getTemplateKey())
+                .apply("(template_key, template_version) in(" +
+                        "SELECT template_key, MAX(template_version) " +
+                        "FROM state_process_template " +
+                        "GROUP BY template_key)")
+        );
+
+        if (ObjectUtil.isNull(lastTemplate)) {
+            throw new GlobalException(StateErrorCode.PROCESS_TEMPLATE_NOT_EXISTS.getValue());
+        }
+        FlwProcess flwProcess = flowLongEngine.processService().getProcessById(lastTemplate.getWorkFlowId());
+        if (ObjectUtil.isNull(flwProcess)) {
+            throw new GlobalException(StateErrorCode.PROCESS_NOT_DEPLOY.getValue());
+        }
+        if (!Objects.equals(lastTemplate.getWorkflowVersion(), flwProcess.getProcessVersion())) {
+            throw new GlobalException(StateErrorCode.PROCESS_VERSION_ERROR.getValue());
+        }
+        //监听器参数补全
+        processStartBO.getVariable().put("category", processStartBO.getCategory());
+        // 开启流程
+        Optional<FlwInstance> flwInstanceOptional = flowLongEngine.startInstanceById(flwProcess.getId(), creator, processStartBO.getVariable());
+        if(flwInstanceOptional.isPresent()){
+            FlwInstance instance = flwInstanceOptional.get();
+            //存储任务中心信息
+            StateTaskCenter stateTaskCenter = new StateTaskCenter();
+            stateTaskCenter.setId(IdUtils.simpleUUID());
+            stateTaskCenter.setName(processStartBO.getName());
+            stateTaskCenter.setModuleName(processStartBO.getModuleName());
+            stateTaskCenter.setCategory(processStartBO.getCategory());
+            stateTaskCenter.setFlowId(instance.getId().toString());
+            stateTaskCenter.setRemark(processStartBO.getRemark());
+            stateTaskCenter.setCreateBy(nickName);
             stateTaskCenter.setVariable(JSONUtil.toJsonStr(processStartBO.getVariable()));
             stateTaskCenter.setProjectId(JSONObject.parseObject(JSONUtil.toJsonStr(processStartBO.getVariable())).getString("projectId"));
             stateTaskCenterService.save(stateTaskCenter);
@@ -573,40 +659,29 @@
             new PageInfo<>();
         }
 
-        List<String> instanceId = flwHisTaskList.stream().map(FlwTask::getInstanceId)
+        List<String> instanceIds = flwHisTaskList.stream().map(FlwTask::getInstanceId)
                 .map(String::valueOf).collect(Collectors.toList());
         //分页查询任务中心任务
-        LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>();
-        if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) {
-            stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName());
-        }
-        if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) {
-            stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName());
-        }
-        if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) {
-            stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy());
-        }
-        if (ObjectUtil.isEmpty(instanceId)) {
-            return new PageInfo<>();
-        }
-        stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId);
-        stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
-        PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize());
-        PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery);
-        //转换类
-        List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class);
-
-        // 查询合同信息
-        for (ProcessTaskListVO processTaskListVO : processTaskListVOS) {
-            // 查询合同信息
-            TContract contract = contractMapper.selectById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId"));
-            processTaskListVO.setContract(contract);
-        }
-
-        pageInfo.setRecords(processTaskListVOS);
+//        LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>();
+//        if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) {
+//            stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName());
+//        }
+//        if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) {
+//            stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName());
+//        }
+//        if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) {
+//            stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy());
+//        }
+//        if (ObjectUtil.isEmpty(instanceId)) {
+//            return new PageInfo<>();
+//        }
+//        stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId);
+//        stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
+        processTaskListBO.setInstanceIds(instanceIds);
+        PageInfo<ProcessTaskListVO> processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO);
 
         if (ObjectUtil.isEmpty(processTaskListVOS)) {
-            return pageInfo;
+            return new PageInfo<>();
         }
         Map<Long, List<FlwHisTask>> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId));
         //查询原因
@@ -615,7 +690,7 @@
                 Wrappers.<StateProcessInstanceAction>lambdaQuery().in(StateProcessInstanceAction::getNodeId, taskIds));
         Map<String, StateProcessInstanceAction> actionMap = actions.stream().collect(Collectors.toMap(StateProcessInstanceAction::getNodeId, Function.identity()));
 
-        List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
+        List<String> updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
         Map<Long, SysUser> sysUserMap;
         if (!CollectionUtils.isEmpty(updateUserId)) {
             List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId);
@@ -629,7 +704,7 @@
             sysUserMap = new HashMap<>();
         }
 
-        for (ProcessTaskListVO processTaskListVO : processTaskListVOS) {
+        for (ProcessTaskListVO processTaskListVO : processTaskListVOS.getRecords()) {
             List<FlwHisTask> flwHisTasks = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId()));
             if (ObjectUtil.isNotEmpty(flwHisTaskMap)) {
                 //当某个用户在同一个模块审批流的多个节点都存在时,多次审核后,已审核列表页报错
@@ -652,7 +727,7 @@
                 processTaskListVO.setCreateBy(sysUser.getNickName());
             }
         }
-        return pageInfo;
+        return processTaskListVOS;
     }
     @Override
     public PageInfo<ProcessTaskListVO> dealTaskPageApplet(ProcessTaskListBO processTaskListBO) {
@@ -905,12 +980,17 @@
         if (ObjectUtil.isNull(flwTask)) {
             throw new GlobalException("任务已处理或者不存在");
         }
-        flowLongEngine.executeTask(taskId, currentFlowCreator());
-        // 动作执行记录
         StateProcessInstanceAction stateProcessInstanceAction = new StateProcessInstanceAction();
+        if(Objects.nonNull(processAgreeBO.getUserId())){
+            flowLongEngine.executeTask(taskId, currentFlowCreator(processAgreeBO.getUserId()));
+            stateProcessInstanceAction.setAuditorId(String.valueOf(processAgreeBO.getUserId()));
+        }else {
+            stateProcessInstanceAction.setAuditorId(String.valueOf(SecurityUtils.getUserId()));
+            flowLongEngine.executeTask(taskId, currentFlowCreator());
+        }
+        // 动作执行记录
         stateProcessInstanceAction.setId(IdUtils.simpleUUID());
         stateProcessInstanceAction.setInstanceId(flwTask.getInstanceId().toString());
-        stateProcessInstanceAction.setAuditorId(String.valueOf(SecurityUtils.getUserId()));
         stateProcessInstanceAction.setActionType(StateProcessActionEnum.APPROVED.getValue());
         stateProcessInstanceAction.setNodeId(processAgreeBO.getTaskId());
         stateProcessInstanceAction.setRemark(processAgreeBO.getRemark());
@@ -934,6 +1014,11 @@
         record.setRemark(processRefuseBO.getRemark());
         record.setPictures(processRefuseBO.getPictures());
         stateProcessInstanceActionService.save(record);
+    }
+    @Override
+    public void revoke(Long instanceId) {
+        FlowCreator flowCreator = FlowCreator.of(String.valueOf(SecurityUtils.getUserId()), SecurityUtils.getLoginUser().getUser().getNickName());
+        flowLongEngine.runtimeService().revoke(instanceId, flowCreator);
     }
 
     @Override
@@ -1196,6 +1281,7 @@
 
         // 查询历史任务
         List<FlwHisTask> flwHisTasks = flwHisTaskMapper.selectList(Wrappers.<FlwHisTask>lambdaQuery().eq(FlwHisTask::getInstanceId, instanceId));
+        processDetailVO.setInstanceId(String.valueOf(instanceId));
         processDetailVO.setFlwHisTasks(flwHisTasks);
 
         List<StateProcessInstanceAction> list = stateProcessInstanceActionService.list(Wrappers.<StateProcessInstanceAction>lambdaQuery().eq(StateProcessInstanceAction::getInstanceId, instanceId)
@@ -1262,8 +1348,6 @@
             processTaskListVO.setContract(contract);
         }
 
-        pageInfo.setRecords(processTaskListVOS);
-
         if (ObjectUtil.isEmpty(processTaskListVOS)) {
             return pageInfo;
         }
@@ -1280,13 +1364,15 @@
         } else {
             sysUserMap = new HashMap<>();
         }
-
         for (ProcessTaskListVO processTaskListVO : processTaskListVOS) {
+            processTaskListVO.setStatus(processTaskListVO.getTaskState() == 10 ? "2" : processTaskListVO.getTaskState().toString());
+            processTaskListVO.setTaskId(processTaskListVO.getId());
             SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy());
             if (Objects.nonNull(sysUser)) {
                 processTaskListVO.setCreateBy(sysUser.getNickName());
             }
         }
+        pageInfo.setRecords(processTaskListVOS);
         return pageInfo;
     }
 
@@ -1297,5 +1383,12 @@
         }
         return FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName());
     }
+    private FlowCreator currentFlowCreator(Long userId) {
+        if (null == userId) {
+            throw new GlobalException("非法用户");
+        }
+        SysUser sysUser = sysUserService.selectUserById(userId);
+        return FlowCreator.of(String.valueOf(sysUser.getUserId()), sysUser.getNickName());
+    }
 
 }

--
Gitblit v1.7.1