注册用户
请假流程涉及到 4 个用户:zangsan、lisi、wangwu、zhaoliu。
String[][] usersGroupsAndRoles = {
{"zhangsan", "1", "ROLE_ACTIVITI_USER", "GROUP_employee"},
{"lisi", "1", "ROLE_ACTIVITI_USER", "GROUP_leader"},
{"wangwu", "1", "ROLE_ACTIVITI_USER", "GROUP_director"},
{"zhaoliu", "1", "ROLE_ACTIVITI_USER", "GROUP_hr"},
{"admin", "1234", "ROLE_ACTIVITI_ADMIN"},
};
流程图
将 LeaveRequestProcess.bpm 拷贝到 resources/processes 目录。
启动流程
@RequestMapping("/start-leave-process")
@ResponseBody
public ProcessInstance startLeaveProcess(@RequestBody JSONObject json, HttpServletRequest req) {
String reason = json.getAsString("reason");
String date = json.getAsString("date");
Number days = json.getAsNumber("days");
String username = getLoginUsername(req);
json.put("applicant",username);
String leader = json.getAsString("leader");
String director = json.getAsString("director");
String hr = json.getAsString("hr");
Assert.hasText(reason,"事由没有填写");
Assert.hasText(date,"请假日期没有填写");
Assert.isTrue(days.intValue()>0,"请假天数格式错误");
Assert.hasText("applicant","申请人未填写");
Assert.hasText(leader,"leader没有填写");
Assert.hasText(director,"总监没有填写");
Assert.hasText(hr,"人资未填写");
String definitionKey ="LeaveRequestProcess";
ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder
.start()
.withProcessDefinitionKey(definitionKey)
.withName("Leave Process: " + new Date())//.withProcessInstanceName("Sample Process: " + new Date())
// .withVariable("someProcessVar", "someProcVarValue")
.withVariables(json)
.build());
logger.info(">>> Created Process Instance: " + processInstance);
return processInstance;
}
打开 Postman ,测试启动流程: http://localhost:8080/process-definitions,Post JSON 数据:
{
"reason":"xx323",
"date":"2019-1-1",
"days":"5",
"leader":"lisi",
"director":"wangwu",
"hr":"zhaoliu"
}
使用 Basic Auth 选项,输入 zhangsan 的用户名密码。
查询 zhangsan 的待办:http://localhost:8080/my-tasks
[
{
"id": "6d394dcc-4bb0-11e9-a5e6-62c7d1691b1b",
"name": "新的请假申请",
"status": "ASSIGNED",
"assignee": "zhangsan",
"description": "${description}",
"createdDate": "2019-03-21T08:07:52.734+0000",
"priority": 50,
"processDefinitionId": "LeaveRequestProcess:1:5dcffdc2-4bb0-11e9-a5e6-62c7d1691b1b",
"processInstanceId": "6ceb54d3-4bb0-11e9-a5e6-62c7d1691b1b"
}
]
记下 taskId,后面用到。
办理任务
提交申请
@ResponseBody
@RequestMapping("/applicant-complete")
public String applicantComplete(@RequestParam(value="taskId") String taskId) {
taskRuntime.complete(TaskPayloadBuilder.complete()
.withVariable("applicantSubmit_out",true)
.withTaskId(taskId).build());
logger.info(">>> Completed Task: " + taskId);
return "Completed Task: " + taskId;
}
打开 Postman,仍然还是 zhangsan,URL 地址:http://localhost:8080/applicant-complete?taskId=6d394dcc-4bb0-11e9-a5e6-62c7d1691b1b, GET 请求结果:
Completed Task: 6d394dcc-4bb0-11e9-a5e6-62c7d1691b1b
注意检查 taskId 是否正确。
Leader 审批
@RequestMapping("/leader-complete")
@ResponseBody
public String leaderComplete(@RequestParam(value="taskId") String taskId) {
taskRuntime.complete(TaskPayloadBuilder.complete()
.withVariable("leaderAgree_out",true)
.withTaskId(taskId).build());
logger.info(">>> Completed Task: " + taskId);
return "Completed Task: " + taskId;
}
为了简单起见,审批结果只有同意 true 这么一种。其实应该增加一个 false 选项(驳回)。
打开 Postman,换成 lisi,首先查询待办,获得 taskId:
[
{
"id": "30a5ae14-4bbc-11e9-921e-62c7d1691b1b",
"name": "等待Leader审批",
"status": "ASSIGNED",
"assignee": "lisi",
"description": "${description}",
"createdDate": "2019-03-21T09:32:05.360+0000",
"priority": 50,
"processDefinitionId": "LeaveRequestProcess:1:ead27851-4bbb-11e9-921e-62c7d1691b1b",
"processInstanceId": "0266ffe2-4bbc-11e9-921e-62c7d1691b1b"
}
]
然后 GET 地址:http://localhost:8080/leader-complete?taskId=30a5ae14-4bbc-11e9-921e-62c7d1691b1b(用户 lisi), 显示结果:
Completed Task: 30a5ae14-4bbc-11e9-921e-62c7d1691b1b
Director 审批和人资备案
过程同上,只不过分别使用了 wangwu 和 zhaoliu 进行登录。略。