詳細設計說明書(SaaS)_第1頁
詳細設計說明書(SaaS)_第2頁
詳細設計說明書(SaaS)_第3頁
詳細設計說明書(SaaS)_第4頁
詳細設計說明書(SaaS)_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

詳細設計說明書《SaaS統(tǒng)一信息化平臺》文檔一旦發(fā)布,請務必按文檔執(zhí)行并堅持遵守。如果您有改進的建議,請將您的建議發(fā)郵件或當面告知所列作者。SaaS統(tǒng)一信息化平臺文件號:LITTCORE-0001詳細設計說明書版本號:1.30上海巢聚網絡科技有限公司?版權所有.本文件僅供公司內部使用,屬公司密件并具有知識版權4/94修訂歷史記錄版本日期作者修正原因1.02013-05-23蔡源初始化文檔1.12013-08-30蔡源增加【定制化、個性化】章節(jié)1.22013-09-29蔡源增加自動登錄的設計1.32013-10-15蔡源增加參數字典設計增加客戶管理設計1.42013-10-18蔡源增加應用場景及解決方案章節(jié),用于描述特定業(yè)務流程或者功能流程的實現(xiàn)1.52013-12-04蔡源增加【團隊協(xié)作】相關設計,主要包括項目管理和任務管理1.62013-01-15蔡源增加用戶與租戶空間一對多的設計,用戶可以在不同空間中切換1.72014-05-05蔡源參數字典增加filter和params屬性,用來根據業(yè)務過濾和獲得額外參數1.82014-05-16蔡源細化具體的子系統(tǒng)和具體的功能模塊1.92014-05-22蔡源細化QuickView,增加動態(tài)查詢條件定義和動態(tài)表格定義1.102014-06-19蔡源增加DynamicSearch,支持動態(tài)組合查詢條件1.112014-06-26蔡源增加系統(tǒng)公告模塊1.122014-06-27蔡源更新參數字典編號規(guī)則為:模塊名+屬性名,全局唯一1.132014-08-20蔡源增加【文檔管理】模塊定義增加【項目文檔】模塊定義1.142014-11-10蔡源增加【個人文檔】模塊定義1.152014-11-13蔡源快速視圖和動態(tài)查詢條件增加descr屬性,作為tip浮動顯示,因為只顯示名稱太短了,無法詳盡描述這個視圖的功能1.162014-12-03蔡源細化OA協(xié)同辦公的基礎功能模塊1.172015-01-06蔡源增加【業(yè)務角色】設計,用于配置數據訪問權限和字段訪問權限1.182015-02-01蔡源將概要性內容轉移至《概要設計》,僅保留具體設計部分1.192015-02-05蔡源增加租戶配置信息設計啟用AppStore設計,每個業(yè)務子系統(tǒng)通過AppStore來進行管理增加“系統(tǒng)版本定義與升級”1.202015-02-27蔡源客戶信息增加收貨地址屬性1.212015-03-27蔡源細化MVP所需的功能模塊說明

引言編寫目的詳細設計的主要任務是對概要設計方案做完善和細化。說明書編制的目的是說明一個軟件系統(tǒng)各個層次中的每個程序(每個模塊或子程序)和數據庫系統(tǒng)的設計考慮,為程序員編碼提供依據。本文檔在概要設計的基礎上,進一步完整詳盡的描述了系統(tǒng)實現(xiàn)的技術細節(jié),及根據業(yè)務需求制定的系統(tǒng)所需要實現(xiàn)的業(yè)務功能,功能模塊的詳細定義。背景參考資料術語定義縮寫英中SaaS設計多租戶模式數據隔離將每個承租者的數據隔離到不同的數據庫。共享數據庫,Multi-Schema,將每個承租者的數據隔離到獨立的表和模式。共享數據庫,Share-Schema,在所有承租者之間共享一組相同的表和模式。實現(xiàn)多租戶的三種模式無共享,完全獨立:每個租戶獨立使用一套應用程序和一個數據庫,應用與數據庫均不包含租戶信息,通過訪問入口路由到指定租戶的路徑上。優(yōu)點:無需修改原有應用程序跟數據庫。租戶間不會相互影響,可對個別租戶做自定義。缺點:部署跟運維相對繁瑣。物理設施資源開銷最大。無法對多租戶數據進行查詢歸并,存在數據孤島共享應用,多數據源:使用同一套應用程序,數據庫訪問時根據租戶信息路由到指定數據庫或Schema上。優(yōu)點:兼顧了開發(fā)和性能。缺點:無法對多租戶數據進行查詢歸并,存在數據孤島共享應用,單一數據源:使用同一套應用程序,使用同一個數據庫,數據模型中定義了租戶信息,通過過濾條件過濾租戶數據。優(yōu)點:性能最優(yōu),部署簡便缺點:對系統(tǒng)架構和開發(fā)工程師要求較高,否則可能存在數據安全性問題運維復雜,當數據發(fā)生異常需要恢復時,無法簡單依賴數據庫的恢復機制,并將影響到多個租戶的數據數據過濾在共享同一數據源的模式下,需要對每個數據查詢增加租戶信息的過濾條件;在單app環(huán)境下,一個用戶只對應一個租戶,通過登錄用戶信息即可獲得租戶信息,比較簡單。但是在平臺模式下,一個用戶可以租用多個app,用戶與租戶是一對多的情況。解決方案:用戶在登錄一個app時,app通過appKey去平臺獲取該用戶的信息,并在本地session中保存用戶登錄信息,平臺可以根據appKey與用戶ID獲得唯一的tenant,即app本地session中只需保存用戶對象與tenant對象一對一的關系。只有用戶在登錄平臺系統(tǒng)時才有一對多tenant的情況。總結實際使用中可能綜合運用3種模式,即如果客戶較為重要,愿意為安全性、性能等額外付費,可部署為獨立模式。常規(guī)情況下則使用共享數據庫模式,但根據性能或部署需要,可能根據用戶數切分為多個domain,每個domain中的用戶共享一個數據庫,這樣如果某個domain失效,不會影響其他用戶的使用。但基本原則是所有數據表均按SaaS模式設計,以便實現(xiàn)不同模式下的切換。定制化、個性化定制化指的是同一SaaS服務可以為不同用戶在相同基礎功能的基礎上提供一定程度的功能定制或強化,在不改動或盡量小改動服務的基礎上實現(xiàn)不同用戶的差異化功能性需求。如:數據模型的定制化,業(yè)務流程的定制化。個性化指的是為客戶提供的,滿足用戶企業(yè)或個人個性需要的非功能性需求,如國際化、主題、收藏夾、菜單結構調整、Logo或程序名調整、Dashboard等。門戶、流程、智庫、社區(qū)注:所有方面,不僅是為了解決企業(yè)內部問題,更可以推向上下游,如企業(yè)門戶網站就是對外的,通過BPM可集成上下游的業(yè)務系統(tǒng),實現(xiàn)供應鏈的業(yè)務流轉并最終實現(xiàn)E2E。智庫可以形成企業(yè)最佳實踐和解決方案,可以在行業(yè)中共享和推廣。社區(qū)更可以通過人與人之間的關系,加強企業(yè)間溝通。注2:4個類別,都是強調信息的匯聚、共享、傳播,通過SaaS模式可以實現(xiàn)這些方面的最大化,這是傳統(tǒng)單一企業(yè)內部信息化無法實現(xiàn)的。通過門戶來集成分散的功能,信息,提高用戶對關鍵信息的關注度,提高用戶對信息的獲取和處理效率。通過流程來組裝分散的業(yè)務,實現(xiàn)上下游業(yè)務的E2E一體化,提高業(yè)務協(xié)作能力,提高業(yè)務間信息共享,并最終提高企業(yè)整體業(yè)務的處理效率。(注:流程可能在某些環(huán)節(jié)的處理效率會比以前降低,但其目的是優(yōu)化整體效率)通過智庫來積累知識,沉淀企業(yè)智慧。知識的有效積累可推動企業(yè)業(yè)務流程重組和優(yōu)化,加強企業(yè)文化建設,提高員工凝聚力。社區(qū)是強調企業(yè)人與人之間的溝通,有別于上面三項都是以企業(yè)運營為目的的。這個待定MetadataDB元數據數據庫,定義了多租戶相關信息,用于租戶信息管理,作為基礎的公共服務獨立于業(yè)務系統(tǒng)數據庫。系統(tǒng)用戶角色租戶擁有者租用app的用戶,作為app的擁有者,其擁有app的所有功能模塊使用權限;同時作為擁有者,可以對app進行續(xù)費、升級、停用等操作。此外作為app的第一個默認用戶,也是默認的租戶管理員(租戶開通時默認創(chuàng)建),具有租戶“系統(tǒng)管理”模塊的功能權限,可以在租用范圍內創(chuàng)建角色,邀請其他用戶加入,分配權限。租戶管理員租戶擁有者出于管理角度考慮(如租戶擁有者是老板,但是管理員是IT管理員),可以將租戶中的任意用戶提升為系統(tǒng)管理員,由其作為租戶管理員協(xié)助或負責租戶內相應的管理工作,如用戶管理,角色管理,功能權限分配,邀請用戶加入等。租戶管理員在權限上與租戶擁有者一致,但租戶擁有者作為最高級別,可隨時將租戶管理員降級成普通用戶;而反之則不行。租戶成員租戶開通后,默認只有擁有者一個成員,此時擁有者可通過邀請方式請求其他用戶加入到該租戶中共同使用租用的app。如:老板租用了CRM系統(tǒng),邀請公司內部員工加入到該系統(tǒng)中,員工即可使用CRM系統(tǒng)的功能,并在租戶范圍內共享數據。用戶在加入一個租戶后,需要租戶管理員為其開通相應功能模塊的使用權限(通過設置角色),否則只能共享【個人事務】中公開部分的數據??蛻粲脩艚巧到y(tǒng)管理員(內部)管理系統(tǒng)用戶、角色與權限,保證系統(tǒng)正常運行。高管(內部)審查客戶貢獻數據、客戶構成數據、客戶服務構成數據和客戶流失數據。客戶經理(內部)維護負責的客戶信息。

