package org.jeecg.modules.flowable.apithird.business.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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 java.util.Date; import java.util.List; /** * @Description: 流程业务扩展表 * @Author: jeecg-boot * @Date: 2021-11-25 * @Version: V1.0 */ @Service public class FlowMyBusinessServiceImpl extends ServiceImpl implements IFlowMyBusinessService { @Autowired private FlowMyBusinessMapper flowMyBusinessMapper; @Autowired private HistoryService historyService; public HistoricActivityInstance getPreviousNode(String taskId) { // 获取当前任务的执行实例 ID String executionId = historyService.createHistoricTaskInstanceQuery() .taskId(taskId) .singleResult() .getExecutionId(); // 查询历史活动实例 List 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 flowMyBusinessLambdaQueryWrapper = new LambdaQueryWrapper<>(); flowMyBusinessLambdaQueryWrapper.eq(FlowMyBusiness::getProcessInstanceId,processInstanceId) ; //如果保存数据前未调用必调的FlowCommonService.initActBusiness方法,就会有问题 FlowMyBusiness business = this.getOne(flowMyBusinessLambdaQueryWrapper); return business; } /** * 流程-我的已办 * @param flowMyBusinessDto * @return */ public List ListMyBusiness(FlowMyBusinessDto flowMyBusinessDto){ return flowMyBusinessMapper.ListMyBusiness(flowMyBusinessDto); } /** * 流程总台账 * @param flowMyBusinessDto * @return */ public IPage getPageList(Page page, FlowMyBusinessDto flowMyBusinessDto){ IPage 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; } }