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

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java |  142 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 142 insertions(+), 0 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..3597645 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
@@ -31,6 +31,7 @@
 import com.ruoyi.system.mapper.StateProcessTemplateMapper;
 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;
@@ -71,6 +72,8 @@
     private FlwHisTaskActorMapper flwHisTaskActorMapper;
     @Autowired
     private ISysUserService sysUserService;
+    @Autowired
+    private TContractService contractService;
 
     /**
      * 流程模版分页
@@ -262,6 +265,7 @@
             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记录
@@ -352,6 +356,14 @@
 
         //转换类
         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());
@@ -439,6 +451,14 @@
         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)) {
@@ -632,6 +652,128 @@
         stateProcessInstanceActionService.save(record);
     }
 
+    @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 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"));
+        BeanUtil.copyProperties(contract, processDetailVO);
+
+        List<StateProcessInstanceAction> list = stateProcessInstanceActionService.list(Wrappers.<StateProcessInstanceAction>lambdaQuery().eq(StateProcessInstanceAction::getInstanceId, flwTask.getInstanceId())
+                .orderByDesc(StateProcessInstanceAction::getCreateTime));
+        processDetailVO.setInstanceActions(list);
+
+        return processDetailVO;
+    }
+
     private FlowCreator currentFlowCreator() {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         if (null == loginUser || null == loginUser.getUser().getUserId()) {

--
Gitblit v1.7.1