基於SSM框架的通用權限框架設計

 1. 總體解決方案概述 html

   1.1 權限總體解決方案概述 java

    權限設計主要有一下幾大部分組成:
     PassPort

   
針對如今系統的分析,系統之間有部分信息是共享的,這部分信息將由中心話的Passport來統一維護
mysql

  • 用於中心存放用戶,組織架構,渠道,品牌和產品相關的信息。
  • 有關員工信息,能夠從現有HR系統或者MDM中取得。
  • 有關外部人員活動目錄,能夠專門在本PassPort系統中維護。

   權限訂閱模塊:
   
負責訂閱接受Passport發出的相關實體修改的信息。
   
資源權限綁定:
   
有效的將資源-角色--成員在數據庫中簡歷綁定。
   
數據權限高速內存數據緩存:
   
將數據權限相關的數據緩存在內存,提供高性能訪問能力。
   Struts
頁面權限過濾和綁定:
   
使用Strutstag動態根據資源權限的設置,決定頁面中資源(按鈕,菜單,URL,頁面元素)的訪問能力。
   
數據權限過濾:
   
根據數據過濾權限的特定,定義的數據權限過濾的通用數據結構
   
根據業務集成和整合的須要,和優先級別的須要,權限部分的開發設計將逐步推動,初期會以各應用系統爲單元進行資源權限和數據權限的改造,隨後將根據重要業務系統的須要,逐步創建中心話的passport
算法

 

  1.2 權限設計的原則 spring

  • 通用的數據管理;
  • 通用Service
  • 數據權限系統同構;
  • UI風格一致;
  • 安全的訪問控制;
  • 可複用的API
  • 統一的資源權限控制;
  • 統一和中心話的數據字典維護。

2. 資源權限解決方案 sql

  2.1 概覽 數據庫

 (1)功能級受權採用一般的權限分組,角色綁定資源的通用設計思路來完成。基本設計思路以下圖: 緩存

  

                                       資源權限綁定概覽 安全

    資源:
   
菜單,按鈕,URL,頁面中的任何元素。
   
角色:
   
根據業務定義的各類角色,好比訂單生成角色,結算角色等。
   
組:
   
用於聯繫角色和用戶。
   
用戶:
    
系統中登陸的用戶。
服務器

 

(2)資源權限在開發,測試,項目上線後維護中的不一樣做用:

   項目開發和測試階段:

  • 項目開發人員和業務人員共同肯定什麼資源須要權限管理並在系統中定義資源。
  • 在頁面當中定義控制資源訪問的tag。
  • 根據業務模塊的不一樣定義相應的增刪改查的角色。
  • 綁定角色和資源。

   在項目上線以後和運維階段:

  • 在須要的時候能夠繼續創建更多的角色,並綁定角色和已有的資源。
  • 創建用戶組。
  • 綁定用戶組和已有的角色。
  • 爲用戶組指定管理員,並授予管理員管理用戶組的權限,用戶組的管理員通常是業務人員的領導。
  • 用戶組管理員根據本部門的須要和調整,來動態的增減用戶組的成員。
  • 被加入用戶組的成員馬上得到系統相應訪問資源的訪問和使用權限,無需修改代碼。

 2.2 管理類型和普通類型

  分組和角色分別都有兩種類型,一種是管理類型,一種是普通類型,如下作詳細說明:

  • 分組管理類型,針對業務人員,擁有管理類型的分組則能夠把其餘人加入到該組裏。
  • 分組普通類型,針對業務人員,擁有普通類型的分組只能本身使用分組裏的角色和資源,不能受權給其餘人。
  • 角色管理類型,針對管理人員,擁有管理類型的角色能夠修改角色與資源的對應關係。
  • 角色普通類型,針對全部人,擁有普通類型的角色只能訪問角色對應的資源而不能修改其關聯關係。

   分組表設計(Group)

類型

說明

Id

Number(10)

Not null

PK

Name

Varchar2(128)

Not null

組名稱

Admin

Boolean

Not null

是否爲管理類型

