Activiti 7.1.7 系列(3)请假流程

注册用户

请假流程涉及到 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 进行登录。略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值