乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      一個(gè)用數(shù)據(jù)庫(kù)實(shí)現(xiàn)的工作流

       duduwolf 2005-08-25

      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;
          }
      }

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多