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 |  801 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 797 insertions(+), 4 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 b25418c..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
@@ -1,13 +1,17 @@
 package com.ruoyi.system.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.NumberUtil;
 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.*;
@@ -18,19 +22,25 @@
 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;
 import com.ruoyi.common.utils.uuid.IdUtils;
 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;
 import com.ruoyi.system.vo.ProcessTaskListVO;
 import lombok.AllArgsConstructor;
 import org.apache.commons.io.IOUtils;
@@ -44,6 +54,7 @@
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.function.Function;
+import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 @Service
@@ -62,6 +73,8 @@
     @Autowired
     private FlwTaskMapper flwTaskMapper;
     @Autowired
+    private TaskService taskService;
+    @Autowired
     private StateTaskCenterService stateTaskCenterService;
     @Autowired
     private StateProcessModuleService stateProcessModuleService;
@@ -71,6 +84,10 @@
     private FlwHisTaskActorMapper flwHisTaskActorMapper;
     @Autowired
     private ISysUserService sysUserService;
+    @Autowired
+    private TContractMapper contractMapper;
+    @Autowired
+    private TContractRentTypeMapper contractRentTypeMapper;
 
     /**
      * 流程模版分页
@@ -262,6 +279,84 @@
             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);
 
             // action记录
@@ -352,6 +447,164 @@
 
         //转换类
         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);
+
+        List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
+        Map<Long, SysUser> sysUserMap;
+        if (!CollectionUtils.isEmpty(updateUserId)) {
+            //根据用户id查询更新人信息
+            List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId);
+
+            if (!CollectionUtils.isEmpty(sysUsers)) {
+                sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+            } else {
+                sysUserMap = new HashMap<>();
+            }
+        } else {
+            sysUserMap = new HashMap<>();
+        }
+
+
+        Map<Long, List<FlwTask>> flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId));
+
+        for (ProcessTaskListVO processTaskListVO : processTaskListVOS) {
+            List<FlwTask> flwTask = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId()));
+            if (!CollectionUtils.isEmpty(flwTask) && ObjectUtil.isNotEmpty(flwTask.get(0))) {
+                //待审核
+                processTaskListVO.setStatus("0");
+                processTaskListVO.setNodeName(flwTask.get(0).getTaskName());
+                processTaskListVO.setTaskId(flwTask.get(0).getId().toString());
+                processTaskListVO.setVariable(flwTask.get(0).getVariable());
+            }
+            SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy());
+            if (Objects.nonNull(sysUser)) {
+                processTaskListVO.setCreateBy(sysUser.getNickName());
+            }
+        }
+        return pageInfo;
+    }
+    /**
+     * 待办
+     * @param processTaskListBO
+     * @return
+     */
+    @Override
+    public PageInfo<ProcessTaskListVO> waitTaskPageApplet(ProcessTaskListBO processTaskListBO) {
+
+        String startTime = null;
+        String endTime = null;
+        if(Objects.nonNull(processTaskListBO.getTimeType())){
+            switch (processTaskListBO.getTimeType()){
+                case 1:
+                    startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 00:00:00";
+                    endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59";
+                    break;
+                case 2:
+                    startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -7), "yyyy-MM-dd") + " 00:00:00";
+                    endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59";
+                    break;
+                case 3:
+                    startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -30), "yyyy-MM-dd") + " 00:00:00";
+                    endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59";
+                    break;
+            }
+        }
+
+        //获取当前登录用户信息
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+
+        //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录
+        LambdaQueryWrapper<FlwHisInstance> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime);
+        //待审核
+        lambdaQueryWrapper.eq(FlwHisInstance::getInstanceState, 0);
+
+        List<Long> flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream()
+                .map(FlwHisInstance::getId).collect(Collectors.toList());
+        if (ObjectUtil.isEmpty(flwHisInstances)) {
+            return new PageInfo<>();
+        }
+
+        //查询任务参与者
+        LambdaQueryWrapper<FlwTaskActor> query = new LambdaQueryWrapper<>();
+        query.and(qy -> qy.eq(FlwTaskActor::getActorId, userId)
+                //0指定用户
+                .eq(FlwTaskActor::getActorType, 0)
+                .or().in(FlwTaskActor::getActorId, userId)
+                //1指定角色
+                .eq(FlwTaskActor::getActorType, 1));
+        if (ObjectUtil.isNotNull(processTaskListBO) && ObjectUtil.isNotNull(flwHisInstances)) {
+            // 添加条件
+            query = query.in(FlwTaskActor::getInstanceId, flwHisInstances);
+        }
+        List<FlwTaskActor> flwTaskActorPage = flwTaskActorMapper.selectList(query);
+        if (ObjectUtil.isEmpty(flwTaskActorPage)) {
+            return new PageInfo<>();
+        }
+        //查询任务信息
+        List<FlwTask> flwTasks = flwTaskMapper.selectList(Wrappers.<FlwTask>lambdaQuery()
+                .orderByDesc(FlwTask::getCreateTime)
+                .in(FlwTask::getId, flwTaskActorPage.stream()
+                        .map(FlwTaskActor::getTaskId).collect(Collectors.toList())));
+
+        if (ObjectUtil.isNull(flwTasks)) {
+            return new PageInfo<>();
+        }
+        List<String> instanceIds = flwTasks.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.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) {
+            stateTaskQuery.between(StateTaskCenter::getCreateTime, startTime, endTime);
+        }
+        if(Objects.isNull(processTaskListBO.getSortBy())){
+            processTaskListBO.setSortBy(2);
+        }
+        if (processTaskListBO.getSortBy() == 1) {
+            stateTaskQuery.orderByAsc(BaseModel::getCreateTime);
+        }
+        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);
+
+        //转换类
+        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);
 
         List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
