1. 程式人生 > >江蘇南大先騰業務框架(二)組織機構[附原始碼]

江蘇南大先騰業務框架(二)組織機構[附原始碼]

概述

框架中使用者組織機構設計的物件有三個:

  1. 機構資訊,機構是有層級關係的,是一個森林(多個樹)的關係。
  2. 使用者資訊。
  3. 機構使用者關係,機構和使用者是多對多的關係。

機構資訊

機構資訊中需要特別說明的就是設計了一個機構路徑unitPath屬性,它的取值是這個機構所有上級機構的程式碼 用’/‘連線的字串。 通過這個機構可以查詢其所有的上級機構程式碼, 用’/'分割這個字串就可以;也可以從資料庫中查找出所有他的下級機構,只要判斷其 unitPath 是否已本機構的unitPath為字首。這樣設計避免了級聯查詢。

public interface IUnitInfo{
    /**機構程式碼 是機構的主鍵
     * @return 機構程式碼 是機構的主鍵
     */
String getUnitCode(); /** 機構自編程式碼 * @return 機構自編程式碼 */ String getDepNo(); /** 機構名稱 * @return 機構名稱 */ String getUnitName(); /** 機構簡稱 * @return 機構簡稱 */ String getUnitShortName(); /** 上級機構程式碼 * @return 上級機構程式碼 */ String getParentUnit
(); /** 機構類別 * @return 機構類別 */ String getUnitType(); /** 機構是否有效 T/F/A T 正常 , F 禁用,A為新建可以刪除 * @return 機構是否有效 T/F/A T 正常 , F 禁用,A為新建可以刪除 */ String getIsValid(); /** 機構路徑,為這個機構所有上級機構的程式碼 用'/'連線的字串 * 通過這個機構可以查詢其所有的上級機構程式碼, 用'/'分割這個字串就可以 * 也可以從資料庫中查找出所有他的下級機構,只要判斷其 unitPath 是否已本機構的unitPath為字首 * @return 機構路徑 */
String getUnitPath(); /** 機構排序 * @return 機構排序 */ Long getUnitOrder(); /** 分管領導(機構管理員) * @return 分管領導(機構管理員) */ String getUnitManager(); /** 獲取和第三方對接資料,一般為第三方業務資料元件 * @return 機構第三發業務中的主鍵 */ String getUnitTag(); }

使用者資訊

在框架中使用者資訊物件做了最簡化設計,僅僅包括框架許可權管理需要的必須的欄位,應用系統可以通過額外的表,比如人員檔案資訊或者使用者擴充套件資訊來對這些資訊進行擴充套件。

public interface IUserInfo{
    /** 使用者編碼,是使用者的主鍵
    * @return 使用者編碼,是使用者的主鍵
    */
    String getUserCode();
    /**使用者密碼的密文, 密碼為加鹽的雜湊演算法
    * @return getUserPin
    */
    @JSONField(serialize = false)
    String getUserPin();
    /** 使用者登入名 同 getUsername
    * @return 使用者登入名
    */
    String getLoginName();
     /** 使用者排序號
    * @return 使用者排序號
    */
    Long getUserOrder();
    .......
}

使用者機構關係

這個物件框架許可權的核心。設計的原則就是真實的反映使用者在其機構中的角色。首先這是一個多對多的關係,一個使用者可以在多個機構中,也有可能在一個機構中擔任多個角色,每一個角色需要對應一條記錄。其中:

  1. userStation 使用者崗位,是反映使用者在這個機構中做什麼事情,比如:收費員、營業員、程式設計師等等。是反映其工作內容的或者其專業的。所以這個是沒有等級沒有序的。
  2. userRank 使用者行政職務,是反映使用者等級的,所以是有序的。比如:收費組組長、營業組組長、開發經理等等。 這兩個屬性在兩個維度上反映了使用者在組織中的崗位和職責。
public interface IUserUnit{
    /**關聯關係主鍵
     * @return 關聯關係主鍵
     */
    String getUserUnitId();
    /**使用者編碼,是使用者的主鍵
     * @return 使用者編碼,是使用者的主鍵
     */
    String getUserCode();
    /**機構程式碼 是機構的主鍵
     * @return 機構程式碼 是機構的主鍵
     */
    String getUnitCode();
    /** 是否為預設(主)機構 T:主機構 F:輔機構
     * @return 是否為預設(主)機構 T:主機構 F:輔機構
     */
    String getIsPrimary();
    /**使用者在本機構的崗位
     * @return 使用者在本機構的崗位
     */
    String getUserStation();
    /** 使用者在本機構的行政職務
     * @return 使用者在本機構的行政職務
     */
    String getUserRank();
    /** 使用者在本單位的排序號
     * @return 排序號
     */
    Long getUserOrder();
}

特別說明

上面三個物件都有一個共同的屬性 order 排序號,這個在對排位敏感的單位非常重要,所以也把它放到框架中。