package org.springblade.mdm.flow.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.HistoryService; import org.flowable.engine.TaskService; import org.flowable.engine.task.Comment; import org.flowable.task.api.history.HistoricTaskInstance; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.mdm.basesetting.machine.vo.MachineExcelVO; import org.springblade.mdm.flow.service.ApproveRecordService; import org.springblade.mdm.flow.service.FlowBusinessService; import org.springblade.mdm.flow.vo.FlowVO; import org.springblade.mdm.flow.vo.OvertimeTaskExcelVO; import org.springblade.mdm.flow.vo.TaskTraceVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.List; @Slf4j @RestController @RequestMapping("/flow/mgr") @Tag(name = "流程管理", description = "流程管理") public class FlowMgrController { @Autowired private TaskService taskService; @Autowired private FlowBusinessService businessService; @Autowired private HistoryService historyService; @GetMapping("overtime-list") @ApiOperationSupport(order = 3) @Operation(summary = "超时查询", description = "查询所有超时任务") public R> overtimeList(@Parameter(description = "任务到达时间开始") LocalDate createTimeBegin, @Parameter(description = "任务到达时间截止")LocalDate createTimeEnd, @Parameter(description = "执行人员") String assigneeName, @Parameter(description = "关键字") String keyword, Query query) { IPage pages = businessService.selectOvertimePage(Condition.getPage(query), createTimeBegin,createTimeEnd,assigneeName,keyword); return R.data(pages); } @GetMapping("overtime-export") @ApiOperationSupport(order = 3) @Operation(summary = "超时导出", description = "超时任务导出") public void overtimeExport(@Parameter(description = "任务到达时间开始") LocalDate createTimeBegin, @Parameter(description = "任务到达时间截止")LocalDate createTimeEnd, @Parameter(description = "执行人员") String assigneeName, @Parameter(description = "关键字") String keyword, Query query, HttpServletResponse response) { query.setCurrent(1); query.setSize(Integer.MAX_VALUE); IPage pages = businessService.selectOvertimePage(Condition.getPage(query), createTimeBegin,createTimeEnd,assigneeName,keyword); List list = new ArrayList<>(); pages.getRecords().forEach(data ->{ //data.get OvertimeTaskExcelVO excelVO = new OvertimeTaskExcelVO(); BeanUtils.copyProperties(data, excelVO); list.add(excelVO); }); ExcelUtil.export(response, "超时任务" + DateUtil.time(), "超时任务表", list, OvertimeTaskExcelVO.class); } @Operation(summary = "流程执行轨迹", description = "流程执行轨迹") @GetMapping("process-trace") public R> processTrace(String processInstanceId){ List result = new ArrayList<>(); List hisTasks = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInstanceId).orderByTaskCreateTime().desc().list(); // 批注信息 List comments; for (HistoricTaskInstance hisTask : hisTasks) { TaskTraceVO vo = new TaskTraceVO(); BeanUtils.copyProperties(hisTask, vo); comments = taskService.getTaskComments(hisTask.getId()); if(!comments.isEmpty()) { vo.setComment(comments.get(0).getFullMessage()); } result.add(vo); } return R.data(result); } }