接受客戶服務請求,在系統(tǒng)中創(chuàng)建客戶服務。

處理分派給自己的客戶服務。

對處理的服務進行反饋。

創(chuàng)建銷售機會。

對特定銷售機會制定客戶開發(fā)計劃。

執(zhí)行客戶開發(fā)計劃。

對負責的流失客戶采取“暫緩流失”或“確定流失”的措施銷售主管(內部)對客戶服務進行分配。

創(chuàng)建銷售機會。

對銷售機會進行指派。

對特定銷售機會制定客戶開發(fā)計劃。

分析客戶貢獻、客戶構成、客戶服務構成和客戶流失數據,定期提交客戶管理報告。銷售人員(內部)接受銷售任務,負責與客戶接觸,實施銷售任務,跟蹤客戶消費。合作伙伴(外部)部分數據交互,并提供合作伙伴關心的數據,可由合作伙伴自行訪問(SelfService)。供應商(外部)部分數據交互,并提供供應商關心的數據,可由供應商自行訪問(SelfService)。客戶(外部)提供客戶關心的數據,可由客戶自行訪問查詢(SelfService)身份驗證與授權身份驗證和授權是現(xiàn)實應用程序的安全性概念中主要的兩個:身份驗證允許一個應用程序在連接時驗證一個人(或一個應用程序、智能卡等)是否與它聲明的一樣。授權定義一個用戶在一個系統(tǒng)上的權利與權限。用戶身份驗證通過之后,授權會決定該用戶在系統(tǒng)上有權做什么。因此,授權應該發(fā)生在身份驗證之后。身份驗證和授權在SaaS應用程序中很復雜。在一個安全性SaaS解決方案中,底層的身份驗證和授權基礎設施有兩種設計方法:集中式或聯(lián)邦式。授權模式黑盒模式:即簡化的權限模型,不開放授權功能給用戶,角色和權限由系統(tǒng)內置,用戶在加入App時自動綁定角色,對于一個App來說通常有:創(chuàng)建人,管理員和普通成員3個角色。白盒模式:即允許用戶授權,App創(chuàng)建人可在自行創(chuàng)建用戶組和角色,并對每個功能模塊進行細分授權。該模式可實現(xiàn)更精細的權限控制,類似傳統(tǒng)的企業(yè)應用。可擴展性基礎設施可擴展性計算資源快速供給應用快速部署資源按需分配自動化管理應用架構可擴展性應用服務器水平擴展數據庫水平擴展MySQLSharding()異步消息隊列緩存機制負載均衡流程可定制功能可配置數據權限對于前臺數據查詢,通過定義數據級權限實現(xiàn)動態(tài)表格內容輸出,不同角色的用戶將看到不同列的表格及經過過濾的數據內容。按角色定義哪些數據項可以呈現(xiàn),并能調整列呈現(xiàn)的順序;按角色定義過濾條件,實現(xiàn)基礎數據的過濾;參數字典參數字典分“參數類型表”和“參數字典表”。參數類型表定義不同類型的業(yè)務參數,如用戶類型、公告類型等。每個類型又可分為:1–不可修改,2–可增加,3–可修改,4–可刪除4種。如公告類型,可被定義為“可增加”類型的,即公告類型可以增加,但不能被修改或刪除。參數類型表另外用狀態(tài)字段定義:1–正常,2–屏蔽,9–系統(tǒng)。對于某些業(yè)務需要,不需要用到的參數,可設置成屏蔽,即在業(yè)務系統(tǒng)中將無法使用該參數;對于狀態(tài)為系統(tǒng)的,則不能進行此項操作。參數字典表為明細表,對參數類型定義業(yè)務參數,如公告類型可分為:1–公告,2–新聞,3–通知,4–緊急通知等,由于公告類型為可增加類型,故可在此基礎上進行增加,但一旦使用過的公告,則不能進行修改或刪除了。對某個業(yè)務參數細項,又有3種狀態(tài):1–正常,2–屏蔽,9–系統(tǒng)。由于業(yè)務需要可暫時屏蔽某些業(yè)務參數;但對于狀態(tài)為系統(tǒng)的則不能進行此項操作日志記錄日志按照類型分:操作日志、業(yè)務日志、系統(tǒng)日志。不同類型的日志有其相應的處理邏輯及具體實現(xiàn),以下分別說明。操作日志:記錄操作員登錄后執(zhí)行的相關操作。(目前只對更新數據庫的操作記日志,查詢不記錄)業(yè)務日志:記錄業(yè)務處理信息,如轉賬時金額的變動數額等。系統(tǒng)日志:記錄系統(tǒng)日常運行時的行為日志,目前采用通用的日志框架,以手工編碼的形式記錄操作日志同具體的業(yè)務應該是相互分離的,不在同一個事務中,及無論業(yè)務操作是否成功,都將記錄用戶操作。而業(yè)務日志記錄業(yè)務的詳細信息,應作為業(yè)務的一部分,與業(yè)務存在同一個事務中。因此操作日志一般在控制層編寫,而業(yè)務日志一般在業(yè)務層編寫。注:可通過注解+攔截器模式提供非入侵的操作日志記錄;而業(yè)務日志一般只能編碼實現(xiàn)。操作日志模型屬性名稱類型備注busiType業(yè)務類型int0-未指定1-保存2-更新3-刪除4-查看5-查詢6-審核...moduleCode模塊編號String對所有功能模塊,都有唯一對應的編號,如“系統(tǒng)配置”對應“SYS-001”opId操作員IDLongopName操作員名稱String冗余數據,這樣就不需要關聯(lián)操作員表了opIp執(zhí)行操作的IPStringopDatetime操作時間Date數據庫默認content操作內容String具體操作內容描述status操作狀態(tài)int0-失敗1-成功業(yè)務日志業(yè)務日志需要記錄詳細的業(yè)務數據變化,無法使用Annotation在方法級進行攔截,需要硬編碼實現(xiàn)。考慮到一定的通用性,我們采用基于事件(Event)的日志模式,即在日志模塊中通過訂閱操作事件(OpEvent)獲得業(yè)務模塊發(fā)布的業(yè)務事件,再通過模板消息將業(yè)務參數格式化成操作詳情。需要記錄業(yè)務操作日志的,在業(yè)務執(zhí)行完后通過EventBus發(fā)布繼承于BaseOpEvent的事件對象,操作日志模塊統(tǒng)一訂閱該事件并統(tǒng)一轉換存儲。發(fā)布事件代碼示例:說明:業(yè)務操作的名稱將通過國際化轉換成對應用戶語言,國際化KEY命名規(guī)則:[模塊編號].func.[功能編號];日志詳情基于動態(tài)參數格式化,因此需要將必要的屬性作為事件的動態(tài)參數傳入,國際化KEY命名規(guī)則:[模塊編號].func.[功能編號].log。由于某些日志詳情需要生成HTML的超鏈,依賴contextPath,因此約定contextPath將作為默認0位傳參傳入,業(yè)務參數在參數數組中的位置從1開始,如下面事件中commentId的位置為{1}。個性化界面?zhèn)€性化用戶可在一定程度上對界面做定制化,如使用個性化主題,個性化布局,可自行調整菜單結構等。系統(tǒng)菜單可配置性

