工作流,就是业务信息数据在多个环节模块之间的流转。按照工作流管理联盟的定义,工作流指的是“业务过程的部分或全部在计算机应用环境下的 自动化”。在实际应用过程中,为了实现对业务过程的工作流管理,需要对业务流程及其各个步骤之间业务规则的抽象,概括,做成一个统一通用的流程管理软件系统,这种软件系统就是工作流管理系统

    

        公司要求做工单系统,以工作流的方式来做。一开始时因为没接触过工作流机制,完全的理解错误了,第一版设计出来的完全不是工作流的方式。后来上网查询学习,看工作流开源引擎说明文档,才慢慢地有了个了解。后来又花了一段时间做了一个原型图设计文档出来,发给主管看了。他们也不知道什么时候做了讨论,只给我说太复杂,给“咔嚓”掉了。听到这个回复,我也没惊讶,心里只是有点小失望。从开始说要做个,到过程中的学习设计,到最后的原型图出来了,也是花了不少时间。没惊讶,是因为,了解工作流的机制后,发现要做一个完善点的好点的工作流的机制挺复杂,特别是要用到工单模块里。这个复杂度,可能在后期维护起来会得不偿失。没了解过工作流的人,维护起来也会一头雾水。上网查询工单工作流,发现原来硕士研究生毕业论文也在搞个东西,于是我就想,要是我把这个做出来了,自己最少也是研究生毕业了。而且自己总是想尝试做一些新的东西难一点的东西,总是重复做那些列表添加修改查询,无聊透顶了,完全没有意思。在评估这个工单工作流的可行性的时候,就有了点私心,不想去管后期维护的事,做出来再说。做出来了,也就获得了一些很难得的经验。其他公司web开发中不知用工作流这种方式做工单模块的多不多,感觉应该不多吧。

     下面是当时设计的数据库,没实际做开发。但应该可以满足工作流了。索引还没做。

CREATE TABLE `workflow_baseinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `wb_name` varchar(50) NOT NULL COMMENT '流程名称',
  `wb_desc` varchar(2000) DEFAULT NULL COMMENT '流程描述',
  `wb_type` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否是子流程(1是-1否)',
  `wb_searcher` varchar(1000) DEFAULT NULL COMMENT '流程管理监控人员id(多人以逗号分隔)',
  `wb_queryer` varchar(1000) DEFAULT NULL COMMENT '流程查询人员id(多人以逗号分隔)',
  `wb_status` int(2) NOT NULL DEFAULT '1' COMMENT '流程运行状态(-1停用1启用)',
  `wb_limit_minute` int(11) DEFAULT NULL COMMENT '流程限时(分钟)',
  `wb_add_user_id` int(11) NOT NULL COMMENT '此记录添加人',
  `wb_add_time` int(11) NOT NULL COMMENT '此记录添加时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流属性表'

CREATE TABLE `workflow_step` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `ws_baseinfo_id` int(11) NOT NULL COMMENT '工作流属性表id',
  `ws_name` varchar(50) NOT NULL COMMENT '名称',
  `ws_desc` varchar(2000) DEFAULT NULL COMMENT '描述',
  `ws_order` int(3) DEFAULT NULL COMMENT '序号',
  `ws_is_runer` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否需要指定经办人(1是-1否)',
  `ws_run_user_id` varchar(200) DEFAULT NULL COMMENT '经办所有者(用户id)',
  `ws_run_role_id` varchar(100) DEFAULT NULL COMMENT '经办所有者(角色id)',
  `ws_run_department_id` varchar(100) DEFAULT NULL COMMENT '经办所有者(部门id)',
  `ws_run_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '执行类型(1人工节点2自动节点)',
  `ws_notice_sms` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否短信通知(-1否1是)',
  `ws_notice_email` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否邮件通知(-1否1是)',
  `ws_type` tinyint(1) NOT NULL COMMENT '节点类型(1开始结点2结束结点3过程节点)',
  `ws_limit_time` int(11) DEFAULT NULL COMMENT '时限(秒)',
  `ws_int_api_id` varchar(20) DEFAULT NULL COMMENT '节点初始事件id(多个以逗号分隔)',
  `ws_run_api_id` varchar(20) DEFAULT NULL COMMENT '节点运行事件id(多个以逗号分隔)',
  `ws_save_api_id` varchar(20) NOT NULL COMMENT '节点保存事件id(多个以逗号分隔)',
  `ws_turn_api_id` varchar(20) DEFAULT NULL COMMENT '节点流转事件id(多个以逗号分隔)',
  `ws_is_sync` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否同步(1是-1否)',
  `ws_add_user_id` int(11) DEFAULT NULL COMMENT '此记录添加人id',
  `ws_add_time` int(11) DEFAULT NULL COMMENT '此记录添加时间',
  `ws_son_baseinfo_id` int(11) DEFAULT NULL COMMENT '子工作流id',
  `ws_listpage_show` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '列表是显示该操作(1是-1否)',
  `ws_show_fields` varchar(200) DEFAULT NULL COMMENT '当前节点中可视的字段id(多个以逗号分隔)',
  `ws_edit_fields` varchar(200) DEFAULT NULL COMMENT '当前节点中编辑的字段id(多个以逗号分隔)',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流节点步骤表'

