zhangmei
2025-02-28 1fe1ac0e09132e0147e48007986be235e4130aa1
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()) {