菜單對不同的租戶來說,可能有不完全一樣的名字。例如客戶管理,在醫(yī)院使用時,就得改成病人管理,客戶服務人員就得改成醫(yī)生,客戶服務記錄就是就診記錄等。另外菜單的層次結構和分布,不同的租戶可能也會有不同的要求。在設計上需要考慮以下幾個問題:一個租戶一套菜單;一個菜單可以關聯(lián)一個子功能;組織成樹型結構,構成上下級菜單結構;同級菜單之間還存在顯示順序的問題頁面元素可配置性

各功能界面上的內容也是供用戶和系統(tǒng)交互的界面元素。不同的租戶可能有各種不同的需求。由于租戶可以自定義擴展數據,這些數據是需要在頁面上展示的,因此無論對頁面元素的個數、位置、順序,還是元素的含義,租戶都會有一些個性化的需求。同時對于在設計時設定的界面元素,一般情況下是不允許刪除的,但有時候還是允許租戶將一些無關緊要的字段隱藏。

數據個性化在實際應用中,不同租戶之間需求的差異導致系統(tǒng)需要針對不同租戶保存許多擴展性數據。在傳統(tǒng)應用中,可以通過定制實例,增加客戶的擴展數據,來滿足其個性化要求。在多租戶SaaS應用中,所有租戶都使用同一個數據架構,常見的解決辦法就是實現(xiàn)擴展數據的可配置。名稱值對的方式將擴展數據的保存和原數據表分離,另外用一個統(tǒng)一的擴展數據表來保存。擴展數據表將數據表的橫向擴展列轉換為縱向的數據集,將每一條原始數據記錄的一個擴展字段,都保存成一條擴展數據行。將數據表中的數據記錄與配置元數據表中的配置記錄關聯(lián),構成擴展數據記錄。可以提供無限數量的自定義擴展字段。

但是其增加數據操作的復雜性,查詢時也要多次訪問數據庫才能得到完整的業(yè)務數據。這些都會影響數據訪問性能。

此外可結合使用NoSQL,通過SchemaFree模式提供高擴展性和個性化。參數字典不同的用戶在對參數字典的使用上也會存在差異,如客戶等級,有的喜歡用1、2、3表示,有的喜歡用A、B、C表示,這就需要參數字典也需要能夠支持多租戶,并可定制。功能個性化對于SaaS應用,面對為數眾多的租戶,大部分租戶可能只會使用到應用中的部分功能。因此系統(tǒng)需要支持租戶有選擇的使用自己需要的功能,滿足功能可配置要求。

原子功能劃分

要實現(xiàn)功能可配置,首先需要將整個系統(tǒng)的功能進行分解。整個應用需要分解成最基本、相對獨立、互不重疊的原子功能。所有原子功能疊加起來,就是整個應用所提供的全部功能。

進行原子功能劃分,首先就是功能分解,即將整個系統(tǒng)的功能分解成最基本的相對獨立的原子功能,應遵循以下幾個原則:

每個功能都是有價值的;

每個功能都是不可再細分;

功能間互不重疊;

功能之間不循環(huán)依賴;

整個系統(tǒng)功能是完整的。

將功能分解完畢后,由于不是所有的原子功能都是可以單獨使用的。有些功能是需要依賴其他功能才能使用,功能之間是存在一定的依賴關系。因此功能分解完畢后,還需要對功能進行定義,描述相關依賴關系。

功能包設計

當系統(tǒng)功能被劃分為許多原子功能后,直接配置原子功能給每個租戶是比較復雜的。需要根據用戶類型和使用的場景,對原子功能進行打包,然后為每個用戶配置其合適的功能包。功能包的設計要遵循高內聚、低耦合的原則,盡量將相關的和相互依賴的原子功能設計在一個功能包中。同時應該減少功能包和功能包之間的依賴,使得各個功能包盡可能獨立的進行操作使用。

通過功能包的設計,雖然可以將系統(tǒng)功能組合成幾個相對比較獨立的部分,但是這些功能包仍然不可以完全獨立使用,也就不能夠單獨銷售。為了讓用戶購買了系統(tǒng)以后可以充分使用其同能,需要按照不同的商業(yè)意圖構造合適用戶的銷售包。例如,按照客戶使用功能的多少,可以把系統(tǒng)劃分為最小版、標準版、完整版。功能使用校驗

