package org.springblade.mdm.flow.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.DateUtil; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.springblade.core.mp.support.Condition; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.flow.entity.TaskDispatch; import org.springblade.mdm.flow.excution.StartDispatcher; import org.springblade.mdm.flow.service.FlowProgramFileService; import org.springblade.mdm.flow.service.TaskDispatchService; import org.springblade.mdm.flow.service.execute.*; import org.springblade.mdm.flow.vo.DispathTaskQueryVO; import org.springblade.mdm.flow.vo.FlowStartResult; import org.springblade.mdm.flow.vo.TaskAssignVO; import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; @Slf4j @RestController @AllArgsConstructor @RequestMapping("/flow/task") @Tag(name = "派工流程", description = "派工流程") public class DispatchTaskController { private final StartDispatcher dispatcher; private final TaskService taskService; private final RuntimeService runtimeService; private final FlowProgramFileService flowProgramFileService; private final TryFlowCompleteService tryFlowCompleteService; private final DefaultFlowCompleteService defaultFlowCompleteService; private final TaskDispatchService taskDispatchService; @Operation(summary = "异常任务分页查询", description = "查询勤哲分工表数据") @GetMapping("/exception-page") public R> exceptionTaskPage(DispathTaskQueryVO queryVO) { LocalDateTime end = null; if(queryVO.getCreateTimeEnd()!=null){ end = DateUtil.toLocalDateTime(queryVO.getCreateTimeEnd()).plusDays(1); } return R.data(taskDispatchService.lambdaQuery() .like(StringUtils.isNotBlank(queryVO.getDrawingNo()), TaskDispatch::getDrawingNo,queryVO.getDrawingNo()) .ne(TaskDispatch::getStatus,TaskDispatch.STATUS_INIT).ne(TaskDispatch::getStatus,TaskDispatch.STATUS_STARTED) .ge(queryVO.getCreateTimeBegin()!=null, TaskDispatch::getCreateTime,queryVO.getCreateTimeBegin()) .le(queryVO.getCreateTimeEnd()!=null, TaskDispatch::getCreateTime,end).orderByDesc(TaskDispatch::getCreateTime) .page(Condition.getPage(queryVO))); } /** * 删除 */ @Operation(summary = "删除", description = "删除") @PostMapping("/remove") public R remove(@RequestParam String ids) { try { taskDispatchService.removeBatchByIds(Func.toLongList(ids)); } catch (Exception e) { log.error("删除异常",e); return R.fail(e.getMessage()); } return R.status(true); } @PostMapping("/force-start") @Operation(summary = "强制启动派工", description = "从任务异常记录启动派工流程") public R forceStart(long id) { try { TaskDispatch dispatch = taskDispatchService.getById(id); TaskAssignVO startVO = new TaskAssignVO(); BeanUtils.copyProperties(dispatch, startVO); startVO.setTitle(startVO.getDrawingNo()+"-"+startVO.getProcessNo()+"-"+startVO.getProcessEdition()+"数控程序编制"); try { FlowStartResult result = dispatcher.start(startVO); dispatch.setStatus(TaskDispatch.STATUS_STARTED); dispatch.setProcessInstanceId(result.getProcessInstanceId()); dispatch.setProgramNo(result.getProgramNo()); taskDispatchService.updateById(dispatch); } catch (Exception e) { log.error("流程启动异常",e); dispatch.setStatus(TaskDispatch.STATUS_EXCEPTION); dispatch.setErrMsg(e.getMessage()); taskDispatchService.updateById(dispatch); return R.fail("任务启动异常"); } return R.data(true); }catch(Exception e){ return R.fail(e.getMessage()); } } }