CREATE TABLE `workflow_line` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `wl_start_step_id` int(11) NOT NULL COMMENT '线路开始节点id',
  `wl_end_step_id` int(11) NOT NULL COMMENT '线路结束节点id',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流线路表'

CREATE TABLE `workflow_fields` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `wf_baseinfo_id` int(11) NOT NULL COMMENT '工作流属性表id',
  `wf_step_id` int(11) DEFAULT NULL COMMENT '工作流节点表id',
  `wf_cnname` varchar(20) NOT NULL COMMENT '表单字段中文名称',
  `wf_enname` varchar(20) DEFAULT NULL COMMENT '表单字段英文名称',
  `wf_desc` varchar(100) DEFAULT NULL COMMENT '字段备注',
  `wf_default_value` varchar(1000) DEFAULT NULL COMMENT '字段默认值',
  `wf_searchpage_show` tinyint(1) NOT NULL DEFAULT '1' COMMENT '查询页面是否可视(1是-1否)',
  `wf_addpage_show` tinyint(1) NOT NULL DEFAULT '1' COMMENT '添加页面是否可视(1是-1否)',
  `wf_editpage_show` tinyint(1) NOT NULL DEFAULT '1' COMMENT '编辑页面是否可视(1是-1否)',
  `wf_listpage_show` tinyint(1) NOT NULL DEFAULT '1' COMMENT '列表页面是否可视(1是-1否)',
  `wf_is_empty` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否可以为空(1是-1否)',
  `wf_is_edit` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否可编辑(1是-1否)',
  `wf_is_global` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否全局变量(1是-1否)',
  `wf_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '字段显示类型(1编辑框2单选框3多选框4下拉框5文本框)',
  `wf_value_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '数值类型(1字符串型2数值型3只允许英文4 email型5datetime型 )',
  `wf_link_type` int(5) DEFAULT NULL COMMENT '关联多项值类型(1部门2角色)',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='表单字段表'

CREATE TABLE `workflow_option` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `wo_fields_id` int(11) NOT NULL COMMENT '字段表id',
  `wo_key` varchar(40) NOT NULL COMMENT '选项标识',
  `wo_value` varchar(100) NOT NULL COMMENT '选项值',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='自定义的选项数据'

CREATE TABLE `workflow_rule` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `wr_line_id` int(11) NOT NULL COMMENT '工作流线路id',
  `wr_field_name` varchar(30) DEFAULT NULL COMMENT '变量字段表id',
  `wr_param_name` varchar(30) DEFAULT NULL COMMENT '参数值',
  `wr_rule` tinyint(1) DEFAULT NULL COMMENT '变量与参数值的关系(1大于2小于3等于4大于或等于5小于或等于6包含7不包含)',
  `wr_type` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '规则类型,是否自定义规则(1是-1否)',
  `wr_custom_rule` text COMMENT '自定义的规则的内容',
  `wr_desc` varchar(500) DEFAULT NULL COMMENT '规则说明',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流规则表'

