DocumentManagerPlus.java
上传用户:mingda
上传日期:2017-06-20
资源大小:27691k
文件大小:39k
源码类别:

OA系统

开发平台:

Java

  1. package com.gforce.gfoa;
  2. import com.gforce.currency.database.*;
  3. import java.util.*;
  4. import com.gforce.currency.*;
  5. /**
  6.  * <p>Title: 吉力科技办公自动化系统</p>
  7.  * <p>Description: 吉力科技办公自动化系统</p>
  8.  * <p>Copyright: 版权所有 2003 (c) 西安吉力科技发展有限公司  Copyright (c) 2003 GForce Sceince & Technology</p>
  9.  * <p>Company: 西安吉力科技发展有限公司 (GForce Sceince & Technology)</p>
  10.  * @author 王华
  11.  * @version 1.0
  12.  */
  13. public class DocumentManagerPlus
  14.   extends RecordManager
  15. {
  16.   public DocumentManagerPlus()
  17.   {
  18.   }
  19.   protected final static String TableName = "Document"; //定义声明本类操作表名称
  20.   protected final static String IDFieldName = "ID"; //定义声明主键或者可以确定唯一记录的字段名称为“ID”,必须为自增整型
  21.   protected final static String[] NumericFieldsName =
  22.     {
  23.     "DocFlowTempletID", "BuildUserID", "FillUserID", "CurrentFlowTacheID"}; //声明数值型字段名称
  24.   protected final static String[] StringFieldsName =
  25.     {
  26.     "DocumentName"}; //声明字符型字段名称
  27.   protected final static String[] DatetimeFieldsName =
  28.     {
  29.     "BuildTime", "RemindTime"}; //声明日期时间型字段名称
  30.   protected final static String[] BoolFieldsName =
  31.     {
  32.     "IsPigeonholed", "IsReminded"}; //声明布尔型字段名称
  33.   protected final static String[] TextFieldsName =
  34.     {}; //声明大文本型字段名称
  35.   /**
  36.    * 根据字段名称获取插入数据时表单元素名称
  37.    * @param strFieldName  字段名称
  38.    * @return  表单素名称
  39.    */
  40.   protected String InsertParament(String strFieldName)
  41.   {
  42.     return "" + strFieldName + ""; //可以根据需要加前缀、后缀
  43.   }
  44.   /**
  45.    * 根据字段名称获取修改数据时表单元素名称
  46.    * @param strFieldName  字段名称
  47.    * @return  表单素名称
  48.    */
  49.   protected String UpdateParament(String strFieldName)
  50.   {
  51.     return "" + strFieldName + ""; //可以根据需要加前缀、后缀
  52.   }
  53.   /**
  54.    * 获取本类操作表名称
  55.    * @return  表名称
  56.    */
  57.   public String getTableName()
  58.   { //获取本类操作表名称
  59.     return TableName;
  60.   }
  61.   protected String getIDFieldName()
  62.   { //获取主键或者可以确定唯一记录的字段名称
  63.     return IDFieldName;
  64.   }
  65.   protected String[] getNumericFieldsName()
  66.   { //获取数值型字段名称
  67.     return NumericFieldsName;
  68.   }
  69.   protected String[] getStringFieldsName()
  70.   { //获取字符型字段名称
  71.     return StringFieldsName;
  72.   }
  73.   protected String[] getDatetimeFieldsName()
  74.   { //获取日期时间型字段名称
  75.     return DatetimeFieldsName;
  76.   }
  77.   protected String[] getBoolFieldsName()
  78.   { //获取布尔型字段名称
  79.     return BoolFieldsName;
  80.   }
  81.   protected String[] getTextFieldsName()
  82.   { //获取大文本型字段名称
  83.     return TextFieldsName;
  84.   }
  85.   /**
  86.    * 获取所有文档记录集
  87.    * @return 所有文档记录集
  88.    */
  89.   public static Vector getAllRecord()
  90.   {
  91.     Vector vt = SQLManager.GetResultSet("Select * from " + TableName);
  92.     return vt;
  93.   }
  94.   /**
  95.    * 获取指定ID地记录
  96.    * @param iDocID 指定地记录ID
  97.    * @return 记录数据集
  98.    */
  99.   public static Vector getByIDRecord(int iDocID)
  100.   {
  101.     Vector vt = SQLManager.GetResultSet("Select * from " + TableName +
  102.                                         " WHERE ID ='" + iDocID + "'");
  103.     return vt;
  104.   }
  105.   /**
  106.    * 按制定条件查询记录集
  107.    * @param strID ID标识
  108.    * @param strDocumentName 公文名称
  109.    * @param iDocFlowTempletID 公文流转模板ID
  110.    * @param strDocFlowTempletName 公文流转模板名称
  111.    * @param iBuildUserID 生成用户ID
  112.    * @param strBuildUserName 生成用户姓名
  113.    * @param iFillUserID 填表用户ID
  114.    * @param strFillUserName 填表用户ID
  115.    * @param bIsPigeonholed 是否已经归档
  116.    * @param iCurrentFlowTacheID 当前流程环节ID
  117.    * @param strCurrentFlowTacheName 当前流程环节名称
  118.    * @param iTacheStatus 当前流程环节状态ID
  119.    * @param strTacheStatus 当前流程环节状态
  120.    * @param bIsReminded 是否已经提醒
  121.    * @param strRemindTime 提醒时间
  122.    * @param strBuildTimeFrom 建立时间起始
  123.    * @param strBuildTimeTo 建立时间截至
  124.    * @param strOrderBy 排序字段
  125.    * @param bIsDesc 是否降序排序
  126.    * @return 符合条件记录向量集
  127.    */
  128.   public static Vector getRecordBySearch(String strID, String strDocumentName,
  129.                                          int iDocFlowTempletID,
  130.                                          String strDocFlowTempletName,
  131.                                          int iBuildUserID,
  132.                                          String strBuildUserName,
  133.                                          int iFillUserID,
  134.                                          String strFillUserName,
  135.                                          boolean bIsPigeonholed,
  136.                                          int iCurrentFlowTacheID,
  137.                                          String strCurrentFlowTacheName,
  138.                                          int iTacheStatus,
  139.                                          String strTacheStatus,
  140.                                          boolean bIsReminded,
  141.                                          String strRemindTime,
  142.                                          String strBuildTimeFrom,
  143.                                          String strBuildTimeTo,
  144.                                          String strOrderBy, boolean bIsDesc)
  145.   {
  146.     return getRecordBySearch(strID, strDocumentName, iDocFlowTempletID,
  147.                              strDocFlowTempletName, iBuildUserID,
  148.                              strBuildUserName, iFillUserID, strFillUserName,
  149.                              bIsPigeonholed, iCurrentFlowTacheID,
  150.                              strCurrentFlowTacheName, iTacheStatus,
  151.                              strTacheStatus, bIsReminded + "", strRemindTime,
  152.                              strBuildTimeFrom, strBuildTimeTo, strOrderBy,
  153.                              bIsDesc);
  154.   }
  155.   /**
  156.    * 按制定条件查询记录集
  157.    * @param strID ID标识
  158.    * @param strDocumentName 公文名称
  159.    * @param iDocFlowTempletID 公文流转模板ID
  160.    * @param strDocFlowTempletName 公文流转模板名称
  161.    * @param iBuildUserID 生成用户ID
  162.    * @param strBuildUserName 生成用户姓名
  163.    * @param iFillUserID 填表用户ID
  164.    * @param strFillUserName 填表用户ID
  165.    * @param bIsPigeonholed 是否已经归档
  166.    * @param iCurrentFlowTacheID 当前流程环节ID
  167.    * @param strCurrentFlowTacheName 当前流程环节名称
  168.    * @param iTacheStatus 当前流程环节状态ID
  169.    * @param strTacheStatus 当前流程环节状态
  170.    * @param strIsReminded 是否已经提醒
  171.    * @param strRemindTime 提醒时间
  172.    * @param strBuildTimeFrom 建立时间起始
  173.    * @param strBuildTimeTo 建立时间截至
  174.    * @param strOrderBy 排序字段
  175.    * @param bIsDesc 是否降序排序
  176.    * @return 符合条件记录向量集
  177.    */
  178.   public static Vector getRecordBySearch(String strID, String strDocumentName,
  179.                                          int iDocFlowTempletID,
  180.                                          String strDocFlowTempletName,
  181.                                          int iBuildUserID,
  182.                                          String strBuildUserName,
  183.                                          int iFillUserID,
  184.                                          String strFillUserName,
  185.                                          boolean bIsPigeonholed,
  186.                                          int iCurrentFlowTacheID,
  187.                                          String strCurrentFlowTacheName,
  188.                                          int iTacheStatus,
  189.                                          String strTacheStatus,
  190.                                          String strIsReminded,
  191.                                          String strRemindTime,
  192.                                          String strBuildTimeFrom,
  193.                                          String strBuildTimeTo,
  194.                                          String strOrderBy, boolean bIsDesc)
  195.   {
  196.     return getRecordBySearch(strID, strDocumentName, iDocFlowTempletID,
  197.                              strDocFlowTempletName, iBuildUserID,
  198.                              strBuildUserName, iFillUserID, strFillUserName,
  199.                              bIsPigeonholed, iCurrentFlowTacheID,
  200.                              strCurrentFlowTacheName, iTacheStatus,
  201.                              strTacheStatus, strIsReminded, strRemindTime,
  202.                              strBuildTimeFrom, strBuildTimeTo, 0, strOrderBy,
  203.                              bIsDesc);
  204.   }
  205.   /**
  206.    * 按制定条件查询记录集
  207.    * @param strID ID标识
  208.    * @param strDocumentName 公文名称
  209.    * @param iDocFlowTempletID 公文流转模板ID
  210.    * @param strDocFlowTempletName 公文流转模板名称
  211.    * @param iBuildUserID 生成用户ID
  212.    * @param strBuildUserName 生成用户姓名
  213.    * @param iFillUserID 填表用户ID
  214.    * @param strFillUserName 填表用户ID
  215.    * @param bIsPigeonholed 是否已经归档
  216.    * @param iCurrentFlowTacheID 当前流程环节ID
  217.    * @param strCurrentFlowTacheName 当前流程环节名称
  218.    * @param iTacheStatus 当前流程环节状态ID
  219.    * @param strTacheStatus 当前流程环节状态
  220.    * @param strIsReminded 是否已经提醒
  221.    * @param strRemindTime 提醒时间
  222.    * @param strBuildTimeFrom 建立时间起始
  223.    * @param strBuildTimeTo 建立时间截至
  224.    * @param iReadUserID 读取用户ID
  225.    * @param strOrderBy 排序字段
  226.    * @param bIsDesc 是否降序排序
  227.    * @return 符合条件记录向量集
  228.    */
  229.   public static Vector getRecordBySearch(String strID, String strDocumentName,
  230.                                          int iDocFlowTempletID,
  231.                                          String strDocFlowTempletName,
  232.                                          int iBuildUserID,
  233.                                          String strBuildUserName,
  234.                                          int iFillUserID,
  235.                                          String strFillUserName,
  236.                                          boolean bIsPigeonholed,
  237.                                          int iCurrentFlowTacheID,
  238.                                          String strCurrentFlowTacheName,
  239.                                          int iTacheStatus,
  240.                                          String strTacheStatus,
  241.                                          String strIsReminded,
  242.                                          String strRemindTime,
  243.                                          String strBuildTimeFrom,
  244.                                          String strBuildTimeTo, int iReadUserID,
  245.                                          String strOrderBy, boolean bIsDesc)
  246.   {
  247.     String strSQL = "Select a.[ID], a.[DocumentName], a.[DocFlowTempletID], a.[BuildTime], a.[BuildUserID], a.[FillUserID]," +
  248.       " a.[IsPigeonholed], a.[CurrentFlowTacheID], a.[IsReminded], a.[RemindTime]," +
  249.       " c.[Name], d.[Name], e.[Name], f.[TacheName], f.[TacheStatus] from [" +
  250.       TableName + "] as a" +
  251.       " left outer join [UserInfo] as b on (a.BuildUserId=b.ID) left outer join [PersonnelInfo] as c on (b.PersonnelID=c.ID)" +
  252.       " left outer join [UserInfo] as g on (a.FillUserID=g.ID) left outer join [PersonnelInfo] as d on (g.PersonnelID=d.ID)" +
  253.       " left outer join [DocTempletMoveFlow] as e on (a.DocFlowTempletID=e.ID)" +
  254.       " left outer join [FlowTacheInfo] as f on (a.CurrentFlowTacheID=f.ID) where a.[CurrentFlowTacheID]>-2";
  255.     if (strDocumentName.trim().length() > 0)
  256.     {
  257.       strSQL += " and a.[DocumentName] like '%" + strDocumentName + "%'";
  258.     }
  259.     if (strDocFlowTempletName.trim().length() > 0)
  260.     {
  261.       strSQL += " and e.[Name] like '%" + strDocFlowTempletName + "%'";
  262.     }
  263.     if (strIsReminded.trim().equalsIgnoreCase("true"))
  264.     {
  265.       strSQL += " and a.[IsReminded] = 1";
  266.     }
  267.     else if (strIsReminded.trim().equalsIgnoreCase("false"))
  268.     {
  269.       strSQL += " and (a.[IsReminded] IS null OR a.[IsReminded] = 0)";
  270.     }
  271.     if (strBuildUserName.trim().length() > 0)
  272.     {
  273.       strSQL += " and c.[Name] like '%" + strBuildUserName + "%'";
  274.     }
  275.     if (strFillUserName.trim().length() > 0)
  276.     {
  277.       strSQL += " and d.[Name] like '%" + strFillUserName + "%'";
  278.     }
  279.     if (bIsPigeonholed)
  280.     {
  281.       strSQL += " and a.[IsPigeonholed] = 1";
  282.     }
  283.     else
  284.     {
  285.       strSQL += " and (a.[IsPigeonholed] IS null OR a.[IsPigeonholed] = 0)";
  286.     }
  287.     if (strCurrentFlowTacheName.trim().length() > 0)
  288.     {
  289.       strSQL += " and f.[TacheName] like '%" + strCurrentFlowTacheName + "%'";
  290.     }
  291.     if (strTacheStatus.trim().length() > 0)
  292.     {
  293.       strSQL += " and '%' + f.[TacheStatus] + '%' like '%" + strTacheStatus +
  294.         "%'";
  295.     }
  296.     if (strBuildTimeFrom.trim().length() > 0)
  297.     {
  298.       strSQL += " and a.[BuildTime]>='" + strBuildTimeFrom + " 00:00:00.000'";
  299.     }
  300.     if (strBuildTimeTo.trim().length() > 0)
  301.     {
  302.       strSQL += " and a.[BuildTime]<='" + strBuildTimeTo + " 23:59:59.999'";
  303.     }
  304.     if (iReadUserID > 0)
  305.     {
  306.       strSQL += " and ',' + e.[ReadOnlyUserIDs] + ',' like '%," + iReadUserID +
  307.         ",%'";
  308.     }
  309.     if (iDocFlowTempletID > 0)
  310.     {
  311.       strSQL += " and e.[DocFlowTempletID]=" + iReadUserID + "";
  312.     }
  313.     if (iCurrentFlowTacheID != 0)
  314.     {
  315.       strSQL += " and a.[CurrentFlowTacheID]=" + iCurrentFlowTacheID + "";
  316.     }
  317.     if (strOrderBy.trim().length() > 0)
  318.     {
  319.       if (bIsDesc)
  320.       {
  321.         strSQL += " Order by " + strOrderBy + " desc";
  322.       }
  323.       else
  324.       {
  325.         strSQL += " Order by " + strOrderBy + "";
  326.       }
  327.     }
  328.     Vector vt = SQLManager.GetResultSet(strSQL);
  329.     return vt;
  330.   }
  331.   /**
  332.    * 插入记录
  333.    * @param iDocTempletMoveFlowID 指定工作流ID
  334.    * @param iUserID 用户ID
  335.    * @param strIPAddress 用户IP地址
  336.    * @param strDocTempletTableName 公文模板表名称
  337.    * @return 返回错误代码
  338.    */
  339.   public static int InsertRecord(int iDocTempletMoveFlowID, int iUserID,
  340.                                  String strIPAddress,
  341.                                  String strDocTempletTableName)
  342.   {
  343.     return InsertRecord(iDocTempletMoveFlowID, iUserID, iUserID, strIPAddress,
  344.                         strDocTempletTableName);
  345.   }
  346.   /**
  347.    * 插入记录
  348.    * @param iDocTempletMoveFlowID 指定工作流ID
  349.    * @param iBuildUserID 创建用户ID
  350.    * @param iFillUserID 填写用户ID
  351.    * @param strIPAddress 用户IP地址
  352.    * @param strDocTempletTableName 公文模板表名称
  353.    * @return 返回错误代码
  354.    */
  355.   public static int InsertRecord(int iDocTempletMoveFlowID, int iBuildUserID,
  356.                                  int iFillUserID, String strIPAddress,
  357.                                  String strDocTempletTableName)
  358.   {
  359.     Vector vt = DocTempletMoveFlowManager.getRecordBySearch(
  360.       iDocTempletMoveFlowID + "", strDocTempletTableName);
  361.     if (vt.size() == 1)
  362.     {
  363.       String strWritableUserIDs = ( (Vector) vt.get(0)).get(13).toString();
  364.       String strWritableDepartIDs = ( (Vector) vt.get(0)).get(14).toString();
  365.       String strDepartID = UserManager.getDepartmentIDByUserID(iFillUserID);
  366.       String strDocName = "";
  367.       String strBuildTime = StringNew.GetDateString(new Date(),
  368.         "yyyy-MM-dd HH:mm:ss");
  369.       String strMoveFlowID = ( (Vector) vt.get(0)).get(4).toString();
  370.       if ( ( ("," + strWritableUserIDs + ",").indexOf("," + iFillUserID + ",") >=
  371.             0)
  372.           ||
  373.           ( ("," + strWritableDepartIDs + ",").indexOf("," + strDepartID + ",") >=
  374.            0))
  375.       {
  376.         int iDocTempletID = 0;
  377.         try
  378.         {
  379.           iDocTempletID = Integer.parseInt( ( (Vector) vt.get(0)).get(2).
  380.                                            toString());
  381.         }
  382.         catch (Exception e)
  383.         {
  384.           return -103;
  385.         }
  386.         Vector vtDocName = DocumentTempletManager.getRecordByID(iDocTempletID);
  387.         if (vtDocName.size() == 1)
  388.         {
  389.           strDocName = ( (Vector) vtDocName.get(0)).get(1).toString();
  390.         }
  391.         else
  392.         {
  393.           return -101;
  394.         }
  395.         Vector vtMoveFlow = SQLManager.GetResultSet(
  396.           "select ID from FlowTacheInfo where FlowID = " + strMoveFlowID
  397.           + " and TacheStatus='S'");
  398.         if (vtMoveFlow.size() == 1)
  399.         {
  400.           int iCurrentFlowTacheID = Integer.parseInt( ( (Vector) vtMoveFlow.get(
  401.             0)).get(0).toString());
  402.           int i = SQLManager.ExcuteSQL("insert " + TableName
  403.                                        + "(DocumentName, DocFlowTempletID, BuildTime, BuildUserID, FillUserID, CurrentFlowTacheID) values ('"
  404.                                        + strDocName + "', " +
  405.                                        iDocTempletMoveFlowID + ", '" +
  406.                                        strBuildTime + "', "
  407.                                        + iBuildUserID + ", " + iFillUserID +
  408.                                        ", " + iCurrentFlowTacheID + ")");
  409.           Vector vtID = SQLManager.GetResultSet("select ID from " + TableName +
  410.                                                 " where DocumentName='" +
  411.                                                 strDocName +
  412.                                                 "' and DocFlowTempletID=" +
  413.                                                 iDocTempletMoveFlowID +
  414.                                                 " and BuildTime='" +
  415.                                                 strBuildTime +
  416.                                                 "' and BuildUserID=" +
  417.                                                 iBuildUserID +
  418.                                                 " and FillUserID=" +
  419.                                                 iFillUserID +
  420.                                                 " and CurrentFlowTacheID=" +
  421.                                                 iCurrentFlowTacheID);
  422.           int iDocID = Integer.parseInt( ( (Vector) vtID.get(0)).get(0).
  423.                                         toString());
  424.           return iDocID;
  425.         }
  426.         else
  427.         {
  428.           return -104;
  429.         }
  430.       }
  431.       else
  432.       {
  433.         return -102;
  434.       }
  435.     }
  436.     else
  437.     {
  438.       return -101;
  439.     }
  440.   }
  441.   /**
  442.    * 插入多条记录前保存IDs
  443.    * @param strIDs 模板ID
  444.    * @param iUserID 操作用户ID
  445.    * @param strIPAddress 操作用户IP地址
  446.    * @param strDocTempletTableName 公文模板表名称
  447.    * @return 返回错误代码
  448.    */
  449.   public static int SendDocInsert(String strIDs, int iUserID,
  450.                                   String strIPAddress,
  451.                                   String strDocTempletTableName)
  452.   {
  453.     Vector vt = SQLManager.GetResultSet(
  454.       "select ID from DocTempletMoveFlow where ID in (" + strIDs + ")");
  455.     int returnValue = 0;
  456.     if (vt.size() > 0)
  457.     {
  458.       for (int i = 0; i < vt.size(); i++)
  459.       {
  460.         int iDocTempletMoveFlowID = Integer.parseInt( ( (Vector) vt.get(i)).get(
  461.           0).toString());
  462.         returnValue = InsertRecordMult(iDocTempletMoveFlowID, iUserID,
  463.                                        strIPAddress, strDocTempletTableName);
  464.       }
  465.     }
  466.     else
  467.     {
  468.       returnValue = -101;
  469.     }
  470.     return returnValue;
  471.   }
  472.   /**
  473.    * 插入多条记录
  474.    * @param iDocTempletMoveFlowID 指定工作流ID
  475.    * @param iUserID 用户ID
  476.    * @param strIPAddress 用户IP地址
  477.    * @param strDocTempletTableName 公文模板表名称
  478.    * @return 返回错误代码
  479.    */
  480.   public static int InsertRecordMult(int iDocTempletMoveFlowID, int iUserID,
  481.                                      String strIPAddress,
  482.                                      String strDocTempletTableName)
  483.   {
  484.     Vector vt = DocTempletMoveFlowManager.getRecordBySearch(
  485.       iDocTempletMoveFlowID + "", strDocTempletTableName);
  486.     if (vt.size() == 1)
  487.     {
  488.       String strWritableUserIDs = ( (Vector) vt.get(0)).get(13).toString();
  489.       String strWritableDepartIDs = ( (Vector) vt.get(0)).get(14).toString();
  490.       String strDepAllUser = "";
  491.       if (strWritableDepartIDs.trim().length() > 0)
  492.       {
  493.         Vector vtDep = UserManager.getRecordByDepartmentIDs(
  494.           strWritableDepartIDs);
  495.         for (int j = 0; j < vtDep.size(); j++)
  496.         {
  497.           if (j >0)
  498.           {
  499.             strDepAllUser += ",";
  500.           }
  501.           strDepAllUser += ( (Vector) vtDep.get(j)).get(0).toString();
  502.         }
  503.       }
  504.       if(strWritableUserIDs.trim().length()>0 && strDepAllUser.trim().length()>0)
  505.         strDepAllUser = strWritableUserIDs + "," + strDepAllUser;
  506.       else if(strWritableUserIDs.trim().length()>0)
  507.         strDepAllUser = strWritableUserIDs;
  508.       if(strDepAllUser.trim().length()>0)
  509.       {
  510.         Vector vtUserID = UserManager.getRecordByIDs(strDepAllUser);
  511.         for (int i = 0; i < vtUserID.size(); i++)
  512.         {
  513.           InsertRecord(iDocTempletMoveFlowID, iUserID,
  514.                        Integer.parseInt( ( (Vector) vtUserID.get(i)).get(0).
  515.                                         toString()), strIPAddress,
  516.                        strDocTempletTableName);
  517.         }
  518.         return 1;
  519.       }
  520.       else
  521.       {
  522.         return -101;
  523.       }
  524.     }
  525.     else
  526.     {
  527.       return -101;
  528.     }
  529.   }
  530.   /**
  531.    * 对公文进行归档
  532.    * @param strIDs 要进行归档的公文记录编号
  533.    * @return 返回错误代码
  534.    */
  535.   public static int Pigeonholed(String strIDs)
  536.   {
  537.     int iReturnValue = 0;
  538.     Vector vt = SQLManager.GetResultSet("Select * from " + TableName +
  539.                                         " where ID in (" + strIDs + ")");
  540.     if (vt.size() > 0)
  541.     {
  542.       iReturnValue = SQLManager.ExcuteSQL(
  543.         "UPDATE Document SET IsPigeonholed = 1 where ID IN (" + strIDs + ")");
  544.     }
  545.     else
  546.     {
  547.       iReturnValue = -101;
  548.     }
  549.     return iReturnValue;
  550.   }
  551.   /**
  552.    * 对公文进行反归档
  553.    * @param strIDs 要进行归档的公文记录编号
  554.    * @return 返回错误代码
  555.    */
  556.   public static int DisPigeonholed(String strIDs)
  557.   {
  558.     int iReturnValue = 0;
  559.     Vector vt = SQLManager.GetResultSet("Select * from " + TableName +
  560.                                         " where ID in (" + strIDs + ")");
  561.     if (vt.size() > 0)
  562.     {
  563.       iReturnValue = SQLManager.ExcuteSQL(
  564.         "UPDATE Document SET IsPigeonholed = 0 where ID IN (" + strIDs + ")");
  565.     }
  566.     else
  567.     {
  568.       iReturnValue = -101;
  569.     }
  570.     return iReturnValue;
  571.   }
  572.   /**
  573.    * 删除公文
  574.    * @param strIDs 要进行删除操作的公文记录编号
  575.    * @return 返回错误代代码
  576.    */
  577.   public static int DeleteDocument(String strIDs)
  578.   {
  579.     int iReturnValue = -101;
  580.     Vector vt = SQLManager.GetResultSet("Select ID from " + TableName +
  581.                                         " where ID in (" + strIDs + ")");
  582.     if (vt.size() > 0)
  583.     {
  584.       for (int i = 0; i < vt.size(); i++)
  585.       {
  586.         int counter = 0;
  587.         Vector vc = SQLManager.GetResultSet(
  588.           "select count(*) as counter from DocFieldsValue where DocumentID = " +
  589.           Integer.parseInt( ( (Vector) vt.get(i)).get(0).toString()));
  590.         if (vc.size() == 1)
  591.         {
  592.           counter = Integer.parseInt( ( (Vector) vc.get(0)).get(0).toString());
  593.           if (counter < 0)
  594.           {
  595.             return -3; //表示要修改的记录不存在
  596.           }
  597.         }
  598.         else
  599.         {
  600.           return -3; //表示要修改的记录不存在
  601.         }
  602.         iReturnValue = SQLManager.ExcuteSQL(
  603.           "Delete from DocFieldsValue where DocumentID = " +
  604.           Integer.parseInt( ( (Vector) vt.get(i)).get(0).toString()));
  605.         vc = SQLManager.GetResultSet(
  606.           "select count(*) as counter from ApproveRecordInfo where DocumentID = " +
  607.           Integer.parseInt( ( (Vector) vt.get(i)).get(0).toString()));
  608.         if (vc.size() == 1)
  609.         {
  610.           counter = Integer.parseInt( ( (Vector) vc.get(0)).get(0).toString());
  611.           if (counter < 0)
  612.           {
  613.             return -3; //表示要修改的记录不存在
  614.           }
  615.         }
  616.         else
  617.         {
  618.           return -3; //表示要修改的记录不存在
  619.         }
  620.         iReturnValue = SQLManager.ExcuteSQL(
  621.           "Delete from ApproveRecordInfo where DocumentID = " +
  622.           Integer.parseInt( ( (Vector) vt.get(i)).get(0).toString()));
  623.         vc = SQLManager.GetResultSet(
  624.           "select count(*) as counter from Document where ID = " +
  625.           Integer.parseInt( ( (Vector) vt.get(i)).get(0).toString()));
  626.         if (vc.size() == 1)
  627.         {
  628.           counter = Integer.parseInt( ( (Vector) vc.get(0)).get(0).toString());
  629.           if (counter < 0)
  630.           {
  631.             return -3; //表示要修改的记录不存在
  632.           }
  633.         }
  634.         else
  635.         {
  636.           return -3; //表示要修改的记录不存在
  637.         }
  638.         iReturnValue = SQLManager.ExcuteSQL("Delete from Document where ID = " +
  639.                                             Integer.parseInt( ( (Vector) vt.get(
  640.           i)).get(0).toString()));
  641.       }
  642.     }
  643.     else
  644.     {
  645.       return -101;
  646.     }
  647.     return iReturnValue;
  648.   }
  649.   /**
  650.    * 返回待处理公文列表
  651.    * @param strID 公文模板ID
  652.    * @param strDocumentName 公文名称
  653.    * @param strBuildTimeFrom 公文生成时间起始
  654.    * @param strBuildTimeTo 公文生成时间结束
  655.    * @param strBuildUserName 生成用户姓名
  656.    * @param strFillUserName 填表用户姓名
  657.    * @param strTacheName 当前环节名称
  658.    * @param strFillUserID 填表用户ID
  659.    * @param strApproveUserID 当前环节审批用户ID
  660.    * @param strOrderBy 排序字段
  661.    * @param strIsDesc 是否降序排序
  662.    * @return 符合条件记录向量集
  663.    */
  664.   public static Vector getRecordBySearchAll(String strID,
  665.                                             String strDocumentName,
  666.                                             String strBuildTimeFrom,
  667.                                             String strBuildTimeTo,
  668.                                             String strBuildUserName,
  669.                                             String strFillUserName,
  670.                                             String strTacheName,
  671.                                             String strFillUserID,
  672.                                             String strApproveUserID,
  673.                                             String strOrderBy, String strIsDesc)
  674.   {
  675.     String strSQL = "SELECT a.[ID],a.[DocumentName],a.[DocFlowTempletID],a.[BuildTime],a.[BuildUserID],a.[FillUserID],a.[IsPigeonholed],"
  676.       + "a.[CurrentFlowTacheID],a.[IsReminded],a.[RemindTime],c.[Name],e.[Name],f.[TacheName],f.[FromTacheID],f.[TacheStatus],"
  677.       + "f.[ApproveUserIDs],f.[TacheType],f.[FlowID],f.[IsRecordRead],f.[RemindInterval],f.[MaxWaitTime],f.[IsFromDefault],f.[IsFinishedByRead]"
  678.       + " FROM [Document] AS a LEFT OUTER JOIN  [UserInfo] AS b ON (a.[BuildUserID] = b.[ID]) LEFT OUTER JOIN [PersonnelInfo] AS c "
  679.       + "ON (b.[PersonnelID] = c.[ID]) LEFT OUTER JOIN [UserInfo] AS d ON (a.[FillUserID] = d.[ID]) LEFT OUTER JOIN [PersonnelInfo] AS e"
  680.       + " ON (d.[PersonnelID] = e.[ID]) LEFT OUTER JOIN [FlowTacheInfo] AS f ON (a.[CurrentFlowTacheID] = f.[ID]) WHERE a.[ID]>0 and NOT(a.[IsPigeonholed] = 1) and a.[CurrentFlowTacheID]>-2";
  681.     if (strID.trim().length() > 0)
  682.     {
  683.       strSQL += " and a.[ID] ='" + strID + "'";
  684.     }
  685.     if (strDocumentName.trim().length() > 0)
  686.     {
  687.       strSQL += " and a.[DocumentName] like '%" + strDocumentName + "%'";
  688.     }
  689.     if (strBuildTimeFrom.trim().length() > 0)
  690.     {
  691.       strSQL += " and a.[BuildTime]>='" + strBuildTimeFrom + " 00:00:00.000'";
  692.     }
  693.     if (strBuildTimeTo.trim().length() > 0)
  694.     {
  695.       strSQL += " and a.[BuildTime]<='" + strBuildTimeTo + " 23:59:59.999'";
  696.     }
  697.     if (strBuildUserName.trim().length() > 0)
  698.     {
  699.       strSQL += " and c.[Name] like '%" + strBuildUserName + "%'";
  700.     }
  701.     if (strFillUserName.trim().length() > 0)
  702.     {
  703.       strSQL += " and e.[Name] like '%" + strFillUserName + "%'";
  704.     }
  705.     if (strTacheName.trim().length() > 0)
  706.     {
  707.       strSQL += " and f.[TacheName] like '%" + strTacheName + "%'";
  708.     }
  709.     if ( (strFillUserID.trim().length() > 0) &&
  710.         (strApproveUserID.trim().length() > 0))
  711.     {
  712.       strSQL += " and ((a.[FillUserID]=" + strFillUserID +
  713.         ") or (not(f.[TacheStatus]='S') and ',' + f.[ApproveUserIDs] + ',' LIKE '%," +
  714.         strApproveUserID + ",%'))";
  715.     }
  716.     if (strOrderBy.trim().length() > 0)
  717.     {
  718.       if (strIsDesc.equalsIgnoreCase("True"))
  719.       {
  720.         strSQL += " Order by " + strOrderBy + " desc";
  721.       }
  722.       else
  723.       {
  724.         strSQL += " Order by " + strOrderBy + "";
  725.       }
  726.     }
  727.     Vector vt = SQLManager.GetResultSet(strSQL);
  728.     return vt;
  729.   }
  730.   /**
  731.    * 重载getRecordBySearchAll方法,按ID返回结果
  732.    * @param strID 公文模板ID
  733.    * @return 符合条件记录向量集
  734.    */
  735.   public static Vector getRecordByIDAll(String strID)
  736.   {
  737.     Vector vt = getRecordBySearchAll(strID, "", "", "", "", "", "", "", "", "",
  738.                                      "");
  739.     return vt;
  740.   }
  741.   /**
  742.    * 公文环节跳转
  743.    * @param DocumentID 公文ID
  744.    * @param NextTache 跳转环节ID
  745.    * @return 整型值
  746.    */
  747.   public static int MoveFlow(String DocumentID, String NextTache)
  748.   {
  749.     String strSQL = "Update " + TableName +
  750.       " set IsReminded=0,RemindTime=null,CurrentFlowTacheID='" + NextTache +
  751.       "' where ID=" + DocumentID;
  752.     return SQLManager.ExcuteSQL(strSQL);
  753.   }
  754.   /**
  755.    * 返回应该被提醒的公文信息
  756.    * @param strUserID 当前用户ID
  757.    * @param CurrentTime 当前时间
  758.    * @return 符合条件记录向量集
  759.    */
  760.   public static Vector UNReminded(String strUserID, String CurrentTime)
  761.   {
  762.     String strSQL = "SELECT a.[ID],a.[DocumentName],a.[FillUserID],a.[IsPigeonholed],a.[CurrentFlowTacheID],a.[IsReminded],"
  763.       +
  764.       "a.[RemindTime],b.[ApproveUserIDs],b.[RemindInterval],b.[TacheStatus],d.[Name] "
  765.       + "FROM [Document] AS a LEFT OUTER JOIN [FlowTacheInfo] AS b ON (a.[CurrentFlowTacheID] = b.[ID])"
  766.       + " LEFT OUTER JOIN [UserInfo] AS c ON (a.[FillUserID] = c.[ID]) LEFT OUTER JOIN [PersonnelInfo] AS d"
  767.       + " ON (c.[PersonnelID] = d.[ID])"
  768.       + " WHERE a.[ID]>0 and IsPigeonholed <> 1 and a.[CurrentFlowTacheID]>-2 and b.[RemindInterval]>0 and (((a.[FillUserID] = " +
  769.       strUserID + ") and (b.[TacheStatus]='S')) or (not(b.[TacheStatus]='S') and (',' + b.[ApproveUserIDs] + ',') LIKE ('%," +
  770.       strUserID + ",%')))"
  771.       + " and ((a.[IsReminded]<>1) or (DATEDIFF(mi,a.[RemindTime],'" +
  772.       CurrentTime + "')>=b.[RemindInterval]))";
  773.     Vector vt = SQLManager.GetResultSet(strSQL);
  774.     return vt;
  775.   }
  776.   /**
  777.    * 设置公文提醒时间以及提醒标记
  778.    * @param strID 公文ID
  779.    * @param CurrentTime 当前时间
  780.    * @return 整型值
  781.    */
  782.   public static int ResetReminded(String strID, String CurrentTime)
  783.   {
  784.     String strSQL = "UPDATE " + TableName + " SET IsReminded=1,RemindTime='" +
  785.       CurrentTime + "' WHERE ID=" + strID;
  786.     return SQLManager.ExcuteSQL(strSQL);
  787.   }
  788.   /**
  789.    * 返回需要自动跳转的公文ID集合
  790.    * @param CurrentTime 当前时间
  791.    * @return 符合条件结果集
  792.    */
  793.   public static Vector NeedAutoFlow(String CurrentTime)
  794.   {
  795.     String strSQL = "select c.ID from Document as c left outer join FlowTacheInfo as d on (c.CurrentFlowTacheID=d.ID) "
  796.       + "where  d.MaxWaitTime<>0 and (d.MaxWaitTime<=(datediff(mi,(Select top 1 a.ApproveTime from ApproveRecordInfo as"
  797.       + " a left outer join Document as b on (a.DocumentID=b.ID) order by a.ApproveTime Desc),'" +
  798.       CurrentTime + "')) or"
  799.       + " ((datediff(mi,(Select top 1 a.ApproveTime from ApproveRecordInfo as a left outer join Document as b on "
  800.       + "(a.DocumentID=b.ID) order by a.ApproveTime Desc),'" + CurrentTime +
  801.       "') is null and d.MaxWaitTime<=(datediff(mi,c.BuildTime,'" +
  802.       CurrentTime +
  803.       "'))))) and c.IsPigeonholed <> 1 and c.[CurrentFlowTacheID]>-2";
  804.     Vector vt = SQLManager.GetResultSet(strSQL);
  805.     return vt;
  806.   }
  807.   /**
  808.    * 公文环节自动跳转
  809.    * @param strTacheID 环节ID
  810.    * @param strDocumentID 公文ID
  811.    * @return 整型值
  812.    */
  813.   public static int ResetCurrentTache(String strTacheID, String strDocumentID)
  814.   {
  815.     String strSQL = "UPDATE " + TableName + " SET CurrentFlowTacheID=" +
  816.       strTacheID + " WHERE ID=" + strDocumentID;
  817.     return SQLManager.ExcuteSQL(strSQL);
  818.   }
  819.   /**
  820.    * 返回当前公文的下一个环节ID
  821.    * @param DocumentID 公文ID
  822.    * @return 符合条件向量集
  823.    */
  824.   public static Vector AutoFlowTache(String DocumentID)
  825.   {
  826.     String strSQL = "select top 1 ID from FlowTacheInfo where FromTacheID = "
  827.       + "(select CurrentFlowTacheID from " + TableName + " where ID = " +
  828.       DocumentID
  829.       + ") and IsFromDefault = 1";
  830.     Vector vt = SQLManager.GetResultSet(strSQL);
  831.     return vt;
  832.   }
  833.   public static Vector VisitDoc(String strUserID, String strOrderBy,
  834.                                 String strIsDesc)
  835.   {
  836.     return VisitDoc(strUserID, "", "", "", "", "", "", strOrderBy, strIsDesc);
  837.   }
  838.   public static Vector VisitDoc(String strUserID, String strDocumentName,
  839.                                 String strBuildTimeFrom, String strBuildTimeTo,
  840.                                 String strBuildUserName, String strFillUserName,
  841.                                 String strTacheName, String strOrderBy,
  842.                                 String strIsDesc)
  843.   {
  844.     String strSQL = "select a.[ID],a.[DocumentName],a.[BuildTime],a.[BuildUserID],a.[FillUserID],a.[IsPigeonholed],a.[CurrentFlowTacheID]" +
  845.       ",a.[DocFlowTempletID],c.[Name],e.[Name],f.[TacheName],g.[ReadOnlyUserIDs] from " +
  846.       TableName + " As a LEFT OUTER JOIN" +
  847.       " [UserInfo] AS b ON (a.[BuildUserID] = b.[ID]) LEFT OUTER JOIN [PersonnelInfo] AS c" +
  848.       " ON (b.[PersonnelID] = c.[ID]) LEFT OUTER JOIN [UserInfo] AS d ON (a.[FillUserID] = d.[ID])" +
  849.       " LEFT OUTER JOIN [PersonnelInfo] AS e ON (d.[PersonnelID] = e.[ID]) LEFT OUTER JOIN [FlowTacheInfo] AS" +
  850.       " f ON (a.[CurrentFlowTacheID] = f.[ID]) left outer join [DocTempletMoveFlow] as g on (a.[DocFlowTempletID]=g.[ID])" +
  851.       " where a.[IsPigeonholed]<>1 and a.[CurrentFlowTacheID]>-2 and g.[ReadOnlyUserIDs] like ('%" +
  852.       strUserID + "%')";
  853.     if (strDocumentName.trim().length() > 0)
  854.     {
  855.       strSQL += " and a.[DocumentName] like '%" + strDocumentName + "%'";
  856.     }
  857.     if (strBuildTimeFrom.trim().length() > 0)
  858.     {
  859.       strSQL += " and a.[BuildTime]>='" + strBuildTimeFrom + " 00:00:00.000'";
  860.     }
  861.     if (strBuildTimeTo.trim().length() > 0)
  862.     {
  863.       strSQL += " and a.[BuildTime]<='" + strBuildTimeTo + " 23:59:59.999'";
  864.     }
  865.     if (strBuildUserName.trim().length() > 0)
  866.     {
  867.       strSQL += " and c.[Name] like '%" + strBuildUserName + "%'";
  868.     }
  869.     if (strFillUserName.trim().length() > 0)
  870.     {
  871.       strSQL += " and e.[Name] like '%" + strFillUserName + "%'";
  872.     }
  873.     if (strTacheName.trim().length() > 0)
  874.     {
  875.       strSQL += " and f.[TacheName] like '%" + strTacheName + "%'";
  876.     }
  877.     if (strOrderBy.trim().length() > 0)
  878.     {
  879.       if (strIsDesc.equalsIgnoreCase("True"))
  880.       {
  881.         strSQL += " Order by " + strOrderBy + " desc";
  882.       }
  883.       else
  884.       {
  885.         strSQL += " Order by " + strOrderBy + "";
  886.       }
  887.     }
  888.     Vector vt = SQLManager.GetResultSet(strSQL);
  889.     return vt;
  890.   }
  891.   /**
  892.    * 返回按制定条件查询的已作废记录集
  893.    * @param strID ID标识
  894.    * @param strDocumentName 公文名称
  895.    * @param iDocFlowTempletID 公文流转模板ID
  896.    * @param strDocFlowTempletName 公文流转模板名称
  897.    * @param iBuildUserID 生成用户ID
  898.    * @param strBuildUserName 生成用户姓名
  899.    * @param iFillUserID 填表用户ID
  900.    * @param strFillUserName 填表用户ID
  901.    * @param bIsPigeonholed 是否已经归档
  902.    * @param iCurrentFlowTacheID 当前流程环节ID
  903.    * @param strCurrentFlowTacheName 当前流程环节名称
  904.    * @param iTacheStatus 当前流程环节状态ID
  905.    * @param strTacheStatus 当前流程环节状态
  906.    * @param strIsReminded 是否已经提醒
  907.    * @param strRemindTime 提醒时间
  908.    * @param strBuildTimeFrom 建立时间起始
  909.    * @param strBuildTimeTo 建立时间截至
  910.    * @param strOrderBy 排序字段
  911.    * @param bIsDesc 是否降序排序
  912.    * @return 符合条件记录向量集
  913.    */
  914.   public static Vector getNoUsefulRecordBySearch(String strID,
  915.                                                  String strDocumentName,
  916.                                                  int iDocFlowTempletID,
  917.                                                  String strDocFlowTempletName,
  918.                                                  int iBuildUserID,
  919.                                                  String strBuildUserName,
  920.                                                  int iFillUserID,
  921.                                                  String strFillUserName,
  922.                                                  boolean bIsPigeonholed,
  923.                                                  int iCurrentFlowTacheID,
  924.                                                  String strCurrentFlowTacheName,
  925.                                                  int iTacheStatus,
  926.                                                  String strTacheStatus,
  927.                                                  String strIsReminded,
  928.                                                  String strRemindTime,
  929.                                                  String strBuildTimeFrom,
  930.                                                  String strBuildTimeTo,
  931.                                                  String strOrderBy,
  932.                                                  boolean bIsDesc)
  933.   {
  934.     String strSQL = "Select a.[ID], a.[DocumentName], a.[DocFlowTempletID], a.[BuildTime], a.[BuildUserID], a.[FillUserID]," +
  935.       " a.[IsPigeonholed], a.[CurrentFlowTacheID], a.[IsReminded], a.[RemindTime]," +
  936.       " c.[Name], d.[Name], e.[Name], f.[TacheName], f.[TacheStatus] from [" +
  937.       TableName + "] as a" +
  938.       " left outer join [UserInfo] as b on (a.BuildUserId=b.ID) left outer join [PersonnelInfo] as c on (b.PersonnelID=c.ID)" +
  939.       " left outer join [UserInfo] as g on (a.FillUserID=g.ID) left outer join [PersonnelInfo] as d on (g.PersonnelID=d.ID)" +
  940.       " left outer join [DocTempletMoveFlow] as e on (a.DocFlowTempletID=e.ID)" +
  941.       " left outer join [FlowTacheInfo] as f on (a.CurrentFlowTacheID=f.ID) where a.[CurrentFlowTacheID] < -1";
  942.     if (strDocumentName.trim().length() > 0)
  943.     {
  944.       strSQL += " and a.[DocumentName] like '%" + strDocumentName + "%'";
  945.     }
  946.     if (strDocFlowTempletName.trim().length() > 0)
  947.     {
  948.       strSQL += " and e.[Name] like '%" + strDocFlowTempletName + "%'";
  949.     }
  950.     if (strIsReminded.trim().equalsIgnoreCase("true"))
  951.     {
  952.       strSQL += " and a.[IsReminded] = 1";
  953.     }
  954.     else if (strIsReminded.trim().equalsIgnoreCase("false"))
  955.     {
  956.       strSQL += " and (a.[IsReminded] IS null OR a.[IsReminded] = 0)";
  957.     }
  958.     if (strBuildUserName.trim().length() > 0)
  959.     {
  960.       strSQL += " and c.[Name] like '%" + strBuildUserName + "%'";
  961.     }
  962.     if (strFillUserName.trim().length() > 0)
  963.     {
  964.       strSQL += " and d.[Name] like '%" + strFillUserName + "%'";
  965.     }
  966.     if (strCurrentFlowTacheName.trim().length() > 0)
  967.     {
  968.       strSQL += " and f.[TacheName] like '%" + strCurrentFlowTacheName + "%'";
  969.     }
  970.     if (strTacheStatus.trim().length() > 0)
  971.     {
  972.       strSQL += " and f.[TacheStatus] like '%" + strTacheStatus + "%'";
  973.     }
  974.     if (strBuildTimeFrom.trim().length() > 0)
  975.     {
  976.       strSQL += " and a.[BuildTime]>='" + strBuildTimeFrom + " 00:00:00.000'";
  977.     }
  978.     if (strBuildTimeTo.trim().length() > 0)
  979.     {
  980.       strSQL += " and a.[BuildTime]<='" + strBuildTimeTo + " 23:59:59.999'";
  981.     }
  982.     if (strOrderBy.trim().length() > 0)
  983.     {
  984.       if (bIsDesc)
  985.       {
  986.         strSQL += " Order by " + strOrderBy + " desc";
  987.       }
  988.       else
  989.       {
  990.         strSQL += " Order by " + strOrderBy + "";
  991.       }
  992.     }
  993.     Vector vt = SQLManager.GetResultSet(strSQL);
  994.     return vt;
  995.   }
  996. }