@@ -417,6 +670,127 @@
             new PageInfo<>();
         }
 
+        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);
+        processTaskListBO.setInstanceIds(instanceIds);
+        PageInfo<ProcessTaskListVO> processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO);
+
+        if (ObjectUtil.isEmpty(processTaskListVOS)) {
+            return new PageInfo<>();
+        }
+        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());
+        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;
+        if (!CollectionUtils.isEmpty(updateUserId)) {
+            List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId);
+
+            if (!CollectionUtils.isEmpty(sysUsers)) {
+                sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+            } else {
+                sysUserMap = new HashMap<>();
+            }
+        } else {
+            sysUserMap = new HashMap<>();
+        }
+
+        for (ProcessTaskListVO processTaskListVO : processTaskListVOS.getRecords()) {
+            List<FlwHisTask> flwHisTasks = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId()));
+            if (ObjectUtil.isNotEmpty(flwHisTaskMap)) {
+                //当某个用户在同一个模块审批流的多个节点都存在时,多次审核后,已审核列表页报错
+                for (FlwHisTask flwHisTask : flwHisTasks) {
+                    if (flwHisTask.getInstanceId().toString().equals(processTaskListVO.getFlowId())) {
+                        //10等于发起人与审批人一致自动审核完成
+                        processTaskListVO.setStatus(flwHisTask.getTaskState() == 10 ? "2" : flwHisTask.getTaskState().toString());
+                        processTaskListVO.setNodeName(flwHisTask.getTaskName());
+                        processTaskListVO.setTaskId(flwHisTask.getId().toString());
+                        processTaskListVO.setVariable(flwHisTask.getVariable());
+                    }
+                }
+            }
+            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)) {
+                processTaskListVO.setCreateBy(sysUser.getNickName());
+            }
+        }
+        return processTaskListVOS;
+    }
+    @Override
+    public PageInfo<ProcessTaskListVO> dealTaskPageApplet(ProcessTaskListBO processTaskListBO) {
+        String startTime = null;
+        String endTime = null;
+        if(Objects.nonNull(processTaskListBO.getTimeType())){
+            switch (processTaskListBO.getTimeType()){
+                case 1:
+                    startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 00:00:00";
+                    endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59";
+                    break;
+                case 2:
+                    startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -7), "yyyy-MM-dd") + " 00:00:00";
+                    endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59";
+                    break;
+                case 3:
+                    startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -30), "yyyy-MM-dd") + " 00:00:00";
+                    endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59";
+                    break;
+            }
+        }
+        //获取当前登录用户信息
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+        LambdaQueryWrapper<FlwHisTaskActor> query = Wrappers.<FlwHisTaskActor>lambdaQuery()
+                .and(qy -> qy.eq(FlwTaskActor::getActorId, userId)
+                        //0指定用户
+                        .eq(FlwTaskActor::getActorType, 0)
+                        //指定角色
+                        .or().in(FlwTaskActor::getActorId, userId)
+                        .eq(FlwTaskActor::getActorType, 1));
+        List<FlwHisTaskActor> flwHisTaskActors = flwHisTaskActorMapper.selectList(query);
+
+        List<Long> hisTaskIds = flwHisTaskActors.stream().map(FlwTaskActor::getTaskId).collect(Collectors.toList());
+
+        if (hisTaskIds.isEmpty()) {
+            return new PageInfo<>();
+        }
+
+        List<FlwHisTask> flwHisTaskList = flwHisTaskMapper.selectList(
+                Wrappers.<FlwHisTask>lambdaQuery()
+                        .notIn(FlwHisTask::getTaskType, TaskType.cc.getValue(), TaskType.major.getValue())
+                        .orderByDesc(FlwHisTask::getCreateTime)
+                        .in(FlwHisTask::getId, hisTaskIds));
+        if (ObjectUtil.isEmpty(flwHisTaskList)) {
+            new PageInfo<>();
+        }
+
         List<String> instanceId = flwHisTaskList.stream().map(FlwTask::getInstanceId)
                 .map(String::valueOf).collect(Collectors.toList());
         //分页查询任务中心任务
