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.mail.MessagingException;
|
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.secure.utils.AuthUtil;
|
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.utils.DateUtil;
|
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.io.IOException;
|
import java.net.URLEncoder;
|
import java.nio.charset.StandardCharsets;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
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 FlowCommonService flowCommonService;
|
@Autowired
|
private HistoryService historyService;
|
@Autowired
|
private ApproveTableService approveTableService;
|
@Autowired
|
private ProgramConfirmTableService programConfirmTableService;
|
@Autowired
|
private IUserClient userClient;
|
@Autowired
|
private WIthdrawService withdrawService;
|
|
|
@GetMapping("overtime-list")
|
@ApiOperationSupport(order = 3)
|
@Operation(summary = "超时查询", description = "查询所有超时任务")
|
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<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();
|
// 批注信息
|
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());
|
}
|
|
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-approve-table")
|
@Operation(summary = "导出审批表", description = "导出审批表pdf")
|
public void exportApproveTable(String processInstanceId, HttpServletResponse response) {
|
|
try {
|
FlowProgramProperties props = flowCommonService.getProgramPropertiesFromHis(processInstanceId);
|
String progName = props.getDrawingNo()+"-"+props.getProcessNo()+"-"+props.getProcessEdition();
|
//String filename = URLEncoder.encode("数控程序编制审批单", StandardCharsets.UTF_8)+ DateUtil.format(DateUtil.now(), "yyyyMMddHHmm")+".pdf";
|
String filename = UrlUtil.encode("数控程序编制审批单"+progName)+".pdf";
|
response.setHeader("Content-Disposition", "attachment; filename="+filename);
|
response.setContentType("application/octet-stream");
|
approveTableService.exportApproveTable(processInstanceId,response.getOutputStream());
|
} catch (Exception e) {
|
log.error("导出审批表异常", e);
|
throw new RuntimeException(e);
|
}
|
|
}
|
|
@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());
|
}
|
}
|
}
|