这个时候 如果我们来查看一下流程图的xml信息
package com.dmg.service;
public interface FlowService {
String getXml(String processDefinitionKey);
}
package com.dmg.service.impl;
/**
* 流程定义服务实现类
*/
@Service
public class FlowServiceImpl extends FlowServiceFactory implements FlowService {
@Autowired
private HisApprovalMapper hisApprovalMapper;
@Autowired
private QjMapper qjMapper;
/**
* 获取xml信息
* @param processDefinitionKey 流程定义key
* @return
*/
@Override
public String getXml(String processDefinitionKey) {
//查询流程定义最新版本 一定要是最新的版本
ProcessDefinition processDefinition=repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(processDefinitionKey)
.latestVersion()
.singleResult();
//拿到xml 然后转换成流 放入字节数组中
String deploymentId=processDefinition.getDeploymentId();
//请假流程.bpmn20.xml
String resourceName=processDefinition.getResourceName();
InputStream inputStream=repositoryService.getResourceAsStream(deploymentId,resourceName);
String str="";
try {
str=IOUtils.toString(inputStream, "utf-8");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return str;
}
}
package com.dmg.controller;
/**
* 流程定义控制层
*/
@RestController
public class ProcessDefinitionController {
@Autowired
private FlowService flowService;
/**
* 查看xml
* @param processDefinitionKey 流程定义key
* @return
*/
@GetMapping(value = "getXml")
public String getXml(String processDefinitionKey){
return flowService.getXml(processDefinitionKey);
}
}
我们可以看下结果
http://localhost:8080/getXml?processDefinitionKey=qj
已经部署的流程 我们想要删除该怎么办呢?
package com.dmg.vo.req;
import lombok.Data;
@Data
public class FlowReq extends PageReq{
/**
* 流程定义名称
*/
private String processDefinitionName;
/**
* 流程定义key
*/
private String processDefinitionKey;
/**
* 任务id
*/
private String taskId;
/**
* 当前人账号
*/
private String account;
/**
* 流程定义id
*/
private String processDefinitionId;
/**
* 流程实例id
*/
private String processInstanceId;
/**
* 部署id
*/
private String deploymentId;
/**
* 如果为true 已经启动的流程关联的数据也一并删除 历史流程也会删除
* 如果为false 只删除运行 并且没有任务的流程信息
*/
private Boolean cascade;
}
package com.dmg.controller;
/**
* 流程定义控制层
*/
@RestController
public class ProcessDefinitionController {
@Autowired
private FlowService flowService;
@Autowired
private RepositoryService repositoryService;
/**
* 删除流程定义
* @return
*/
@PostMapping(value = "deleteProcessDefinition")
public Result deleteProcessDefinition(@RequestBody FlowReq req){
//删除流程定义
repositoryService.deleteDeployment(req.getDeploymentId(),req.getCascade());
return Result.success();
}
}
我们可以看下结果
http://localhost:8080/deleteProcessDefinition
{
"deploymentId":"6ea54972-6d3a-11ed-b21c-005056c00008",
"cascade":true
}
如果为true 已经启动的流程关联的数据也一并删除 历史流程也会删除
如果为false 只删除运行 并且没有任务的流程信息
如果设置false 删除有任务的数据,那么就会报错
之前我们做了认领任务,那么我不想去审批了,也可以吧任务归还
package com.dmg.controller;
/**
* 流程定义控制层
*/
@RestController
public class ProcessDefinitionController {
@Autowired
private FlowService flowService;
@Autowired
private RepositoryService repositoryService;
@Autowired
private TaskService taskService;
/**
* 取消认领/归还任务
* @return
*/
@PostMapping(value = "unclaim")
public Result unclaim(@RequestBody FlowReq req){
Task task = taskService.createTaskQuery().taskId(req.getTaskId())
.singleResult();
if(task==null){
throw new RuntimeException("任务不存在");
}
taskService.unclaim(task.getId());
return Result.success();
}
}
我们来看下结果
{
"taskId":"5076d418-6d96-11ed-9e9c-005056c00008"
}
可以看到审批人 已经设置为空了
如果当前人如果不想审批了,也可以吧任务重新交给一个新的人去审批
package com.dmg.controller;
/**
* 流程定义控制层
*/
@RestController
public class ProcessDefinitionController {
@Autowired
private FlowService flowService;
@Autowired
private RepositoryService repositoryService;
@Autowired
private TaskService taskService;
/**
* 转办
* @return
*/
@PostMapping(value = "setAssignee")
public Result setAssignee(@RequestBody FlowReq req){
Task task = taskService.createTaskQuery().taskId(req.getTaskId())
.singleResult();
if(task==null){
throw new RuntimeException("任务不存在");
}
//根据任务id 把审批人 设置为新的审批人
taskService.setAssignee(task.getId(),req.getAccount());
return Result.success();
}
}
我们来看下结果
http://localhost:8080/setAssignee
{
"taskId":"5076d418-6d96-11ed-9e9c-005056c00008",
"account":"wangwu"
}
我们可以看到审批人已经变成了wangwu