3. 功能級受權基本設計

  功能級受權的意義在於對頁面可見元素的操做性,單純從頁面的可見性可簡單劃分紅以下幾個部分:

  • 菜單,包括一級菜單和多級菜單,在系統中可分爲頂部菜單,左側菜單,左側菜單子菜單。
  • 按鈕(一般"取消""返回"之類的按鈕不會歸入權限管理)。
  • 頁面可見元素,好比表格、DIV標籤等等,凡是頁面可見的內容。

   以上三點其實均可以歸結爲第三點,即:任何頁面可見的元素都可歸入功能級權限管理。
實現方法:採用自寫JSP標籤完成,執行該標籤時須要從後臺或緩存中查找當前用戶是否有使用當前資源的權限,若是有則正常顯示,若是沒有則將標籤內全部內容從服務端剔除後再響應客戶端。以下圖:

   

                                  資源權限流程

  3.1 標籤實現的代碼

[java] view plain copy

 print?

  1. publicclassAuthTagextendsStrutsBodyTagSupport{   
  2. private Set<String>authCodeSet;   
  3. publicvoidsetCode(String code) {   
  4. String[] codes = code.split(",");   
  5. authCodeSet = newHashSet<String>(Arrays.asList(codes));   
  6. }   
  7. publicintdoStartTag() throwsJspException {   
  8. HttpSessionhttpSession = pageContext.getSession();   
  9. Authentication authentication = (Authentication)httpSession.getAttribute(SessionSecurityConstants.KEY_AUTHENTICATION);   
  10. if(authentication == null){   
  11. returnSKIP_BODY;   
  12. }   
  13. if(hasAuth(authentication)){   
  14. returnEVAL_BODY_INCLUDE;   
  15. }   
  16. returnSKIP_BODY;   
  17. }   
  18. privatebooleanhasAuth(Authentication authentication){   
  19. for(String auth: authCodeSet){   
  20. if(authentication.getComponentResources().contains(auth)){   
  21. returntrue;   
  22. }   
  23. }   
  24. returnfalse;   
  25. }   
  26. }  

4.安全性設計

    頁面元素的可見性並不能控制URL的可訪問性,在系統設計中,使用Struts2的攔截器機制來過濾URL,防止用戶不經過頁面直接經過URL訪問系統。
    系統資源的抽取設計。
    系統資源包含了以上提到的兩個部分頁面元素和URL,兩種資源在某些時候是可組合的,好比按鈕點擊後提交URL,則該按鈕與該URL可組成一個資源。
    頁面元素可獨立成爲一個資源,而URL不能脫離頁面元素獨立成爲資源。每一個資源都有惟一的標標識。
    資源與資源之間也存在層級關係,好比下圖:

            

 4.1 資源表設計

列名類型(長度) 能否空

說明

Key varchar2(256) not null

標識資源的惟一的代碼

Name varchar2(256) not null

資源名稱

Url varchar2(256) null

對應的URL

Parent_key varchar2(256) null

父資源代碼

Desc varchar2(256) null

                       描述或備註信息

    Key值的設定建議採用會意的字符串,好比新增按鈕資源屬於第三級資源則它的代碼應該爲"sysres_duty_add".

 4.2 受權樹狀插件

     對資源的受權採用ZTree插件實現,效果見下圖:
       

                                   對資源進行管理的樹狀插件

  4.3 插件使用方式:

   如何在struts中使用資源權限tag

[html] view plain copy

 print?

  1. <%@ taglib prefix="hop" uri="/restree" %>   
  2. <res:treeurlres:treeurl="resTree.action"   
  3. expandUrl="expandResTree.action"   
  4. async="true"   
  5. chkType="check"   
  6. id="demoTree"/>  

