package org.jeecg.modules.flowable.apithird.business.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.flowable.engine.HistoryService;
|
import org.flowable.engine.history.HistoricActivityInstance;
|
import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto;
|
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
|
import org.jeecg.modules.flowable.apithird.business.mapper.FlowMyBusinessMapper;
|
import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
|
import org.jeecg.modules.flowable.domain.dto.FlowTaskDto;
|
import org.jeecg.modules.flowable.util.TimeUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @Description: 流程业务扩展表
|
* @Author: jeecg-boot
|
* @Date: 2021-11-25
|
* @Version: V1.0
|
*/
|
@Service
|
public class FlowMyBusinessServiceImpl extends ServiceImpl<FlowMyBusinessMapper, FlowMyBusiness> implements IFlowMyBusinessService {
|
@Resource
|
private FlowMyBusinessMapper flowMyBusinessMapper;
|
|
@Autowired
|
private HistoryService historyService;
|
|
public HistoricActivityInstance getPreviousNode(String taskId) {
|
// 获取当前任务的执行实例 ID
|
String executionId = historyService.createHistoricTaskInstanceQuery()
|
.taskId(taskId)
|
.singleResult()
|
.getExecutionId();
|
|
// 查询历史活动实例
|
List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery()
|
.executionId(executionId)
|
.activityType("userTask")
|
.finished()
|
.orderByHistoricActivityInstanceEndTime()
|
.desc()
|
.list();
|
|
// 取第一个结果,即上一级节点
|
if (!historicActivityInstances.isEmpty()) {
|
return historicActivityInstances.get(0);
|
}
|
|
return null;
|
}
|
|
@Transactional // 降低隔离级别
|
public FlowMyBusiness getByDataId(String dataId) {
|
//如果保存数据前未调用必调的FlowCommonService.initActBusiness方法,就会有问题
|
FlowMyBusiness business = flowMyBusinessMapper.selectByDataId(dataId);
|
return business;
|
}
|
|
|
public FlowMyBusiness getByProcessInstanceId(String processInstanceId) {
|
LambdaQueryWrapper<FlowMyBusiness> flowMyBusinessLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
flowMyBusinessLambdaQueryWrapper.eq(FlowMyBusiness::getProcessInstanceId,processInstanceId)
|
;
|
//如果保存数据前未调用必调的FlowCommonService.initActBusiness方法,就会有问题
|
FlowMyBusiness business = this.getOne(flowMyBusinessLambdaQueryWrapper);
|
return business;
|
}
|
|
/**
|
* 流程-我的已办
|
* @param flowMyBusinessDto
|
* @return
|
*/
|
public List<FlowTaskDto> ListMyBusiness(FlowMyBusinessDto flowMyBusinessDto){
|
return flowMyBusinessMapper.ListMyBusiness(flowMyBusinessDto);
|
}
|
|
/**
|
* 流程总台账
|
* @param flowMyBusinessDto
|
* @return
|
*/
|
public IPage<FlowMyBusinessDto> getPageList(Page page, FlowMyBusinessDto flowMyBusinessDto){
|
IPage<FlowMyBusinessDto> flowMyBusinessDtoIPage =flowMyBusinessMapper.PageList(page,flowMyBusinessDto);
|
flowMyBusinessDtoIPage.getRecords().forEach(item -> {
|
if (!("").equals(item.getTaskId())&&item.getTaskId()!=null){
|
HistoricActivityInstance historicActivityInstance = getPreviousNode(item.getTaskId());
|
if (historicActivityInstance != null){
|
item.setPreNode(historicActivityInstance.getActivityName());
|
}
|
}
|
if (item.getTodoUsers() == null){
|
item.setTodoUsers("");
|
}else {
|
//去除[]
|
item.setTodoUsers(item.getTodoUsers().replaceAll("\\[", "").replaceAll("\\]", ""));
|
item.setTodoUsers(item.getTodoUsers().replaceAll("\"", ""));
|
}
|
|
if (item.getDoneUsers() == null){
|
item.setDoneUsers("");
|
}else {
|
//去除[]
|
item.setDoneUsers(item.getDoneUsers().replaceAll("\\[", "").replaceAll("\\]", ""));
|
item.setDoneUsers(item.getDoneUsers().replaceAll("\"", ""));
|
}
|
//计算处理时长
|
Date kssj=item.getStartTime();
|
Date jssj;
|
if (item.getEndTime() != null){
|
jssj=item.getEndTime();
|
}else {
|
jssj=new Date();
|
}
|
item.setDuration(TimeUtil.howLong(kssj, jssj,2));
|
});
|
return flowMyBusinessDtoIPage;
|
}
|
|
@Override
|
public FlowMyBusiness getFlowMyBusiness(String instanceId) {
|
List<FlowMyBusiness> businessList = super.list(
|
new QueryWrapper<FlowMyBusiness>().eq("process_instance_id", instanceId));
|
return businessList.isEmpty() ? null : businessList.get(0);
|
}
|
|
@Override
|
public FlowMyBusiness selectByDataId(String dataId) {
|
List<FlowMyBusiness> businessList = super.list(
|
new QueryWrapper<FlowMyBusiness>().eq("data_id", dataId));
|
return businessList.isEmpty() ? null : businessList.get(0);
|
}
|
}
|