From 2257a0849b158429b89bc22de8b567e39b8672fd Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 26 二月 2025 17:50:23 +0800
Subject: [PATCH] 审批流

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java |  508 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 506 insertions(+), 2 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 3597645..72b02f5 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,6 +1,7 @@
 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;
@@ -400,6 +401,145 @@
         }
         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 (processTaskListBO.getSortBy() == 1) {
+            stateTaskQuery.orderByAsc(BaseModel::getCreateTime);
+        }
+        if (processTaskListBO.getSortBy() == 2) {
+            stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
+        }
+        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 = contractService.getById(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;
+    }
 
     @Override
     public PageInfo<ProcessTaskListVO> dealTaskPage(ProcessTaskListBO processTaskListBO) {
@@ -447,6 +587,141 @@
         }
         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 = contractService.getById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId"));
+            processTaskListVO.setContract(contract);
+        }
+
+        pageInfo.setRecords(processTaskListVOS);
+
+        if (ObjectUtil.isEmpty(processTaskListVOS)) {
+            return 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());
+        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()));
+
+        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) {
+            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());
+                    }
+                }
+            }
+            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 pageInfo;
+    }
+    @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());
+        //分页查询任务中心任务
+        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<>();
+        }
+        if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) {
+            stateTaskQuery.between(StateTaskCenter::getCreateTime, startTime, endTime);
+        }
+        if (processTaskListBO.getSortBy() == 1) {
+            stateTaskQuery.orderByAsc(BaseModel::getCreateTime);
+        }
+        if (processTaskListBO.getSortBy() == 2) {
+            stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
+        }
+        stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId);
         PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize());
         PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery);
         //转换类
@@ -759,21 +1034,250 @@
         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 = contractService.getById(JSONObject.parseObject(flwTask.getVariable()).getString("projectId"));
+        TContract contract;
+        Long instanceId;
+        if(Objects.nonNull(flwTask)){
+            instanceId = flwTask.getInstanceId();
+            // 查询合同信息
+            contract = contractService.getById(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 = contractService.getById(Objects.requireNonNull(JSONObject.parseObject(flwHisTask.getVariable())).getString("projectId"));
+        }
         BeanUtil.copyProperties(contract, processDetailVO);
+
+        // 查询历史任务
+        List<FlwHisTask> flwHisTasks = flwHisTaskMapper.selectList(Wrappers.<FlwHisTask>lambdaQuery().eq(FlwHisTask::getInstanceId, instanceId));
+        processDetailVO.setFlwHisTasks(flwHisTasks);
 
         List<StateProcessInstanceAction> list = stateProcessInstanceActionService.list(Wrappers.<StateProcessInstanceAction>lambdaQuery().eq(StateProcessInstanceAction::getInstanceId, flwTask.getInstanceId())
                 .orderByDesc(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 (processTaskListBO.getSortBy() == 1) {
+            stateTaskQuery.orderByAsc(FlwHisTask::getCreateTime);
+        }
+        if (processTaskListBO.getSortBy() == 2) {
+            stateTaskQuery.orderByDesc(FlwHisTask::getCreateTime);
+        }
+        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 = contractService.getById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId"));
+            processTaskListVO.setContract(contract);
+        }
+
+        pageInfo.setRecords(processTaskListVOS);
+
+        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) {
+            SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy());
+            if (Objects.nonNull(sysUser)) {
+                processTaskListVO.setCreateBy(sysUser.getNickName());
+            }
+        }
+        return pageInfo;
+    }
+
     private FlowCreator currentFlowCreator() {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         if (null == loginUser || null == loginUser.getUser().getUserId()) {

--
Gitblit v1.7.1