5.數據權限方案

  5.1 業務關鍵字定義:

   

                  數據權限業務關鍵字定義

    

  5.2 設計思路和原則

  • 把與崗位關聯的全部內容翻譯位崗碼.
  • 將崗碼存儲與人員及客戶等表中.
  • 將全部關聯表放入系統緩存.
  • 經過查詢崗碼在內存中完成對數據的操做.

    5.3 什麼是崗碼?

  

                         崗碼大致結構

    

  5.4 崗碼定義和閱讀規則

  • 用表的主鍵作惟一標識碼,用下劃線"_"鏈接,崗碼與崗碼之間用分號分";"分隔.
  • 每一個小段落的崗碼第一位都設置爲功能位,默認值位D.
  • 空位N.
  • 當功能爲值位A的時候表示所有,詳見下圖:

    

                                        崗碼的格式規則

     崗碼格式以下:

     崗位ID_崗位類型(管理/業務)_崗位職位_工貿ID_渠道ID_經營體ID_產品線code_BUCode_品牌_型號經營體.
     
注意:根據業務須要,崗碼會不斷的擴充,以存儲更多用於分析查詢的信息.

  5.5 崗碼生成和崗碼從數據庫刷新至業務服務器

  

          崗碼生成和崗碼從數據庫刷新至業務服務器

    

  定時更新策略
 
天天定時執行崗碼更新SQL腳本,更新數據庫中的崗碼,而且定時重置內存中的數據緩存。這裏建議採用增量式更新,不然對數據庫壓力過大。這裏所使用的SQL腳本可參考下面第2點實時更新策略所使用的腳本。
  
實時更新策略
 
對於更新相對較頻繁的表(如人員表、崗位表),首先在該表上設立觸發器,基於表作的全部修改將記錄到歷史表中,系統定時掃描歷史表,發現改動則執行SQL腳本更新崗碼,並更新緩存。這裏的更新指單條記錄的更新,非批量更新。

  • 下圖中紅色部分活動圖表示任何系統對基礎表改動時須要執行的內容。
  • 藍色部分活動圖能夠採用兩種方式實現
    • 從數據庫層面執行定時任務,掃描歷史表變更.
    • 從應用服務器發起定時任務,掃描歷史表.
  • 橙色的部分活動圖表示應用服務器執行過程。

  當藍色部分使用應用服務的時候能夠直接更新緩存,從而略過橙色部分活動圖。
 
歷史表ecc_oms.sys.his

列名類型(長度) 能否空

說明

Id Number(12) not null PK

PK

Table_name varchar2(128) not null

表名

PK_Valuevarchar(512) not null

主鍵值如:123, 張三

PK_namevarchar(128) not null

主鍵字段如:empId, empName

Oper_type number(2) not null

操做類型:增:一、刪:二、改:3

Create_time Date not null

建立時間

flag varchar2(1) not null

完成標記位: 0:未完成,1完成

    

 5.6 如何存儲崗碼:

 (1) 新增用戶-崗位關係表和崗位-用戶崗碼關係表:ecc_oms.sys_emp_code
  Emp_id :用戶ID
  Code_id:崗碼ID-對應ecc_oms.ecc_oms.sys_code表主鍵
 (2) 崗位-客戶崗碼關係表:ecc_oms.ecc_oms.sys_cust_code
  Cust_code:客戶code
  Code_id:崗碼ID

 5.7 如何從數據庫刷新崗碼到應用服務器

  系統啓動時,將全部崗碼涉及到的表所有讀取成JavaBean(不是持久化對象),放在緩存中。
   /**********
資源相關**********/
   
人員信息:  ecc_oms.sys_employee
   
組織(部門信息)信息:  ecc_oms.sys_org
   
職位信息:  ecc_oms.duty_title
   
區域(工貿)基本信息-ecc_oms.sys_area_info
   
所屬產品線,產品系統的產品(型號)信息:ecc_fnd.product_v
   
產品線信息:ecc_fnd.product_line_v
   
大小渠道基本信息-ecc_fst.sales_channel_properties
   
崗位基本信息:ecc_fst.station_config
   
客戶關係信息 -ecc_customer.customer_info_v
   BU
信息表 -ecc_oms.sys_bu_info
   BU
與產品線對應關係表 -ecc_fnd.bu_product_group_pl

   /*********
受權相關*********/
   --
