# 请假申请-自建表

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表单开发菜单。 将上述的表字段通过新增按钮录入系统。

foo

如下图,就是我们录入的请假表相关字段。

foo

通过代码生成功能,生成前后端代码,注意这个步骤只能在本地操作!!!

foo

接下来,我们将生成好的代码分别嵌入前端和后端,并且配置菜单,并且将菜单与将军这个角色进行绑定。此时用关羽的账号进行登陆,可以看到效果。

foo

# BPMN 建模

接下来,我们来完成流程建模的相关操作。我们假设整个流程分成三个节点,申请->初审->终审。这一步操作是在流程管理->模型管理菜单下。 通过关羽账号登陆可以操作。

foo

申请节点定义了请假的参数,如上有请假天数,请假理由,请假类型。 这个节点主要存储员工提交的请假数据。

foo

初审节点定义了审批内容和图片信息,如果您需要扩展字段比如签名,也可以追加字段。 这个节点主要是申请节点完成后流转到此。进行审批动作。

foo

终审节点和初审节点一样,在企业内部一般是职位更高的人进行审批。

# 表单关联工作流

foo

只需要在发起请假的新增接口,接入工作流代码。 代码如下:

  @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演示站点进行体验