一个用数据库实现的工作流(2)
2008-02-23 09:55:08来源:互联网 阅读 ()
workflow.getComment()},
new int[] {
Types.VARCHAR, Types.VARCHAR, Types.INTEGER,
Types.VARCHAR, Types.DATE, Types.DATE,
Types.VARCHAR});
//插入结点信息,由结点插入来插入人员信息
List nodes = workflow.getWorkflowNodes();
if (nodes != null) {
for (int i = 0; i < nodes.size(); i ) {
WorkflowNode node = (WorkflowNode) nodes.get(i);
addNewWorkflowNode(node);
}
}
return id;
}
/**
* 通过某一个流程结点
* 1)除了更新此流程的状态以外,还需要查看是否是最后一个结点
* 如果是最后一个结点,则完成此流程.
* 否则,更新流程状态为下一个结点,启动下一个结点
* @param updateWorkFlowNode WorkflowNode
* @param man_id String
*/
public void approveWorkFlowNode(WorkflowNode updateWorkFlowNode,
String man_id) {
//需要更新的工作流结点
WorkflowNode wfNode = updateWorkFlowNode;
String wf_node_id = wfNode.getId();
//更新结点
updateWorkflowNode(wf_node_id, wfNode);
//得到应该运行的下一个结点
WorkflowNode shouldRunNode = getAfterShouldRunningWorkflowNode(wfNode.
getWorkId(), wfNode.getSequence());
//
if (shouldRunNode == null) {
//已经没有下一个结点,工作流应该完成
Workflow wf = this.getWorkflowById(wfNode.getWorkId());
//
wf.setComment("正常完成");
wf.setStatus(Workflow.WORKFLOW_STATUS_FINISHED);
java.sql.Timestamp endDate = new Timestamp(System.currentTimeMillis());
wf.setEndDate(endDate);
//
//更新工作流为完成状态
updateWorkflow(wf.getId(), wf);
} else {
//还存在下一个结点,工作流应该转移到下一个结点
Workflow wf = this.getWorkflowById(wfNode.getWorkId());
//设置工作流当前结点
wf.setFlowId(shouldRunNode.getId());
//更新当前结点为运行状态
shouldRunNode.setStatus(WorkflowNode.WORKFLOW_NODE_STATUS_RUNNING);
java.sql.Timestamp startDate = new Timestamp(System.
currentTimeMillis());
shouldRunNode.setStartDate(startDate);
//更新结点
updateWorkflowNode(shouldRunNode.getId(), shouldRunNode);
//更新工作流
updateWorkflow(wf.getId(), wf);
}
}
/**
* 拒绝通过某一个结点
* @param updateWorkFlowNode WorkflowNode
* @param man_id String
*/
public void declineWorkFlowNode(WorkflowNode updateWorkFlowNode,
String man_id) {
WorkflowNode wfNode = updateWorkFlowNode;
String wf_node_id = wfNode.getId();
//更新结点
updateWorkflowNode(wf_node_id, wfNode);
//
WorkflowNode shouldRunNode = getBeforeShouldRunningWorkflowNode(wfNode.
getWorkId(), wfNode.getSequence());
if (shouldRunNode == null) {
//已经退回到编辑状态
Workflow wf = this.getWorkflowById(wfNode.getWorkId());
//
wf.setComment("重新编辑");
//标识工作流为退回编辑状态
wf.setStatus(Workflow.WORKFLOW_STATUS_BACKED);
updateWorkflow(wf.getId(), wf);
} else {
//退回到前一个结点
Workflow wf = this.getWorkflowById(wfNode.getWorkId());
wf.setFlowId(shouldRunNode.getId());
//-2表示这个结点是因为下一个结点没有通过而返回的
//重审'[批结点
shouldRunNode.setStatus(WorkflowNode.WORKFLOW_NODE_STATUS_BACKED);
//
java.sql.Timestamp startDate = new Timestamp(System.
currentTimeMillis());
shouldRunNode.setStartDate(startDate);
updateWorkflowNode(shouldRunNode.getId(), shouldRunNode);
//
updateWorkflow(wf.getId(), wf);
}
}
/**
* 删除与指定结点关联的所有人员记录
* @param nodeId String
*/
public void deleteMansOfNode(String nodeId) {
this.getJdbcTemplate().update(
"delete from workflow_template_man where template_flow_id=?",
new Object[] {nodeId}, new int[] {Types.VARCHAR});
}
/**
* 删除工作流模版,将一同删除结点与结点的人员信息记录
* @param id String
*/
public void deleteTemplate(String id) {
this.getJdbcTemplate().update(
"delete from workflow_template where id=?",
new Object[] {id}, new int[] {Types.VARCHAR});
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:[学习小记]Java的反射机制
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