組織經營體:  ecc_oms.SYS_ORG_SALECHANN
   --
組織產品線:  ecc_oms.sys_org_prod
   --
組織職位:  ecc_oms.org_duty_title
   
崗碼錶:  ecc_oms.sys_station_config
   
用戶崗碼錶:  ecc_oms.sys_emp_code
   
客戶崗碼錶:  ecc_oms.sys_cust_code
   
經營體與小渠道關係信息(按產品線): ecc_fst.sales_channel_manager_relation
   
客戶信息表-二級區域與客戶關係表


   
主要類列表和簡單描述:

類/接口名

簡介

核心接口描述

CacheServiceFacade

暴露給客戶端遠程調用的接口

1.根據用戶id和崗位查詢該用戶的客戶列表,返回結果集自動關聯客戶對應的產品線信息 
public Set<CustomerInfoC>findCustomerByEmpId(long empId,String station);

DefaultCacheServiceFacade

CacheServiceFacade的默認實現類,根據請求的崗位類型自動判斷查找客戶信息

  

CacheService

從緩存中讀取數據的頂層接口,定義內存中數據的讀取接口

1.根據用戶id查找用戶信息 
public Set<CustomerInfoC>findCustomerByEmpId(long id,String station);

AbstractCacheService

CacheService的抽象實現,讀取客戶數據的公共方法抽取在裏面

  

CacheServiceA

AbstractCacheService的子類實現,爲MD_XSJL下單 門店銷售經理查找客戶邏輯

  

CacheServiceB

AbstractCacheService的子類實現,BU表明下單

  

CacheService

AbstractCacheService的子類實現,查詢權限信息實現

  

CacheLoader

緩存加載器

1.將指定表的數據加載到內存中 
public void initCache(Class<?>clazz,RowMapper<?>mapper,String[] properties); 
2.緩存加載完畢後獲取緩存後的全部對象 
public TableCachegetTableCache();

DefaultCacheLoader

CacheLoader接口的實現類

  

TableOperation

對單表進行的操做接口,用戶往操做歷史裏插入記錄時單條更新/刪除緩存操做

1.根據操做記錄對緩存進行操做 
public void execute(OperationContextoperationContext);

AbstractTableOperation

TableOperation的抽象實現,定義公共操做方法

  

BasGCustomerInfoTableOperation 
StationConfigTableOperation 
StationCustomerRelationTableOperation 
StationCustomerRelationTableOperation 
StationEmployeeRelationTableOperation

AbstractTableOperation類的子類,表示 
對指定的表進行增/刪/改動做時的響應操做

  

ReloadTableCacheJob

定時任務,從新載入主數據表到緩存,每小時執行一次

  

UpdateCacheJob

根據操做歷史記錄,對緩存中的數據進行單條更新,每15分鐘執行一次

  

UpdateCodeJob

定時任務,按期掃描崗碼歷史表ecc_oms.sys_his,調用存儲過程,觸發更新崗碼操做,每10分鐘執行一次

  

   

5.8 如何使用數據權限接口,調用簡單示例

    在客戶端調用的應用中定義一個springbean,以下:

[html] view plain copy

 print?

  1. <beanidbeanid="cacheServiceFacade"class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  
  2. <propertynamepropertyname="serviceUrl"value="http://127.0.0.1:8011/authentication/remoting/cacheServiceFacade"/><!--這個是服務器端暴露的遠程訪問地址-->  
  3. <propertynamepropertyname="serviceInterface"value="com.ouc.oms.authentication.cache.manager.CacheServiceFacade"/><!--這個是遠程調用接口聲明 -->  
  4. </bean>  

  Java代碼調用:

[html] view plain copy

 print?

  1. CacheServiceFacadecacheServiceFacade =applicationContext.getBean("cacheServiceFacade",CacheServiceFacade.class);  
  2. Set<CustomerInfoC>customerInfos =cacheServiceFacade.findCustomerByEmpId(11712L,"PR");  
  3. //something else  

