詳細(xì)設(shè)計(jì)說(shuō)明書(shū)(SaaS)_第1頁(yè)
詳細(xì)設(shè)計(jì)說(shuō)明書(shū)(SaaS)_第2頁(yè)
詳細(xì)設(shè)計(jì)說(shuō)明書(shū)(SaaS)_第3頁(yè)
詳細(xì)設(shè)計(jì)說(shuō)明書(shū)(SaaS)_第4頁(yè)
詳細(xì)設(shè)計(jì)說(shuō)明書(shū)(SaaS)_第5頁(yè)
已閱讀5頁(yè),還剩83頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

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

處理分派給自己的客戶服務(wù)。

對(duì)處理的服務(wù)進(jìn)行反饋。

創(chuàng)建銷售機(jī)會(huì)。

對(duì)特定銷售機(jī)會(huì)制定客戶開(kāi)發(fā)計(jì)劃。

執(zhí)行客戶開(kāi)發(fā)計(jì)劃。

對(duì)負(fù)責(zé)的流失客戶采取“暫緩流失”或“確定流失”的措施銷售主管(內(nèi)部)對(duì)客戶服務(wù)進(jìn)行分配。

創(chuàng)建銷售機(jī)會(huì)。

對(duì)銷售機(jī)會(huì)進(jìn)行指派。

對(duì)特定銷售機(jī)會(huì)制定客戶開(kāi)發(fā)計(jì)劃。

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

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

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

數(shù)據(jù)個(gè)性化在實(shí)際應(yīng)用中,不同租戶之間需求的差異導(dǎo)致系統(tǒng)需要針對(duì)不同租戶保存許多擴(kuò)展性數(shù)據(jù)。在傳統(tǒng)應(yīng)用中,可以通過(guò)定制實(shí)例,增加客戶的擴(kuò)展數(shù)據(jù),來(lái)滿足其個(gè)性化要求。在多租戶SaaS應(yīng)用中,所有租戶都使用同一個(gè)數(shù)據(jù)架構(gòu),常見(jiàn)的解決辦法就是實(shí)現(xiàn)擴(kuò)展數(shù)據(jù)的可配置。名稱值對(duì)的方式將擴(kuò)展數(shù)據(jù)的保存和原數(shù)據(jù)表分離,另外用一個(gè)統(tǒng)一的擴(kuò)展數(shù)據(jù)表來(lái)保存。擴(kuò)展數(shù)據(jù)表將數(shù)據(jù)表的橫向擴(kuò)展列轉(zhuǎn)換為縱向的數(shù)據(jù)集,將每一條原始數(shù)據(jù)記錄的一個(gè)擴(kuò)展字段,都保存成一條擴(kuò)展數(shù)據(jù)行。將數(shù)據(jù)表中的數(shù)據(jù)記錄與配置元數(shù)據(jù)表中的配置記錄關(guān)聯(lián),構(gòu)成擴(kuò)展數(shù)據(jù)記錄??梢蕴峁o(wú)限數(shù)量的自定義擴(kuò)展字段。

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

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

原子功能劃分

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

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

每個(gè)功能都是有價(jià)值的;

每個(gè)功能都是不可再細(xì)分;

功能間互不重疊;

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

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

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

功能包設(shè)計(jì)

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論