@@ -433,12 +807,39 @@
         if (ObjectUtil.isEmpty(instanceId)) {
             return new PageInfo<>();
         }
+        if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) {
+            stateTaskQuery.between(StateTaskCenter::getCreateTime, startTime, endTime);
+        }
+        if(Objects.isNull(processTaskListBO.getSortBy())){
+            processTaskListBO.setSortBy(2);
+        }
+        if (processTaskListBO.getSortBy() == 1) {
+            stateTaskQuery.orderByAsc(BaseModel::getCreateTime);
+        }
+        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);
-        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);
 
         if (ObjectUtil.isEmpty(processTaskListVOS)) {
@@ -603,15 +1004,21 @@
         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());
+        stateProcessInstanceAction.setPictures(processAgreeBO.getPictures());
         stateProcessInstanceActionService.save(stateProcessInstanceAction);
     }
 
@@ -621,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());
@@ -629,7 +1037,385 @@
         record.setActionType(StateProcessActionEnum.REJECTED.getValue());
         record.setNodeId(processRefuseBO.getTaskId());
         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
+    public PageInfo<ProcessTaskListVO> dealAndWaitTaskPage(ProcessTaskListBO processTaskListBO) {
+        //获取当前登录用户信息
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+
+        //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录
+        LambdaQueryWrapper<FlwHisInstance> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime);
+        //待审核,通过,拒绝
+        lambdaQueryWrapper.in(FlwHisInstance::getInstanceState, 0,1,2);
+
+        List<Long> flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream()
+                .map(FlwHisInstance::getId).collect(Collectors.toList());
+        if (ObjectUtil.isEmpty(flwHisInstances)) {
+            return new PageInfo<>();
+        }
+
+        //查询任务参与者
+        LambdaQueryWrapper<FlwTaskActor> query = new LambdaQueryWrapper<>();
+        query.and(qy -> qy.eq(FlwTaskActor::getActorId, userId)
+                //0指定用户
+                .eq(FlwTaskActor::getActorType, 0)
+                .or().in(FlwTaskActor::getActorId, userId)
+                //1指定角色
+                .eq(FlwTaskActor::getActorType, 1));
+        if (ObjectUtil.isNotNull(processTaskListBO) && ObjectUtil.isNotNull(flwHisInstances)) {
+            // 添加条件
+            query = query.in(FlwTaskActor::getInstanceId, flwHisInstances);
+        }
+        List<FlwTaskActor> flwTaskActorPage = flwTaskActorMapper.selectList(query);
+        if (ObjectUtil.isEmpty(flwTaskActorPage)) {
+            return new PageInfo<>();
+        }
+        //查询任务信息
+        List<FlwTask> flwTasks = flwTaskMapper.selectList(Wrappers.<FlwTask>lambdaQuery()
+                .orderByDesc(FlwTask::getCreateTime)
+                .in(FlwTask::getId, flwTaskActorPage.stream()
+                        .map(FlwTaskActor::getTaskId).collect(Collectors.toList())));
+
+        if (ObjectUtil.isNull(flwTasks)) {
+            return new PageInfo<>();
+        }
+        List<String> instanceIds = flwTasks.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());
+//        }
+//        stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds);
+//        stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
+        processTaskListBO.setInstanceIds(instanceIds);
+//        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 = contractService.getById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId"));
+//            processTaskListVO.setContract(contract);
+//        }
+//        pageInfo.setRecords(processTaskListVOS);
+
+        PageInfo<ProcessTaskListVO> processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO);
+
+        List<String> updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
+        Map<Long, SysUser> sysUserMap;
+        if (!CollectionUtils.isEmpty(updateUserId)) {
+            //根据用户id查询更新人信息
+            List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId);
+
+            if (!CollectionUtils.isEmpty(sysUsers)) {
+                sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+            } else {
+                sysUserMap = new HashMap<>();
+            }
+        } else {
+            sysUserMap = new HashMap<>();
+        }
+
+
+        Map<Long, List<FlwTask>> flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId));
+
+        for (ProcessTaskListVO processTaskListVO : processTaskListVOS.getRecords()) {
+            List<FlwTask> flwTask = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId()));
+            if (!CollectionUtils.isEmpty(flwTask) && ObjectUtil.isNotEmpty(flwTask.get(0))) {
+                //待审核
+                processTaskListVO.setStatus("0");
+                processTaskListVO.setNodeName(flwTask.get(0).getTaskName());
+                processTaskListVO.setTaskId(flwTask.get(0).getId().toString());
+                processTaskListVO.setVariable(flwTask.get(0).getVariable());
+            }
+            SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy());
+            if (Objects.nonNull(sysUser)) {
+                processTaskListVO.setCreateBy(sysUser.getNickName());
+            }
+        }
+        return processTaskListVOS;
+    }
+
+//    @Override
+//    public PageInfo<ProcessTaskListVO> dealAndWaitTaskPage(ProcessTaskListBO processTaskListBO) {
+//        //获取当前登录用户信息
+//        Long userId = SecurityUtils.getLoginUser().getUserId();
+//
+//        //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录
+//        LambdaQueryWrapper<FlwHisInstance> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+//        lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime);
+//        //待审核,通过,拒绝
+//        lambdaQueryWrapper.in(FlwHisInstance::getInstanceState, 0,1,2);
+//
+//        List<Long> flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream()
+//                .map(FlwHisInstance::getId).collect(Collectors.toList());
+//
+//        //查询任务参与者
+//        LambdaQueryWrapper<FlwTaskActor> query = new LambdaQueryWrapper<>();
+//        query.and(qy -> qy.eq(FlwTaskActor::getActorId, userId)
+//                //0指定用户
+//                .eq(FlwTaskActor::getActorType, 0)
+//                .or().in(FlwTaskActor::getActorId, userId)
+//                //1指定角色
+//                .eq(FlwTaskActor::getActorType, 1));
+//        if (ObjectUtil.isNotNull(processTaskListBO) && ObjectUtil.isNotNull(flwHisInstances)) {
+//            // 添加条件
+//            query = query.in(FlwTaskActor::getInstanceId, flwHisInstances);
+//        }
+//        List<FlwTaskActor> flwTaskActorPage = flwTaskActorMapper.selectList(query);
+//        List<String> instanceIds = new ArrayList<>();
+//        List<FlwTask> flwTasks = new ArrayList<>();
+//        if (ObjectUtil.isNotEmpty(flwTaskActorPage)) {
+//            //查询任务信息
+//            flwTasks = flwTaskMapper.selectList(Wrappers.<FlwTask>lambdaQuery()
+//                    .orderByDesc(FlwTask::getCreateTime)
+//                    .in(FlwTask::getId, flwTaskActorPage.stream()
+//                            .map(FlwTaskActor::getTaskId).collect(Collectors.toList())));
+//            if (ObjectUtil.isNotNull(flwTasks)) {
+//                instanceIds = flwTasks.stream().map(FlwTask::getInstanceId)
+//                        .map(String::valueOf).collect(Collectors.toList());
+//            }
+//        }
+//
+//        LambdaQueryWrapper<FlwHisTaskActor> hisQuery= Wrappers.<FlwHisTaskActor>lambdaQuery()
+//                .and(qy -> qy.eq(FlwTaskActor::getActorId, userId)
+//                        //0指定用户
+//                        .eq(FlwTaskActor::getActorType, 0)
+//                        //指定角色
+//                        .or().in(FlwTaskActor::getActorId, userId)
+//                        .eq(FlwTaskActor::getActorType, 1));
+//        List<FlwHisTaskActor> flwHisTaskActors = flwHisTaskActorMapper.selectList(hisQuery);
+//        List<Long> hisTaskIds = flwHisTaskActors.stream().map(FlwTaskActor::getTaskId).collect(Collectors.toList());
+//
+//        if (!CollectionUtils.isEmpty(hisTaskIds)) {
+//            List<FlwHisTask> flwHisTaskList = flwHisTaskMapper.selectList(
+//                    Wrappers.<FlwHisTask>lambdaQuery()
+//                            .notIn(FlwHisTask::getTaskType, TaskType.cc.getValue(), TaskType.major.getValue())
+//                            .orderByDesc(FlwHisTask::getCreateTime)
+//                            .in(FlwHisTask::getId, hisTaskIds));
+//            if (ObjectUtil.isNotEmpty(flwHisTaskList)) {
+//                instanceIds.addAll(flwHisTaskList.stream().map(FlwHisTask::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());
+////        }
+////        stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds);
+////        stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
+//        processTaskListBO.setInstanceIds(instanceIds);
+////        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 = contractService.getById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId"));
+////            processTaskListVO.setContract(contract);
+////        }
+////        pageInfo.setRecords(processTaskListVOS);
+//
+//        PageInfo<ProcessTaskListVO> processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO);
+//
+//        List<String> updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
+//        Map<Long, SysUser> sysUserMap;
+//        if (!CollectionUtils.isEmpty(updateUserId)) {
+//            //根据用户id查询更新人信息
+//            List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId);
+//
+//            if (!CollectionUtils.isEmpty(sysUsers)) {
+//                sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+//            } else {
+//                sysUserMap = new HashMap<>();
+//            }
+//        } else {
+//            sysUserMap = new HashMap<>();
+//        }
+//
+//        Map<Long, List<FlwTask>> flwHisTaskMap = new HashMap<>();
+//        if(!CollectionUtils.isEmpty(flwTasks)){
+//            flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId));
+//        }
+//
+//        for (ProcessTaskListVO processTaskListVO : processTaskListVOS.getRecords()) {
+//            if(!CollectionUtils.isEmpty(flwHisTaskMap)){
+//                List<FlwTask> flwTask = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId()));
+//                if (!CollectionUtils.isEmpty(flwTask) && ObjectUtil.isNotEmpty(flwTask.get(0))) {
+//                    //待审核
+//                    processTaskListVO.setStatus("0");
+//                    processTaskListVO.setNodeName(flwTask.get(0).getTaskName());
+//                    processTaskListVO.setTaskId(flwTask.get(0).getId().toString());
+//                    processTaskListVO.setVariable(flwTask.get(0).getVariable());
+//                }
+//            }
+//            SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy());
+//            if (Objects.nonNull(sysUser)) {
+//                processTaskListVO.setCreateBy(sysUser.getNickName());
+//            }
+//        }
+//        return processTaskListVOS;
+//    }
+
+    @Override
+    public ProcessDetailVO detail(String taskId) {
+        ProcessDetailVO processDetailVO = new ProcessDetailVO();
+        FlwTask flwTask = flwTaskMapper.selectById(Long.valueOf(taskId));
+        TContract contract;
+        Long instanceId;
+        if(Objects.nonNull(flwTask)){
+            instanceId = flwTask.getInstanceId();
+            // 查询合同信息
+            contract = contractMapper.selectById(JSONObject.parseObject(flwTask.getVariable()).getString("projectId"));
+        }else {
+            FlwHisTask flwHisTask = flwHisTaskMapper.selectById(Long.valueOf(taskId));
+            if(Objects.isNull(flwHisTask)){
+                throw new GlobalException("流程不存在");
+            }
+            instanceId = flwHisTask.getInstanceId();
+            contract = contractMapper.selectById(Objects.requireNonNull(JSONObject.parseObject(flwHisTask.getVariable())).getString("projectId"));
+        }
+        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)
+                .orderByAsc(StateProcessInstanceAction::getCreateTime));
+        for (StateProcessInstanceAction stateProcessInstanceAction : list) {
+            SysUser sysUser = sysUserService.selectUserById(Long.valueOf(stateProcessInstanceAction.getAuditorId()));
+            if(Objects.nonNull(sysUser)){
+                stateProcessInstanceAction.setNickName(sysUser.getNickName());
+            }
+        }
+        processDetailVO.setInstanceActions(list);
+
+        return processDetailVO;
+    }
+
+    @Override
+    public PageInfo<ProcessTaskListVO> initiateTaskPage(ProcessTaskListBO processTaskListBO) {
+        String startTime = null;
+        String endTime = null;
+        if(Objects.nonNull(processTaskListBO.getTimeType())){
+            switch (processTaskListBO.getTimeType()){
+                case 1:
+                    startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 00:00:00";
+                    endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59";
+                    break;
+                case 2:
+                    startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -7), "yyyy-MM-dd") + " 00:00:00";
+                    endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59";
+                    break;
+                case 3:
+                    startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -30), "yyyy-MM-dd") + " 00:00:00";
+                    endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59";
+                    break;
+            }
+        }
+        //获取当前登录用户信息
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+
+        //分页查询任务中心任务
+        LambdaQueryWrapper<FlwHisTask> stateTaskQuery = new LambdaQueryWrapper<>();
+        if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) {
+            stateTaskQuery.between(FlwHisTask::getCreateTime, startTime, endTime);
+        }
+        if(Objects.isNull(processTaskListBO.getSortBy())){
+            processTaskListBO.setSortBy(2);
+        }
+        if (processTaskListBO.getSortBy() == 1) {
+            stateTaskQuery.orderByAsc(FlwHisTask::getCreateTime);
+        }
+        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());
+        PageInfo<FlwHisTask> taskCenters = flwHisTaskMapper.selectPage(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);
+        }
+
+        if (ObjectUtil.isEmpty(processTaskListVOS)) {
+            return pageInfo;
+        }
+        List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
+        Map<Long, SysUser> sysUserMap;
+        if (!CollectionUtils.isEmpty(updateUserId)) {
+            List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId);
+
+            if (!CollectionUtils.isEmpty(sysUsers)) {
+                sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+            } else {
+                sysUserMap = new HashMap<>();
+            }
+        } 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;
     }
 
     private FlowCreator currentFlowCreator() {
@@ -639,5 +1425,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