CREATE TABLE `workflow_api` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `wa_name` varchar(20) NOT NULL COMMENT '接口名称',
  `wa_desc` varchar(500) DEFAULT NULL COMMENT '接口描述',
  `wa_path` varchar(1000) NOT NULL COMMENT '接口路径',
  `wa_module_name` varchar(50) DEFAULT NULL COMMENT '模块名称',
  `wa_function_name` varchar(50) NOT NULL COMMENT '执行函数名称',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流事件表'

CREATE TABLE `workflow_api_fields` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `waf_api_id` int(11) NOT NULL COMMENT '接口表id',
  `waf_cn_name` varchar(30) NOT NULL COMMENT '中文名称',
  `waf_en_name` varchar(50) NOT NULL COMMENT '英文名称',
  `waf_value_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '变量类型(1字符型2数值型3布尔型4数组型)',
  `waf_defalue_value` text COMMENT '变量默认值',
  `waf_fields_to` int(11) DEFAULT NULL COMMENT '接口变量对应的字段变量表id',
  `waf_desc` varchar(200) DEFAULT NULL COMMENT '变量说明',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='接口变量表'

CREATE TABLE `workflow_instance` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `wi_baseinfo_id` int(11) NOT NULL COMMENT '工作流属性表id',
  `wi_name` varchar(100) NOT NULL COMMENT '实例名字',
  `wi_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(-1未启动1启动2运行中3结束)',
  `wi_run_user_id` int(11) DEFAULT NULL COMMENT '实例启动人id',
  `wi_run_time` int(11) DEFAULT NULL COMMENT '启动时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流实例表'

CREATE TABLE `workflow_instance_datas` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `wif_instance_id` int(11) NOT NULL COMMENT '工作流实例id',
  `wif_fields_id` int(11) NOT NULL COMMENT '表单字段表id',
  `wif_data` varchar(1000) DEFAULT NULL COMMENT '字段值',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='表单数据表'

CREATE TABLE `workflow_instance_step` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `wis_instance_id` int(11) NOT NULL COMMENT '工作流实例表id',
  `wis_step_id` int(11) NOT NULL COMMENT '节点步骤id',
  `wis_run_user_id` int(11) DEFAULT NULL COMMENT '执行人id(-1为系统)',
  `wis_run_start_time` int(11) DEFAULT NULL COMMENT '执行开始时间',
  `wis_run_end_time` int(11) DEFAULT NULL COMMENT '执行结束时间',
  `wis_status` tinyint(1) DEFAULT '1' COMMENT '状态(1执行中2已结束)',
  `wis_turn_desc` varchar(1000) DEFAULT NULL COMMENT '流转备注',
  `wis_accept_user_id` int(11) DEFAULT NULL COMMENT '接收人id(-1为系统)',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='实例节点步骤表'

CREATE TABLE `workflow_log_instance_step` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `wlis_instance_id` int(11) NOT NULL COMMENT '工作流实例表id',
  `wlis_step_id` int(11) NOT NULL COMMENT '节点步骤id',
  `wlis_run_user_id` int(11) DEFAULT NULL COMMENT '执行人id(-1为系统)',
  `wlis_run_start_time` int(11) DEFAULT NULL COMMENT '执行开始时间',
  `wlis_run_end_time` int(11) DEFAULT NULL COMMENT '执行结束时间',
  `wlis_status` tinyint(1) DEFAULT '1' COMMENT '状态(1执行中2已结束)',
  `wlis_runback_step_id` int(11) DEFAULT NULL COMMENT '回退到步骤id',
  `wlis_runback_desc` varchar(200) DEFAULT NULL COMMENT '回退说明',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='节点步骤日志表'

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