# 请假申请-自建表
JeecgFlow并不提供拖表单,然后关联工作流的解决方案。 与市面上低代码的解决方案不一样。 但对于开发者来说要实现online在线建表,关联工作流其实也很简单。 接下来,带大家一步步讲解如何使用JeecgBoot提供的online在线建表功能,生成一个请假表。并且在新增一个请假申请记录时候,生成流程数据。
# 需求说明
因业务发展的需要,需要在系统构建一个请假表。 员工通过网站提交数据后能够发起一个审批流。 那么如何通过JeecgFlow实现这个过程呢?如下:
JeecgOnine建表->生成前后端代码->集成代码到业务系统->BPMN建模->发起请假并启动工作流
# JeecgOnline建表
假设我们现在构建了一个数据表,用于存储企业内部员工请假的所属数据。 表结构如下.
CREATE TABLE `my_leave` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建日期',
`update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新日期',
`sys_org_code` varchar(64) DEFAULT NULL COMMENT '所属部门',
`user_name` varchar(32) DEFAULT NULL COMMENT '用户名称',
`leave_type` varchar(32) DEFAULT NULL COMMENT '请假类型',
`content` varchar(32) DEFAULT NULL COMMENT '请假理由',
`days` int(11) DEFAULT NULL COMMENT '请假天数',
`process_instance_id` varchar(128) DEFAULT NULL COMMENT '流程实例id',
`process_definition_id` varchar(128) DEFAULT NULL COMMENT '流程定义id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
通过admin管理员登陆系统,找到低代码开发->Online表单开发菜单。 将上述的表字段通过新增按钮录入系统。
如下图,就是我们录入的请假表相关字段。
通过代码生成功能,生成前后端代码,注意这个步骤只能在本地操作!!!
接下来,我们将生成好的代码分别嵌入前端和后端,并且配置菜单,并且将菜单与将军这个角色进行绑定。此时用关羽的账号进行登陆,可以看到效果。
# BPMN 建模
接下来,我们来完成流程建模的相关操作。我们假设整个流程分成三个节点,申请->初审->终审。这一步操作是在流程管理->模型管理菜单下。 通过关羽账号登陆可以操作。
申请节点定义了请假的参数,如上有请假天数,请假理由,请假类型。 这个节点主要存储员工提交的请假数据。
初审节点定义了审批内容和图片信息,如果您需要扩展字段比如签名,也可以追加字段。 这个节点主要是申请节点完成后流转到此。进行审批动作。
终审节点和初审节点一样,在企业内部一般是职位更高的人进行审批。
# 表单关联工作流
只需要在发起请假的新增接口,接入工作流代码。 代码如下:
@AutoLog(value = "请假表-添加")
@ApiOperation(value = "请假表-添加", notes = "请假表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody MyLeave myLeave) {
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
myLeave.setUserName(loginUser.getUsername());
myLeaveService.save(myLeave);
//发起流程
LeaveReq leaveReq = new LeaveReq();
leaveReq.setDays(myLeave.getDays());
leaveReq.setModelKey("Process_0c2xy42");
leaveReq.setReason(myLeave.getContent());
leaveReq.setType(myLeave.getLeaveType());
ProcessInstance processInstance = processStartService.demoStart(leaveReq, loginUser);
//关联流程实例参数
Long leaveId = myLeave.getId();
MyLeave updateLeave = new MyLeave();
updateLeave.setId(leaveId);
updateLeave.setProcessInstanceId(processInstance.getId());
updateLeave.setProcessDefinitionId(processInstance.getProcessDefinitionId());
myLeaveService.updateById(updateLeave);
return Result.OK("添加成功!");
}
至此,完成在线表单如何与工作流关联的操作, 请登陆JeecgFlow (opens new window)的camunda演示站点进行体验