yangys
昨天 4ab2cb495ccece311bbd8d0ecb992c7de0bc8500
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowMgrController.java
@@ -5,23 +5,38 @@
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.RuntimeService;
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.log.exception.ServiceException;
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.support.Kv;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.flow.core.pojo.entity.BladeFlow;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.mdm.basesetting.machine.vo.MachineExcelVO;
import org.springblade.mdm.commons.vo.IdsVO;
import org.springblade.mdm.flow.service.ApproveRecordService;
import org.springblade.mdm.flow.service.ApproveTableService;
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.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@@ -33,21 +48,98 @@
   @Autowired
   private FlowBusinessService businessService;
   /**
    * 待办任务列表页
    */
   @Autowired
   private HistoryService historyService;
   @Autowired
   private RuntimeService runtimeService;
   @Autowired
   private ApproveTableService approveTableService;
   @GetMapping("overtime-list")
   @ApiOperationSupport(order = 3)
   @Operation(summary = "超时查询", description = "查询所有超时任务")
   public R<IPage<BladeFlow>> overtimeList(@Parameter(description = "执行人员") String assigneeName, @Parameter(description = "关键字") String keyword, Query query) {
      IPage<BladeFlow> pages = businessService.selectOvertimePage(Condition.getPage(query), assigneeName,keyword);
   public R<IPage<FlowVO>> overtimeList(@Parameter(description = "任务到达时间开始") LocalDate createTimeBegin, @Parameter(description = "任务到达时间截止")LocalDate createTimeEnd, @Parameter(description = "执行人员") String assigneeName, @Parameter(description = "关键字") String keyword, Query query) {
      IPage<FlowVO> 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<FlowVO> pages = businessService.selectOvertimePage(Condition.getPage(query), createTimeBegin,createTimeEnd,assigneeName,keyword);
      List<OvertimeTaskExcelVO> 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<List<TaskTraceVO>> processTrace(String processInstanceId){
      List<TaskTraceVO> result = new ArrayList<>();
      List<HistoricTaskInstance> hisTasks = historyService.createHistoricTaskInstanceQuery()
         .processInstanceId(processInstanceId).orderByTaskCreateTime().desc().list();
// 批注信息
      List<Comment> 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);
   }
   @GetMapping("search-list")
   @ApiOperationSupport(order = 3)
   @Operation(summary = "流程查询", description = "查询进行中的所有流程")
   public R<IPage<FlowVO>> overtimeList(@Parameter(description = "任务到达时间开始") LocalDate createTimeBegin, @Parameter(description = "任务到达时间截止")LocalDate createTimeEnd, @Parameter(description = "关键字") String keyword, Query query) {
      IPage<FlowVO> pages = businessService.selectSearchPage(Condition.getPage(query), createTimeBegin,createTimeEnd,keyword);
      return R.data(pages);
   }
   @GetMapping("process-trace")
   public R<List<TaskTraceVO>> processTrace(long processInstanceId){
      return R.data(Collections.emptyList());
   @PostMapping("delete-instance")
   @Operation(summary = "流程删除", description = "删除id指定的流程实例")
   public R<Void> deleteInstance(@Parameter(description = "任务到达时间开始") String processInstancesId) {
      try {
         businessService.deleteProcessInstance(processInstancesId);
      } catch (Exception e) {
         log.error("删除流程失败",e);
         return R.fail(e.getMessage());
      }
      return R.success();
   }
   @PostMapping("/export-approve-table")
   @Operation(summary = "导出审批表", description = "导出审批表excel")
   public void exportApproveTable(String processInstanceId, HttpServletResponse response) {
      try {
         String filename = URLEncoder.encode("数控程序编制审批单", StandardCharsets.UTF_8)+ DateUtil.format(DateUtil.now(), "yyyyMMddHHmm")+".pdf";
         response.setHeader("Content-Disposition", "attachment; filename="+filename);
         response.setContentType("application/octet-stream");
         approveTableService.exportApproveTable(processInstanceId,response.getOutputStream());
      } catch (Exception e) {
         log.error("导出DNC异常", e);
         throw new RuntimeException(e);
      }
   }
}