审批流程数据库设计
A. 多级审核的数据库怎么设计啊
多级审核,这个最好通过权限模块来做。这样,销售部门,在查看市场部的时候,给予权限不足的提示即可。至于多级审核,一样,也可以通过表的设计来实现,没见到你的架构如何,不好多说。
B. 审核流程的数据库一般怎么设计
1、用户表
用户ID
用户角色(1:业务员,2:经理,3:总经理,4:总裁。。。)
用户姓名
2、客户表
客户ID
客户名称
3、业务员客户表
用户ID(其实就是用户表里的用户角色为业务员的用户)
客户ID
4、业务员移交客户申请表
申请人用户ID
申请移交的客户ID
审批状态(0:审批中,1:已审批。。。。)
移交后用户ID
5、请假表
用户ID
请假开始时间
请假结束时间
请假类别(1:事假、2:病假、3:婚假。。。。。)
审批状态(0:审批中,1:已审批。。。。)
C. jbpm4.4开发审批流实现一个主任务流转根据单据行项目分发不同人审核(请问这样如何设计流程)
第一步 创建流程模板(通过画图得到xml描述文件) jbpm1会在数据库Execution表中插入一条数据
* 第二步 获取工作流引擎并指定启动某个流程模板的实例,
* 1.启动实例
* 2.流程变量(例如,申请人,申请内容,申请信息等)
* 3.提交流程(completeTask)
* 4.指定下一个处理任务的人(通过task = processEngine.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).uniqueResult();
* 获取当前实例的最后一个任务,任务每一次提交后都会被移除到历史任务中,所以要根据实例id才能找到最后一个任务)
* 用processEngine.getTaskService().assignTask(task.getId(),"2222");指定下一处理人
* 5.把申请信息插入业务表(非jbpm中的表)查询此表获取申请人申请信息
*
* 第三部 获取任务列表(待审批)
* 1. List<Task> list = processEngine.getTaskService().findPersonalTasks(userId); 传入用户ID用此方法获取任务列表
*
* 第四部 提交任务
* 1.传入taskid或(通过task = processEngine.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).uniqueResult();)获取
* taskid提交流程(completeTask)
* 2.传入processInstanceID指定下一个处理任务的人(通过task = processEngine.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).uniqueResult();
* 获取当前实例的最后一个任务,任务每一次提交后都会被移除到历史任务中,所以要根据实例id才能找到最后一个任务)
* 用processEngine.getTaskService().assignTask(task.getId(),"2222");指定下一处理人
D. 关于工作流的数据库设计
项目(Item)
项目ID(ItemId) 项目描述(ItemName) 流程ID (RoutID) 申请人ID (ApplyUserID) 状态(State) 项目类型(ItemType)
1 郑州出差借款 1 1 借款单
2 郑州出差报销 3 1 报销单 这里的项目,是泛指,可以是公文,借款单,报销单等等需要流转的数据.
任务列表(TaskList)
任务ID(taskId) 项目ID (itemId) 步骤ID (actorId) 状态(state) 版本(version) 1 1 1 检出 100
2 2 3 检出 1001
3 3 3 待检出 1002项目申请后,任务列表插入一条记录.用户审批通过或者拒绝后,update当前步骤ID(上一步骤或者下一步骤).某个步骤可能有多个审批人,如果要审批,必须先检出.version字段是为了乐观锁控制,保证只能有一人检出.
任务历史记录(TaskHistory)
ID(id) 项目ID (itemId) 步骤ID (actorId) 备注(memo) 操作人ID (operateUserId) 创建时间(createDate)1 1 1 成都出差 1
1 1 2 批准 2
1 1 3 批准 3
每个步骤的操作,都写入任务历史记录
流程(Rout)
流程ID(routId) 流程描述(routName) 部门ID (deptID) 版本号(version) 状态(State)
1 借款流程 1 1 发布
2 报销流程 1 1 草稿
2 预算审批流程 1 1 停止 流程草稿状态是可以修改删除,发布状态就不能修改和删除,只能新增一个版本,或者新增一个流程,或者停止流程。
步骤(Actor)
步骤ID(actorID) 步骤序号(sortNo) 步骤描述(actorName) 流程ID (routId) 1 1 借款申请 1
2 2 部门经理审批 1
3 3 财务经理审批 1 步骤序号是步骤执行的顺序,审批的时候,根据当前序号,查找下一步骤,然后将下一步骤update任务列表的步骤ID,审批拒绝,则查找上一步骤,然后update任务列表的步骤ID
步骤处理人(actorUser)
步骤ID(actorId) 处理人ID (operateUserId)
1 1
2 2
2 3 一个步骤,是有多个处理人。处理人先检出任务列表,然后才能审批。
视图:待我处理的工作
select t1.taskId,t1.itemId,t3.operateUserId from taskList t1 join actor t2 on t1.actorId=t2.actorId join actorUser t3 on t2.actorId=t3.actorId where t1.state='待检出'
视图:我申请的工作
select t1.itemId,t1.itemName,t1.state,t1.applyUserId,t2.actorId from item t1 join taskList t2 on t1.itemId=t2.itemId
申请时
"1--查找所选流程的第一个步骤
select actorId from actor
where routId =1
order by sortNo
limit 0,12--插入任务列表taskList
insert into tasklist(actorId,state,version,itemId)
values()3--插入任务历史记录
insert into taskhistory(itemId,actorid,memo,operateBy,createDate)
values()
4--修改项目Item的状态为待审批
update item set state='wait_to_approve' where itemId=1"
审批通过
"1--update任务列表的步骤ID为下一步骤ID
update taskList set actorId=
(select actorId from actor
where routId = (select routId from actor where actorID=1)
and actorID>1
order by sortNo
limit 0,1
)
where taskId
2--插入任务历史记录
insert into taskhistory(itemId,actorid,memo,operateBy,createDate)
values()
3--修改项目Item的状态为审批中
update item set state='approveing' where itemId=1"
审批拒绝
"1--update任务列表的步骤ID为第一步的ID
update taskList set actorId=
(select actorId from actor
where routId =(select routId from actor where actorID=1)
order by sortNo
limit 0,1)
where taskId=1
2--插入任务历史记录
insert into taskhistory(itemId,actorid,memo,operateBy,createDate)
values()
3--修改项目Item的状态为审批拒绝
update item set state='jujue' where itemId=1"
E. 数据库设计问题(业务审批流程)
1、用户表
用户ID
用户角色(1:业务员,2:经理,3:总经理,4:总裁。。。)
用户姓名
2、客户表
客户ID
客户名称
3、业务员客户表
用户ID(其实就是用户表里的用户角色为业务员的用户)
客户ID
4、业务员移交客户申请表
申请人用户ID
申请移交的客户ID
审批状态(0:审批中,1:已审批。。。。)
移交后用户ID
5、请假表
用户ID
请假开始时间
请假结束时间
请假类别(1:事假、2:病假、3:婚假。。。。。)
审批状态(0:审批中,1:已审批。。。。)
6、周报表
用户ID
周报月份
审批状态(0:临时保存,1:已提交,2:经理已审批,3:总经理已审批。。。。)
其实具体控制,你要在程序里进行流程控制,并没有你说的那种自动控制,不过这样的表结构设计是可以满足你后期不用再动数据库,只用修改业务流程即可
F. 要做一个数据库的毕设
数据库表的设计是在需求分析的基础上才进行的,先做分析,然后E-R,然后才是真正建表(当然这步可以通过ER工具完成)。
举个最简单的例子:
学生表(记录学生信息)
教职工表(记录辅导员、班主任等教职工信息)
审批规则表(确定谁先审批,下一个审批人是谁,每个审批人用编号表示,比如教职工编号,外键到教职工表)
请假申请表(编号、发起人、事由、起止时间等)
审批流程(请假申请编号、审批人、审批时间、审批结果、备注/理由等)!
G. 如何实现OA系统的自定议审批流程的数据库设计
我举一个例子:有的OA系统是要公司客户自己有服务器,然后装到客户的服务器上。可是客户嫌麻烦,所以我想将OA系统(PHP+Mysql)放在自己的服务器上,让公司客户及其员工来注册使用。那么问题来了,原来在客户自己的服务器上数据库也就十几张表,但都放到我的服务器上,每注册一个公司就得增加十几张表,那如果有一万家公司注册数据库不得有几十万张表?跟楼主一样的问题,有一些老牌厂商早就给出来完美答案了,比如华为、天翎都有过类似的问题,这些企业提出的解决方案就很不错,就针对上面的问题,最简单的办法是给每张表加个实例ID,一个公司对应一个实例ID,然后在你的MVC架构中跟DB最近的这一层加个拦截器,每个SQL查询都自动带上实例ID,这样不用对代码做很大改动。后期再根据需要优化,哪些公司合用一张表,哪些单独占用一张表甚至一个数据库,总之具体问题具体对待,需要在运营的过程中根据用户量和业务情况来分析采取对策。