yangys
2025-09-29 4c7296d45efe849dc70a3b2e2240c905481a91c9
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowMgrController.java
@@ -5,6 +5,7 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.mail.MessagingException;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.HistoryService;
@@ -14,20 +15,25 @@
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.secure.utils.AuthUtil;
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.FlowBusinessService;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.UrlUtil;
import org.springblade.mdm.flow.service.*;
import org.springblade.mdm.flow.vo.FlowVO;
import org.springblade.mdm.flow.vo.OvertimeTaskExcelVO;
import org.springblade.mdm.flow.vo.TaskTraceVO;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Slf4j
@@ -39,9 +45,18 @@
   private TaskService taskService;
   @Autowired
   private FlowBusinessService businessService;
   @Autowired
   private FlowCommonService flowCommonService;
   @Autowired
   private HistoryService historyService;
   @Autowired
   private ProgramConfirmTableService programConfirmTableService;
   @Autowired
   private IUserClient userClient;
   @Autowired
   private WIthdrawService withdrawService;
   @GetMapping("overtime-list")
   @ApiOperationSupport(order = 3)
@@ -71,9 +86,22 @@
   }
   @Operation(summary = "流程轨迹", description = "流程轨迹")
   @Operation(summary = "流程执行轨迹", description = "流程执行轨迹/审批记录")
   @GetMapping("process-trace")
   public R<List<TaskTraceVO>> processTrace(String processInstanceId){
      /*
      List<ApproveRecord> records = approveRecordService.lambdaQuery().eq(ApproveRecord::getProcessInstanceId,processInstanceId).orderByAsc(ApproveRecord::getCreateTime).list();
      List<TaskTraceVO> result = new ArrayList<>();
      for (ApproveRecord record : records) {
         TaskTraceVO vo = new TaskTraceVO();
         vo.setComment(record.getComment());
         vo.setCreateTime(record.getCreateTime());
         vo.setAssigneeName(record.getUserNickname());
         //vo.setEndTime();
      }*/
      List<TaskTraceVO> result = new ArrayList<>();
      List<HistoricTaskInstance> hisTasks = historyService.createHistoricTaskInstanceQuery()
         .processInstanceId(processInstanceId).orderByTaskCreateTime().desc().list();
@@ -86,11 +114,98 @@
         if(!comments.isEmpty()) {
            vo.setComment(comments.get(0).getFullMessage());
         }
         vo.setTaskName(hisTask.getName());
         R<User> assigneeObj = userClient.userInfoById(Func.toLong(hisTask.getAssignee()));
         if(assigneeObj.isSuccess()) {
            vo.setAssigneeName(assigneeObj.getData().getName());
         }
         result.add(vo);
      }
      return R.data(result);
   }
   @GetMapping("search-list")
   @ApiOperationSupport(order = 3)
   @Operation(summary = "流程查询", description = "查询进行中的所有流程")
   public R<IPage<FlowVO>> searchList(@Parameter(description = "流程名称")String myProcessName, @Parameter(description = "流程时间开始") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDate createTimeBegin, @Parameter(description = "流程创建时间截止")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDate createTimeEnd, @Parameter(description = "关键字") String keyword, Query query) {
      IPage<FlowVO> pages = businessService.selectSearchPage(Condition.getPage(query),myProcessName,keyword, createTimeBegin,createTimeEnd);
      return R.data(pages);
   }
   @GetMapping("finished-list")
   @ApiOperationSupport(order = 3)
   @Operation(summary = "历史流程查询", description = "查询已完结的所有流程")
   public R<IPage<FlowVO>> finishedList(@Parameter(description = "流程名称")String myProcessName, @Parameter(description = "流程创建时间开始") LocalDateTime createTimeBegin, @Parameter(description = "流程创建时间截止") LocalDateTime createTimeEnd, @Parameter(description = "关键字") String keyword, Query query) {
      IPage<FlowVO> pages = businessService.selectFinishedPage(Condition.getPage(query), myProcessName,keyword,createTimeBegin,createTimeEnd);
      return R.data(pages);
   }
   @GetMapping("exception-list")
   @ApiOperationSupport(order = 3)
   @Operation(summary = "异常流程查询", description = "查询已完结的,异常流程")
   public R<IPage<FlowVO>> exceptionList(@Parameter(description = "流程名称")String myProcessName, @Parameter(description = "流程创建时间开始") LocalDateTime createTimeBegin, @Parameter(description = "流程创建时间截止") LocalDateTime createTimeEnd, @Parameter(description = "关键字") String keyword, Query query) {
      IPage<FlowVO> pages = businessService.selectExceptionPage(Condition.getPage(query), myProcessName,keyword,createTimeBegin,createTimeEnd);
      return R.data(pages);
   }
   @PostMapping("delete-instance")
   @Operation(summary = "流程删除", description = "删除id指定的流程实例")
   public R<Void> deleteInstance(@Parameter(description = "任务到达时间开始") String processInstanceId) {
      try {
         businessService.deleteProcessInstance(processInstanceId);
      } catch (Exception e) {
         log.error("删除流程失败",e);
         return R.fail(e.getMessage());
      }
      return R.success();
   }
   @PostMapping("/export-confirm-table")
   @Operation(summary = "导出确认表", description = "导出数控程序确认表pdf")
   public void exportConfirmTable(String processInstanceId, HttpServletResponse response) {
      try {
         FlowProgramProperties props = flowCommonService.getProgramPropertiesFromHis(processInstanceId);
         String progName = props.getDrawingNo()+"-"+props.getProcessNo()+"-"+props.getProcessEdition();
         String filename = UrlUtil.encode("数控程序确认表"+progName)+".pdf";
         response.setHeader("Content-Disposition", "attachment; filename="+filename);
         response.setContentType("application/octet-stream");
         programConfirmTableService.exportConfirmTable(props,response.getOutputStream());
      } catch (Exception e) {
         log.error("导出数控程序确认表pdf异常", e);
         throw new RuntimeException(e);
      }
   }
   @GetMapping("/withdraw")
   @Operation(summary = "撤回任务", description = "从其他任务节点直接撤回编程员节点")
   public R<Void> withdraw(String processInstanceId)  {
      try {
         withdrawService.withdraw(processInstanceId);
         return R.success();
      }catch(Exception e) {
         log.error("<UNK>", e);
         return R.fail(e.getMessage());
      }
   }
   @GetMapping("/takeback")
   @Operation(summary = "组长取回", description = "从其他任务节点直接撤回到组长派工节点")
   public R<Void> takeback(String processInstanceId)  {
      try {
         withdrawService.takeBackToDispatch(processInstanceId);
         return R.success();
      }catch(Exception e) {
         log.error("<UNK>", e);
         return R.fail(e.getMessage());
      }
   }
}