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

OA系统

开发平台:

Java

  1. package com.gforce.gfoa;
  2. /**
  3.  * <p>Title: 吉力科技办公自动化系统</p>
  4.  * <p>Description: 吉力科技办公自动化系统</p>
  5.  * <p>Copyright: 版权所有 2003 (c) 西安吉力科技发展有限公司  Copyright (c) 2003 GForce Sceince & Technology</p>
  6.  * <p>Company: 西安吉力科技发展有限公司 (GForce Sceince & Technology)</p>
  7.  * @author 马登军
  8.  * @version 1.0
  9.  */
  10. import com.gforce.currency.*;
  11. import com.gforce.currency.database.*;
  12. import java.sql.*;
  13. import java.util.*;
  14. public class DepartmentManager
  15.   extends RecordManager
  16. {
  17.   public DepartmentManager()
  18.   {
  19.   }
  20.   protected final static String TableName = "DepartmentInfo"; //定义声明本类操作表名称为
  21.   protected final static String IDFieldName = "ID"; //定义声明主键或者可以确定唯一记录的字段名称为“ID”,必须为自增整型
  22.   protected final static String[] NumericFieldsName =
  23.     {
  24.     "LevelNumber", "ChildrenAcount", "OrderNumber", "IsLink", "IsShow"}; //声明数值型字段名称
  25.   protected final static String[] StringFieldsName =
  26.     {
  27.     "Name", "Station", "OpenedICO", "CloseedICO", "LinkUrl", "Target", "Content"}; //声明字符型字段名称
  28.   protected final static String[] DatetimeFieldsName =
  29.     {}; //声明日期时间型字段名称
  30.   protected final static String[] TextFieldsName =
  31.     {}; //声明大字符串型字段名称
  32.   /**
  33.    * 根据字段名称获取插入数据时表单元素名称
  34.    * @param strFieldName  字段名称
  35.    * @return  表单素名称
  36.    */
  37.   protected String InsertParament(String strFieldName)
  38.   {
  39.     return "" + strFieldName + ""; //可以根据需要加前缀、后缀
  40.   }
  41.   /**
  42.    * 根据字段名称获取修改数据时表单元素名称
  43.    * @param strFieldName  字段名称
  44.    * @return  表单素名称
  45.    */
  46.   protected String UpdateParament(String strFieldName)
  47.   {
  48.     return "" + strFieldName + ""; //可以根据需要加前缀、后缀
  49.   }
  50.   /**
  51.    * 获取本类操作表名称
  52.    * @return  表名称
  53.    */
  54.   public String getTableName()
  55.   { //获取本类操作表名称
  56.     return TableName;
  57.   }
  58.   protected String getIDFieldName()
  59.   { //获取主键或者可以确定唯一记录的字段名称
  60.     return IDFieldName;
  61.   }
  62.   protected String[] getNumericFieldsName()
  63.   { //获取数值型字段名称
  64.     return NumericFieldsName;
  65.   }
  66.   protected String[] getStringFieldsName()
  67.   { //获取字符型字段名称
  68.     return StringFieldsName;
  69.   }
  70.   protected String[] getDatetimeFieldsName()
  71.   { //获取日期时间型字段名称
  72.     return DatetimeFieldsName;
  73.   }
  74.   protected String[] getTextFieldsName()
  75.   { //获取大字符串型字段名称
  76.     return TextFieldsName;
  77.   }
  78.   /**
  79.    * 获取所有记录的向量集
  80.    * @return 所有记录的向量集
  81.    */
  82.   public static Vector getDepartmentData()
  83.   {
  84.     Vector vc = new Vector();
  85.     vc = SQLManager.GetResultSet("select * from " + TableName + " ORDER BY OrderNumber ");
  86.     return vc;
  87.   }
  88.   /**
  89.    * 获取指定ID的数据集
  90.    * @param intID 要检索的ID
  91.    * @return 指定ID的数据集
  92.    */
  93.   public static Vector getRecordByID(int intID)
  94.   {
  95.     Vector vc = new Vector();
  96.     vc = SQLManager.GetResultSet("select * from " + TableName + " WHERE ID = " + intID);
  97.     return vc;
  98.   }
  99.   /**
  100.    * 获取指定ID部门带上级信息全称
  101.    * @param iID 部门ID
  102.    * @return 带上级信息的部门全称
  103.    */
  104.   public static String getDepartFullName(int iID)
  105.   {
  106.     String strDepartName = "";
  107.     Vector vc = getRecordByID(iID);
  108.     if(vc.size()>0)
  109.     {
  110.       strDepartName = ((Vector)vc.get(0)).get(2).toString();
  111.       strDepartName = strDepartName.replaceAll("_0_","").trim();
  112.       if(strDepartName.indexOf("_")>0)
  113.       {
  114.         String[] strDepartID = strDepartName.split("_");
  115.         strDepartName = "";
  116.         for(int i=0;i<strDepartID.length;i++)
  117.         {
  118.           try
  119.           {
  120.             Vector vt = getRecordByID(Integer.parseInt(strDepartID[i], 10));
  121.             if (vt.size() > 0)
  122.             {
  123.               strDepartName += ( (Vector) vt.get(0)).get(1).toString() + "→";
  124.             }
  125.           }
  126.           catch(Exception err)
  127.           {
  128.           }
  129.         }
  130.       }
  131.       else
  132.       {
  133.         strDepartName = "";
  134.       }
  135.       strDepartName += ((Vector)vc.get(0)).get(1).toString();
  136.     }
  137.     return strDepartName;
  138.   }
  139.   /**
  140.    * 根据部门ID字符串获取部门全称
  141.    * @param iIDs 部门ID字符串
  142.    * @return 部门全称
  143.    */
  144.   public static String getDepartNamesByIDs(String iIDs)
  145.   {
  146.     String strDepartNames = "";
  147.     if(iIDs.length()>0)
  148.     {
  149.       String[] strDepartID = iIDs.split(",");
  150.       for(int i=0;i<strDepartID.length;i++)
  151.       {
  152.         try
  153.         {
  154.           strDepartNames += "n" + getDepartFullName(Integer.parseInt(strDepartID[i], 10));
  155.         }
  156.         catch(Exception err){}
  157.       }
  158.     }
  159.     if(strDepartNames.length()>0)
  160.     {
  161.       return strDepartNames.substring(1);
  162.     }
  163.     else
  164.     {
  165.       return "";
  166.     }
  167.   }
  168.   /**
  169.    * 获取指定ID部门下子部门个数
  170.    * @param iDepartmentID  部门ID
  171.    * @return 指定ID部门下子部门个数
  172.    */
  173.   public static int getSubDepartmentCount(int iDepartmentID)
  174.   {
  175.     int iReturnValue = 0;
  176.     String strSQL;
  177.     Vector vc = new Vector();
  178.     if (iDepartmentID == 0)
  179.     {
  180.       strSQL = "select count(*) from " + TableName + " Where Station = '_0_'";
  181.     }
  182.     else
  183.     {
  184.       strSQL = "select Count(*) from " + TableName + " where Station=((select Station from " + TableName +
  185.         " where ID=" + iDepartmentID + ")+'" + iDepartmentID + "_')";
  186.     }
  187.     vc = SQLManager.GetResultSet(strSQL);
  188.     iReturnValue = Integer.parseInt( ( (Vector) vc.get(0)).get(0).toString());
  189.     return iReturnValue;
  190.   }
  191.   /**
  192.    * 更新指定ID部门的子部门个数
  193.    * @param iDepartmentID  部门ID
  194.    */
  195.   public void updateSubDepartmentCount(int iDepartmentID)
  196.   {
  197.     SQLManager.ExcuteSQL("Update " + TableName + " set ChildrenAcount=" + getSubDepartmentCount(iDepartmentID) +
  198.                          " where ID=" + iDepartmentID);
  199.   }
  200.   public void updateSubDepartmentData(int iDepartmentID, String strNewStation, String strOldStation, int iLevelChange)
  201.   {
  202.     String strUpdateSQL = "Update " + TableName + " set LevelNumber=LevelNumber + " + iLevelChange
  203.       + ",Station = Replace(Station,'" + strOldStation + "','" + strNewStation + "') where Station like '"
  204.       + strOldStation + iDepartmentID + "_" + "%'";
  205.     SQLManager.ExcuteSQL(strUpdateSQL);
  206.   }
  207.   /**
  208.    * 获取指定ID部门下所有员工人数
  209.    * @param iDepartmentID  部门ID
  210.    * @return  指定ID部门下所有员工人数
  211.    */
  212.   public static int getPersonCountOfDepartment(int iDepartmentID)
  213.   {
  214.     int iReturnValue = 0;
  215.     String strSQL;
  216.     Vector vc = new Vector();
  217.     if (iDepartmentID == 0)
  218.     {
  219.       strSQL = "select count(*) from PersonnelInfo";
  220.     }
  221.     else
  222.     {
  223.       strSQL = "select count(*) from PersonnelInfo where DepartmentID in (select ID from " + TableName +
  224.         " where Station like ((select Station from " + TableName +
  225.         " where ID=" + iDepartmentID + ")+'" + iDepartmentID + "_%')) or DepartmentID=" + iDepartmentID;
  226.     }
  227.     vc = SQLManager.GetResultSet(strSQL);
  228.     iReturnValue = Integer.parseInt( ( (Vector) vc.get(0)).get(0).toString());
  229.     return iReturnValue;
  230.   }
  231.   /**
  232.    * 新增部门记录
  233.    * @param m_request 包含新部门记录的Request请求
  234.    * @return  新部门的ID(大于等于1)或者错误代码(小于1)
  235.    */
  236.   public int InsertRecord(Request m_request)
  237.   {
  238.     int iReturnValue = super.InsertRecord(m_request);
  239.     int iDepartmentID = m_request.GetInt("DepartmentID");
  240.     updateSubDepartmentCount(iDepartmentID);
  241.     return iReturnValue;
  242.   }
  243.   /**
  244.    * 修改部门记录
  245.    * @param m_request 包含部门记录的Request请求
  246.    * @return  部门的ID(大于等于1)或者错误代码(小于1)
  247.    */
  248.   public int UpdateRecord(Request m_request)
  249.   {
  250.         int iID = m_request.GetInt("ID");
  251.         int iNewLevelNumber = m_request.GetInt("LevelNumber");
  252.         String strNewStation = m_request.GetString("Station");
  253.         Vector vc = SQLManager.GetResultSet("select Station,LevelNumber from " + TableName + " where ID=" + iID);
  254.         String strOldStation = ( (Vector) vc.get(0)).get(0).toString();
  255.         int iOldLevelNumber = Integer.parseInt(( (Vector) vc.get(0)).get(1).toString());
  256.         String strStation = strOldStation.substring(0, strOldStation.length() - 1);
  257.         int iOldDepartmentID = Integer.parseInt(strStation.substring(strStation.lastIndexOf("_")+1));
  258.         int iNewDepartmentID = m_request.GetInt("DepartmentID");
  259.         int iReturnValue = 0;
  260.         if (iOldDepartmentID != iNewDepartmentID)
  261.         {
  262.           SQLManager.ExcuteSQL("Update " + TableName + " set OrderNumber=OrderNumber-1 where OrderNumber>(select OrderNumber from " + TableName + " where ID=" + iID +") and Station=((select Station  from " + TableName + " where ID=" + iID +")+'')");
  263.           iReturnValue = super.UpdateRecord(m_request);
  264.           updateSubDepartmentCount(iNewDepartmentID);
  265.           updateSubDepartmentCount(iOldDepartmentID);
  266.           updateSubDepartmentData(iID,strNewStation,strOldStation,iNewLevelNumber-iOldLevelNumber);
  267.           setDepartmentOrderNumber(iID,10000);
  268.           reOrderDepartment(strOldStation);
  269.           reOrderDepartment(strNewStation);
  270.         }
  271.         else
  272.         {
  273.             iReturnValue = super.UpdateRecord(m_request);
  274.           reOrderDepartment(strNewStation);
  275.         }
  276.         return iReturnValue;
  277.   }
  278.   /**
  279.    * 删除指定ID部门
  280.    * @param iID  部门ID
  281.    * @return  错误代码(小于1)
  282.    */
  283.   public int DeleteByID(int iID)
  284.   {
  285.     SQLManager.ExcuteSQL("Update " + TableName
  286.                          + " set OrderNumber=OrderNumber-1 where OrderNumber>(select OrderNumber from " + TableName
  287.                          + " where ID=" + iID + ") and Station=((select Station  from " + TableName + " where ID="
  288.                          + iID + ")+'')");
  289.     int iReturnValue = super.DeleteByID(iID);
  290.     updateSubDepartmentCount(iID);
  291.     return iReturnValue;
  292.   }
  293.   /**
  294.    * 获取部门树形列表数据向量集
  295.    * @return  部门树形列表数据向量集
  296.    */
  297.   public static Vector getDepartmentTreeData()
  298.   {
  299.     Vector vc = new Vector();
  300.     vc = SQLManager.GetResultSet("select * from " + TableName + " where IsShow=1 ORDER BY OrderNumber ");
  301.     return vc;
  302.   }
  303.   /**
  304.    * 按照指定方向移动指定部门
  305.    * @param iDepartmentID int 指定部门的ID
  306.    * @param strDirect String 指定移动方向
  307.    * @return int 错误代码
  308.    */
  309.   public static int moveDepartment(int iDepartmentID,String strDirect)
  310.   {
  311.     int iErrCode=1;
  312.     Vector vt=getRecordByID(iDepartmentID);
  313.     if(vt.size()==1)
  314.     {
  315.       if(strDirect.equalsIgnoreCase("Top"))
  316.       {
  317.         setDepartmentOrderNumber(iDepartmentID,-10000);
  318.       }
  319.       else if(strDirect.equalsIgnoreCase("Bottom"))
  320.       {
  321.         setDepartmentOrderNumber(iDepartmentID,10000);
  322.       }
  323.       else if(strDirect.equalsIgnoreCase("Up"))
  324.       {
  325.         SQLManager.ExcuteSQL("Update " + TableName + " set OrderNumber=OrderNumber-1 where ID=" + iDepartmentID +"");
  326.         SQLManager.ExcuteSQL("Update " + TableName + " set OrderNumber=OrderNumber+1 where ID in (Select ID from " + TableName + " where Station=(Select Station from " + TableName + " where ID=" + iDepartmentID +") and OrderNumber=(Select OrderNumber from " + TableName + " where ID=" + iDepartmentID +") and ID<>" + iDepartmentID + ")");
  327.       }
  328.       else if(strDirect.equalsIgnoreCase("Down"))
  329.       {
  330.         SQLManager.ExcuteSQL("Update " + TableName + " set OrderNumber=OrderNumber+1 where ID=" + iDepartmentID +"");
  331.         SQLManager.ExcuteSQL("Update " + TableName + " set OrderNumber=OrderNumber-1 where ID in (Select ID from " + TableName + " where Station=(Select Station from " + TableName + " where ID=" + iDepartmentID +") and OrderNumber=(Select OrderNumber from " + TableName + " where ID=" + iDepartmentID +") and ID<>" + iDepartmentID + ")");
  332.       }
  333.       reOrderDepartment(( (Vector) vt.get(0)).get(2).toString());
  334.     }
  335.     else
  336.     {
  337.         iErrCode=-3;
  338.     }
  339.     return iErrCode;
  340.   }
  341.   /**
  342.    * 修改指定部门的排序编号
  343.    * @param iDepartmentID int 指定部门ID
  344.    * @param iOrderNumber int 新的排序编号
  345.    */
  346.   private static void setDepartmentOrderNumber(int iDepartmentID,int iOrderNumber)
  347.   {
  348.     SQLManager.ExcuteSQL("Update " + TableName + " set OrderNumber=" + iOrderNumber + " where ID=" + iDepartmentID + "");
  349.   }
  350.   /**
  351.    * 重新排序指定位置的部门
  352.    * @param strStation String
  353.    */
  354.   private static void reOrderDepartment(String strStation)
  355.   {
  356.     if(strStation==null || strStation.trim().length()==0)
  357.     {
  358.       strStation="_0_";
  359.     }
  360.     Vector vt=SQLManager.GetResultSet("Select * from " + TableName + " where Station='" + strStation + "' order by OrderNumber");
  361.     for(int i=0;i<vt.size();i++)
  362.     {
  363.       try
  364.       {
  365.         int iID = 0;
  366.         iID=Integer.parseInt(( (Vector) vt.get(i)).get(0).toString());
  367.         setDepartmentOrderNumber(iID,i+1);
  368.       }
  369.       catch(Exception err)
  370.       {
  371.       }
  372.     }
  373.   }
  374. }