package com.yanzhu.flowable.controller; import com.yanzhu.common.core.controller.BaseController; import com.yanzhu.common.core.domain.AjaxResult; import com.yanzhu.common.core.domain.entity.SysRole; import com.yanzhu.common.core.domain.entity.SysUser; import com.yanzhu.common.core.text.Convert; import com.yanzhu.flowable.domain.FlowSaveXmlVo; import com.yanzhu.system.domain.flowable.FlowQueryVo; import com.yanzhu.flowable.service.IFlowDefinitionService; import com.yanzhu.system.domain.FlowProcDefDto; import com.yanzhu.system.domain.SysExpression; import com.yanzhu.system.service.ISysExpressionService; import com.yanzhu.system.service.ISysRoleService; import com.yanzhu.system.service.ISysUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; 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; /** *
* 工作流程定义 *
* * @author Tony * @date 2021-04-03 */ @Slf4j @Api(tags = "流程定义") @RestController @RequestMapping("/flowable/definition") public class FlowDefinitionController extends BaseController { @Autowired private IFlowDefinitionService flowDefinitionService; @Autowired private ISysUserService userService; @Resource private ISysRoleService sysRoleService; @Resource private ISysExpressionService sysExpressionService; /** * 流程定义列表 * * @param flowQueryVo 流程查询 * @return 流程定义分页列表数据 */ @GetMapping(value = "/list") @ApiOperation(value = "流程定义列表", response = FlowProcDefDto.class) public AjaxResult list(FlowQueryVo flowQueryVo) { if(!SysUser.isAdmin(super.getUserId())){ flowQueryVo.setDeptId(Convert.toLong(super.getLoginUser().getUser().getDept().getAncestors().split(",")[2])); } return AjaxResult.success(flowDefinitionService.list(flowQueryVo)); } @ApiOperation(value = "导入流程文件", notes = "上传bpmn20的xml文件") @PostMapping("/import") public AjaxResult importFile(@RequestParam(required = false) String name, @RequestParam(required = false) String category, MultipartFile file) { InputStream in = null; try { in = file.getInputStream(); flowDefinitionService.importFile(name, category, null , in); } catch (Exception e) { log.error("导入失败:", e); return AjaxResult.success(e.getMessage()); } finally { try { if (in != null) { in.close(); } } catch (IOException e) { log.error("关闭输入流出错", e); } } return AjaxResult.success("导入成功"); } @ApiOperation(value = "读取xml文件") @GetMapping("/readXml/{deployId}") public AjaxResult readXml(@ApiParam(value = "流程定义id") @PathVariable(value = "deployId") String deployId) { try { return flowDefinitionService.readXml(deployId); } catch (Exception e) { return AjaxResult.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 = "保存流程设计器内的xml文件") @PostMapping("/save") public AjaxResult save(@RequestBody FlowSaveXmlVo vo) { InputStream in = null; try { in = new ByteArrayInputStream(vo.getXml().getBytes(StandardCharsets.UTF_8)); flowDefinitionService.importFile(vo.getName(), vo.getCategory(), vo.getOwnerDeptId(), in); } catch (Exception e) { log.error("导入失败:", e); return AjaxResult.error(e.getMessage()); } finally { try { if (in != null) { in.close(); } } catch (IOException e) { log.error("关闭输入流出错", e); } } return AjaxResult.success("导入成功"); } @ApiOperation(value = "发起流程") @PostMapping("/start/{procDefId}") public AjaxResult start(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId, @ApiParam(value = "变量集合,json对象") @RequestBody Map