package org.jeecg.modules.flowable.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.flowable.apithird.entity.SysCategory; import org.jeecg.modules.flowable.apithird.entity.SysRole; import org.jeecg.modules.flowable.apithird.entity.SysUser; import org.jeecg.modules.flowable.apithird.service.IFlowThirdService; import org.jeecg.modules.flowable.domain.dto.FlowProcDefDto; import org.jeecg.modules.flowable.domain.dto.FlowSaveXmlVo; import org.jeecg.modules.flowable.service.IFlowDefinitionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; /** *
* 工作流程定义 *
* */ @Slf4j @Api(tags = "流程定义") @RestController @RequestMapping("/flowable/definition") public class FlowDefinitionController { @Autowired private IFlowDefinitionService flowDefinitionService; @Autowired private IFlowThirdService iFlowThirdService; @GetMapping(value = "/list") @ApiOperation(value = "流程定义列表", response = FlowProcDefDto.class) public Result list(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNum, @ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize, FlowProcDefDto flowProcDefDto ) { return Result.OK(flowDefinitionService.list(pageNum, pageSize,flowProcDefDto)); } @ApiOperation(value = "导入流程文件", notes = "上传bpmn20的xml文件") @PostMapping("/import") public Result importFile(@RequestParam(required = false) String name, @RequestParam(required = false) String category, MultipartFile file) { InputStream in = null; try { in = file.getInputStream(); flowDefinitionService.importFile(name, category, in); } catch (Exception e) { log.error("导入失败:", e); return Result.OK(e.getMessage()); } finally { try { if (in != null) { in.close(); } } catch (IOException e) { log.error("关闭输入流出错", e); } } return Result.OK("导入成功"); } @ApiOperation(value = "读取xml文件") @GetMapping("/readXml/{deployId}") public Result readXml(@ApiParam(value = "流程定义id") @PathVariable(value = "deployId") String deployId) { try { return flowDefinitionService.readXml(deployId); } catch (Exception e) { return Result.error("加载xml文件异常"); } } @ApiOperation(value = "读取xml文件") @GetMapping("/readXmlByDataId/{dataId}") public Result readXmlByDataId(@ApiParam(value = "流程定义id") @PathVariable(value = "dataId") String dataId) { try { return flowDefinitionService.readXmlByDataId(dataId); } catch (Exception e) { return Result.error("加载xml文件异常"); } } @ApiOperation(value = "读取图片文件") @GetMapping("/readImage/{deployId}") public void readImage(@ApiParam(value = "流程定义id") @PathVariable(value = "deployId") String deployId, HttpServletResponse response) { OutputStream os = null; BufferedImage image = null; try { image = ImageIO.read(flowDefinitionService.readImage(deployId)); response.setContentType("image/png"); os = response.getOutputStream(); if (image != null) { ImageIO.write(image, "png", os); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (os != null) { os.flush(); os.close(); } } catch (IOException e) { e.printStackTrace(); } } } @ApiOperation(value = "读取图片文件") @GetMapping("/readImageByDataId/{dataId}") public void readImageByDataId(@ApiParam(value = "流程数据业务id") @PathVariable(value = "dataId") String dataId, HttpServletResponse response) { OutputStream os = null; BufferedImage image = null; try { image = ImageIO.read(flowDefinitionService.readImageByDataId(dataId)); response.setContentType("image/png"); os = response.getOutputStream(); if (image != null) { ImageIO.write(image, "png", os); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (os != null) { os.flush(); os.close(); } } catch (IOException e) { e.printStackTrace(); } } } @ApiOperation(value = "保存流程设计器内的xml文件") @PostMapping("/save") public Result save(@RequestBody FlowSaveXmlVo vo) { InputStream in = null; try { in = new ByteArrayInputStream(vo.getXml().getBytes(StandardCharsets.UTF_8)); flowDefinitionService.importFile(vo.getName(), vo.getCategory(), in); } catch (Exception e) { log.error("导入失败:", e); return Result.OK(e.getMessage()); } finally { try { if (in != null) { in.close(); } } catch (IOException e) { log.error("关闭输入流出错", e); } } return Result.OK("导入成功"); } @ApiOperation(value = "根据流程定义id启动流程实例") @PostMapping("/startByProcDefId/{procDefId}") public Result startByProcDefId(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId, @ApiParam(value = "变量集合,json对象") @RequestBody Map