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.core.FlowCreator;
|
import com.aizuda.bpm.engine.core.enums.TaskType;
|
import com.aizuda.bpm.engine.entity.*;
|
import com.aizuda.bpm.engine.model.NodeModel;
|
import com.aizuda.bpm.mybatisplus.mapper.*;
|
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONWriter;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
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.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.enums.StateProcessActionEnum;
|
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.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;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
|
import java.io.InputStream;
|
import java.nio.charset.StandardCharsets;
|
import java.time.LocalDateTime;
|
import java.util.*;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class StateProcessTemplateServiceImpl extends ServiceImpl<StateProcessTemplateMapper, StateProcessTemplate> implements StateProcessTemplateService {
|
|
@Autowired
|
private FlowLongEngine flowLongEngine;
|
@Autowired
|
private StateProcessInstanceActionService stateProcessInstanceActionService;
|
@Autowired
|
private StateProcessExtInstanceService stateProcessExtInstanceService;
|
@Autowired
|
private FlwHisInstanceMapper flwHisInstanceMapper;
|
@Autowired
|
private FlwTaskActorMapper flwTaskActorMapper;
|
@Autowired
|
private FlwTaskMapper flwTaskMapper;
|
@Autowired
|
private StateTaskCenterService stateTaskCenterService;
|
@Autowired
|
private StateProcessModuleService stateProcessModuleService;
|
@Autowired
|
private FlwHisTaskMapper flwHisTaskMapper;
|
@Autowired
|
private FlwHisTaskActorMapper flwHisTaskActorMapper;
|
@Autowired
|
private ISysUserService sysUserService;
|
@Autowired
|
private TContractMapper contractMapper;
|
|
/**
|
* 流程模版分页
|
* @param request
|
* @return
|
*/
|
@Override
|
public Page<StateProcessTemplate> page(ProcessTemplatePageBO request) {
|
//查询流程模板列表
|
Page<StateProcessTemplate> templatePage = this.baseMapper.page(new Page<>(request.getCurrentPage(), request.getPageSize()), request);
|
|
//更新人id列表
|
List<String> updateUserNameList = templatePage.getRecords().stream().map(BaseModel::getUpdateBy).collect(Collectors.toList());
|
if (!CollectionUtils.isEmpty(updateUserNameList)) {
|
//根据用户id列表查询用户信息
|
List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserNameList);
|
Map<String, SysUser> sysUserMap;
|
if (!CollectionUtils.isEmpty(sysUsers)) {
|
sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserName, Function.identity()));
|
} else {
|
sysUserMap = new HashMap<>();
|
}
|
//遍历列表,设置更新人名称
|
templatePage.getRecords().forEach(e -> {
|
SysUser sysUser = sysUserMap.get(e.getUpdateBy());
|
if (Objects.nonNull(sysUser)) {
|
e.setUpdateBy(sysUser.getNickName());
|
}
|
});
|
}
|
return templatePage;
|
}
|
|
/**
|
* 修改并部署模版
|
* @param processUpdateBO
|
* @return
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public Boolean update(ProcessUpdateBO processUpdateBO) {
|
//查询流程模板
|
StateProcessTemplate temp = this.getById(processUpdateBO.getId());
|
//根据template_key查询最新版本的模板
|
StateProcessTemplate template = this.getOne(Wrappers.<StateProcessTemplate>lambdaQuery()
|
.eq(StateProcessTemplate::getTemplateKey, temp.getTemplateKey())
|
.apply("(template_key, template_version) in("
|
+ "SELECT template_key, MAX(template_version) "
|
+ "FROM state_process_template " + "GROUP BY template_key)"));
|
|
if (Objects.isNull(template)) {
|
throw new GlobalException(StateErrorCode.PROCESS_TEMPLATE_NOT_EXISTS.getValue());
|
}
|
|
// 部署流程
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
FlowCreator creator = FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName());
|
DeployBO deployBO = new DeployBO();
|
deployBO.setKey(template.getTemplateKey());
|
deployBO.setName(processUpdateBO.getTemplateName());
|
deployBO.setNodeConfig(JSONObject.parseObject(processUpdateBO.getProcess(), NodeModel.class));
|
|
String deployResult = JSONObject.toJSONString(deployBO, JSONWriter.Feature.WriteMapNullValue);
|
InputStream inputStream = IOUtils.toInputStream(deployResult, StandardCharsets.UTF_8.name());
|
Long deployId = flowLongEngine.processService().deploy(inputStream, creator, true, null);
|
FlwProcess flwProcess = flowLongEngine.processService().getProcessById(deployId);
|
|
// 更新模板, version+1
|
StateProcessTemplate processTemplate = new StateProcessTemplate();
|
processTemplate.setId(processUpdateBO.getId());
|
processTemplate.setWorkFlowId(deployId);
|
processTemplate.setWorkflowVersion(flwProcess.getProcessVersion());
|
processTemplate.setTemplateName(processUpdateBO.getTemplateName());
|
|
processTemplate.setTemplateKey(template.getTemplateKey());
|
processTemplate.setProcess(processUpdateBO.getProcess());
|
processTemplate.setRemark(processUpdateBO.getRemark());
|
processTemplate.setUpdateBy(SecurityUtils.getLoginUser().getUsername());
|
processTemplate.setUpdateTime(LocalDateTime.now());
|
processTemplate.setTemplateVersion(temp.getTemplateVersion() + 1);
|
return this.updateById(processTemplate);
|
|
//查询版本是否绑定流程,更新
|
// LambdaQueryWrapper<StateProcessModule> queryWrapper = new LambdaQueryWrapper<>();
|
// queryWrapper.eq(StateProcessModule::getTemplateId, processUpdateBO.getId());
|
// List<StateProcessModule> stateProcessModules = stateProcessModuleService.list(queryWrapper);
|
// if (Objects.isNull(stateProcessModules) || stateProcessModules.isEmpty()) {
|
// return true;
|
// }
|
// for (StateProcessModule stateProcessModule : stateProcessModules) {
|
// stateProcessModule.setTemplateId(processTemplate.getId());
|
// stateProcessModule.setTemplateName(processTemplate.getTemplateName());
|
// }
|
// return stateProcessModuleService.updateBatchById(stateProcessModules);
|
}
|
|
/**
|
* 创建并部署模版
|
* @param processCreateBO
|
* @return
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public Boolean create(ProcessCreateBO processCreateBO) {
|
//查询模版是否存在
|
List<StateProcessTemplate> keys = this.list(Wrappers.<StateProcessTemplate>lambdaQuery().
|
eq(StateProcessTemplate::getTemplateName, processCreateBO.getTemplateName()));
|
if (!CollectionUtils.isEmpty(keys)) {
|
throw new GlobalException(StateErrorCode.PROCESS_TEMPLATE_KEY_EXISTS.getValue());
|
}
|
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
FlowCreator creator = FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName());
|
|
DeployBO deployBO = new DeployBO();
|
deployBO.setKey(IdUtil.simpleUUID());
|
deployBO.setName(processCreateBO.getTemplateName());
|
deployBO.setNodeConfig(JSONObject.parseObject(processCreateBO.getProcess(), NodeModel.class));
|
|
String deployResult = JSONObject.toJSONString(deployBO, JSONWriter.Feature.WriteMapNullValue);
|
|
InputStream inputStream = IOUtils.toInputStream(deployResult, StandardCharsets.UTF_8.name());
|
Long deployId = flowLongEngine.processService().deploy(inputStream, creator, false);
|
FlwProcess flwProcess = flowLongEngine.processService().getProcessById(deployId);
|
|
StateProcessTemplate processTemplate = new StateProcessTemplate();
|
processTemplate.setId(IdUtils.simpleUUID());
|
processTemplate.setWorkFlowId(deployId);
|
processTemplate.setWorkflowVersion(flwProcess.getProcessVersion());
|
processTemplate.setTemplateName(deployBO.getName());
|
processTemplate.setTemplateKey(deployBO.getKey());
|
processTemplate.setProcess(processCreateBO.getProcess());
|
processTemplate.setRemark(processCreateBO.getRemark());
|
processTemplate.setUpdateBy(loginUser.getUser().getUserName());
|
processTemplate.setUpdateTime(LocalDateTime.now());
|
return this.save(processTemplate);
|
}
|
|
/**
|
* 启动流程
|
* @param processStartBO
|
* @return
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public Boolean start(ProcessStartBO processStartBO) {
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
FlowCreator creator = FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName());
|
//查询流程绑定
|
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(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 processTaskListBO
|
* @return
|
*/
|
@Override
|
public PageInfo<ProcessTaskListVO> waitTaskPage(ProcessTaskListBO processTaskListBO) {
|
//获取当前登录用户信息
|
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());
|
}
|
stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds);
|
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);
|
|
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);
|
}
|
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());
|
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) {
|
//获取当前登录用户信息
|
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<>();
|
}
|
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)) {
|
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(Objects.isNull(processTaskListBO.getSortBy())){
|
processTaskListBO.setSortBy(2);
|
}
|
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);
|
//转换类
|
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)) {
|
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> copyTaskPage(ProcessTaskListBO processTaskListBO) {
|
Long userId = SecurityUtils.getUserId();
|
QueryWrapper<FlwHisInstance> queryWrapper = new QueryWrapper<>();
|
queryWrapper.orderByDesc("create_time");
|
List<Long> flwHisInstances = flwHisInstanceMapper.selectList(queryWrapper).stream()
|
.map(FlwHisInstance::getId).collect(Collectors.toList());
|
|
LambdaQueryWrapper<FlwHisTaskActor> query = Wrappers.<FlwHisTaskActor>lambdaQuery()
|
.and(qy -> qy.eq(FlwTaskActor::getActorId, userId)
|
.eq(FlwTaskActor::getActorType, 0)
|
.or().in(FlwTaskActor::getActorId, userId)
|
.eq(FlwTaskActor::getActorType, 1));
|
query = query.in(FlwHisTaskActor::getInstanceId, flwHisInstances);
|
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()
|
//2=抄送
|
.eq(FlwHisTask::getTaskType, 2)
|
.in(FlwHisTask::getId, hisTaskIds));
|
|
if(ObjectUtil.isEmpty(flwHisTaskList)){
|
return 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<>();
|
}
|
stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId);
|
stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
|
PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize());
|
PageInfo taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery);
|
//转换类
|
List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class);
|
pageInfo.setRecords(processTaskListVOS);
|
|
if (ObjectUtil.isEmpty(processTaskListVOS)) {
|
return pageInfo;
|
}
|
Map<Long, List<FlwHisTask>> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId));
|
|
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<>();
|
}
|
|
//查询原因
|
List<String> taskIds = flwHisTaskList.stream().map(FlwTask::getParentTaskId).filter(ObjectUtil::isNotEmpty).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()));
|
|
|
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())) {
|
processTaskListVO.setStatus(flwHisTask.getTaskState().toString());
|
processTaskListVO.setNodeName(flwHisTask.getTaskName());
|
processTaskListVO.setParentTaskId(flwHisTask.getParentTaskId().toString());
|
processTaskListVO.setTaskId(flwHisTask.getId().toString());
|
processTaskListVO.setVariable(flwHisTask.getVariable());
|
}
|
}
|
}
|
StateProcessInstanceAction action = actionMap.get(processTaskListVO.getParentTaskId());
|
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 void agree(ProcessAgreeBO processAgreeBO) {
|
Long taskId = Long.valueOf(processAgreeBO.getTaskId());
|
FlwTask flwTask = flwTaskMapper.selectById(taskId);
|
if (ObjectUtil.isNull(flwTask)) {
|
throw new GlobalException("任务已处理或者不存在");
|
}
|
flowLongEngine.executeTask(taskId, currentFlowCreator());
|
// 动作执行记录
|
StateProcessInstanceAction stateProcessInstanceAction = new StateProcessInstanceAction();
|
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());
|
stateProcessInstanceActionService.save(stateProcessInstanceAction);
|
}
|
|
@Override
|
public void refuse(ProcessRefuseBO processRefuseBO) {
|
Long taskId = Long.valueOf(processRefuseBO.getTaskId());
|
FlwTask flwTask = flwTaskMapper.selectById(taskId);
|
// 直接拒绝当前流程
|
flowLongEngine.runtimeService().reject(flwTask.getInstanceId(), currentFlowCreator());
|
// 动作执行记录
|
StateProcessInstanceAction record = new StateProcessInstanceAction();
|
record.setId(IdUtils.simpleUUID());
|
record.setInstanceId(flwTask.getInstanceId().toString());
|
record.setAuditorId(String.valueOf(SecurityUtils.getUserId()));
|
record.setActionType(StateProcessActionEnum.REJECTED.getValue());
|
record.setNodeId(processRefuseBO.getTaskId());
|
record.setRemark(processRefuseBO.getRemark());
|
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 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);
|
|
// 查询历史任务
|
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(Objects.isNull(processTaskListBO.getSortBy())){
|
processTaskListBO.setSortBy(2);
|
}
|
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 = contractMapper.selectById(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()) {
|
throw new GlobalException("非法用户");
|
}
|
return FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName());
|
}
|
|
}
|