5.9 如何添加新數據權限接口

    將須要客戶端調用的接口方法添加在CacheServiceFacade類中,並編寫實現類。

5.10 部分數據權限接口的含義:

    客戶端調用根據實際狀況可進行調整,如下給出樣例

[html] view plain copy

 print?

  1. publicinterfaceCacheService {   
  2.     
  3. /**   
  4. * 根據人員ID查找客戶   
  5. */   
  6. public List<Integer>findCustomerByEmpId(int id);   
  7. 1、PR下單   
  8. 1.根據人員ID查找崗位ID   
  9. select ser.fst_submit_station_id – 崗ID   
  10. From ecc_fst.station_employee_relationser – 崗人關係表   
  11. where ser.employee_id = 46 – 登錄人員ID   
  12. and ser.enable_flag = 'T' – 有效標識   
  13. and ser.delete_flag = 'F' – 刪除標識   
  14.     
  15. 2.根據崗ID查到PR崗   
  16. selectsc.fst_submit_station_id, -- 崗位ID   
  17. sc.fst_submit_station_code, -- 崗位編碼   
  18. sc.fst_submit_station_name, -- 崗位名稱   
  19. sc.product_line_id, -- 產品線ID   
  20. sc.product_series_code-- 產品組(與產品線ID互斥,兩個列只有一個值有效,若產品組有效要根據該編碼轉換成產品線ecc_fnd.bu_product_group_pl)   
  21. Fromecc_fst.station_configsc-- 崗位信息表   
  22. wheresc.fst_submit_station_idin (92172, 91239, 91241) -- 崗位ID   
  23. andsc.fst_role_lookup_code = 'PR'-- 業務類型   
  24. andsc.enable_flag = 'T'-- 有效標識   
  25. andsc.delete_flag = 'F'-- 刪除標識   
  26.     
  27. 3.根據崗ID查找每一個崗所屬的客戶   
  28. select scr.fst_submit_station_id, – 崗ID   
  29. scr.customer_id – 客戶ID(Number列,有科學計數法的主鍵)   
  30. From ecc_fst.station_customer_relationscr   
  31. where scr.fst_submit_station_id in (92172, 91239, 91241) – 崗位ID   
  32. and scr.enable_flag = 'T' – 有效標識   
  33. and scr.delete_flag = 'F' – 刪除標識   
  34.     
  35. 4.根據客戶ID查找客戶屬性   
  36. selectciv.customer_code, -- 客戶編碼   
  37. civ.customer_name, -- 客戶名稱   
  38. civ.customer_flag, -- 客戶類型 SX:傘下 HS:海傘 NULL:正常客戶   
  39. civ.first_region_code,-- 市場經營體編碼   
  40. civ.dqd_code, -- 大渠道編碼   
  41. civ.xqd_code-- 小渠道編碼   
  42. fromecc_customer.customer_info_vciv-- 客戶信息表   
  43. whereciv.customer_idin (20090507033457) -- 客戶ID   
  44.     
  45.     
  46. 1、門店銷售經理(MD_XSJL)下單   
  47. 1.根據人員ID查找崗位ID   
  48. select ser.fst_submit_station_id – 崗ID   
  49. From ecc_fst.station_employee_relationser – 崗人關係表   
  50. where ser.employee_id = 6946 – 登錄人員ID   
  51. and ser.enable_flag = 'T' – 有效標識   
  52. and ser.delete_flag = 'F' – 刪除標識   
  53.     
  54. 2.根據崗ID查到PR崗   
  55. selectsc.fst_submit_station_id, -- 崗位ID   
  56. sc.fst_submit_station_code, -- 崗位編碼   
  57. sc.fst_submit_station_name, -- 崗位名稱   
  58. sc.product_line_id, - 產品線ID-   
  59. sc.product_series_code-- 產品組   
  60. Fromecc_fst.station_configsc-- 崗位信息表   
  61. wheresc.fst_submit_station_idin (92172, 91239, 91241) -- 崗位ID   
  62. andsc.fst_role_lookup_code = 'MD_XSJL'-- 業務類型   
  63. andsc.enable_flag = 'T'-- 有效標識   
  64. andsc.delete_flag = 'F'-- 刪除標識   
  65.     
  66. 3.根據崗ID查找每一個崗所屬的客戶   
  67. select scr.fst_submit_station_id, – 崗ID   
  68. scr.customer_id – 客戶ID(Number列,有科學計數法的主鍵)   
  69. From ecc_fst.station_customer_relationscr   
  70. where scr.fst_submit_station_id in (92172, 91239, 91241) – 崗位ID   
  71. and scr.enable_flag = 'T' – 有效標識   
  72. and scr.delete_flag = 'F' – 刪除標識   
  73.     
  74. 4.根據客戶ID查找客戶屬性   
  75. selectciv.customer_code, -- 客戶編碼   
  76. civ.customer_name, -- 客戶名稱   
  77. civ.customer_flag, -- 客戶類型 SX:傘下 HS:海傘 NULL:正常客戶   
  78. civ.first_region_code,-- 市場經營體編碼   
  79. civ.dqd_code, -- 大渠道編碼   
  80. civ.xqd_code-- 小渠道編碼   
  81. fromecc_customer.customer_info_vciv-- 客戶信息表   
  82. whereciv.customer_idin (20090507033457) -- 客戶ID   
  83.     
  84.     
  85. 1、 BU表明下單(BU_WGG_1,BU_WGG_2,BU_ACG,BU_DPG,BU_LE,BU_LF)下單   
  86. 1.根據人員ID查找崗位ID   
  87. select ser.fst_submit_station_id – 崗ID   
  88. From ecc_fst.station_employee_relationser – 崗人關係表   
  89. where ser.employee_id = 6946 – 登錄人員ID   
  90. and ser.enable_flag = 'T' – 有效標識   
  91. and ser.delete_flag = 'F' – 刪除標識   
  92.     
  93. 2.根據崗ID查到PR崗   
  94. selectsc.fst_submit_station_id, -- 崗位ID   
  95. sc.fst_submit_station_code, -- 崗位編碼   
  96. sc.fst_submit_station_name, -- 崗位名稱   
  97. sc.product_line_id, - 產品線ID-   
  98. sc.product_series_code – 產品組   
  99. Fromecc_fst.station_configsc-- 崗位信息表   
  100. wheresc.fst_submit_station_idin (92172, 91239, 91241) -- 崗位ID   
  101. andsc.fst_role_lookup_codein (BU_WGG_1,BU_WGG_2,BU_ACG,BU_DPG,BU_LE,BU_LF)-- 業務類型   
  102. andsc.product_line_id = 777   
  103. andsc.enable_flag = 'T'-- 有效標識   
  104. andsc.delete_flag = 'F'-- 刪除標識   
  105.     
  106. 3.根據崗ID查找每一個崗所屬的品牌   
  107. selectscp.pro_value, -- 品牌標識   
  108. scp.pro_remark-- 品牌名稱   
  109. fromecc_fst.station_config_propertyscp   
  110. wherescp.fst_submit_station_id = 92349   
  111. andscp.delete_flag = '0'   
  112.     
  113. 4.根據崗位ID查找二級區域(網格)   
  114. selectst.sale_area_code, -- 區域編碼   
  115. st.sale_area_name-- 區域名稱   
  116. Fromecc_fnd.sale_area_station_infost-- 崗區關係表   
  117. wherest.station_config_id = 92349-- 崗位ID   
  118. andst.product_line_id = 777-- 產品線ID 1169用777表明   
  119. andst.enable_flag = 'T'   
  120. andst.delete_flag = 'F'   
  121. 5.根據區域編碼查找區域信息   
  122. selectmkt.area_code, -- 區域編碼   
  123. mkt.area_name, -- 區域名稱   
  124. mkt.mkt_lookup_type-- 市場級別 S:社區店 T:專賣店   
  125. Fromecc_fnd.mkt_area_infomkt-- 區域信息表   
  126. wheremkt.area_code = 'CMI35899'-- 區域編碼   
  127. andmkt.enable_flag = 'T'   
  128. andmkt.product_line_id = 777-- 產品線ID   
  129.     
  130.     
  131. 下接...   
  132.     
  133.     
  134. 6.根據區域編碼查顆粒度   
  135. selectsur.small_unit_id, -- 顆粒度ID   
  136. sur.small_unit_code-- 顆粒度編碼   
  137. Fromecc_fnd.sale_area_unit_relationsur-- 區域與顆粒度關係表   
  138. wheresur.area_code = 'CMI00069'-- 區域編碼   
  139. andsur.product_line_id = 777-- 產品線ID 1169用777表明   
  140. andsur.enable_flag = 'T'   
  141. andsur.delete_flag = 'F'   
  142.     
  143. 7.根據顆粒度查客戶   
  144. selectciv.customer_code, -- 客戶編碼   
  145. civ.customer_name, -- 客戶名稱   
  146. civ.customer_flag, -- 客戶類型 SX:傘下 HS:海傘 NULL:正常客戶   
  147. civ.first_region_code,-- 市場經營體編碼   
  148. civ.dqd_code, -- 大渠道編碼   
  149. civ.xqd_code-- 小渠道編碼   
  150. fromecc_customer.customer_info_vciv-- 客戶信息表   
  151. whereciv.area_code = 'KLD2009000326'   
  152.     
  153.     
  154. /**   
  155. * 根據人員ID查找產品線   
  156. */   
  157. public List<ProdC>findProdByEmpId(int id);   
  158. 1.根據人員ID查找崗位ID   
  159. select ser.fst_submit_station_id – 崗ID   
  160. From ecc_fst.station_employee_relationser – 崗人關係表   
  161. where ser.employee_id = 6946 – 登錄人員ID   
  162. and ser.enable_flag = 'T' – 有效標識   
  163. and ser.delete_flag = 'F' – 刪除標識   
  164.     
  165. 2.根據崗ID查到PR崗   
  166. selectsc.fst_submit_station_id, -- 崗位ID   
  167. sc.fst_submit_station_code, -- 崗位編碼   
  168. sc.fst_submit_station_name, -- 崗位名稱   
  169. sc.product_line_id, -- 產品線ID   
  170. sc.product_series_code-- 產品組(與產品線ID互斥,兩個列只有一個值有效,若產品組有效要根據該編碼轉換成產品線ecc_fnd.bu_product_group_pl)   
  171. Fromecc_fst.station_configsc-- 崗位信息表   
  172. wheresc.fst_submit_station_idin (92172, 91239, 91241) -- 崗位ID   
  173. andsc.fst_role_lookup_code = 'PR'-- 業務類型   
  174. andsc.enable_flag = 'T'-- 有效標識   
  175. andsc.delete_flag = 'F'-- 刪除標識   
  176.     
  177. 若產品組有效要根據該編碼轉換成產品線   
  178. selectp.product_code, -- 產品線編碼   
  179. p.product_id, -- 產品線ID   
  180. p.product_name, -- 產品線名稱   
  181. p.group_code-- BU編碼   
  182. Fromecc_fnd.bu_product_group_plp-- 產品BU對照表   
  183. wherep.group_code = 'WGG01'-- BU編碼   
  184. 2.2.若產品線不爲空   
  185. selectplv.PRODUCT_ID, -- 產品ID   
  186. plv.PRODUCT_CODE, -- 產品編碼   
  187. plv.PRODUCT_LINE_NAME-- 產品名稱   
  188. Fromecc_fnd.product_line_vplv-- 產品線表   
  189. whereplv.PRODUCT_ID = 100000-- 產品線ID   
  190. 2.3.BU表明下單的場合BU_WGG_1,BU_WGG_2,BU_ACG,BU_DPG,BU_LE,BU_LF   
  191. selectb.product_id, -- 產品線ID   
  192. b.product_code, -- 產品線編碼   
  193. b.product_name-- 產品線名稱   
  194. Fromecc_fnd.bu_product_groupb-- BU與產品線關係表   
  195. whereb.group_code = 'BU_WGG_1'-- BU編碼   

[html] view plain copy

 print?

  1. /**   
  2. * 根據人員ID查找經營體   
  3. */   
  4. public List<SalechannC>findScalByEmpId(int id);   
  5. 1.根據人員ID查經營體ID   
  6. selectom.sale_manager_id, -- 經營體ID   
  7. om.sale_manager_code-- 經營體編碼   
  8. FromECC_OMS.SYS_EMP_SALECHANNOM-- 人員經營體關係表   
  9. whereom.emp_id = 49485-- 人員ID   
  10. andom.enable_flag = 'T'   
  11. andom.delete_flag = 'F'   
  12. 2.根據經營體ID或編碼查經營體名稱   
  13. select cm.sales_chan_manager_code, – 經營體編碼   
  14. cm.sales_chan_manager_name – 經營體名稱   
  15. from ECC_FST.SALES_CHANNEL_MANAGER CM – 經營體信息表   
  16. where(cm.sales_chann_manager_id = 1 – 經營體ID   
  17. or cm.sales_chan_manager_code = '1001')-- 經營體編碼   
  18. andcm.enable_flag = 'T'   
  19. andcm.delete_flag = 'F';   
  20. /**   
  21. * 根據人員ID查找渠道   
  22. */   
  23. public List<ChannelC>findChannelByEmpId(int id);   
  24.     
  25. /**   
  26. * 根據人員ID查找工貿   
  27. */   
  28. public List<AreaC>findAreaByEmpId(int id);   
  29. 1.根據人員ID查工貿ID或編碼   
  30. selectam.area_id, -- 工貿ID   
  31. am.area_code-- 工貿編碼   
  32. FromECC_OMS.SYS_EMP_AREAAM-- 人區關係表   
  33. wheream.emp_id = 3549-- 人員ID   
  34. andam.enable_flag = 'T'   
  35. andam.delete_flag = 'F'   
  36.     
  37. 2.根據工貿ID或編碼查名稱(有兩個表)   
  38. selecta.area_code, -- 工貿編碼   
  39. a.area_name-- 工貿名稱   
  40. fromECC_OMS.SYS_AREA_INFOa-- 工貿信息表   
  41. where (a.area_id = 519-- 工貿ID   
  42. ora.area_code = '12C01') -- 工貿編碼   
  43. anda.enable_flag = 'T'   
  44. anda.delete_flag = 'F'   
  45.     
  46.     
  47. selectmkt.area_code, -- 工貿編碼   
  48. mkt.area_name-- 工貿名稱   
  49. fromecc_fnd.mkt_area_infomkt-- 區域信息表   
  50. wheremkt.area_code = '12C01'-- 工貿編碼   
  51. andmkt.enable_flag = 'T'   
  52. /**   
  53. * 根據人員ID查找產品線   
  54. */   
  55. public List<CustomerC>findCustByEmpId(int id);   
  56. 1.根據人員查產品線ID和編碼   
  57. select sep.prod_id, – 產品線ID   
  58. sep.prod_code – 產品線編碼   
  59. from ecc_oms.sys_emp_prodsep – 人員產品線關係表   
  60. where sep.emp_id = 11433 – 人員ID   
  61. andsep.enable_flag = 'T'   
  62. andsep.delete_flag = 'F'   
  63. 2.根據產品線ID或產品線編碼查名稱   
  64. selectplv.PRODUCT_CODE, -- 產品線編碼   
  65. plv.PRODUCT_LINE_NAME-- 產品線名稱   
  66. Fromecc_fnd.product_line_vplv-- 產品線信息表   
  67. where (plv.PRODUCT_ID = 100000-- 產品線ID   
  68. orplv.PRODUCT_CODE = 'AA') -- 產品線編碼   
  69. /**   
  70. * 根據客戶ID查找人員   
  71. */   
  72. public List<Integer>findEmpByCustId(int id);   
  73. 根據findCustomerByEmpId反向查   
  74.     
  75. }  
相關文章
相關標籤/搜索