package com.highcom.workflow.dao.jdbc;
import org.springframework.dao.*;
import org.springframework.jdbc.core.*; import org.springframework.jdbc.core.support.*;
import java.sql.*;
import java.util.*; import com.highcom.workflow.domain.*; import com.highcom.workflow.dao.*; import com.highcom.seqgen.*;
public class WorkflowDaoJdbcImpl extends JdbcDaoSupport implements WorkflowDao { private SequenceService sequenceService = null; private String WORKFLOW_TEMPLATE_SEQ = "com.highcom.workflow.template"; private String WORKFLOW_TEMPLATE_NODE_SEQ = "com.highcom.workflow.template.node"; private String WORKFLOW_TEMPLATE_NODE_MAN_SEQ = "com.highcom.workflow.template.node.man"; // private String WORKFLOW_SEQ = "com.highcom.workflow"; private String WORKFLOW_NODE_SEQ = "com.highcom.workflow.node"; private String WORKFLOW_NODE_MAN_SEQ = "com.highcom.workflow.node.man"; // public WorkflowDaoJdbcImpl() { }
/** * 新建立一個(gè)工作流模板 * @param template WorkflowTemplate */ public void addNewTemplate(WorkflowTemplate template) { String id = sequenceService.getValue(WORKFLOW_TEMPLATE_SEQ); this.getJdbcTemplate().update("insert into workflow_template(id,name,description,createDate,createMan,status,defaultworkflow) values(?,?,?,?,?,?,?)", new Object[] { id, template.getName(), template.getDescription(), template.getCreateDate(), template.getCreateMan(), new Integer(template.getStatus()), new Integer(template.getDefaultWorkflow()) }, new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.DATE, Types.VARCHAR, Types.INTEGER, Types.INTEGER }); }
public void addNewTemplateNode(WorkflowTemplateNode flowNode) { String id = this.sequenceService.getValue(this. WORKFLOW_TEMPLATE_NODE_SEQ); int maxseq = getTemplateNodeMaxSequence(flowNode.getWorkId()); maxseq += 1; this.getJdbcTemplate().update("insert into workflow_template_flow(id,template_id,sequence,name,description) values(?,?,?,?,?)", new Object[] { id, flowNode.getWorkId(), new Integer(maxseq), flowNode.getName(), flowNode.getDescription() }, new int[] { Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.VARCHAR, Types.VARCHAR });
//插入人員信息 if (flowNode.getMans() != null) { List mans = flowNode.getMans();
for (int i = 0; i < mans.size(); i++) { String man_id = this.sequenceService.getValue(this. WORKFLOW_TEMPLATE_NODE_MAN_SEQ); String account_id = (String) mans.get(i); this.getJdbcTemplate().update("insert into workflow_template_man(id,template_flow_id,account_id) values(?,?,?)", new Object[] {man_id, id, account_id}, new int[] {Types.VARCHAR, Types.VARCHAR, Types.VARCHAR}); } } }
/** * 生成新的工作流實(shí)例 調(diào)用程序需要本身設(shè)置這些信息 1)本身信息 2)結(jié)點(diǎn)信息 * 3)結(jié)點(diǎn)人員信息 * status:-1,待啟動(dòng),-2:強(qiáng)制終止,-3:退回到原始狀態(tài)(需要修改),0:正在運(yùn)行,1:已經(jīng)完成. * flow_id:當(dāng)前運(yùn)行結(jié)點(diǎn)id.-9999:已經(jīng)沒(méi)有當(dāng)前結(jié)點(diǎn). * * @param workflow Workflow * @return String */ public String addNewWorkflow(Workflow workflow) { // String id = sequenceService.getValue(WORKFLOW_SEQ); this.getJdbcTemplate().update( "insert into workflow_work(id,doc_id,status," + "flow_id,start_date,end_date,v_comment) values(?,?,?,?,?,?,?)", new Object[] { id, workflow.getDocId(), new Integer(workflow.getStatus()), workflow.getFlowId(), workflow.getStartDate(), workflow.getEndDate(), workflow.getComment()}, new int[] { Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.VARCHAR, Types.DATE, Types.DATE, Types.VARCHAR}); //插入結(jié)點(diǎn)信息,由結(jié)點(diǎn)插入來(lái)插入人員信息 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; }
/** * 通過(guò)某一個(gè)流程結(jié)點(diǎn) * 1)除了更新此流程的狀態(tài)以外,還需要查看是否是最后一個(gè)結(jié)點(diǎn) * 如果是最后一個(gè)結(jié)點(diǎn),則完成此流程. * 否則,更新流程狀態(tài)為下一個(gè)結(jié)點(diǎn),啟動(dòng)下一個(gè)結(jié)點(diǎn) * @param updateWorkFlowNode WorkflowNode * @param man_id String */ public void approveWorkFlowNode(WorkflowNode updateWorkFlowNode, String man_id) { //需要更新的工作流結(jié)點(diǎn) WorkflowNode wfNode = updateWorkFlowNode; String wf_node_id = wfNode.getId();
//更新結(jié)點(diǎn) updateWorkflowNode(wf_node_id, wfNode); //得到應(yīng)該運(yùn)行的下一個(gè)結(jié)點(diǎn) WorkflowNode shouldRunNode = getAfterShouldRunningWorkflowNode(wfNode. getWorkId(), wfNode.getSequence()); // if (shouldRunNode == null) { //已經(jīng)沒(méi)有下一個(gè)結(jié)點(diǎn),工作流應(yīng)該完成 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); //
//更新工作流為完成狀態(tài) updateWorkflow(wf.getId(), wf); } else { //還存在下一個(gè)結(jié)點(diǎn),工作流應(yīng)該轉(zhuǎn)移到下一個(gè)結(jié)點(diǎn) Workflow wf = this.getWorkflowById(wfNode.getWorkId()); //設(shè)置工作流當(dāng)前結(jié)點(diǎn) wf.setFlowId(shouldRunNode.getId()); //更新當(dāng)前結(jié)點(diǎn)為運(yùn)行狀態(tài) shouldRunNode.setStatus(WorkflowNode.WORKFLOW_NODE_STATUS_RUNNING); java.sql.Timestamp startDate = new Timestamp(System. currentTimeMillis()); shouldRunNode.setStartDate(startDate); //更新結(jié)點(diǎn) updateWorkflowNode(shouldRunNode.getId(), shouldRunNode); //更新工作流 updateWorkflow(wf.getId(), wf); } }
/** * 拒絕通過(guò)某一個(gè)結(jié)點(diǎn) * @param updateWorkFlowNode WorkflowNode * @param man_id String */ public void declineWorkFlowNode(WorkflowNode updateWorkFlowNode, String man_id) { WorkflowNode wfNode = updateWorkFlowNode; String wf_node_id = wfNode.getId(); //更新結(jié)點(diǎn) updateWorkflowNode(wf_node_id, wfNode); // WorkflowNode shouldRunNode = getBeforeShouldRunningWorkflowNode(wfNode. getWorkId(), wfNode.getSequence()); if (shouldRunNode == null) { //已經(jīng)退回到編輯狀態(tài) Workflow wf = this.getWorkflowById(wfNode.getWorkId()); // wf.setComment("重新編輯"); //標(biāo)識(shí)工作流為退回編輯狀態(tài) wf.setStatus(Workflow.WORKFLOW_STATUS_BACKED); updateWorkflow(wf.getId(), wf); } else { //退回到前一個(gè)結(jié)點(diǎn) Workflow wf = this.getWorkflowById(wfNode.getWorkId()); wf.setFlowId(shouldRunNode.getId()); //-2表示這個(gè)結(jié)點(diǎn)是因?yàn)橄乱粋€(gè)結(jié)點(diǎn)沒(méi)有通過(guò)而返回的 //重審‘[批結(jié)點(diǎn) 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); }
}
/** * 刪除與指定結(jié)點(diǎn)關(guān)聯(lián)的所有人員記錄 * @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}); }
/** * 刪除工作流模版,將一同刪除結(jié)點(diǎn)與結(jié)點(diǎn)的人員信息記錄 * @param id String */ public void deleteTemplate(String id) { this.getJdbcTemplate().update( "delete from workflow_template where id=?", new Object[] {id}, new int[] {Types.VARCHAR}); deleteTemplateNodesOfTemplate(id); }
public void deleteTemplateNode(String id) { ////刪除結(jié)點(diǎn)需要調(diào)整序號(hào) WorkflowTemplateNode templateNode = this.getTemplateNodeById(id); String template_id = templateNode.getWorkId(); int maxseq = getTemplateNodeMaxSequence(template_id); int currentId = templateNode.getSequence(); if (currentId < maxseq) { this.getJdbcTemplate().update("update workflow_template_flow set sequence=sequence-1 where template_id=? and sequence>?", new Object[] {template_id, new Integer(currentId)}, new int[] {Types.VARCHAR, Types.INTEGER}); } // this.deleteMansOfNode(id); this.getJdbcTemplate().update( "delete from workflow_template_flow where id=?", new Object[] {id}, new int[] {Types.VARCHAR});
}
public void deleteTemplateNodesOfTemplate(String template_id) { WorkflowTemplateNode[] nodes = this.getTemplateNodesOfTemplate( template_id);
if (nodes != null) { for (int i = 0; i < nodes.length; i++) { WorkflowTemplateNode node = nodes[i]; deleteMansOfNode(node.getId()); } }
this.getJdbcTemplate().update( "delete from workflow_template_flow where template_id=?", new Object[] {template_id}, new int[] {Types.VARCHAR}); }
/** * 刪除工作流實(shí)例 * @param id String */ public void deleteWorkflow(String id) { this.getJdbcTemplate().update("delete from workflow_work where id=?", new Object[] {id}, new int[] {Types.VARCHAR}); // WorkflowNode[] wfNodes = this.getWorkflowNodesOfWork(id); if (wfNodes != null) { for (int i = 0; i < wfNodes.length; i++) { this.deleteWorkflowNode(wfNodes[i].getId()); } } }
public void finishWorkFlow(String id) { }
public String[] getAccountIdsOfTempalteNode(String template_node_id) { List mans = this.getTemplateNodeMans(template_node_id);
if (mans != null) { return (String[]) mans.toArray(new String[mans.size()]); }
return null; }
public WorkflowNode[] getAllCurrentWorkflowNode() { return null; }
public WorkflowTemplate[] getAllTemplates(int flag) { if ((flag != -1) && (flag != 0) && (flag != 1)) { return null; }
List list = null;
if (flag != -1) { list = this.getJdbcTemplate().query( "select * from workflow_template where status=? order by createDate", new Object[] {new Integer(flag)}, new int[] {Types.INTEGER}, new RowMapper() { public Object mapRow(ResultSet rs, int _int) throws SQLException { WorkflowTemplate temp = new WorkflowTemplate(); temp.setId(rs.getString("id")); temp.setName(rs.getString("name")); temp.setDescription(rs.getString("description")); temp.setCreateMan(rs.getString("createMan")); temp.setCreateDate(rs.getTimestamp("createDate")); temp.setStatus(rs.getInt("status")); return temp; } }); } else { list = this.getJdbcTemplate().query( "select * from workflow_template order by createDate", new RowMapper() { public Object mapRow(ResultSet rs, int _int) throws SQLException { WorkflowTemplate temp = new WorkflowTemplate(); temp.setId(rs.getString("id")); temp.setName(rs.getString("name")); temp.setDescription(rs.getString("description")); temp.setCreateMan(rs.getString("createMan")); temp.setCreateDate(rs.getTimestamp("createDate")); temp.setStatus(rs.getInt("status"));
return temp; } }); }
if ((list != null) && (list.size() > 0)) { return (WorkflowTemplate[]) list.toArray(new WorkflowTemplate[list. size()]); }
return null; }
/** * 得到指定工作流的當(dāng)前結(jié)點(diǎn) * @param work_id String * @return WorkflowNode */ public WorkflowNode getCurrentNode(String work_id) { Object obj = this.getJdbcTemplate().query( "select flow_id from workflow_work where id=?", new Object[] {work_id}, new int[] {Types.VARCHAR}, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { return rs.getString("flow_id"); } return null; } }); if (obj != null) { String flow_id = (String) obj; // return this.getWorkflowNodeById(flow_id); } return null; }
public WorkflowNode getCurrentNode(Workflow workFlow) { return null; }
public WorkflowNode[] getCurrentWorkflowNodeByMan(String mam_id) { return null; }
public WorkflowTemplate getTemplateById(String id) { Object obj = this.getJdbcTemplate().query( "select * from workflow_template where id=?", new Object[] {id}, new int[] {Types.VARCHAR}, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { WorkflowTemplate temp = new WorkflowTemplate(); temp.setId(rs.getString("id")); temp.setName(rs.getString("name")); temp.setDescription(rs.getString("description")); temp.setCreateMan(rs.getString("createMan")); temp.setCreateDate(rs.getTimestamp("createDate")); temp.setStatus(rs.getInt("status"));
return temp; }
return null; } });
if (obj != null) { return (WorkflowTemplate) obj; }
return null; }
public WorkflowTemplate getTemplateByName(String name) { return null; }
public WorkflowTemplateNode getTemplateNodeById(String id) { Object obj = this.getJdbcTemplate().query( "select * from workflow_template_flow where id=?", new Object[] {id}, new int[] {Types.VARCHAR}, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { WorkflowTemplateNode wfnode = new WorkflowTemplateNode(); wfnode.setId(rs.getString("id")); wfnode.setName(rs.getString("name")); wfnode.setDescription(rs.getString("description")); wfnode.setWorkId(rs.getString("template_id")); wfnode.setSequence(rs.getInt("sequence"));
return wfnode; }
return null; } });
if (obj != null) { return (WorkflowTemplateNode) obj; }
return null; }
public WorkflowTemplateNode getTemplateNodeByName(String name) { return null; }
public List getTemplateNodeMans(String template_flow_id) { List list = this.getJdbcTemplate().query( "select account_id from workflow_template_man where template_flow_id=? ", new Object[] {template_flow_id}, new int[] {Types.VARCHAR}, new RowMapper() { public Object mapRow(ResultSet rs, int _int) throws SQLException { return rs.getString("account_id"); } });
return list; }
public List getWorkflowNodeMans(String work_flow_id) { List list = this.getJdbcTemplate().query( "select account_id from workflow_man where flow_id=? ", new Object[] {work_flow_id}, new int[] {Types.VARCHAR}, new RowMapper() { public Object mapRow(ResultSet rs, int _int) throws SQLException { return rs.getString("account_id"); } });
return list; }
public int getTemplateNodeMaxSequence(String template_id) { Object obj = this.getJdbcTemplate().query("select max(sequence) as maxsequence from workflow_template_flow where template_id=?", new Object[] {template_id}, new int[] {Types.VARCHAR}, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { int maxnum = rs.getInt("maxsequence");
return new Integer(maxnum); }
return new Integer(0); } });
return ((Integer) obj).intValue(); }
public WorkflowTemplateNode[] getTemplateNodesOfTemplate(String template_id) { List list = this.getJdbcTemplate().query( "select * from workflow_template_flow where template_id=? order by sequence", new Object[] {template_id}, new int[] {Types.VARCHAR}, new RowMapper() { public Object mapRow(ResultSet rs, int _int) throws SQLException { WorkflowTemplateNode tnode = new WorkflowTemplateNode(); tnode.setId(rs.getString("id")); tnode.setDescription(rs.getString("description")); tnode.setName(rs.getString("name")); tnode.setSequence(rs.getInt("sequence")); tnode.setWorkId(rs.getString("template_id"));
return tnode; } });
if (list != null) { for (int i = 0; i < list.size(); i++) { WorkflowTemplateNode tnode = (WorkflowTemplateNode) list.get(i); List mans = this.getTemplateNodeMans(tnode.getId()); tnode.setMans(mans); }
return (WorkflowTemplateNode[]) list.toArray(new WorkflowTemplateNode[ list.size()]); }
return null; }
public Workflow getWorkflowById(String id) { Object obj = this.getJdbcTemplate().query("select id,doc_id,status," + "flow_id,start_date,end_date,comment from workflow_work where id=?", new Object[] {id}, new int[] {Types.VARCHAR}, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { Workflow wf = new Workflow(); wf.setId(rs.getString("id")); wf.setDocId(rs.getString("doc_id")); wf.setStatus(rs.getInt("status")); wf.setComment(rs.getString("comment")); wf.setStartDate(rs.getTimestamp("start_date")); wf.setEndDate(rs.getTimestamp("end_date")); wf.setFlowId(rs.getString("flow_id")); return wf; } return null; } }); if (obj != null) { return (Workflow) obj; } return null; }
public Workflow getWorkflowByName(String id) { return null; }
/** * 根據(jù)狀態(tài)得到工作流 * @param status int * @return Workflow[] */ public Workflow[] getWorkflowByStatus(int status) { List list = this.getJdbcTemplate().query("select id,doc_id,status," + "flow_id,start_date,end_date,comment from workflow_work where status=? order by start_date desc", new Object[] {new Integer( status)}, new int[] {Types.INTEGER}, new RowMapper() { public Object mapRow(ResultSet rs, int _int) throws SQLException { Workflow wf = new Workflow(); wf.setId(rs.getString("id")); wf.setDocId(rs.getString("doc_id")); wf.setStatus(rs.getInt("status")); wf.setComment(rs.getString("comment")); wf.setStartDate(rs.getTimestamp("start_date")); wf.setEndDate(rs.getTimestamp("end_date")); wf.setFlowId(rs.getString("flow_id")); return wf;
} }); if (list != null && list.size() > 0) { return (Workflow[]) list.toArray(new Workflow[list.size()]); } return null; }
public void setSequenceService(SequenceService sequenceService) { this.sequenceService = sequenceService; }
public void terminateWorkFlow(Workflow workFlow) { }
public void updateTemplate(String id, WorkflowTemplate template) { this.getJdbcTemplate().update( "update workflow_template set name=?,description=?,status=? where id=?", new Object[] { template.getName(), template.getDescription(), new Integer(template.getStatus()), id }, new int[] { Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.VARCHAR}); }
public void updateTemplateNode(String id, WorkflowTemplateNode flowNode) { this.getJdbcTemplate().update( "update workflow_template_flow set name=?,description=?,sequence=? Where id=?", new Object[] { flowNode.getName(), flowNode.getDescription(), new Integer(flowNode.getSequence()), id }, new int[] { Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.VARCHAR}); }
/** * 更新工作流 * @param id String * @param workflow Workflow */ public void updateWorkflow(String id, Workflow workflow) { this.getJdbcTemplate().update( "update workflow_work set doc_id=?,status=?," + "flow_id=?,start_date=?,end_date=?,comment=? from workflow_work where id=?", new Object[] {workflow.getDocId(), new Integer(workflow.getStatus()), workflow.getFlowId(), workflow.getStartDate(), workflow.getEndDate(), workflow.getComment(), id}, new int[] {Types.VARCHAR, Types.INTEGER, Types.VARCHAR, Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.VARCHAR}); }
public void addNewTemplateNodeMan(String template_node_id, String account_id) { String id = this.sequenceService.getValue(this. WORKFLOW_TEMPLATE_NODE_MAN_SEQ); this.getJdbcTemplate().update("insert into workflow_template_man(id,template_flow_id,account_id) values(?,?,?)", new Object[] {id, template_node_id, account_id}, new int[] {Types.VARCHAR, Types.VARCHAR, Types.VARCHAR}); }
public void deleteTemplateNodeMan(String template_node_id, String account_id) { this.getJdbcTemplate().update( "delete from workflow_template_man where template_flow_id=? and account_id=?", new Object[] {template_node_id, account_id}, new int[] {Types.VARCHAR, Types.VARCHAR});
}
/** * * @param flowNode WorkflowNode * @return String */ public String addNewWorkflowNode(WorkflowNode flowNode) { String id = this.sequenceService.getValue(this.WORKFLOW_NODE_SEQ); // this.getJdbcTemplate().update( "insert into workflow_flow(id,work_id,status," + "sequence,name,description,comment,start_date,end_date,audit_man) values(?,?,?,?,?,?,?,?,?,?)", new Object[] { id, flowNode.getWorkId(), new Integer(flowNode.getStatus()), new Integer(flowNode.getSequence()), flowNode.getName(), flowNode.getDescription(), flowNode.getComment(), flowNode.getStartDate(), flowNode.getEndDate(), flowNode.getAuditMan()}, new int[] { Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.DATE, Types.DATE, Types.VARCHAR});
//插入人員信息 if (flowNode.getMans() != null) { List mans = flowNode.getMans();
for (int i = 0; i < mans.size(); i++) { String man_id = this.sequenceService.getValue(this. WORKFLOW_NODE_MAN_SEQ); String account_id = (String) mans.get(i); this.getJdbcTemplate().update( "insert into workflow_man(id,flow_id,account_id) values(?,?,?)", new Object[] {man_id, id, account_id}, new int[] {Types.VARCHAR, Types.VARCHAR, Types.VARCHAR}); } } return id; }
public WorkflowNode[] getWorkflowNodesOfWork(String work_id) {
List list = this.getJdbcTemplate().query("select id,work_id,comment,status,sequence,name,description,start_date,end_date,audit_man from workflow_flow where " + "work_id=?", new Object[] {work_id}, new int[] {Types.VARCHAR}, new RowMapper() { public Object mapRow(ResultSet rs, int _int) throws SQLException { WorkflowNode wfNode = new WorkflowNode(); wfNode.setId(rs.getString("id")); wfNode.setWorkId(rs.getString("work_id")); wfNode.setComment(rs.getString("comment")); wfNode.setStatus(rs.getInt("status")); wfNode.setSequence(rs.getInt("sequence")); wfNode.setName(rs.getString("name")); wfNode.setDescription(rs.getString("description")); wfNode.setStartDate(rs.getTimestamp("start_date")); wfNode.setEndDate(rs.getTimestamp("end_date")); wfNode.setAuditMan(rs.getString("audit_man")); return wfNode;
} }); if (list != null && list.size() > 0) { return (WorkflowNode[]) list.toArray(new WorkflowNode[list.size()]); } return null; }
public void deleteWorkflowNode(String flow_id) { this.getJdbcTemplate().update("delete from workflow_flow where id=?", new Object[] {flow_id}, new int[] {Types.VARCHAR}); this.getJdbcTemplate().update( "delete from workflow_man where flow_id=?", new Object[] {flow_id}, new int[] {Types.VARCHAR}); }
/** * * @return Workflow */ public Workflow[] getAllRunningWorkflow() { return this.getWorkflowByStatus(Workflow.WORKFLOW_STATUS_RUNNING); }
public WorkflowNode getWorkflowNodeById(String node_id) { Object obj = this.getJdbcTemplate().query( "select id,work_id,comment,status," + "sequence,name,description,start_date,end_date,audit_man from workflow_flow where id=?", new Object[] {node_id}, new int[] {Types.VARCHAR}, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { WorkflowNode wfNode = new WorkflowNode(); wfNode.setId(rs.getString("id")); wfNode.setWorkId(rs.getString("work_id")); wfNode.setComment(rs.getString("comment")); wfNode.setStatus(rs.getInt("status")); wfNode.setSequence(rs.getInt("sequence")); wfNode.setName(rs.getString("name")); wfNode.setDescription(rs.getString("description")); wfNode.setStartDate(rs.getTimestamp("start_date")); wfNode.setEndDate(rs.getTimestamp("end_date")); wfNode.setAuditMan(rs.getString("audit_man")); return wfNode;
} return null; } }); if (obj != null) { return (WorkflowNode) obj; } return null; }
/** * 得到指定結(jié)點(diǎn)所包含的所有人員 * @param node_id String * @return String[] */ public String[] getMansOfWorkflowNode(String node_id) { List list = this.getJdbcTemplate().query( "select account_id from workflow_man where flow_id=?", new Object[] {node_id}, new int[] {Types.VARCHAR}, new RowMapper() { public Object mapRow(ResultSet rs, int _int) throws SQLException { return rs.getString("account_id"); } }); if (list != null && list.size() > 0) { return (String[]) list.toArray(new String[list.size()]); } return null; }
public WorkflowNode[] getWorkflowNodeByStatus(int status) { List list = this.getJdbcTemplate().query( "select b.flow_id,a.work_id,a.comment,a.status," + "a.sequence,a.name,a.description,a.start_date,a.end_date,a.audit_man from workflow_flow a" + ",workflow_work b where a.id=b.flow_id and b.status=? order by a.start_date desc", new Object[] {new Integer(status)}, new int[] {Types.INTEGER}, new RowMapper() { public Object mapRow(ResultSet rs, int _int) throws SQLException {
WorkflowNode wfNode = new WorkflowNode(); wfNode.setId(rs.getString("flow_id")); wfNode.setWorkId(rs.getString("work_id")); wfNode.setComment(rs.getString("comment")); wfNode.setStatus(rs.getInt("status")); wfNode.setSequence(rs.getInt("sequence")); wfNode.setName(rs.getString("name")); wfNode.setDescription(rs.getString("description")); wfNode.setStartDate(rs.getTimestamp("start_date")); wfNode.setEndDate(rs.getTimestamp("end_date")); wfNode.setAuditMan(rs.getString("audit_man")); return wfNode; } }); if (list != null && list.size() > 0) { return (WorkflowNode[]) list.toArray(new WorkflowNode[list.size()]); } return null; }
public WorkflowNode[] getAllRunningWorkflowNode() { return this.getWorkflowNodeByStatus(Workflow.WORKFLOW_STATUS_RUNNING, WorkflowNode. WORKFLOW_NODE_STATUS_RUNNING); }
public Workflow getWorkflowByDocId(String doc_id) {
Object obj = this.getJdbcTemplate().query("select id,doc_id,status," + "flow_id,start_date,end_date,comment from workflow_work where doc_id=?", new Object[] {doc_id}, new int[] {Types.VARCHAR}, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { Workflow wf = new Workflow(); wf.setId(rs.getString("id")); wf.setDocId(rs.getString("doc_id")); wf.setStatus(rs.getInt("status")); wf.setComment(rs.getString("comment")); wf.setStartDate(rs.getTimestamp("start_date")); wf.setEndDate(rs.getTimestamp("end_date")); wf.setFlowId(rs.getString("flow_id")); return wf; } return null; } }); if (obj != null) { return (Workflow) obj; } return null;
}
/** * * @param flow_id String * @param wfNode WorkflowNode */ public void updateWorkflowNode(String flow_id, WorkflowNode wfNode) { this.getJdbcTemplate().update( "update workflow_flow set work_id=?,comment=?,status=?," + "sequence=?,name=?,description=?,start_date=?,end_date=?,audit_man=? where id=?", new Object[] {wfNode.getWorkId(), wfNode.getComment(), new Integer(wfNode.getStatus()), new Integer(wfNode.getSequence()), wfNode.getName(), wfNode.getDescription(), wfNode.getStartDate(), wfNode.getEndDate(), wfNode.getAuditMan(), flow_id}, new int[] {Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.VARCHAR, Types.VARCHAR, Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.VARCHAR}); }
/** * 得到應(yīng)該運(yùn)行的下一個(gè)結(jié)點(diǎn) * * @param workflow_id String * @param currentSeq int * @return WorkflowNode */ public WorkflowNode getAfterShouldRunningWorkflowNode(String workflow_id, int currentSeq) { Object obj = this.getJdbcTemplate().query( "select id,work_id,comment,status," + "sequence,name,description,start_date,end_date,audit_man from workflow_flow where " + "work_id=? and sequence=(select min(sequence) from workflow_flow where work_id=? and sequence>?)", new Object[] {workflow_id, workflow_id, new Integer(currentSeq)}, new int[] {Types.VARCHAR, Types.VARCHAR, Types.INTEGER}, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { WorkflowNode wfNode = new WorkflowNode(); wfNode.setId(rs.getString("id")); wfNode.setWorkId(rs.getString("work_id")); wfNode.setComment(rs.getString("comment")); wfNode.setStatus(rs.getInt("status")); wfNode.setSequence(rs.getInt("sequence")); wfNode.setName(rs.getString("name")); wfNode.setDescription(rs.getString("description")); wfNode.setStartDate(rs.getTimestamp("start_date")); wfNode.setEndDate(rs.getTimestamp("end_date")); wfNode.setAuditMan(rs.getString("audit_man")); return wfNode;
} return null; } }); if (obj != null) { return (WorkflowNode) obj; } return null; }
/** * 在一個(gè)結(jié)點(diǎn)被拒絕的情況下,得到應(yīng)該返回的上一個(gè)結(jié)點(diǎn) * * @param workflow_id String * @param currentSeq int * @return WorkflowNode */ public WorkflowNode getBeforeShouldRunningWorkflowNode(String workflow_id, int currentSeq) { Object obj = this.getJdbcTemplate().query( "select id,work_id,comment,status," + "sequence,name,description,start_date,end_date,audit_man from workflow_flow where " + "work_id=? and sequence=(select max(sequence) from workflow_flow where work_id=? and sequence<?)", new Object[] {workflow_id, workflow_id, new Integer(currentSeq)}, new int[] {Types.VARCHAR, Types.VARCHAR, Types.INTEGER}, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { WorkflowNode wfNode = new WorkflowNode(); wfNode.setId(rs.getString("id")); wfNode.setWorkId(rs.getString("work_id")); wfNode.setComment(rs.getString("comment")); wfNode.setStatus(rs.getInt("status")); wfNode.setSequence(rs.getInt("sequence")); wfNode.setName(rs.getString("name")); wfNode.setDescription(rs.getString("description")); wfNode.setStartDate(rs.getTimestamp("start_date")); wfNode.setEndDate(rs.getTimestamp("end_date")); wfNode.setAuditMan(rs.getString("audit_man")); return wfNode;
} return null; } }); if (obj != null) { return (WorkflowNode) obj; } return null; }
public WorkflowNode[] getWorkflowNodeByStatus(int work_status, int node_status) { List list = this.getJdbcTemplate().query( "select b.flow_id,a.work_id,a.comment,a.status," + "a.sequence,a.name,a.description,a.start_date,a.end_date,a.audit_man from workflow_flow a" + ",workflow_work b where a.id=b.flow_id and b.status=? and a.status=? order by a.start_date desc", new Object[] {new Integer(work_status), new Integer(node_status)}, new int[] {Types.INTEGER, Types.INTEGER}, new RowMapper() { public Object mapRow(ResultSet rs, int _int) throws SQLException {
WorkflowNode wfNode = new WorkflowNode(); wfNode.setId(rs.getString("flow_id")); wfNode.setWorkId(rs.getString("work_id")); wfNode.setComment(rs.getString("comment")); wfNode.setStatus(rs.getInt("status")); wfNode.setSequence(rs.getInt("sequence")); wfNode.setName(rs.getString("name")); wfNode.setDescription(rs.getString("description")); wfNode.setStartDate(rs.getTimestamp("start_date")); wfNode.setEndDate(rs.getTimestamp("end_date")); wfNode.setAuditMan(rs.getString("audit_man")); return wfNode; } }); if (list != null && list.size() > 0) { return (WorkflowNode[]) list.toArray(new WorkflowNode[list.size()]); } return null;
}
public WorkflowNode[] getAllBackedWorkflowNode() { WorkflowNode[] wfNodes = getWorkflowNodeByStatus(Workflow. WORKFLOW_STATUS_RUNNING, WorkflowNode.WORKFLOW_NODE_STATUS_BACKED); return wfNodes; }
public WorkflowNode[] getAllReEditWorkflowNode() { WorkflowNode[] wfNodes = getWorkflowNodeByStatus(Workflow. WORKFLOW_STATUS_BACKED, WorkflowNode.WORKFLOW_NODE_STATUS_DECLINED); return wfNodes; } /** * 取得默認(rèn)的工作流模板 * @return WorkflowTemplate */ public WorkflowTemplate getDefaultWorkflow() { Object obj = this.getJdbcTemplate().query( "select * from workflow_template where defaultworkflow=?", new Object[] {new Integer(0)}, new int[] {Types.INTEGER}, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { WorkflowTemplate temp = new WorkflowTemplate(); temp.setId(rs.getString("id")); temp.setName(rs.getString("name")); temp.setDescription(rs.getString("description")); temp.setCreateMan(rs.getString("createMan")); temp.setCreateDate(rs.getTimestamp("createDate")); temp.setStatus(rs.getInt("status")); temp.setDefaultWorkflow(rs.getInt("defaultworkflow")); return temp; } return null; } }); if (obj != null) { return (WorkflowTemplate) obj; } return null; } }
|