在經過對系統(tǒng)進行原子功能劃分和功能包的設計后,系統(tǒng)的不同租戶可以按照不同版本使用了,系統(tǒng)需對原子功能進行校驗,確定租戶在系統(tǒng)中可以使用和操作哪些原子功能。數據模型用戶信息(UserInfo)用戶信息表中只保存比較固定的數據,便于快速查詢和緩存,其他經常要變的數據放到附屬表中屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成loginId登錄IDString登錄名password密碼String密碼userType用戶類型(1001)int1:內部用戶2:外部用戶(客戶、供應商、合作伙伴等)userName用戶名稱String用戶姓名nickName昵稱Stringgender性別(0002)int0:未知1:男2:女email電子郵件Stringmobile手機號StringmobileValid手機號是否已驗證BOOLEANrealNameValid是否實名認證BOOLEAN即userNamejob職位VARCHAR(50)status狀態(tài)(1002)INT0:未激活1:正常2:注銷(可恢復)3:刪除(僅超級管理員恢復)4:鎖定workStatus工作狀態(tài)INT由用戶手工切換0:離線1:在線2:休息balance帳戶余額BIGDECIMAL(10,2)totalBalance累計充值金額BIGDECIMAL(10,2)locale語言VARCHAR(50)支持用戶自定義timezone時區(qū)int支持用戶自定義theme主題VARCHAR(50)支持用戶自定義headImgUrl頭像VARCHAR(200)頭像圖片路徑createDatetime創(chuàng)建時間DATETIMEupdateDatetime更新時間DATETIME用戶擴展信息(UserExt)與用戶表一對一,相同的生命周期屬性名含義數據類型備注id序號,主鍵Integer等于用戶IDlevel級別intsource來源Stringbirthday生日DatezipCode郵編Stringaddress地址Stringdistrict區(qū)Stringcity城市Stringstate省份Stringcountry國籍Stringlng經度DECIMAL(10,6)lat緯度DECIMAL(10,6)securityQuestion安全問題Stringanswer安全答案StringidType證件類型INT1:身份證2:護照idNo證件號VARCHAR(50)idPhoto電子證件(正面)VARCHAR(100)idPhotoBack電子證件(反面)VARCHAR(100)用戶狀態(tài)信息(UserState)與用戶表一對一,相同的生命周期屬性名含義數據類型備注id序號,主鍵Integer即用戶IDcurrentTenantId當前租戶IDint當一個用戶綁定了多個租戶時,用戶需要選擇當前使用哪個租戶totalLoginTimes總登錄次數intloginRetryTimes登錄重試次數int默認值0連續(xù)登錄失敗超過指定次數,則帳號禁用指定時間lastLoginDatetime上次登錄時間DatelastLoginIp上次登錄IPString用戶自動登錄信息(UserAutoLogin)記錄用戶自動登錄的信息屬性名含義數據類型備注idUUIDIntegerUUIDautoLoginIp自動登錄IPString可檢測是否為授權IPloginId登錄IDStringencryptedPassword加密的密碼String可檢測密碼是否一致createDatetime創(chuàng)建時間Timestamp時間戳expiredTime過期時間long為0或負數代表永不過期。使用cookie時用cookie的過期機制即可用戶操作日志(UserOpLog)記錄用戶操作業(yè)務模塊的操作日志,包括創(chuàng)建、修改、刪除等。通過模塊編號可以進行過濾。后臺可以根據需要拆分多張表(如通過moduleCode拆表),而代碼中保持一致。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDint個人文檔填0moduleCode模塊編號VARCHAR(50)funcCode操作項VARCHAR(10)createupdatelockunlockdeletedownloadsendrecordId數據IDINT關聯(lián)業(yè)務數據的IDparams業(yè)務數據參數VARCHAR(2000)必要時進行數據處理,采用JSON格式進行保存opBy操作人intopUsername操作用戶的名稱VARCHAR(50)冗余opDatetime操作時間datetimeopContent操作詳情VARCHAR(2000)opComment操作注釋VARCHAR(2000)用戶填寫的對于該次操作的注釋,作為操作內容的補充。用戶余額信息(UserBalance)屬性名含義數據類型備注id序號,主鍵LongUUID,直接作為訂單號funcCode操作編號VARCHAR(20)charge:充值settle:提現(xiàn)income:收入amount金額DECIMAL(12,2)status狀態(tài)INT0:尚未成功1:操作成功createBy操作人INTcreateDatetime操作時間DATETIMEpayChannel付款通道VARCHAR(50)OFFLINE:線下BALANCE:余額WECHATPAY:微信ALIPAY:支付寶payDatetime付款時間DATETIMEtradeNo交易號VARCHAR(50)第三方支付返回activateDatetime激活時間DATETIMEremark備注VARCHAR(2000)說明:對于收入來說,目前使用工單邏輯,有個30天的質保期,即新增時狀態(tài)是0,由后臺定時任務判斷createDatetime是否超過30天,超過的則認為收入成功。組織架構(UserGroup)通過組的方式將相關用戶關聯(lián)起來,一個組的用戶相互知曉。組可以是系統(tǒng)創(chuàng)建的,也可以由用戶自行創(chuàng)建。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDINTparentId父組織IDINTcode編號LONG基于路徑的父子編號存儲,每節(jié)點三位數字,每層最大支持999個節(jié)點。最多支持6層100100100100100100101101100name名稱VARCHAR(50)type類型INT1:分支機構2:部門3:群組description描述VARCHAR(500)status狀態(tài)INT-1:刪除1:正常position排序INT同一層次下的排序createBy創(chuàng)建用戶INTcreateDatetime創(chuàng)建時間DATETIMEupdateBy更新用戶INTupdateDatetime更新時間DATETIME用戶組成員(UserGroupMember)用戶組成員列表。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDintgroupId用戶組IDintuserId成員用戶IDintcreateBy創(chuàng)建用戶intcreateDatetime創(chuàng)建時間Date租戶訂單信息(TenantOrder)訂單編號規(guī)則:年月日時分秒+4位隨機數+租戶ID屬性名含義數據類型備注id序號,主鍵INTorderNo訂單編號VARCHAR(100)根據一定規(guī)則生成的編號,唯一,易識別orderType訂單類型INT1:新訂單2:升級3:續(xù)費productNo產品編號VARCHAR(50)productType產品類型VARCHAR(20)FUNC:功能包CONF:配置包tenantId租戶實例IDINT默認為-1,生效后關聯(lián)tenanttenantCode空間編號VARCHAR(50)英文+數字,且只能以英文起始tenantAlias租戶空間別名VARCHAR(50)用于顯示isolatedMode租賃模式INT數據隔離模式1:完全共享型2:獨立Schema3:獨立數據庫price價格INTquantity購買數量INT指購買時長,單位一個月amount總價INTparams動態(tài)參數VARCHAR(2000)升降級的參數,JSON格式balanceUsed余額支付INTcouponUsed優(yōu)惠券支付INTstatus狀態(tài)INT-2:待生效-1:待支付1:已生效2:已取消3:已失效createBy創(chuàng)建者INTcreateDatetime創(chuàng)建時間DATEpayChannel付款通道VARCHAR(50)OFFLINE:線下BALANCE:余額WECHATPAY:微信ALIPAY:支付寶payDatetime付款時間DATETIMEtradeNo交易號VARCHAR(50)第三方支付返回activateDatetime激活時間DATETIMEremark備注VARCAHR(2000)租戶信息(Tenant)屬性名含義數據類型備注id序號,主鍵Integer租賃IDtenantCode應用編號VARCHAR(50)英文,由用戶指定,用來實現(xiàn)類似email后綴的區(qū)分,通??梢允瞧髽I(yè)的英文縮寫或者域名tenantAlias應用別名VARCHAR(100)bagCode功能包編號VARCHAR(50)upgradeBagCodes升級包編號VARCHAR(200)多個包用逗號分隔目前僅使用兩個,一個基礎包,一個擴展包。isolatedMode租賃模式int數據隔離模式1:完全共享型2:獨立Schema3:獨立數據庫status狀態(tài)int-3:到期-2:禁用-1:刪除0:尚未激活1:啟用createBy創(chuàng)建者intcreateDatetime創(chuàng)建時間DateupdateDatetime更新時間DatemaxMembers最大成員數int最大加入用戶數maxStorage最大存儲容量intGtrialDays試用期限int試用天數expiredDate租賃到期日DatelogoUrllogo鏈接地址Stringbalance當前余額int租戶配置信息(TenantConfig)租戶配置信息主要包含了系統(tǒng)級別但每個租戶又各自存在差異的配置數據,如:租戶企業(yè)信息,租戶郵件服務器配置,租戶短信服務器配置等等。數據庫僅保存配置的值,配置結構由xml統(tǒng)一描述,系統(tǒng)啟動時自動創(chuàng)建配置對象實例,并加載到內存中。屬性名含義數據類型備注id序號,主鍵Integer租賃IDtenantId租戶IDintcode配置對象編號varchar(50)通常以對象名稱命名,如:SmsConfig,EmailConfigcontent配置內容text對象轉JSON格式存儲updateDatetime更新時間datetime租戶成員信息(TenantMember)屬性名含義數據類型備注id序號,主鍵Integer租賃IDtenantId租戶IDintappId應用IDintuserId用戶IDintmemberType成員類型int1:內部成員2:外部用戶(客戶)customerId所屬客戶INT當成員類型是外部客戶時必填status狀態(tài)int-2:鎖定-1:刪除0:尚未激活1:啟用openId公眾號關注openidvarchar(50)nickName昵稱varchar(50)avatar頭像地址varchar(200)subscribeStatus狀態(tài)int1=已關注,2=已凍結,4=未關注subscribeDatetime關注時間datetimeunsubscribeDatetime取消關注時間datetimeisAdmin是否管理員booleancreateBy創(chuàng)建人intcreateDatetime創(chuàng)建時間DateupdateBy更新人intupdateDatetime更新時間Date租戶狀態(tài)信息(TenantState)記錄租戶當前各種狀態(tài)及常用統(tǒng)計信息,便于系統(tǒng)處理相關業(yè)務邏輯。注:目前暫不用數據表存儲,實時計算獲取,使數據更精確,待功能完善后再重構。屬性:memberCount:當前成員數(已刪除的除外)storageUsed:當前存儲使用量lastLoginDatetime:成員最近登錄時間屬性名含義數據類型備注id租戶IDINTstorageUsed網盤存儲使用容量LONG應用商店(AppStore)將不同業(yè)務模塊分類以App方式通過AppStore進行統(tǒng)一管理和發(fā)布,如CRM應用,資產管理應用,進銷存應用等。除基礎功能外,用戶在開通租戶后,可通過購買額外的APP獲得更豐富的功能體驗。VERSION_NO規(guī)則:1.2.3,其中第一位為主版本,第二位為功能版本,第三位為修訂版本。REVISION規(guī)則:10203,主版本號*10000+功能版本號*100+修訂版本。屬性名含義數據類型備注UIDUIDVARCHAR(50)統(tǒng)一規(guī)劃的應用編號,全局唯一,用于快速查找AUTH_KEY授權KEYVARCHAR(50)系統(tǒng)根據應用特征自動生成的key,應用在調用平臺API時必傳參數PASSWORD授權密鑰VARCHAR(50)應用在調用平臺API時必傳參數NAME名稱VARCHAR(200)TYPE類型INT1:個人2:企業(yè)3:通用VENDOR供應商VARCHAR(100)軟件供應商編號AUTH_TYPE授權方式INT1:免費2:收費DESCRIPTION詳細描述VARCHAR(2000)ICON_URL應用圖標VARCHAR(200)STATUS狀態(tài)INT0:未上線1:正常2:刪除3:鎖定4:正在維護POSITION在appstore中的排行INTVERSION_NO應用的版本號VARCHAR(20)用戶友好的版本號REVISION版本號INT系統(tǒng)友好的版本號,配合數據庫升級工具用來比較版本號的大小CREATE_DATETIME創(chuàng)建時間DATETIMEUPDATE_DATETIME更新時間DATETIME應用訂單信息(AppOrder)屬性名含義數據類型備注id序號,主鍵INTorderNo訂單編號VARCHAR(100)根據一定規(guī)則生成的編號,唯一,易識別orderType訂單類型INT1:新訂單2:續(xù)費tenantId租戶實例IDINT默認為-1,生效后關聯(lián)tenanttenantCode空間編號VARCHAR(50)租戶編號,冗余,便于通過編號查找appId應用IDVARCHAR(50)price價格BIGDECIMAL(10,4)quantity購買數量INT指購買時長,單位一個月status狀態(tài)INT-2:待生效-1:待支付1:已生效2:已取消3:已失效createBy創(chuàng)建者INTcreateDatetime創(chuàng)建時間DATEpayChannel付款通道VARCHAR(50)payDatetime付款時間DATEactivateDatetime激活時間DATE參數字典類型(DictParamType)參數字典分類表,在參數字典可配置時才有用。屬性名含義數據類型備注id序號,主鍵IntegerdictType參數類型VARCHAR(20)統(tǒng)一編碼dictTypeName名稱VARCHAR(50)alterMode更改方式int1:不可修改2:可增加3:可修改4:可刪除status狀態(tài)int1:正常2:屏蔽9:系統(tǒng)remark備注VARCHAR(200)參數字典(DictParam)參數字典屬性名含義數據類型備注id序號,主鍵IntegerdictType參數類型VARCHAR(20)統(tǒng)一編碼dictValue參數值VARCHAR(100)dictContent顯示內容VARCHAR(200)國際化時通過type和value映射,該屬性僅作為默認值filter過濾條件VARCHAR(500)params附加參數VARCHAR(2000)JSON格式position排序intstatus狀態(tài)int-1:刪除1:正常remark備注VARCHAR(200)租戶參數字典(TenantDictParam)由租戶自行定義的參數字典,僅在租戶范圍內有效屬性名含義數據類型備注id序號,主鍵IntegertenantId租戶IDint租戶隔離dictType參數類型VARCHAR(20)統(tǒng)一編碼dictValue參數值VARCHAR(100)dictContent顯示內容VARCHAR(200)filter過濾條件VARCHAR(500)用來實現(xiàn)數據過濾、關聯(lián)下拉框params關聯(lián)參數VARCHAR(2000)用JSON格式的Map,在獲得字典值的同時獲得額外的附加參數position排序intstatus狀態(tài)int-1:刪除1:正常remark備注String菜單(Menu)通過菜單統(tǒng)一管理用戶可使用的功能模塊的接入,所有功能模塊的跳轉不使用直接URL,而是基于菜單的URL,以此實現(xiàn)權限校驗、訪問統(tǒng)計等功能。同時基于菜單可由用戶實現(xiàn)一定程度的個性化,如菜單排序,快捷菜單,分類菜單。屬性名含義數據類型備注id序號,主鍵IntegerappId所屬應用IDint關聯(lián)具體應用,為0則為默認系統(tǒng)菜單parentId父菜單inttype菜單類型int1:normal:內部菜單2:iframe:除導航菜單外都是iframe3:redirect:點擊后重定向4:window:點擊后打開新窗口,主要用于第三方應用code菜單編號Stringname名稱String默認名稱,國際化后通過code獲得國際化名稱url實際URLStringisLeaf是否葉子節(jié)點Booleanstatus狀態(tài)intposition位置inticonUrl圖標URLStringimageUrl圖像URLString角色(Role)系統(tǒng)預置全局角色:1:personal,用戶開通后即擁有,包含個人事務中的所有基本功能。2:admin,租戶管理員,用戶開通租戶后獲得app的對應權限。3:member,租戶成員,用戶加入租戶后獲得app的對應權限。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDint該值為0時表示全局角色name名稱Stringstatus狀態(tài)int1:正常2:注銷(可恢復)3:刪除(僅超級管理員恢復)remark備注StringcreateBy創(chuàng)建人intcreateDatetime創(chuàng)建時間DateupdateBy更新人intupdateDatetime更新時間Date用戶角色(UserRole)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDintuserId用戶IDintroleId角色IDintcreateBy創(chuàng)建人intcreateDatetime創(chuàng)建時間Date用戶組角色(UserGroupRole)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDintgroupId用戶組IDintroleId角色IDintcreateBy創(chuàng)建人intcreateDatetime創(chuàng)建時間Date角色功能權限(RoleFuncPermission)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶idintroleId角色idintpermissionCode權限編號String數據授權(DataPermission)字段名含義數據類型備注id序號,主鍵INT主記錄IDmoduleCode模塊編號VARCHAR(50)authGroups授權組IDsVARCHAR(2000)授權用戶或群組的ID數組,用逗號分隔authUsers授權用戶IDsVARCHAR(2000)授權用戶或群組的ID數組,用逗號分隔激活碼(ActivationCode)由系統(tǒng)生成全局唯一的激活碼,用于在用戶注冊、找回密碼等模塊中進行數據驗證,并匹配相應的用戶。同時在激活碼中保存相關業(yè)務參數,可在激活時通過這些參數獲取相關對象信息。目前主要的激活碼有三種:一種是通過UUID生成的長度為36位(去掉橫線為32位)的字符串,生成方式較簡單,但輸入麻煩,主要用于郵件激活,找回密碼中;一種是通過一定算法生成的較簡短的字符串,通常是6到8位,可由用戶輸入;但由于存在重復性,在不同批次間需要校驗重復性;第三種是生成4-6位的隨機數,用戶輸入體驗好,但由于重復性加大,需要用戶同時輸入郵箱地址,登錄名等其他輔助驗證的信息。屬性名含義數據類型備注id序號,主鍵StringUUIDuserId用戶IDIntegermoduleCode模塊StringregisterforgetPasswordjoinparams動態(tài)參數StringJSON格式存放,KEY-VALUE模式,可直接轉成MapsecurityKey安全密鑰String備用,用于增強安全性expiredDatetime過期時間Date業(yè)務角色(BizRole)通過定義業(yè)務角色來支持用戶對特定數據和特定字段的訪問權限。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDintname名稱Stringstatus狀態(tài)int1:正常2:注銷(可恢復)3:刪除(僅超級管理員恢復)remark備注StringcreateBy創(chuàng)建人intcreateDatetime創(chuàng)建時間DateupdateBy更新人intupdateDatetime更新時間Date業(yè)務角色成員(BizRoleMember)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDintbizRoleId角色IDintuserId用戶IDint業(yè)務角色數據權限(BizRoleDataPermission)設置業(yè)務角色可以訪問哪些數據。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDintbizRoleId角色IDintfieldName過濾字段名intfieldValue過濾字段值int業(yè)務角色字段權限(BizRoleFieldPermission)設置業(yè)務角色可以訪問模塊的哪些字段。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDintbizRoleId角色IDintmoduleCode模塊編號intfieldList字段列表varchar(1000)系統(tǒng)輔助數據模型主要包含一些非核心的功能快速查詢視圖(Quickview)注:1、復合條件間不支持部分AND和部分OR的情況,用戶操作和體驗上太復雜。通過保存填寫的查詢條件和內容呈現(xiàn)方式并映射到一個視圖上,用戶無需每次反復填寫查詢條件而只用選擇一個視圖,實現(xiàn)查詢結果的快速過濾和內容的動態(tài)輸出。視圖有兩種:一種是Public的,所有人都能看到;一種是用戶Private的,只有創(chuàng)建的人才能看到一個視圖包含2部分內容:查詢條件:對應常規(guī)查詢條件提供簡單的單字段查詢;高級查詢則提供用戶自行組合所有可能的字段作為查詢條件,比較方式包括:等于(=)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、包含(like)、不包含(notlike)、開始為(like%)。多個查詢條件整體有一個規(guī)則:“匹配以下所有條件”或“匹配以下任意條件”。對于時間類型,還包括一些特殊的條件,如:按年、按月、按日對于字典等集合數據,值需由用戶選擇而不是輸入動態(tài)表格呈現(xiàn):由用戶自行定義需要呈現(xiàn)的列,哪些是默認的,默認的在視圖打開時直接呈現(xiàn),此外所有列都可以通過選擇實時加入到表格中。列與列之間的順序也可以調整。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDINTname名稱VARCHAR(20)視圖名descr描述VARCHAR(200)詳細描述,作為tip浮動顯示moduleCode模塊標號VARCHAR(50)模塊編號,用來過濾publicFlag開放標志BOOLEANadvancedFlag是否高級查詢標志BOOLEANcreateBy創(chuàng)建人INT系統(tǒng)初始化時創(chuàng)建的默認視圖自動賦給創(chuàng)始人createDatetime創(chuàng)建時間DATETIMEupdateDatetime更新時間DATETIME簡單查詢條件(QuickviewFilter)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDINTqvId快速視圖IDINTfieldName名稱VARCHAR(20)視圖名fieldType字段類型VARCHAR(20)對于特殊類型的字段,字段值也是特殊的,需要經過處理后輸出,如:today為當天的日期,thismonth需要根據當前所在月進行計算后獲得fieldValue字段值VARCHAR(200)特殊字段類型:通過特殊字段類型來識別是否需要做翻譯處理today:當前日期thismonth:當前月份thisyear:當前年份me:當前用戶ID高級動態(tài)查詢條件(QuickviewAdvFilter)由用戶在所有可選的查詢字段中,選擇需要的查詢字段,然后選擇條件符號,輸入條件值,最終動態(tài)構造所需的查詢條件組合。由于該功能操作復雜,查詢效率低,僅作為高級查詢使用。注:相同的字段之間采用OR連接,不同的字段間采用AND連接屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDINTqvId快速視圖IDINT外鍵關聯(lián)fieldName名稱VARCHAR(50)字段名稱symbol符號VARCHAR(10)運算符fieldType字段類型VARCHAR(20)對于特殊類型的字段,字段值也是特殊的,需要經過處理后輸出,如:today為當天的日期,thismonth需要根據當前所在月進行計算后獲得fieldValue字段值VARCHAR(200)表格呈現(xiàn)(QuickviewGrid)注:表格定義目前僅定義在META配置文件中,暫不提供租戶個性化或用戶個性化的配置,后續(xù)可考慮實現(xiàn)。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDINTqvId快速視圖IDINTcolumnName名稱VARCHAR(20)視圖名format格式化樣式VARCHAR(200)position列順序INT最終效果附件(Attachment)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成uid唯一IDStringUUIDtenantId租戶idintmoduleCode模塊編號String模塊使用時通過該值過濾recordId數據記錄IDint關聯(lián)具體數據recordUid記錄唯一IDVARCHAR(36)由程序在頁面進入時生成,對于新增記錄,在上傳附件時由于無法獲得記錄ID導致無法保存,通過程序生成ID可在保存業(yè)務記錄時更新所有該UID的記錄的recordId為真實IDdisplayName顯示名稱(原文件名)VARCHAR(100)fileName現(xiàn)文件名VARCHAR(100)filePath文件路徑VARCHAR(200)相對HOME.PATH的路徑fileSize文件大小DECIMAL(10,2)友好顯示名,如1.5GBcreateDatetime創(chuàng)建時間DatecreateBy創(chuàng)建人intupdateDatetime更新時間DateupdateBy更新人int自動編號(AutogenCode)注:current_date是mysql保留字,因此使用cur縮寫屬性名含義數據類型備注id序號,主鍵String模塊編號-租戶IDtenantId租戶IDintmoduleCode模塊編號varchar(50)對應模塊的英文名:customercustContactscustContactLogtasktopiccurNo當前流水號INTcurDate當前日期DATErules規(guī)則VARCHAR(2000)規(guī)則的JSON格式存儲updateBy更新用戶INTupdateDatetime更新時間DATE標簽(Tag)標簽為典型的多對多關系,為了有效提高查詢效率(標簽的作用主要就是查詢),標簽與記錄的關系仍采用關聯(lián)表,通過數據庫索引提高效率。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶idINTmoduleCode模塊編號VARCHAR(50)對于一個模塊需要多個類型標簽,采用moduleCode+type的字符串name名稱VARCHAR(20)style標簽樣式VARCHAR(200)CSS呈現(xiàn)樣式userDefined是否用戶自定義BOOLEAN用戶自定義的才允許刪除createDatetime創(chuàng)建時間Datetime標簽關聯(lián)數據表(TagAssoc)記錄標簽與數據的關聯(lián)關系,用于通過標簽查詢數據時利用數據庫的索引。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶idinttagId標簽IDintrecordId記錄IDint數據關聯(lián)(DataAssoc)定義兩個業(yè)務模塊之間的關聯(lián)關系,可以是一對一,也可以是一對多。雙向關聯(lián)時存儲兩條記錄屬性名含義數據類型備注id序號,主鍵IntegertenantId租戶IDINTrecordAId數據AIDINTmoduleACode模塊A編號VARCHAR(50)網盤話題智庫客戶財務recordZId數據ZIDINTmoduleZCode模塊ZVARCHAR(50)網盤話題智庫客戶財務createBy創(chuàng)建用戶INTcreateDatetime創(chuàng)建時間DATETIME用戶評論(UserComment)統(tǒng)一存放各模塊的用戶評論,可附加到具體的模塊中。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDintrecordId記錄IDintmoduleCode模塊編號varchar(50)對應模塊的英文名:customercustContactscustContactLogtasktopiccontent內容varchar(2000)createBy創(chuàng)建用戶IDintcreateDatetime創(chuàng)建時間Date用戶收藏(UserFavourite)記錄用戶對各業(yè)務中其關心數據的收藏信息。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDINT個人文檔填0moduleCode模塊編號VARCHAR(50)recordId數據IDINT關聯(lián)業(yè)務數據的IDparams業(yè)務數據參數VARCHAR(2000)必要時進行數據處理,采用JSON格式進行保存createBy操作人INTcreateDatetime操作時間DATETIME用戶Portal小組件表(UserPortlet)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成portletUid小組件IDVARCHAR(50)userId用戶IDINTname名稱VARCHAR(50)positionX小組件行位置INTpositionY小組件列位置INTtheme主題VARCHAR(50)配色refreshInterval刷新間隔(秒)INT每隔指定周期刷新portal的數據等于0表示不刷新multiple是否支持多個實例BOOLEAN有些組件僅支持單個params動態(tài)參數VARCHAR(4000)JSON格式的參數createDatetime創(chuàng)建時間DATETIME用戶抄送(UserCopyTo)業(yè)務記錄抄送給用戶的情況,抄送同時發(fā)送消息通知到該用戶提醒其查看。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDINT個人文檔填0moduleCode模塊編號VARCHAR(50)recordId數據IDINT關聯(lián)業(yè)務數據的IDcopyToUsers抄送給成員VARCHAR(4000)成員ID,多個用逗號分隔copyToGroups抄送給組織VARCHAR(4000)組織ID,多個用逗號分隔viewUsers接收并查看用戶VARCHAR(4000)記錄訪問記錄的用戶createBy操作人INTcreateDatetime操作時間DATETIME省市區(qū)域表(District)6位省市區(qū)編碼作為ID屬性名含義數據類型備注id序號,主鍵IntegerparentId父節(jié)點INTname名稱VARCHAR(100)shortName簡稱VARCHAR(50)pinyin拼音VARCHAR(100)用于首字母過濾等level深度INTposition排序INTlng經度DECIMAL(10,6)lat緯度DECIMAL(10,6)消息中心數據模型用戶消息訂閱(UserMessageSub)用戶自定義消息訂閱,一種消息只能訂閱一次;屬性名含義數據類型備注id訂閱號,主鍵INTtenantId租戶IDINTmoduleCode模塊編號VARCHAR(50)可按模塊編號過濾或分組messageCode消息編號VARCHAR(50)可按消息編號過濾或分組channels消息接收通道VARCHAR(100)多選項以逗號分隔UIEMAILSMSWECHATenablePopup是否彈框提醒BOOLEAN對于緊急消息,可通過自動彈框提醒createBy創(chuàng)建用戶INTcreateDatetime創(chuàng)建時間DATETIME用戶一般消息(UserMessage)接收到的自己訂閱的消息,這些消息通常由系統(tǒng)生成,無發(fā)送人。屬性名含義數據類型備注id序號,主鍵LONG由數據庫自動生成tenantId租戶IDINTmoduleCode模塊編號VARCHAR(50)可按模塊編號過濾或分組messageCode消息編號VARCHAR(50)可按消息編號過濾或分組recordId業(yè)務記錄IDINTcontent內容VARCHAR(2000)需控制消息內容,故無需TEXT類型content_text純文本內容VARCHAR(2000)給不支持HTML的UI使用params參數VARCHAR(4000)JSON格式,只存屬性,呈現(xiàn)時再根據模板動態(tài)組織popup是否彈框提醒BOOLEAN緊急的消息可以彈框提醒createDatetime創(chuàng)建時間DATETIMEreceiveBy接收用戶INThasReceived是否已讀BOOLEANreceiveDatetime接收時間DATETIME用戶推送消息(UserPushMessage)主動推送消息給目標群組或用戶,由發(fā)送人指定消息通道,這種消息通常由人觸發(fā)有發(fā)布人,屬通告類消息,需要知道接收人的閱讀狀態(tài)。。屬性名含義數據類型備注id序號,主鍵INT由數據庫自動生成tenantId租戶IDINTmoduleCode模塊編號VARCHAR(50)可按模塊編號過濾或分組recordId業(yè)務記錄IDINT通過業(yè)務記錄可以查詢消息messageCode消息編號VARCHAR(50)可按消息編號過濾或分組channels消息接收通道VARCHAR(100)多選項以逗號分隔UIEMAILSMSWECHATAPPreceiveGroups接收群組VARCHAR(2000)多個用逗號分隔receiveUsers接收人VARCHAR(2000)多個用逗號分隔短信發(fā)送日志(SmsOut)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDIntsender發(fā)件人Stringreceiver收件人Stringcontent內容StringsendFlag發(fā)送標志booleancreateBy創(chuàng)建人int0表示系統(tǒng)創(chuàng)建createDatetime創(chuàng)建時間DatesendDatetime發(fā)送時間Date短信接收日志(SmsIn)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDIntsender發(fā)件人Stringreceiver收件人Stringcontent內容StringcreateDatetime創(chuàng)建時間Date通知公告(Affiche)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDINTtype類型int1:公告2:新聞3:通知iconType圖標類型VARCHAR(10)圖標樣式thumb縮略圖VARCHAR(200)title標題VARCHAR(100)content內容TEXTtemplateName頁面模板名稱VARCHAR(50)可通過不同頁面模板裝飾頁面expiredDate過期日期DateisChecked是否已審核BooleancreateBy創(chuàng)建用戶intcreateDatetime創(chuàng)建時間DateupdateBy更新用戶intupdateDatetime更新時間Date通知公告統(tǒng)計(AfficheStat)屬性名含義數據類型備注id即AfficheIDINTtenantId租戶IDINTviewTimes查閱數INTcollectTimes收藏數INTdownloadTimes下載數INTlikeTimes頂次數INThateTimes踩次數INTreplyTimes回復次數INT用戶反饋(Feedback)記錄用戶反饋的各種建議、意見、報障等信息。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDinttype類型int1:建議2:投訴3:故障content內容textreply反饋內容textcreateBy創(chuàng)建人intcreateDatetime創(chuàng)建時間DatereplyBy反饋人intreplyDatetime反饋時間Date用戶事件(UserEvent)由各類業(yè)務事件產生的消息,通過統(tǒng)一的消息通道轉換后,以系統(tǒng)動態(tài)的方式進行呈現(xiàn),便于當前登錄用戶及時獲知最新變化。屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶INTINTuserId所屬用戶INT當為0時表示系統(tǒng)消息,所有人可見,否則僅所屬用戶可見moduleCode模塊編號VARCHAR(50)對應模塊的英文名params參數VARCHAR(4000)JSON格式,只存屬性,呈現(xiàn)時再根據模板動態(tài)組織content消息內容TEXT渲染后的內容,支持HTMLcreateDatetime創(chuàng)建時間DATETIME個人事務數據模型記事本(Note)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成title標題Stringcontent內容StringcreateUserId創(chuàng)建人intcreateDatetime創(chuàng)建時間DateupdateDatetime更新時間Date代辦事項(Todo)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成content內容VARCHAR(500)最多輸入200個字status狀態(tài)(2101)int-2:推遲-1:取消1:未開始2:正在進行3:完成isNeedRemind是否需要提醒BOOLEANisPublic是否公開BOOLEAN通過公開,將個人待辦分享給他人獲知,有助于團隊成員間狀態(tài)的相互了解remindAt提醒時間INT負數:不提醒0:準時大于0:分鐘todoDatetime代辦時間Date通過該字段過濾和排序tags場景標簽VARCHAR(200)最對設置5個標簽createBy創(chuàng)建人intcreateDatetime創(chuàng)建時間DateupdateDatetime更新時間DateiconUrl圖標VARCHAR(200)個人網盤(ShareFile)注:復用網盤表結構,通過createBy等于當前登錄用戶,并且tenantId等于0過濾數據即可。聯(lián)系人(Contacts)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成name名稱Stringgender性別int0-unknown1-male2-femalemobile手機號Stringemail電子郵件Stringphone聯(lián)系電話Stringfax傳真號Stringaddress聯(lián)系地址StringzipCode郵編Stringremark備注StringisFav是否常用booleancreateBy創(chuàng)建人intcreateDatetime創(chuàng)建時間DateupdateDatetime更新時間Date聯(lián)系人分組(ContactsGroup)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成name名稱StringcreateBy創(chuàng)建人intcreateDatetime創(chuàng)建時間updateDatetime更新時間Date聯(lián)系人分組成員(ContactsGroupMember)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成contactsId聯(lián)系人IDintgroupId分組IDintcreateBy創(chuàng)建人intcreateDatetime創(chuàng)建時間Date運營中心數據模型報表分類(ReportCatalog)預留,暫不實現(xiàn)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成title標題Stringcontent內容StringcreateUserId創(chuàng)建人intcreateDatetime創(chuàng)建時間DateupdateDatetime更新時間Date報表模版報表實例(Report)屬性名含義數據類型備注id序號,主鍵Integer由數據庫自動生成tenantId租戶IDINTcatalogId分類IDINTcode編號VARCHAR(50)默認系統(tǒng)自動生成name名稱VARCHAR(100)confUrl配置文件路徑VARCHAR(200)templateUrl模板文件路徑VARCHAR(200)cacheable是否緩存BOOLEANstatus狀態(tài)INTdescr描述VARCHAR(2000)報表訂閱(ReportSubscribe)用戶可訂閱指定報表,報表定期生成后自動推送給用戶。Framework設計分布式分布式Web集群應無狀態(tài),使得請求可以發(fā)送給任一服務器做處理,同時后臺定時任務應剝離,避免重復處理。分布式系統(tǒng)容錯Hystrix供分布式系統(tǒng)使用,提供延遲和容錯功能,隔離遠程系統(tǒng)、訪問和第三方程序庫的訪問點,防止級聯(lián)失敗,保證復雜的分布系統(tǒng)在面臨不可避免的失敗時,仍能有其彈性。Hystrix使用命令模式HystrixCommand(Command)包裝依賴調用邏輯,每個命令在單獨線程中/信號授權下執(zhí)行。可配置依賴調用超時時間,超時時間一般設為比99.5%平均時間略高即可.當調用超時時,直接返回或執(zhí)行fallback邏輯。為每個依賴提供一個小的線程池(或信號),如果線程池已滿調用將被立即拒絕,默認不采用排隊.加速失敗判定時間。依賴調用結果分:成功,失敗(拋出異常),超時,線程拒絕,短路。請求失敗(異常,拒絕,超時,短路)時執(zhí)行fallback(降級)邏輯。提供熔斷器組件,可以自動運行或手動調用,停止當前依賴一段時間(10秒),熔斷器默認錯誤率閾值為50%,超過將自動運行。提供近實時依賴的統(tǒng)計和監(jiān)控分布式Session(SNA)在多用戶高并發(fā)環(huán)境下,單臺Web服務器的處理能力有限,當需要增加Web服務器實現(xiàn)水平集群擴展實現(xiàn)高可用性的話,用戶狀態(tài)的共享處理就成了難點,早先的做法是通過Web服務器的Session復制,實現(xiàn)不同服務器間的會話共享,然而高昂的復制成本、低下的復制效率、有限的擴展能力使得該方案無法有效解決海量用戶高并發(fā)環(huán)境。關鍵點:集中式:通過Memcached或者Redis實現(xiàn)集群環(huán)境下Session緩存和共享;同時在Session失效或者服務器集群減少時能有效的清除過期緩存。高可用:通過主備實現(xiàn)Cache高可用;無狀態(tài):通過cookie記錄用戶登錄狀態(tài),由客戶端瀏覽器維持狀態(tài),而不是Web服務器;不再使用Web服務器提供的Session管理,Web服務器無狀態(tài)以實現(xiàn)水平擴展;安全性:通過附加時間戳和對cookie加密,實現(xiàn)數據傳遞的安全性;通過數字簽名實現(xiàn)對篡改數據的校驗;負載均衡:各個服務器的負載相當,請求被合理的調度;StickySession、Non-stickySession和ReplicatedSessionsStickySessions:粘性會話。即同一個會話中的請求必須被轉發(fā)到同一個節(jié)點上,除非該節(jié)點宕機才轉發(fā)到故障轉移節(jié)點。一個節(jié)點宕機,所存儲的Sessions完全丟失。通俗的話就是,將用戶“粘”在某一個服務器節(jié)點上。Non-StickySessions:非粘性會話。每一次請求都可能轉發(fā)到不同節(jié)點。ReplicatedSessions:把一個節(jié)點上的Sessions復制到集群的其他節(jié)點上,防止數據丟失,允許失效無縫轉移。如node0復制到node5,node1復制到node6,以此類推。多數應用服務器(如Tomcat)都支持會話復制機制?;赯ooKeeper集群的分布式Session方案要解決基于memcache方案的數據丟失問題,可以引入持久化存儲介質

