自定义按钮启动
1. 流程自定义接口发起
备注说明:启动是流程走到第一个节点,发起是流程跳过第一个申请节点,走到第二个节点
2. 工作流发起代码
@RequestMapping(value = "sponsorProcess", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
public BaseRespResult sponsorProcess(String userId, String id) {
DynaBean bean = metaService.selectOneByPk(TABLE_CODE, id);
return BaseRespResult.errorResult("未找到记录!");
if (!"NOSTATUS".equals(bean.getStr("SY_AUDFLAG"))) {
return BaseRespResult.errorResult("流程已发起!");
TaskSubmitInfo taskInfo = new TaskSubmitInfo();
taskInfo.setSubmitType("to_submit");
taskInfo.setSubmitComments("提交工单");
taskInfo.setCommentDetails("[]");
taskInfo.setTargerTaskName("客服人员");
//根据工作流引擎中,流程key,查询当前流程版本pdid taskInfo.setPdid("kehugongdan_20112516-1");
List<Map<String, Object>> maps = metaService.selectSql("SELECT STRINGVAL_ from jbpm4_deployprop where OBJNAME_='kehugongdan_20112516' and key_ = 'pdid'");
if (maps == null || maps.isEmpty() || (stringval = maps.get(0).get("STRINGVAL_")) == null) {
return BaseRespResult.errorResult("流程版本信息查找失败!");
taskInfo.setPdid(String.valueOf(stringval));
StringBuilder assigeeId = new StringBuilder();
StringBuilder assigeeCode = new StringBuilder();
StringBuilder assigeeName = new StringBuilder();
List<DynaBean> users = buildRoleUser();
return BaseRespResult.errorResult("未找到客服人员!");
for (DynaBean user : users) {
assigeeId.append(user.getStr("USERID")).append(",");
assigeeCode.append(user.getStr("USERCODE")).append(",");
assigeeName.append(user.getStr("USERCODE")).append(",");
assigeeId.setLength(assigeeId.length() - 1);
assigeeCode.setLength(assigeeCode.length() - 1);
assigeeName.setLength(assigeeName.length() - 1);
taskInfo.setAssigeeId(assigeeId.toString());
taskInfo.setAssigeeCode(assigeeCode.toString());
taskInfo.setAssigeeName(assigeeName.toString());
//模拟流程发起,调用doSponsor方法发起流程
JSONObject returnObj = new JSONObject();
wfProcessManager.doSponsor(taskInfo, taskInfo.getBeanId(), SecurityUserHolder.getCurrentUser(), returnObj, true);
if (returnObj.containsKey("error")) {
return BaseRespResult.errorResult(returnObj.getString("error"));
return BaseRespResult.successResult("发起成功");
* 这里是写死的一个角色code去获取角色中的人员,如果想动态获取需要手动解析流程示例,
* 根据流程key查询JE_CORE_PROCESSINFO这张表中的PROCESSINFO_TASKJSON字段信息,该字段信息是json字符串,里 * 面的assgineConfig字段是处理人信息
private List<DynaBean> buildRoleUser() {
return metaService.select("JE_CORE_ENDUSER", ConditionsWrapper.builder()
.like("ROLECODES", "ROLE_2020110518")