From 5fa6e6f8410ef9d057174bcff2a3c5038c54a551 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期日, 27 四月 2025 18:41:20 +0800
Subject: [PATCH] bug修改

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java |  145 ++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 133 insertions(+), 12 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 7c3da74..f1b831a 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
@@ -27,6 +27,7 @@
 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;
@@ -36,6 +37,7 @@
 import com.ruoyi.system.bo.*;
 import com.ruoyi.system.mapper.StateProcessTemplateMapper;
 import com.ruoyi.system.mapper.TContractMapper;
+import com.ruoyi.system.mapper.TContractRentTypeMapper;
 import com.ruoyi.system.model.*;
 import com.ruoyi.system.service.*;
 import com.ruoyi.system.vo.ProcessDetailVO;
@@ -84,6 +86,8 @@
     private ISysUserService sysUserService;
     @Autowired
     private TContractMapper contractMapper;
+    @Autowired
+    private TContractRentTypeMapper contractRentTypeMapper;
 
     /**
      * 流程模版分页
@@ -274,6 +278,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);
@@ -502,6 +583,14 @@
         if (processTaskListBO.getSortBy() == 2) {
             stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
         }
+        // 查询合同信息
+        List<TContract> tContracts = contractMapper.selectList(Wrappers.<TContract>lambdaQuery()
+                .in(TContract::getStatus, 2,3,4,9));
+        List<String> contractIds = tContracts.stream().map(TContract::getId).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(contractIds)){
+            return new PageInfo<>();
+        }
+        stateTaskQuery.in(StateTaskCenter::getProjectId, contractIds);
         stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds);
         PageInfo pageInfo = new PageInfo(processTaskListBO.getPageNum(), processTaskListBO.getPageSize());
         PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery);
@@ -608,9 +697,12 @@
         Map<Long, List<FlwHisTask>> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId));
         //查询原因
         List<String> taskIds = flwHisTaskList.stream().map(FlowEntity::getId).map(String::valueOf).collect(Collectors.toList());
-        List<StateProcessInstanceAction> actions = stateProcessInstanceActionService.list(
-                Wrappers.<StateProcessInstanceAction>lambdaQuery().in(StateProcessInstanceAction::getNodeId, taskIds));
-        Map<String, StateProcessInstanceAction> actionMap = actions.stream().collect(Collectors.toMap(StateProcessInstanceAction::getNodeId, Function.identity()));
+        Map<String, StateProcessInstanceAction> actionMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(taskIds)){
+            List<StateProcessInstanceAction> actions = stateProcessInstanceActionService.list(
+                    Wrappers.<StateProcessInstanceAction>lambdaQuery().in(StateProcessInstanceAction::getNodeId, taskIds));
+            actionMap = actions.stream().collect(Collectors.toMap(StateProcessInstanceAction::getNodeId, Function.identity()));
+        }
 
         List<String> updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
         Map<Long, SysUser> sysUserMap;
@@ -640,9 +732,11 @@
                     }
                 }
             }
-            StateProcessInstanceAction action = actionMap.get(processTaskListVO.getTaskId());
-            if (ObjectUtil.isNotEmpty(action)) {
-                processTaskListVO.setReason(action.getRemark());
+            if(!CollectionUtils.isEmpty(actionMap)){
+                StateProcessInstanceAction action = actionMap.get(processTaskListVO.getTaskId());
+                if (ObjectUtil.isNotEmpty(action)) {
+                    processTaskListVO.setReason(action.getRemark());
+                }
             }
             SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy());
             if (Objects.nonNull(sysUser)) {
@@ -725,6 +819,14 @@
         if (processTaskListBO.getSortBy() == 2) {
             stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
         }
+        // 查询合同信息
+        List<TContract> tContracts = contractMapper.selectList(Wrappers.<TContract>lambdaQuery()
+                .in(TContract::getStatus, 2,3,4,9));
+        List<String> contractIds = tContracts.stream().map(TContract::getId).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(contractIds)){
+            return new PageInfo<>();
+        }
+        stateTaskQuery.in(StateTaskCenter::getProjectId, contractIds);
         stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId);
         PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize());
         PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery);
@@ -902,16 +1004,17 @@
         if (ObjectUtil.isNull(flwTask)) {
             throw new GlobalException("任务已处理或者不存在");
         }
+        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 stateProcessInstanceAction = new StateProcessInstanceAction();
         stateProcessInstanceAction.setId(IdUtils.simpleUUID());
         stateProcessInstanceAction.setInstanceId(flwTask.getInstanceId().toString());
-        stateProcessInstanceAction.setAuditorId(String.valueOf(processAgreeBO.getUserId()));
         stateProcessInstanceAction.setActionType(StateProcessActionEnum.APPROVED.getValue());
         stateProcessInstanceAction.setNodeId(processAgreeBO.getTaskId());
         stateProcessInstanceAction.setRemark(processAgreeBO.getRemark());
@@ -925,6 +1028,7 @@
         FlwTask flwTask = flwTaskMapper.selectById(taskId);
         // 直接拒绝当前流程
         flowLongEngine.runtimeService().reject(flwTask.getInstanceId(), currentFlowCreator());
+        flwTaskMapper.deleteById(taskId);
         // 动作执行记录
         StateProcessInstanceAction record = new StateProcessInstanceAction();
         record.setId(IdUtils.simpleUUID());
@@ -1200,9 +1304,15 @@
         }
         BeanUtil.copyProperties(contract, processDetailVO);
 
+        // 查询递增递减
+        TContractRentType tContractRentType = contractRentTypeMapper.selectOne(Wrappers.lambdaQuery(TContractRentType.class)
+                .eq(TContractRentType::getContractId, contract.getId())
+                .last("LIMIT 1"));
+        processDetailVO.setContractRentType(tContractRentType);
+
         // 查询历史任务
         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)
@@ -1255,6 +1365,17 @@
         if (processTaskListBO.getSortBy() == 2) {
             stateTaskQuery.orderByDesc(FlwHisTask::getCreateTime);
         }
+        List<TContract> tContracts = contractMapper.selectList(Wrappers.<TContract>lambdaQuery()
+                .in(TContract::getStatus, 2,3,4,9));
+        List<String> contractIds = tContracts.stream().map(TContract::getId).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(contractIds)){
+            return new PageInfo<>();
+        }
+        List<StateTaskCenter> list = stateTaskCenterService.list(Wrappers.<StateTaskCenter>lambdaQuery().in(StateTaskCenter::getProjectId, contractIds));
+        if(!CollectionUtils.isEmpty(list)){
+            List<String> flowIds = list.stream().map(StateTaskCenter::getFlowId).collect(Collectors.toList());
+            stateTaskQuery.in(FlwHisTask::getInstanceId, flowIds);
+        }
         stateTaskQuery.eq(FlwHisTask::getParentTaskId, 0L);
         stateTaskQuery.like(FlwHisTask::getCreateId, userId);
         PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize());
@@ -1268,8 +1389,6 @@
             TContract contract = contractMapper.selectById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId"));
             processTaskListVO.setContract(contract);
         }
-
-        pageInfo.setRecords(processTaskListVOS);
 
         if (ObjectUtil.isEmpty(processTaskListVOS)) {
             return pageInfo;
@@ -1287,13 +1406,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;
     }
 

--
Gitblit v1.7.1