ZooKeeper(下面簡稱ZK)。依托于ZK的一致性復制(在多個副本間保證數據的強一致性)和容錯能力,結合上面的MSM思想,由ZK負責session數據的存儲,而我們自己實現(xiàn)的sessionmanager將負責session生命周期的管理。基于Cookie的分布式SessionIdcookieValue:userId+clientIp+timestamp+expiry如果返回的Cookie值不為null,則有3種可能性:其一,已經實例化過一個Session對象并且可以正常使用;其二,雖然已經實例化過了,但是可能此Session已經超時失效;其三,分布式環(huán)境中的其他子系統(tǒng)已經實例化過了,但是本系統(tǒng)中還未實例化過此Session對象。問題瀏覽器關閉再打開,由于是通過cookie判斷的,仍然會是登陸狀態(tài)。SessionID的生成SessionID由Web服務器生成,對單個服務器來說是唯一的,但是集群環(huán)境無法保障,需要有效的算法重算sessionId。緩存中session的失效機制Session是有生命周期的,當Session的空閑時間(maxIdle屬性值)超出限制時,Session就失效了,這種設計主要是考慮到了Web容器的可靠性。當一個系統(tǒng)有上萬人使用時,就會產生上萬個Session對象,由于HTTP的無狀態(tài)特性,服務器無法確切的知道用戶是否真的離開了系統(tǒng)。因此如果沒有失效機制,所有被Session占據的內存資源將永遠無法被釋放,直到系統(tǒng)崩潰為止。在分布式環(huán)境下,Session被簡單的創(chuàng)建,并且通過某種機制被復制到了其他系統(tǒng)中。你無法保證每個子系統(tǒng)的時鐘都是一致的,可能相差幾秒,甚至相差幾分鐘。當某個Web容器的Session失效時,可能其他的子系統(tǒng)中的Session并未失效,這時會產生一個有趣的現(xiàn)象,一個用戶在各個

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論