当前位置导航:炫浪网>>网络学院>>网页制作>>JSP教程

一个用数据库实现的工作流


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() {    }

    /**     * 新建立一个工作流模板     * @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});            }        }    }

    /**     * 生成新的工作流实例 调用程序需要本身设置这些信息 1)本身信息 2)结点信息     * 3)结点人员信息     * status:-1,待启动,-2:强制终止,-3:退回到原始状态(需要修改),0:正在运行,1:已经完成.     * flow_id:当前运行结点id.-9999:已经没有当前结点.     *     * @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});        //插入结点信息,由结点插入来插入人员信息        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});        deleteTemplateNodesOfTemplate(id);    }

    public void deleteTemplateNode(String id) {        ////删除结点需要调整序号        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});    }

    /**     * 删除工作流实例     * @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;    }

    /**     * 得到指定工作流的当前结点     * @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;    }

    /**     * 根据状态得到工作流     * @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;    }

    /**     * 得到指定结点所包含的所有人员     * @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});    }

    /**     * 得到应该运行的下一个结点     *     * @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;    }

    /**     * 在一个结点被拒绝的情况下,得到应该返回的上一个结点     *     * @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;    }    /**     * 取得默认的工作流模板     * @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;    }}
相关内容
赞助商链接