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/resources/mapper/system/StateTaskCenterMapper.xml                       |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessDetailVO.java                           |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java               |    1 
 ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml                             |    2 
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java           |   14 
 ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTaskListBO.java                         |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java |  508 ++++++++++++++++++++++++++++++++++++++++++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java             |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java          |    4 
 9 files changed, 533 insertions(+), 12 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
index bb120fb..c3eb121 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
@@ -179,7 +179,6 @@
     @ApiOperation(value = "获取合同分页列表")
     @PostMapping(value = "/contractList")
     @PreAuthorize("@ss.hasPermi('system:contract:list')")
-
     public R<PageInfo<TContract>> contractList(@RequestBody TContractQuery query) {
         return R.ok(contractService.contractList(query));
     }
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java
index efaf81f..635ebdf 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java
@@ -156,21 +156,21 @@
     @ApiOperation("待办列表")
     @PostMapping("/wait/task/page")
     public AjaxResult<PageInfo<ProcessTaskListVO>> waitTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) {
-        return AjaxResult.success(processTemplateService.waitTaskPage(processTemplatePageBO));
+        return AjaxResult.success(processTemplateService.waitTaskPageApplet(processTemplatePageBO));
     }
 
     //已办
     @ApiOperation("已办列表")
     @PostMapping("/deal/task/page")
     public AjaxResult<PageInfo<ProcessTaskListVO>> dealTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) {
-        return AjaxResult.success(processTemplateService.dealTaskPage(processTemplatePageBO));
+        return AjaxResult.success(processTemplateService.dealTaskPageApplet(processTemplatePageBO));
     }
 
-    //待办和已办列表
-    @ApiOperation("待办和已办列表")
-    @PostMapping("/dealAndWait/task/page")
-    public AjaxResult<PageInfo<ProcessTaskListVO>> dealAndWaitTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) {
-        return AjaxResult.success(processTemplateService.dealAndWaitTaskPage(processTemplatePageBO));
+    //我发起的
+    @ApiOperation("我发起的列表")
+    @PostMapping("/initiate/task/page")
+    public AjaxResult<PageInfo<ProcessTaskListVO>> initiateTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) {
+        return AjaxResult.success(processTemplateService.initiateTaskPage(processTemplatePageBO));
     }
 
     //抄送
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTaskListBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTaskListBO.java
index 528e3ac..750a429 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTaskListBO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTaskListBO.java
@@ -42,4 +42,11 @@
     @ApiModelProperty(value = "前端忽略")
     private List<String> instanceIds;
 
+    @ApiModelProperty(value = "时间筛选 1=1天 2=7天 3=30天")
+    private Integer timeType;
+
+    @ApiModelProperty(value = "排序  1=最早到达 2=最新到达")
+    private Integer sortBy=2;
+
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java
index b80da00..2bd2413 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java
@@ -43,4 +43,7 @@
     @TableField("remark")
     private String remark;
 
+    @TableField(exist = false)
+    private String nickName;
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java
index 450d70e..a20f50d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java
@@ -27,9 +27,11 @@
 
     //待办
     PageInfo<ProcessTaskListVO> waitTaskPage(ProcessTaskListBO processTaskListBO);
+    PageInfo<ProcessTaskListVO> waitTaskPageApplet(ProcessTaskListBO processTaskListBO);
 
     //已办
     PageInfo<ProcessTaskListVO> dealTaskPage(ProcessTaskListBO processTaskListBO);
+    PageInfo<ProcessTaskListVO> dealTaskPageApplet(ProcessTaskListBO processTaskListBO);
 
     //抄送
     PageInfo<ProcessTaskListVO> copyTaskPage(ProcessTaskListBO processTaskListBO);
@@ -43,4 +45,6 @@
     PageInfo<ProcessTaskListVO> dealAndWaitTaskPage(ProcessTaskListBO processTemplatePageBO);
 
     ProcessDetailVO detail(String taskId);
+
+    PageInfo<ProcessTaskListVO> initiateTaskPage(ProcessTaskListBO processTemplatePageBO);
 }
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()) {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessDetailVO.java
index 1816774..02f4eed 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessDetailVO.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.vo;
 
+import com.aizuda.bpm.engine.entity.FlwHisTask;
 import com.ruoyi.system.model.StateProcessInstanceAction;
 import com.ruoyi.system.model.TContract;
 import io.swagger.annotations.ApiModel;
@@ -14,4 +15,7 @@
     @ApiModelProperty(value = "操作记录集合")
     private List<StateProcessInstanceAction> instanceActions;
 
+    @ApiModelProperty(value = "历史任务")
+    private List<FlwHisTask> flwHisTasks;
+
 }
diff --git a/ruoyi-system/src/main/resources/mapper/system/StateTaskCenterMapper.xml b/ruoyi-system/src/main/resources/mapper/system/StateTaskCenterMapper.xml
index f8488c0..6d4fd63 100644
--- a/ruoyi-system/src/main/resources/mapper/system/StateTaskCenterMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/StateTaskCenterMapper.xml
@@ -52,7 +52,7 @@
                 AND tc.contract_name like concat('%',#{query.contractName},'%')
             </if>
             <if test="query.status != null and query.status !=''">
-                AND tc.status like concat('%',#{query.status},'%')
+                AND tc.status = #{query.status}
             </if>
             AND tc.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml
index c2abe7d..7637555 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml
@@ -60,8 +60,8 @@
                 and t1.status = #{query.status}
             </if>
             AND t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
-
         </where>
+        order by t1.create_time desc
     </select>
     <select id="contractAppletList" resultType="com.ruoyi.system.model.TContract">
         select t1.* from t_contract t1

--
Gitblit v1.7.1