




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
廈門東南融通系統(tǒng)工程有限公司廈門東南融通系統(tǒng)工程有限公司煙草資金監(jiān)管平臺(tái)架構(gòu)設(shè)計(jì)說明書廈門東南融通系統(tǒng)工程有限公司版權(quán)所有廈門東南融通系統(tǒng)工程有限公司版權(quán)所有廈門東南融通系統(tǒng)工程有限公司版權(quán)所有?東南融通。本文獻(xiàn)未經(jīng)東南融通的書面允許不得復(fù)制或分發(fā)。本文獻(xiàn)中的任何部分都不得用于東南融通意愿以外的其他目的目錄1 簡(jiǎn)介 51.1 目的 51.2 范圍 51.3 術(shù)語(yǔ) 61.4 參考文檔 61.5 文檔組織方式 62 系統(tǒng)總體架構(gòu) 82.1 產(chǎn)品特點(diǎn) 82.2 設(shè)計(jì)指導(dǎo)思想 82.3 系統(tǒng)邏輯架構(gòu) 102.4 系統(tǒng)應(yīng)用架構(gòu) 112.5 系統(tǒng)物理架構(gòu) 132.6 與業(yè)務(wù)系統(tǒng)的關(guān)系 142.7 與銀行系統(tǒng)的關(guān)系 142.7.1 連接示意圖 142.7.2 接口關(guān)系圖 153 應(yīng)用框架設(shè)計(jì) 173.1 技術(shù)框架 173.2 界面設(shè)計(jì) 173.2.1 登陸參考 183.2.2 首頁(yè)參考 193.2.3 新增頁(yè)面 193.2.4 修改頁(yè)面 193.2.5 審批頁(yè)參考 203.2.6 查詢頁(yè)參考 213.3 類設(shè)計(jì) 213.4 模塊劃分 223.5 功能菜單 234 基礎(chǔ)功能設(shè)計(jì) 264.1 組織模型 264.2 權(quán)限控制 274.2.1 菜單權(quán)限控制 274.2.2 操作權(quán)限控制 284.2.3 數(shù)據(jù)權(quán)限控制 294.3 流程控制 294.3.1 流程功能概述 304.3.2 工作流的使用 314.3.3 工作流的集成 314.3.4 系統(tǒng)流程設(shè)計(jì) 314.3.5 流程解決框架 324.3.6 流程基本操作 334.4 規(guī)則解決 384.4.1 開發(fā)過程 384.4.2 規(guī)則定義 394.4.3 規(guī)則執(zhí)行 394.5 消息服務(wù) 394.5.1 功能描述 394.5.2 郵件發(fā)送 404.5.3 短信發(fā)送 404.5.4 發(fā)送維護(hù) 424.5.5 接口類設(shè)計(jì) 424.6 通訊網(wǎng)關(guān) 444.6.1 連接方式 444.6.2 功能描述 444.6.3 技術(shù)框架 464.6.4 接口類設(shè)計(jì) 464.7 任務(wù)調(diào)度 484.7.1 功能描述 484.7.2 解決方案 484.7.3 應(yīng)用示例 494.7.4 配置說明 504.7.5 任務(wù)清單 514.8 報(bào)表開發(fā) 514.8.1 報(bào)表設(shè)計(jì) 514.8.2 報(bào)表種類 524.8.3 報(bào)表清單 534.8.4 報(bào)表打印 535 數(shù)據(jù)同步設(shè)計(jì) 546 安全性設(shè)計(jì) 566.1 方案概述 566.2 權(quán)限控制 566.3 CA認(rèn)證 566.4 登陸日記 566.5 操作痕跡 566.6 審批痕跡 586.7 Server端校驗(yàn) 587 性能設(shè)計(jì) 608 客戶化設(shè)計(jì) 618.1 改變監(jiān)管規(guī)則 618.2 改變業(yè)務(wù)流程 618.3 外圍系統(tǒng)連接定制 618.4 改變數(shù)據(jù)庫(kù)類型 618.5 改變組織數(shù)據(jù)來源 619 開發(fā)規(guī)范 639.1 Java編程規(guī)范 639.2 數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范 649.3 文獻(xiàn)命名規(guī)范 659.4 頁(yè)面樣式規(guī)范 669.5 頁(yè)面開發(fā)規(guī)范 669.6 后臺(tái)程序規(guī)范 689.7 文檔規(guī)范 709.8 序列號(hào)的獲取 719.9 異常解決 719.9.1 JSP頁(yè)面異常 719.9.2 Action異常 719.9.3 DAO和Service層的異常 729.9.4 異常編程指導(dǎo) 729.10 錯(cuò)誤消息 729.11 事務(wù)解決 739.12 目錄結(jié)構(gòu) 739.13 配置文獻(xiàn) 749.14 開發(fā)指導(dǎo) 759.15 第三方軟件 7510 環(huán)境搭建 7810.1 開發(fā)環(huán)境 7810.2 調(diào)試環(huán)境 7810.3 開發(fā)基礎(chǔ)數(shù)據(jù)環(huán)境 7910.4 外部系統(tǒng)模擬環(huán)境 79附錄1:開發(fā)軟件和工具 81附錄2:公共資源管理 82附錄3:文檔變更記錄 83簡(jiǎn)介本文檔為煙草資金監(jiān)管平臺(tái)的軟件架構(gòu)設(shè)計(jì)說明書。本文檔與“煙草資金監(jiān)管基礎(chǔ)平臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì)說明書.doc”和“煙草資金監(jiān)管系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)說明書.doc”一起構(gòu)成本系統(tǒng)的概要設(shè)計(jì)文檔體系。目的本文檔為煙草資金監(jiān)管平臺(tái)的軟件架構(gòu)設(shè)計(jì)提供具體的說明,涉及整個(gè)系統(tǒng)的架構(gòu)、基礎(chǔ)平臺(tái)的技術(shù)實(shí)現(xiàn)、客戶化方式和指導(dǎo)應(yīng)用開發(fā)的相關(guān)規(guī)范等。本架構(gòu)書為編制如下文檔提供基本依據(jù):程序設(shè)計(jì)書軟件開發(fā)計(jì)劃軟件測(cè)試計(jì)劃軟件用戶手冊(cè)系統(tǒng)安裝手冊(cè)本架構(gòu)書與本系統(tǒng)的“程序設(shè)計(jì)書”一起,為編寫程序、單元測(cè)試、集成測(cè)試(α測(cè)試)提供基本依據(jù);本架構(gòu)書為其它有關(guān)文獻(xiàn)提供基本依據(jù);本架構(gòu)書為軟件質(zhì)量保證人員提供工作依據(jù);本架構(gòu)書將作為軟件β測(cè)試和系統(tǒng)驗(yàn)收的準(zhǔn)則;本架構(gòu)書與本系統(tǒng)的“程序設(shè)計(jì)書”一起,將作為編碼的基準(zhǔn)文獻(xiàn)。范圍本設(shè)計(jì)書從技術(shù)角度定義了本系統(tǒng)的架構(gòu),內(nèi)容涵蓋了本系統(tǒng)的設(shè)計(jì)思想、軟件體系結(jié)構(gòu)、軟件功能模塊分解及邊界設(shè)計(jì)、應(yīng)用框架設(shè)計(jì)、與外圍系統(tǒng)地連接解決、開發(fā)規(guī)范等。對(duì)本系統(tǒng)使用的重要技術(shù),如PowerWeb、工作流、規(guī)則技術(shù)、Jasper等)也做了簡(jiǎn)要介紹。本系統(tǒng)中硬件設(shè)備和網(wǎng)絡(luò)設(shè)備的設(shè)計(jì)以及軟件具體設(shè)計(jì)部分不在本規(guī)格之內(nèi)。術(shù)語(yǔ)PowerWeb:是東南融通開發(fā)的一個(gè)Web界面開發(fā)平臺(tái)。intelliRule:是東南融通開發(fā)的規(guī)則系統(tǒng),可實(shí)現(xiàn)規(guī)則的編輯、編譯和執(zhí)行。JasperReports:開放源碼的報(bào)表生成工具,用戶需要按照它制定的規(guī)則編寫報(bào)表格式的XML模板文獻(xiàn),然后指定數(shù)據(jù)源得到導(dǎo)出的報(bào)表文獻(xiàn)。iReport:一個(gè)幫助那些使用JasperReportslibrary生成報(bào)表的用戶以可視化方式設(shè)計(jì)報(bào)表的工具。Hibernate:HibernateO-Rmappingtools,由.org提供,用于數(shù)據(jù)層的開發(fā)。Spring:Spring-Java/J2EEApplicationFramework,由.org提供,用于業(yè)務(wù)邏輯層的開發(fā)。工作流引擎:解釋業(yè)務(wù)流程的定義,與工作流的參與者(涉及人或軟件)互相作用,并根據(jù)需要調(diào)用其它的IT系統(tǒng)、應(yīng)用、或者數(shù)據(jù)。規(guī)則引擎:對(duì)業(yè)務(wù)規(guī)則進(jìn)行解釋。是一種高性能的專用解釋(推理)程序。把當(dāng)前提交給引擎的數(shù)據(jù)對(duì)象與加載在引擎中的業(yè)務(wù)規(guī)則進(jìn)行匹配,符合當(dāng)前數(shù)據(jù)狀態(tài)下的業(yè)務(wù)規(guī)則會(huì)被激活,根據(jù)業(yè)務(wù)規(guī)則中聲明的執(zhí)行邏輯,觸發(fā)相應(yīng)的操作。tfm:tobaccofundmonitor煙草資金管理系統(tǒng)參考文檔煙草資金監(jiān)管平臺(tái)系統(tǒng)需求規(guī)格書.docCMBP演示系統(tǒng),(admin/admin@cmbp)文檔組織方式第二章關(guān)注的是整個(gè)系統(tǒng)的內(nèi)外部環(huán)境以及各相關(guān)要素之間的關(guān)系。第三章關(guān)注的是整個(gè)系統(tǒng)提供的具體功能、展現(xiàn)形式和功能實(shí)現(xiàn)的技術(shù)框架。第四章關(guān)注的是基礎(chǔ)平臺(tái)部分的功能實(shí)現(xiàn)思想以及實(shí)現(xiàn)的技術(shù)框架。第五章關(guān)注的是本系統(tǒng)的數(shù)據(jù)和外圍系統(tǒng)的數(shù)據(jù)庫(kù)的數(shù)據(jù)如何同步和更新。第六章和第七章關(guān)注的是兩個(gè)重要的非功能性需求如何實(shí)現(xiàn),即安全性和性能。第八章是對(duì)需要客戶化的幾個(gè)問題的方案概述。第九章是指導(dǎo)開發(fā)人員開發(fā),保證設(shè)計(jì)的一致性和代碼具有良好的可讀性,保證開發(fā)能規(guī)范有序地進(jìn)行的一些指導(dǎo)和規(guī)定。第十章是指導(dǎo)開發(fā)人員搭建開發(fā)和調(diào)試環(huán)境,也可了解未來該系統(tǒng)如何部署。系統(tǒng)總體架構(gòu)本章將從技術(shù)角度闡述本系統(tǒng)的定位、設(shè)計(jì)思想、邏輯架構(gòu)、應(yīng)用架構(gòu)、物理架構(gòu)以及需要交互的外圍系統(tǒng)。本章是后續(xù)章節(jié)的編制依據(jù)。產(chǎn)品特點(diǎn)采用了先進(jìn)的J2EE技術(shù)架構(gòu),保證系統(tǒng)的可擴(kuò)展性、安全性、可靠性。安全、高效的電子支付平臺(tái),全面掌握行業(yè)資金流動(dòng)情況。全新的多方位的監(jiān)督理念,涉及設(shè)立行業(yè)公司帳戶庫(kù)、流程控制點(diǎn)、流水帳管理、多渠道的帳目對(duì)照、實(shí)時(shí)報(bào)警。三級(jí)體系,兩級(jí)監(jiān)管,組成一個(gè)貫穿事前、事中、事后的全方位資金監(jiān)管體系。界面和諧,B/S結(jié)構(gòu)的界面,C/S的應(yīng)用效果,新鮮直觀,操作方便。統(tǒng)一的接口規(guī)范,靈活的的對(duì)外接口和報(bào)文配置,方便對(duì)接不同的業(yè)務(wù)系統(tǒng)和銀行系統(tǒng)。實(shí)時(shí)警示,報(bào)警方式靈活選擇,報(bào)警內(nèi)容容易定制。功能強(qiáng)大的工作流管理系統(tǒng)和規(guī)則系統(tǒng),業(yè)務(wù)流程和監(jiān)控規(guī)則可以自由調(diào)整,做到隨需應(yīng)變。豐富的圖文并茂的監(jiān)控方式,涉及數(shù)據(jù)表格、柱狀圖、散列圖、儀表圖等,一目了然掌控全局。構(gòu)件化功能組裝,強(qiáng)大、簡(jiǎn)樸的業(yè)務(wù)延伸能力,方便新業(yè)務(wù)的拓展。設(shè)計(jì)指導(dǎo)思想J2EE平臺(tái),B/S結(jié)構(gòu),MVC設(shè)計(jì)模式。J2EE平臺(tái)實(shí)現(xiàn)系統(tǒng)的平臺(tái)無關(guān)性(涉及操作系統(tǒng)無關(guān)性和應(yīng)用服務(wù)器無關(guān)性)。B/S架構(gòu)的優(yōu)點(diǎn)是維護(hù)方便,可以減少成本。采用MVC設(shè)計(jì)模式,使系統(tǒng)具有更大的靈活性和擴(kuò)展性。充足使用已有的軟件資產(chǎn),提高復(fù)用限度,減少開發(fā)成本。在本系統(tǒng)中,使用了公司的研發(fā)產(chǎn)品intelliFlow工作流管理系統(tǒng)和intelliRule規(guī)則系統(tǒng),參考了公司其它項(xiàng)目中的流程解決框架和基于PowerWeb的應(yīng)用框架,修改擴(kuò)展了消息服務(wù)構(gòu)件、通訊網(wǎng)關(guān)構(gòu)件和組織模型維護(hù)。優(yōu)先使用構(gòu)件的組合,以構(gòu)件的思想搭建一個(gè)松耦合的系統(tǒng)。在本系統(tǒng)中,最基礎(chǔ)的功能在bas模塊中,這是所有的基礎(chǔ),在此之上是消息服務(wù)構(gòu)件、通訊網(wǎng)關(guān)構(gòu)件和流程解決框架,這些框架、構(gòu)件、工具庫(kù)和intelliFlow工作流管理系統(tǒng)、intelliRule規(guī)則系統(tǒng)一起構(gòu)成系統(tǒng)的基礎(chǔ)平臺(tái);基于該平臺(tái)開發(fā)3個(gè)應(yīng)用子系統(tǒng)的功能。面向接口編程,實(shí)現(xiàn)可以替換,充足發(fā)揮面向?qū)ο缶幊痰膬?yōu)勢(shì)。面向接口編程的好處是實(shí)現(xiàn)方式容易配置,譬如本系統(tǒng)將來要外接的系統(tǒng)在5個(gè)以上,十分復(fù)雜,特別是組織數(shù)據(jù)也也許取自其它系統(tǒng),將各功能以接口形式提供,就可以在外界有變化時(shí),只需要單獨(dú)實(shí)現(xiàn),而不會(huì)涉及到已有代碼的修改,大大減少測(cè)試的工作量。配置靈活的思想,使有助于產(chǎn)品推廣。保證流程、報(bào)警規(guī)則、消息模板、消息發(fā)送方式、報(bào)文收發(fā)實(shí)現(xiàn)類能方便配置。分層分塊思想,方便開發(fā)和維護(hù)。整個(gè)系統(tǒng)分為基礎(chǔ)平臺(tái)和應(yīng)用功能,基礎(chǔ)平臺(tái)提供應(yīng)用框架和核心技術(shù),應(yīng)用功能重要是在此基礎(chǔ)上實(shí)現(xiàn)業(yè)務(wù)功能,以良好的形式展現(xiàn)。應(yīng)用框架分為流程框架和非流程解決框架,都由表現(xiàn)層、業(yè)務(wù)邏輯層和持久化層組成。對(duì)于構(gòu)件,分為核心功能和擴(kuò)展功能,擴(kuò)展功能在實(shí)行中客戶化;公用組件包里面包含了系統(tǒng)使用的各種公共功能,相對(duì)比較獨(dú)立。通過具體的規(guī)范簡(jiǎn)化應(yīng)用功能的后繼開發(fā),保證設(shè)計(jì)思想和編碼風(fēng)格的一致性。產(chǎn)品最大的問題是由于實(shí)行應(yīng)用的點(diǎn)比較多,各自情況不同樣,導(dǎo)致修改或客戶化的也許性很高,同時(shí)產(chǎn)品生命周期長(zhǎng),參與的開發(fā)人員會(huì)相對(duì)比較多,為應(yīng)對(duì)這一特點(diǎn),本系統(tǒng)通過具體的規(guī)范降來低學(xué)習(xí)成本,提高易維護(hù)限度。系統(tǒng)邏輯架構(gòu)本系統(tǒng)安裝在各省公司和國(guó)家局,各省與國(guó)家局之間的系統(tǒng)完全獨(dú)立,但省與國(guó)家局?jǐn)?shù)據(jù)庫(kù)之間有數(shù)據(jù)同步、上載和下傳活動(dòng)發(fā)生,省之間的數(shù)據(jù)庫(kù)完全獨(dú)立。本系統(tǒng)的角色有監(jiān)管人員、財(cái)務(wù)人員、業(yè)務(wù)人員和系統(tǒng)管理員,不同的角色相應(yīng)系統(tǒng)不同的訪問權(quán)限,一個(gè)人只有一個(gè)角色。其中只有省公司有系統(tǒng)管理員,即系統(tǒng)是統(tǒng)一維護(hù)。本系統(tǒng)的基礎(chǔ)數(shù)據(jù)一部分來于各個(gè)業(yè)務(wù)系統(tǒng)(如協(xié)議信息),一部分在省級(jí)系統(tǒng)中維護(hù)(如人員信息),一部分由國(guó)家局系統(tǒng)維護(hù)后下載到省級(jí)系統(tǒng)使用(如銀行信息)。本系統(tǒng)需要實(shí)時(shí)或定期地從業(yè)務(wù)系統(tǒng)中獲取業(yè)務(wù)數(shù)據(jù),前者如業(yè)務(wù)協(xié)議信息,后者如分公司的銷售數(shù)據(jù)。與銀行系統(tǒng)的連接(如查詢余額)通過國(guó)家局接口連接總行進(jìn)行。本系統(tǒng)的應(yīng)用層將在基于J2EE技術(shù)的東南融通基礎(chǔ)平臺(tái)之上進(jìn)行開發(fā)。并重點(diǎn)使用該平臺(tái)的應(yīng)用開發(fā)框架、頁(yè)面框架集及控件集、流程引擎、規(guī)則引擎和構(gòu)件庫(kù)。關(guān)于這一部分的具體介紹見第4章。本系統(tǒng)的應(yīng)用模塊涉及帳戶管理、運(yùn)營(yíng)監(jiān)管、綜合查詢、煙葉收購(gòu)、兩煙購(gòu)銷等。關(guān)于各功能的具體介紹見3.5節(jié)。系統(tǒng)應(yīng)用架構(gòu)系統(tǒng)應(yīng)用架構(gòu)圖描述系統(tǒng)的組成部分和各個(gè)部分的依賴關(guān)系。系統(tǒng)使用Java語(yǔ)言開發(fā),B/S結(jié)構(gòu),支持的瀏覽器為微軟IE5.0以上PowerWeb開發(fā)平臺(tái)輔助前臺(tái)展現(xiàn)層的實(shí)現(xiàn)規(guī)則引擎負(fù)責(zé)依照監(jiān)管規(guī)則對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行解決工作流引擎負(fù)責(zé)對(duì)業(yè)務(wù)流程進(jìn)行解決Jasper負(fù)責(zé)報(bào)表解決,同時(shí)使用JFreeChar實(shí)現(xiàn)一些特殊圖形的顯示應(yīng)用邏輯層使用Hibernate/iBatis負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行存取,使用Spring負(fù)責(zé)系統(tǒng)各個(gè)部件的組裝以及一些輔助功能系統(tǒng)用到的數(shù)據(jù)庫(kù)為Oracle或DB2,應(yīng)用服務(wù)器為IBM的WebsphereApplicationServer,這是由解決方案決定的。各技術(shù)的選擇理由如下:系統(tǒng)物理架構(gòu)系統(tǒng)部署圖描述系統(tǒng)運(yùn)營(yíng)時(shí)所依賴的硬件環(huán)境,該環(huán)境由節(jié)點(diǎn)和節(jié)點(diǎn)之間的依賴關(guān)系組成。系統(tǒng)為三級(jí)體系、兩級(jí)監(jiān)管,三級(jí)體系指國(guó)家局、省公司、分公司,兩級(jí)監(jiān)管指在國(guó)家局和省局都單獨(dú)安裝本系統(tǒng),對(duì)業(yè)務(wù)進(jìn)行監(jiān)督管理,國(guó)家局和省局之間通過數(shù)據(jù)的上傳和下載保證信息的同步。邏輯上,系統(tǒng)的服務(wù)器涉及Web服務(wù)器、應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器。Web服務(wù)器重要負(fù)責(zé)靜態(tài)頁(yè)面的顯示,應(yīng)用服務(wù)器重要是提供中間層組件、流程引擎和規(guī)則引擎的運(yùn)營(yíng)環(huán)境。當(dāng)數(shù)據(jù)較少時(shí),這些服務(wù)器可安裝在同一臺(tái)機(jī)器上;當(dāng)數(shù)據(jù)量增長(zhǎng)時(shí),這些服務(wù)器可按需要分別安裝在不同的機(jī)器上,Web服務(wù)器、應(yīng)用服務(wù)器還可由多臺(tái)機(jī)器組成集群(Cluster),實(shí)現(xiàn)負(fù)載均衡機(jī)制。原則上數(shù)據(jù)庫(kù)服務(wù)器使用單獨(dú)的機(jī)器。系統(tǒng)的運(yùn)營(yíng)環(huán)境如下:客戶機(jī)/服務(wù)器軟件配置備注客戶端Windows2023ProfessionalIE5.5以上應(yīng)用服務(wù)器WAS5.1.1數(shù)據(jù)庫(kù)服務(wù)器Oracle9i與業(yè)務(wù)系統(tǒng)的關(guān)系本系統(tǒng)與各業(yè)務(wù)系統(tǒng)之間的關(guān)系如下圖:本系統(tǒng)需要從各業(yè)務(wù)系統(tǒng)獲取業(yè)務(wù)數(shù)據(jù),并保存在本系統(tǒng)中,以查詢和記錄。通過通訊網(wǎng)關(guān)實(shí)現(xiàn)外部系統(tǒng)數(shù)據(jù)的獲取,即應(yīng)用模塊提出請(qǐng)求指令,通訊網(wǎng)關(guān)連接外部系統(tǒng),發(fā)送報(bào)文并獲取報(bào)文,應(yīng)用模塊獲取報(bào)文后進(jìn)行其后的數(shù)據(jù)解決,對(duì)外的報(bào)文格式為XML。數(shù)據(jù)是實(shí)時(shí)還是定期從各系統(tǒng)獲取,以及獲取后的解決,待需求細(xì)化后在具體設(shè)計(jì)中體現(xiàn)。與銀行系統(tǒng)的關(guān)系連接示意圖本項(xiàng)目的銀行連接屬于“銀企直聯(lián)”范疇,為實(shí)現(xiàn)與銀行進(jìn)行直聯(lián),必須簽訂《網(wǎng)上“公司銀行”銀企直聯(lián)服務(wù)協(xié)議》,基于該協(xié)議,在本系統(tǒng)的應(yīng)用服務(wù)器上安裝銀企直聯(lián)客戶端,本系統(tǒng)根據(jù)銀行提供的接口說明組織XML報(bào)文,直接調(diào)用銀行提供的API,實(shí)現(xiàn)與銀行的金融數(shù)據(jù)互換,安全問題由銀行負(fù)責(zé)。連接示意圖如下:接口關(guān)系圖本系統(tǒng)需要與銀行系統(tǒng)進(jìn)行連接的業(yè)務(wù)如下:向銀行系統(tǒng)收發(fā)報(bào)文的方式與業(yè)務(wù)系統(tǒng)類似,不同之處在于和業(yè)務(wù)系統(tǒng)打交道時(shí)需要本系統(tǒng)連接業(yè)務(wù)系統(tǒng),而與銀行系統(tǒng)打交道時(shí),連接銀行系統(tǒng)是由其客戶端解決,本系統(tǒng)只是組織XML格式的報(bào)文并調(diào)用客戶端的API。應(yīng)用框架設(shè)計(jì)本章將闡述本系統(tǒng)的應(yīng)用框架、系統(tǒng)的功能菜單、數(shù)據(jù)流轉(zhuǎn)等。本章為Web層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層的設(shè)計(jì)及實(shí)現(xiàn)提供依據(jù)。技術(shù)框架客戶瀏覽器發(fā)出HTTP請(qǐng)求,通過控制器轉(zhuǎn)發(fā)調(diào)用相應(yīng)的業(yè)務(wù)解決模塊來業(yè)務(wù)邏輯,解決的結(jié)果通過控制器相應(yīng)的視圖格式化,返回客戶端瀏覽器呈現(xiàn)給使用者。在頁(yè)面的開發(fā)上,多采用JSPTAG,實(shí)現(xiàn)頁(yè)面元素的重用,所有相同元素統(tǒng)一控制以增強(qiáng)應(yīng)用的可維護(hù)性。業(yè)務(wù)層的設(shè)計(jì)遵循組件化設(shè)計(jì)模式。業(yè)務(wù)邏輯被封裝在業(yè)務(wù)邏輯組件之中,控制器Action通過調(diào)用業(yè)務(wù)邏輯組件的接口來實(shí)現(xiàn)業(yè)務(wù)邏輯解決。當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行解決時(shí),業(yè)務(wù)邏輯組件通過調(diào)用數(shù)據(jù)訪問組件的方法來完畢對(duì)持久數(shù)據(jù)的操作。此外,在業(yè)務(wù)邏輯組件之間的通訊也是通過調(diào)用接口的方式來實(shí)現(xiàn),以保證組件的重用性和擴(kuò)展性。數(shù)據(jù)訪問層遵循DAO設(shè)計(jì)模式,通過Hibernate和iBatis來訪問數(shù)據(jù)庫(kù)。使用Hibernate重要做單表的操作,使用iBatis重要用來實(shí)現(xiàn)復(fù)雜的查詢操作,以優(yōu)化性能。界面設(shè)計(jì)本系統(tǒng)的界面風(fēng)格將參考“煙草資金監(jiān)管演示系統(tǒng)”和PowerWeb的頁(yè)面開發(fā)控件效果,由專業(yè)的美工人員設(shè)計(jì)。如下是設(shè)計(jì)的重要想法,本部分在設(shè)計(jì)完畢后將被替換。登陸參考首頁(yè)參考整個(gè)頁(yè)面分為上,左,右,下四塊,上為常用菜單圖標(biāo)等,下為腳注,右邊開發(fā)人員可自由分割,左為樹形菜單上面的常用菜單和左邊的功能菜單都是動(dòng)態(tài)獲取的需要做分公司、省公司和國(guó)家局的首頁(yè)3套,具體待需求明確后定。打開一個(gè)菜單頁(yè)面時(shí),新的頁(yè)面tab頁(yè)效果顯示新增頁(yè)面略。修改頁(yè)面略。審批頁(yè)參考每個(gè)子系統(tǒng)一個(gè)審批任務(wù)列表每條任務(wù)選中進(jìn)入后為相應(yīng)的業(yè)務(wù)信息和審批信息查詢頁(yè)參考類設(shè)計(jì)業(yè)務(wù)功能實(shí)現(xiàn)的類關(guān)系如下圖:LTActionServlet實(shí)現(xiàn)轉(zhuǎn)發(fā)功能,根據(jù)struts的配置文獻(xiàn)決定流程和頁(yè)面的流轉(zhuǎn),涉及常用數(shù)據(jù)格式的轉(zhuǎn)換。Action中調(diào)用各業(yè)務(wù)邏輯解決,業(yè)務(wù)邏輯的解決實(shí)現(xiàn)依照Spring的框架在XServiceImpl中解決,每個(gè)解決類都相應(yīng)一個(gè)接口類。數(shù)據(jù)層的操作在使用Hibernate時(shí)在XDaoImpl中實(shí)現(xiàn),使用iBatis時(shí),在XSqlDaoImpl中實(shí)現(xiàn),每個(gè)解決類都相應(yīng)一個(gè)接口類。模塊劃分分類模塊代碼模塊名稱基礎(chǔ)平臺(tái)bas基礎(chǔ)功能、非流程框架和工具類庫(kù)org使用工作流組織模型的組織維護(hù)iwf流程解決框架mns消息服務(wù)cgs通訊網(wǎng)關(guān)應(yīng)用功能ssm系統(tǒng)管理和基礎(chǔ)信息account賬號(hào)解決payroll網(wǎng)上支付monitor資金監(jiān)管bulletin公告管理基礎(chǔ)平臺(tái)各部分的關(guān)系如下圖:功能菜單根據(jù)每個(gè)人的權(quán)限動(dòng)態(tài)生成功能菜單,采用樹狀方式顯示。如下是系統(tǒng)的所有功能:一級(jí)菜單二級(jí)菜單三級(jí)菜單系統(tǒng)管理系統(tǒng)設(shè)立權(quán)限管理告知設(shè)立基礎(chǔ)信息行政區(qū)劃組織管理卷煙管理賬戶管理子系統(tǒng)賬戶設(shè)立合作銀行登記合作銀行選擇賬戶種類定義賬戶查詢賬戶信息查詢賬戶余額查詢賬戶審批查詢賬戶種類查詢賬戶申辦賬戶開設(shè)申請(qǐng)銀行開戶辦理賬戶信息變更賬戶銷戶辦理賬戶審批賬戶審批任務(wù)狀態(tài)管理賬戶啟用賬戶停用賬戶凍結(jié)賬戶解凍網(wǎng)上支付子系統(tǒng)資金撥付撥付申請(qǐng)撥付審批資金撥付業(yè)務(wù)支付煙葉收購(gòu)支付煙葉采購(gòu)支付卷煙采購(gòu)支付輔料采購(gòu)支付固定資產(chǎn)采購(gòu)支付費(fèi)用支付人工費(fèi)用支付辦公費(fèi)用支付業(yè)務(wù)費(fèi)用支付物流費(fèi)用支付基建支付捐贈(zèng)支付專賣經(jīng)費(fèi)支付其他費(fèi)用支付對(duì)賬管理對(duì)賬單查詢下載批量下載銀企勾兌資金監(jiān)管子系統(tǒng)業(yè)務(wù)監(jiān)管交易列表兩煙購(gòu)銷確認(rèn)煙葉收購(gòu)監(jiān)管煙葉購(gòu)銷監(jiān)管卷煙購(gòu)銷監(jiān)管輔料采購(gòu)監(jiān)管卷煙銷售監(jiān)管撥付監(jiān)管撥付列表資金撥付監(jiān)管費(fèi)用監(jiān)管支付列表費(fèi)用支付監(jiān)管固定資產(chǎn)采購(gòu)監(jiān)管人工費(fèi)用支付監(jiān)管辦公費(fèi)用支付監(jiān)管業(yè)務(wù)費(fèi)用支付監(jiān)管物流費(fèi)用支付監(jiān)管基建支付監(jiān)管捐贈(zèng)支付監(jiān)管專賣經(jīng)費(fèi)支付監(jiān)管其他費(fèi)用支付監(jiān)管貸款擔(dān)保監(jiān)管警示記錄公告管理公告申請(qǐng)公告審批公告管理綜合查詢賬戶交易明細(xì)查詢基礎(chǔ)功能設(shè)計(jì)組織模型本系統(tǒng)使用工作流管理系統(tǒng)的組織模型,模型如下圖:組織單元(Unit):機(jī)構(gòu)、部門、工作組的統(tǒng)稱。組織單元類型:可以是機(jī)構(gòu),部門或工作組角色(Role):指標(biāo)準(zhǔn)崗位,如監(jiān)管,財(cái)務(wù)職位(Position):也稱管理職位,指一個(gè)組織中的一個(gè)標(biāo)準(zhǔn)崗位(不是一個(gè)人)。職位可以和人關(guān)聯(lián)。報(bào)告關(guān)系:指一個(gè)人(或職位)向另一個(gè)人(或職位)報(bào)告。顯示報(bào)告關(guān)系:直接設(shè)立的報(bào)告關(guān)系。隱式報(bào)告關(guān)系:由上下級(jí)職位關(guān)系決定的報(bào)告關(guān)系。群組:人員的集合,這些人可來于不同的組織單元(如機(jī)構(gòu))代理:指一個(gè)人(或職位)代理另一個(gè)人(或職位)的職權(quán)本系統(tǒng)目前只使用如下概念:組織單元、角色、職位,不使用群組、代理、顯示報(bào)告關(guān)系,未來根據(jù)需要可以擴(kuò)展。本系統(tǒng)將在工作流組織模型基礎(chǔ)上做擴(kuò)展,即增長(zhǎng)部分表的字段信息。該模型中的機(jī)構(gòu)相應(yīng)本系統(tǒng)中的省公司或國(guó)家局,子機(jī)構(gòu)相應(yīng)分公司和工業(yè)公司,部門相應(yīng)這些機(jī)構(gòu)下的部門。組織樹的表現(xiàn)形式如下:XX省公司/國(guó)家局職位 人員部門1 職位 人員 部門2 XX分公司部門1部門2公司 部門1 部門2權(quán)限控制本系統(tǒng)的權(quán)限控制涉及動(dòng)態(tài)菜單,操作功能和數(shù)據(jù)權(quán)限三類的控制。菜單權(quán)限控制系統(tǒng)根據(jù)登陸人所擁有的菜單權(quán)限動(dòng)態(tài)生成能訪問的菜單。菜單權(quán)限的維護(hù)機(jī)制如下:一個(gè)用戶相應(yīng)一個(gè)角色。角色和權(quán)限關(guān)聯(lián),角色相應(yīng)的權(quán)限可增長(zhǎng),但不能取消。用戶相應(yīng)某個(gè)角色時(shí),即默認(rèn)擁有了該角色相應(yīng)的所有權(quán)限。每個(gè)用戶的權(quán)限是角色相應(yīng)權(quán)限的子集,即可取消部分權(quán)限,但不能增長(zhǎng)。角色增長(zhǎng)權(quán)限A時(shí),擁有該角色的人都增長(zhǎng)權(quán)限A。用戶登陸時(shí),根據(jù)登陸人的ID號(hào),獲得該人能訪問的所有菜單,保存在session中,并形成菜單樹。數(shù)據(jù)關(guān)系參見“煙草資金監(jiān)管基礎(chǔ)平臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì)說明書”提交請(qǐng)求時(shí),server端校驗(yàn)是否能操作該菜單。系統(tǒng)的所有功能菜單作為初始化數(shù)據(jù)提供。操作權(quán)限控制一個(gè)菜單相應(yīng)的web頁(yè)面上有多個(gè)功能,如增長(zhǎng)、刪除、修改、查詢、上載,這稱為功能權(quán)限,又稱操作權(quán)限。功能權(quán)限的維護(hù)和菜單權(quán)限同時(shí)維護(hù),即在給角色或人設(shè)立菜單權(quán)限時(shí),同時(shí)指定在相應(yīng)的功能;一個(gè)菜單項(xiàng)下相應(yīng)一個(gè)或多個(gè)功能權(quán)限。用戶登錄時(shí),根據(jù)登陸人的ID號(hào),獲得該人能訪問的所有功能,保存在session中。數(shù)據(jù)關(guān)系參見“煙草資金監(jiān)管基礎(chǔ)平臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì)說明書”每個(gè)功能按鈕在頁(yè)面上的顯示使用“按鈕控件”,該控件能根據(jù)功能ID決定按鈕是否可用,假如不可用,disable按鈕。提交請(qǐng)求時(shí),server端校驗(yàn)是否能操作該功能。系統(tǒng)的所有功能權(quán)限作為初始化數(shù)據(jù)提供。數(shù)據(jù)權(quán)限控制對(duì)數(shù)據(jù)權(quán)限控制涉及以下兩種要實(shí)現(xiàn)的功能:在賬號(hào)解決審批查詢時(shí),國(guó)家局領(lǐng)導(dǎo)可查詢所有省,省級(jí)領(lǐng)導(dǎo)可查詢本省的所有審批,市級(jí)單位只能查詢本地區(qū)的,普通員工只能查詢個(gè)人的。在業(yè)務(wù)解決上,要能以組織機(jī)構(gòu)+分管范圍定義(如某領(lǐng)導(dǎo)分管廈門,漳州,泉州的卷煙銷售)的方式控制數(shù)據(jù)。數(shù)據(jù)權(quán)限的實(shí)現(xiàn)方案為:對(duì)業(yè)務(wù)需要做數(shù)據(jù)權(quán)限的部分,需要維護(hù)人員的分管范圍,分管范圍的粒度為分公司/工業(yè)公司。審批查詢的數(shù)據(jù)權(quán)限固化在代碼內(nèi),即省級(jí)領(lǐng)導(dǎo)可查詢所有的分公司/工業(yè)公司,分公司只能查自己地區(qū)內(nèi)所有的工業(yè)公司,工業(yè)公司只能查自己的,其別人只能查自己。所有需要做數(shù)據(jù)權(quán)限功能的表的每條記錄綁定操作員工號(hào)、公司/公司代碼、部門號(hào)(非必須)。所有需要數(shù)據(jù)權(quán)限控制的查詢功能使用iBatis實(shí)現(xiàn),在業(yè)務(wù)查詢信息外同時(shí)傳入操作人員ID號(hào)和可看的公司/公司列表;該列表在登陸時(shí)獲得,并保存在session中;假如沒有公司/公司列表,但有操作人員號(hào)表達(dá)查詢操作人員自己提交的。流程控制使用intelliFlow工作流和工作流應(yīng)用框架實(shí)現(xiàn)對(duì)流程的控制。工作流應(yīng)用框架的數(shù)據(jù)庫(kù)設(shè)計(jì)參見“煙草資金監(jiān)管基礎(chǔ)平臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì)說明書”。本系統(tǒng)提供應(yīng)最終用戶的系統(tǒng)中只涉及工作流引擎,建模工具只提供應(yīng)實(shí)行推廣人員使用,本系統(tǒng)不使用流程監(jiān)控工具。工作流應(yīng)用框架負(fù)責(zé)銜接應(yīng)用業(yè)務(wù)和流程管理,作為一個(gè)半正式產(chǎn)品使用,其后臺(tái)數(shù)據(jù)庫(kù)是固定的,但框架由于必然涉及到應(yīng)用的使用,在不同的系統(tǒng)中會(huì)有調(diào)整。本系統(tǒng)中有調(diào)整,重要是:將本來的流程發(fā)起后輸入表單改為表單輸入完畢提交時(shí)發(fā)起流程。將一次性查詢所有任務(wù)改為按業(yè)務(wù)分類查詢?nèi)蝿?wù),如賬號(hào)審批任務(wù)涉及申請(qǐng)、開戶、銷戶等流程任務(wù)的審批。需要增長(zhǎng)根據(jù)各種業(yè)務(wù)屬性查找流程,由于有多個(gè)審批查詢功能,業(yè)務(wù)屬性在不同的業(yè)務(wù)審批查詢中不同樣。由于工作流升級(jí),個(gè)別API沒有兼容帶來的修改。流程功能概述所有流程的業(yè)務(wù)表現(xiàn)都是A->B->C這種線型依次審批的形式,每個(gè)環(huán)節(jié)一個(gè)人審批;所有審批關(guān)系在系統(tǒng)上線前就決定,不存在隨機(jī)指定。審批的操作涉及批準(zhǔn),不批準(zhǔn),駁回,批準(zhǔn)時(shí)運(yùn)營(yíng)到下一個(gè)結(jié)點(diǎn),不批準(zhǔn)時(shí)流程結(jié)束,駁回有兩種情況,駁回到流程發(fā)起人,也有駁回到上一審批人。流程發(fā)起人在流程被駁回后可以取消流程,即流程有3種方式結(jié)束:批準(zhǔn)、不批準(zhǔn)、發(fā)起人取消。需要提供超時(shí)功能,超時(shí)指任務(wù)的超時(shí),不需要流程的超時(shí)支持;超時(shí)信息要在任務(wù)提醒中顯示。一個(gè)省的所有地區(qū)在某個(gè)業(yè)務(wù)上的解決流程是所有相同的,任務(wù)分派的方式也所有相同的,即不存在一個(gè)業(yè)務(wù)的解決,在某個(gè)地區(qū)也許多一個(gè)環(huán)節(jié)或少一個(gè)環(huán)節(jié)之類的情況。流程發(fā)生在賬號(hào)審批、撥付審批、公告管理和警示解決業(yè)務(wù)中,業(yè)務(wù)流程總數(shù)在10個(gè)左右。流程的任務(wù)列表按子系統(tǒng)分類顯示,即整個(gè)系統(tǒng)有多個(gè)任務(wù)列表,同時(shí)首頁(yè)上有簡(jiǎn)要的任務(wù)提醒摘要信息,并能導(dǎo)航到不同的任務(wù)列表;任務(wù)列表上的業(yè)務(wù)信息根據(jù)業(yè)務(wù)不同顯示的也不同。在web上提供按業(yè)務(wù)和流程信息查詢流程的功能,不同子系統(tǒng)的查詢字段不同樣;查詢時(shí),有數(shù)據(jù)權(quán)限的控制,如省的領(lǐng)導(dǎo)可查看所有市的信息,市的領(lǐng)導(dǎo)只能看本地區(qū)的,普通人員只能查自己的。流程不會(huì)出現(xiàn)跨系統(tǒng)的審批,即各省和國(guó)家局的審批活動(dòng)是獨(dú)立的。在開發(fā)過程中,所有流程的任務(wù)按角色進(jìn)行分派,以此進(jìn)行調(diào)試和演示;在系統(tǒng)上線時(shí),使用流程建模工具配置任務(wù)分派方式。所有流程的定義和任務(wù)分派方式在系統(tǒng)上線前都需要可自由變動(dòng)。工作流的使用本系統(tǒng)按intelliFlow通常的開發(fā)模式使用,即一方面使用工作流建模工具建立流程和進(jìn)行任務(wù)分派,流程框架封裝工作流的調(diào)用并將流程與業(yè)務(wù)關(guān)聯(lián)起來,開發(fā)人員在流程開發(fā)時(shí)不需要接觸到對(duì)工作流的直接調(diào)用。在系統(tǒng)上線前,需要使用工作流建模工具修改分派策略,使與實(shí)際的組織數(shù)據(jù)匹配,然后再上傳部署流程定義。工作流的集成工作流需要以ear包的形式運(yùn)營(yíng)在應(yīng)用服務(wù)器環(huán)境下,本系統(tǒng)和工作流集成的方式是在intelliFlow發(fā)布的ear包中添加本系統(tǒng)的webapplication
(war包形式),刪除發(fā)布包中不需要的如下文獻(xiàn):demo.war,demo.jar,intelliFlow-mns.jar,org.war,同時(shí)修改META-INF\application.xml,在其中增長(zhǎng)本應(yīng)用webapplication的部署描述。系統(tǒng)流程設(shè)計(jì)流程分包管理,一級(jí)包名為他tfm,二級(jí)包位account(賬號(hào)審批)、payroll(資金撥付)、警示解決(notify)和公告管理(bulletin)。在開發(fā)過程中,所有流程按單位號(hào)+角色進(jìn)行分派,其中單位號(hào)為流程變量。由于本系統(tǒng)流程不多,為顯示內(nèi)容豐富和直觀,流程設(shè)計(jì)不做歸納整理,即需求有幾個(gè)流程,流程設(shè)計(jì)時(shí)就定義幾個(gè)。在系統(tǒng)上線前,假如組織數(shù)據(jù)和分派方式不同樣,需要通過流程建模工具配置分派策略;假如流程增長(zhǎng)新的結(jié)點(diǎn),需要做一定的頁(yè)面開發(fā);假如不使用本系統(tǒng)提供的組織模型表,組織數(shù)據(jù)的獲取需要重新開發(fā);假如需要其它的流程功能,也許需要一定的開發(fā)(如修改頁(yè)面)。系統(tǒng)涉及如下流程(注:沒有標(biāo)明省的任務(wù)執(zhí)行人都指是被監(jiān)管單位的人)(1).開設(shè)申請(qǐng)(包ID:tfm.accouont,模板ID:openaccount)(2).開戶辦理(包ID:tfm.accouont,模板ID:accountconfirm)(3).銷戶、賬戶信息變更(包ID:tfm.accouont,模板ID:modifyaccount)(4).賬戶狀態(tài)修改(包ID:tfm.accouont,模板ID:modifystatus)(5).此外2個(gè)子系統(tǒng)的流程待需求細(xì)化和分析后補(bǔ)充。流程解決框架流程解決框架的業(yè)務(wù)組件相應(yīng)的接口為com.longtop.iwf.WfService,采用Spring框架。本系統(tǒng)中的動(dòng)作都是人工動(dòng)作,流程中的人工動(dòng)作分為數(shù)據(jù)錄入和審批環(huán)節(jié)。業(yè)務(wù)數(shù)據(jù)的解決和流程數(shù)據(jù)的解決分開進(jìn)行,業(yè)務(wù)數(shù)據(jù)由業(yè)務(wù)邏輯實(shí)現(xiàn)解決,流程數(shù)據(jù)由工作流引擎解決,所以這些操作包在一個(gè)Spring的service中,通過配置JTA事務(wù)支持,實(shí)現(xiàn)業(yè)務(wù)操作和工作流使用EJB實(shí)現(xiàn)的操作的事務(wù)一致性。流程解決框架目前提供的重要服務(wù)有(具體參見Javadoc.):流程方面,發(fā)起和取消流程。流程變量,取得和設(shè)立流程變量。任務(wù)列表,取得任務(wù)列表。任務(wù)方面,接受任務(wù)(start,continue,resume)提交任務(wù)(commit),掛起任務(wù)(suspend)。組織方面,提供流程框架用到的與組織相關(guān)的一些方法,這里的組織指使用工作流組織模型和表結(jié)構(gòu)。重要的類有:com.longtop.iwf.WfClient封裝intelliFlow工作流的APIcom.longtop.iwf.WfServiceImpl流程解決,涉及流程與業(yè)務(wù)的關(guān)聯(lián)建立,調(diào)用WfClient的流程相關(guān)功能。com.longtop.iwf.IwfExtendServiceImpl實(shí)現(xiàn)輔助功能,如根據(jù)用戶號(hào)取得用戶在職位、角色、部門、機(jī)構(gòu)的信息。流程基本操作一個(gè)業(yè)務(wù)一般由經(jīng)辦申請(qǐng)、一級(jí)或多級(jí)主管審批組成。一個(gè)標(biāo)準(zhǔn)業(yè)務(wù)操作流程如下圖:任務(wù)操作說明:申報(bào):任務(wù)提交,流程進(jìn)入下一環(huán)節(jié)。取消:取消申請(qǐng),流程結(jié)束。批準(zhǔn):表達(dá)審批通過,可以進(jìn)入流程的下一個(gè)環(huán)節(jié)。不批準(zhǔn):申請(qǐng)被取消,流程結(jié)束。駁回:表達(dá)審批沒有通過,要做適當(dāng)修改,任務(wù)駁回至上一個(gè)環(huán)節(jié)或申請(qǐng)人,根據(jù)業(yè)務(wù)的不同解決不同。(1).發(fā)起流程業(yè)務(wù)數(shù)據(jù)輸完后,點(diǎn)“提交”,提交業(yè)務(wù)數(shù)據(jù),同時(shí)發(fā)起流程并記錄流程和業(yè)務(wù)的關(guān)聯(lián)關(guān)系。流程發(fā)起為首結(jié)點(diǎn)執(zhí)行?;A(chǔ)的Actioncom.longtop.iwf.web.BaseProcessAction實(shí)現(xiàn)發(fā)起流程并記錄流程和業(yè)務(wù)的關(guān)聯(lián)關(guān)系,具體的流程解決,需要寫一個(gè)子類action,實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的解決,一類業(yè)務(wù)相應(yīng)一個(gè)子action。如:BasAction為系統(tǒng)最底層的action,BaseProcessAction解決和流程有關(guān)的公共內(nèi)容,AccountProcessAction實(shí)現(xiàn)如下的API,調(diào)用賬戶開設(shè)申請(qǐng)的業(yè)務(wù)邏輯解決方法,在該方法內(nèi)提交解決業(yè)務(wù)數(shù)據(jù)和調(diào)用工作流API解決流程數(shù)據(jù)。時(shí)序圖如下:其中AccountAppProcessAction和IOpenApplyService和需要發(fā)起流程的具體業(yè)務(wù)相應(yīng),WfService為流程框架解決類,WfClient封裝對(duì)工作流的調(diào)用,WorklistLocal為工作流對(duì)外的接口。根據(jù)工作流應(yīng)用框架規(guī)定,發(fā)起流程前需要配置好表IWF_BIZ_CATEGORY和IWF_PROCESS_CONFIG。需要發(fā)起流程的頁(yè)面要hidden兩個(gè)字段的值,即bizCode和bizName,與IWF_BIZ_CATEGORY表中的配置相應(yīng)。由于工作流是使用EJB實(shí)現(xiàn),為保證實(shí)現(xiàn)事務(wù)的控制,應(yīng)用的service使用JTA事務(wù),并且調(diào)用的其它service不要有事務(wù)控制,直接使用xxxTarget。<beanid="openApplyServiceTarget"class="com.longtop.tfm.account.OpenApplyServiceImpl"> <propertyname="basService"> <refbean="basServiceTarget"/> </property> <propertyname="comService"> <refbean="comServiceTarget"/> </property> <propertyname="wfService"> <refbean="wfService"/> </property></bean><beanid="openApplyService"class="erceptor.TransactionProxyFactoryBean"> <propertyname="transactionManager"> <refbean="jtaTransactionManager"/> </property> <propertyname="target"> <reflocal="openApplyServiceTarget"/> </property> <propertyname="transactionAttributes"><props><propkey="add*">PROPAGATION_REQUIRED</prop><propkey="update*">PROPAGATION_REQUIRED</prop><propkey="delete*">PROPAGATION_REQUIRED</prop><propkey="*">PROPAGATION_REQUIRED,readOnly</prop></props> </property></bean>(2).取得任務(wù)列表由于本系統(tǒng)有比較多的根據(jù)業(yè)務(wù)信息查詢審批任務(wù),不同的子系統(tǒng)業(yè)務(wù)信息數(shù)量和內(nèi)容不完全一致,因此,有關(guān)任務(wù)的查詢都不直接調(diào)用工作流的API實(shí)現(xiàn),而是關(guān)聯(lián)業(yè)務(wù)表、流程業(yè)務(wù)關(guān)聯(lián)表、流程表、任務(wù)表直接查詢,查詢結(jié)果分頁(yè)顯示,分頁(yè)功能使用PowerWeb的表格控件實(shí)現(xiàn)。數(shù)據(jù)庫(kù)的查詢使用iBatis任務(wù)列表的獲取如下,在Action內(nèi)將查詢條件拼成Hashmap后,調(diào)用查詢實(shí)現(xiàn)類,查詢獲得任務(wù)列表信息,其中包含業(yè)務(wù)信息和流程信息,再分頁(yè)顯示。(3).選中任務(wù)選中任務(wù)指選擇任務(wù)列表中的某一條任務(wù),進(jìn)行審批。選中任務(wù)的重要操作是要獲得相應(yīng)的業(yè)務(wù)信息和流程信息,顯示在審批頁(yè)面上。實(shí)現(xiàn)機(jī)制為:當(dāng)前任務(wù)選中后要進(jìn)入的JSP文獻(xiàn)和獲得頁(yè)面數(shù)據(jù)的handler配置在數(shù)據(jù)庫(kù)中,即表IWF_NODE_CONFIG中;選擇一條任務(wù)后,通過調(diào)用工作流的API獲得流程信息,根據(jù)流程信息的MPID在表IWF_NODE_CONFIG中找到相應(yīng)的配置信息,執(zhí)行handler獲得業(yè)務(wù)數(shù)據(jù),最后forward到配置的JSP頁(yè)面?;A(chǔ)的Actioncom.longtop.iwf.web.BaseAcceptTaskAction繼承BasAction,實(shí)現(xiàn)任務(wù)選中后的操作,涉及找到和當(dāng)前結(jié)點(diǎn)操作相應(yīng)的JSP文獻(xiàn)和業(yè)務(wù)解決handler。本系統(tǒng)中,不需要使用子類action。時(shí)序圖如下:業(yè)務(wù)解決XxxHandler繼承com.longtop.iwf.handler.BaseTaskHandler實(shí)現(xiàn)當(dāng)前任務(wù)相關(guān)業(yè)務(wù)數(shù)據(jù)的獲得。其實(shí)現(xiàn)實(shí)通過相應(yīng)業(yè)務(wù)表中主鍵的bizId獲得業(yè)務(wù)信息。Handler的解決框架如下:publicMapstartTask(IwfTaskVOiwfTaskVO,UserProfileVOupvo)throwsGenericException{ StringbizId=iwfTaskVO.getBizId());//根據(jù)bizId查找業(yè)務(wù)數(shù)據(jù)//實(shí)例化一個(gè)JSP頁(yè)面上要使用的form,該form繼承于BaseTaskFormthis.setKeyValues(iwfTaskVO,[form實(shí)例]);Mapresult=UtilMap.makeMap("[form實(shí)例名]",form實(shí)例);returnresult;}(4).任務(wù)審批任務(wù)審批有批準(zhǔn)、不批準(zhǔn)和駁回三種結(jié)果。任務(wù)審批通過調(diào)用com.longtop.iwf.web.BaseTaskAction實(shí)現(xiàn)。本系統(tǒng)不需要使用子action。審批意見的解決:在提交任務(wù)commitTask時(shí),審批意見直接存入intelliFlowTask表的Memo字段中,方法為:建立一個(gè)字符串類型的臨時(shí)變量,變量名為com.cit.wf.util.Constant.SYSVAR_TASKMEMO,審批意見作為該變量的值,將該變量放入提交的流程變量集中即可,流程引擎會(huì)自動(dòng)取得該變量的值存入Task表的Memo字段中。(5).流程查詢流程查詢?cè)跇I(yè)務(wù)上稱審批查詢,在web上表現(xiàn)為多個(gè)菜單,一個(gè)菜單相應(yīng)業(yè)務(wù)的一個(gè)分類。輸入信息涉及:流程信息、業(yè)務(wù)信息;輸出信息涉及:流程信息、業(yè)務(wù)信息、當(dāng)前任務(wù)信息(如當(dāng)前環(huán)節(jié)、當(dāng)前解決人),不同的業(yè)務(wù)分類相應(yīng)的業(yè)務(wù)信息不同樣;流程查詢還需要考慮數(shù)據(jù)權(quán)限控制,領(lǐng)導(dǎo)能看全省的,市的領(lǐng)導(dǎo)只能看個(gè)人的,普通人只能看自己的。實(shí)現(xiàn)方案如下:同“取得任務(wù)列表”進(jìn)行查詢。在查詢時(shí)使用數(shù)據(jù)權(quán)限控制方案,參考“4.2.3數(shù)據(jù)權(quán)限控制”規(guī)則解決本系統(tǒng)使用規(guī)則系統(tǒng)解決警示提醒。規(guī)則的表達(dá)方式和規(guī)則系統(tǒng)的調(diào)用方式待需求細(xì)化和分析結(jié)束后補(bǔ)充。開發(fā)過程規(guī)則的開發(fā)可以分為兩塊,一方面是業(yè)務(wù)用戶組織和定義業(yè)務(wù)規(guī)則,然后是技術(shù)人員映射技術(shù)實(shí)現(xiàn)。在本系統(tǒng)中,規(guī)則的所有開發(fā)都由技術(shù)人員解決。規(guī)則定義具體組織和表達(dá)方式需要待需求明確和分析后擬定。規(guī)則執(zhí)行具體使用方式需要待需求明確和分析后擬定。消息服務(wù)功能描述消息服務(wù)構(gòu)件負(fù)責(zé)提供報(bào)警方式的可配置和報(bào)警內(nèi)容的可定制,并完畢消息的發(fā)送和發(fā)送痕跡管理。發(fā)送痕跡管理采用文獻(xiàn)形式保存,天天發(fā)送的痕跡保存在一個(gè)文獻(xiàn)中,消息發(fā)送失敗的痕跡保存在一個(gè)專門的文獻(xiàn)中。系統(tǒng)提供的報(bào)警方式為郵件和短消息,消息的發(fā)送人統(tǒng)一為系統(tǒng)設(shè)立的一個(gè)郵件地址或手機(jī)用戶發(fā)送方式是按業(yè)務(wù)配置,即不同的業(yè)務(wù)消息發(fā)送方式可不同樣,假如業(yè)務(wù)的消息發(fā)送方式?jīng)]有配置,使用整個(gè)系統(tǒng)缺省的方式。為實(shí)現(xiàn)消息的發(fā)送,用戶要保證基礎(chǔ)條件滿足,即有郵件服務(wù)器或開通短消息發(fā)送渠道。郵件發(fā)送郵件發(fā)送使用javamail,通過Socket連接郵件服務(wù)器,發(fā)送郵件。郵件的發(fā)送為異步方式,先將郵件信息保存在數(shù)據(jù)庫(kù)中,再使用任務(wù)調(diào)度掃描郵件隊(duì)列,并發(fā)送郵件。郵件的消息內(nèi)容使用velocity的模板機(jī)制,不同的業(yè)務(wù)發(fā)送模板不同樣,使用文獻(xiàn)形式配置;不同業(yè)務(wù)的發(fā)送人使用規(guī)則系統(tǒng)定制規(guī)則決定。短信發(fā)送短信發(fā)送有3種方式,下面介紹一下各自的實(shí)現(xiàn)方式及特點(diǎn):向已有的短信平臺(tái)發(fā)送數(shù)據(jù),由短信平臺(tái)代為發(fā)送短信。這樣的短信平臺(tái)提供商有新浪、搜狐等。此方式一般采用HTTP的數(shù)據(jù)提交方式,接口簡(jiǎn)樸,開發(fā)成本低,但規(guī)定服務(wù)器必須具有internet條件,對(duì)服務(wù)器的安全性規(guī)定較高,且功能較為單一,一般只做短信的發(fā)送。通過短信網(wǎng)關(guān)發(fā)送短信。建立短信網(wǎng)關(guān)專線,使用CMPP(移動(dòng))、SGIP(聯(lián)通)、CNGP(小靈通)協(xié)議進(jìn)行數(shù)據(jù)的發(fā)送。此方式具有短信交互功能、吞吐性能好,但運(yùn)營(yíng)費(fèi)用、開發(fā)成本較高。采用GSMModem發(fā)送短信。公司已有多個(gè)此方式的成功案例,具有多種變成語(yǔ)言接口(ActiveX、Java、C#),可實(shí)現(xiàn)短信的交互功能,開發(fā)成本低。本系統(tǒng)支持向已有短信平臺(tái)發(fā)送數(shù)據(jù)和采用GSM方式發(fā)送兩種方式,前者的機(jī)制十分簡(jiǎn)樸,連接短信平臺(tái)并發(fā)送就可以,這里著重介紹后一種方式的實(shí)現(xiàn)。(一)系統(tǒng)實(shí)現(xiàn)圖(二)系統(tǒng)分析系統(tǒng)使用專門一臺(tái)短信服務(wù)器與移動(dòng)短信網(wǎng)關(guān)進(jìn)行短信業(yè)務(wù)解決,短信服務(wù)器使用GSMModem直接與移動(dòng)接受發(fā)送短信,短信服務(wù)器可選用一臺(tái)或多臺(tái)GSMModem同時(shí)與移動(dòng)網(wǎng)關(guān)進(jìn)行短信收發(fā),設(shè)備數(shù)量由業(yè)務(wù)量大小而定,如在系統(tǒng)使用初期業(yè)務(wù)量較小,可用較少的GSMModem,假如業(yè)務(wù)量增大后,由于GSMModem每發(fā)送一條需要6-10秒的時(shí)間,短信服務(wù)器假如不能及時(shí)完畢信息解決,就可以增長(zhǎng)多臺(tái)GSMModem并行解決提以高數(shù)據(jù)流量,減少發(fā)送延遲。使用多臺(tái)GSMModem也可提高系統(tǒng)穩(wěn)定性,當(dāng)其中某些GSMModem設(shè)備故障,系統(tǒng)也可保持運(yùn)營(yíng)。系統(tǒng)可實(shí)現(xiàn)按需調(diào)配短信設(shè)備數(shù)量,減少系統(tǒng)初期建設(shè)費(fèi)用,便于系統(tǒng)升級(jí)擴(kuò)容解決。對(duì)移動(dòng)用戶請(qǐng)求信息,答復(fù)信息,解決情況都進(jìn)行記錄,以便于與移動(dòng)公司信息、計(jì)費(fèi)等對(duì)比。系統(tǒng)實(shí)行分布式解決方式,短信服務(wù)器接受到移動(dòng)用戶發(fā)送的請(qǐng)求信息時(shí)通過過濾分類解決,按已注冊(cè)的的業(yè)務(wù)類型告知到各應(yīng)用服務(wù)器,由各應(yīng)用服務(wù)器進(jìn)行解決后通過短信服務(wù)器回復(fù)用戶,以提高系統(tǒng)短信服務(wù)解決能力,業(yè)務(wù)擴(kuò)展靈活性。系統(tǒng)同時(shí)提供對(duì)內(nèi)部網(wǎng)絡(luò)各應(yīng)用發(fā)送短信的請(qǐng)求。(三)硬件信息短信務(wù)服器:Windows2023GSMModem:福州利事達(dá)信息技術(shù)有限公司LT1080-GSM短信王支持:PPP協(xié)議棧、AT控制命令接口:R232(串口)短消息:MO/MT/TEXT/PDU頻率:EGSM900/GSM1800發(fā)送速度:10秒以下音頻特性:半速/全速/增強(qiáng)加速天線接口:SMA(四)短信應(yīng)用端基于JsmsApp實(shí)現(xiàn)短信應(yīng)用業(yè)務(wù)系統(tǒng)應(yīng)用端模塊進(jìn)行短信的收發(fā)解決,提供基于Java的JsmsApp中間件。應(yīng)用業(yè)務(wù)系運(yùn)用中間件可以進(jìn)行快速的實(shí)現(xiàn)短信應(yīng)用開發(fā),并且部署多個(gè)短信應(yīng)用業(yè)務(wù)系統(tǒng)。發(fā)送維護(hù)系統(tǒng)維護(hù)“業(yè)務(wù)類型—消息接受人發(fā)送方式”這一關(guān)系,不同業(yè)務(wù)的消息接受人和發(fā)送方式是獨(dú)立的,通過直接選擇組織樹上的具體人決定發(fā)送人,發(fā)送人1個(gè)或多個(gè),發(fā)送人的郵件或電話號(hào)碼在人員信息中維護(hù),發(fā)送方式可以是郵件、短消息或兩種都可以。消息的發(fā)送人在配置文獻(xiàn)中配置,整個(gè)系統(tǒng)有一個(gè)全局的發(fā)送人,假如各個(gè)業(yè)務(wù)相應(yīng)的發(fā)送人沒有配置,使用全局的發(fā)送人,否則使用和業(yè)務(wù)相應(yīng)的發(fā)送人。接口類設(shè)計(jì)com.longtop.ltfp.mns.MnsgetMsgBodypublicjava.lang.StringgetMsgBody(java.lang.String
aTemplateFile,java.util.HashMap
aTmpParam,java.util.List
picList)throwsMnsException根據(jù)模板文獻(xiàn)和參數(shù),獲得實(shí)際的消息內(nèi)容Parameters:aTemplateFile-帶絕對(duì)途徑的模板文獻(xiàn)名,如c:\helloaTmpParam-參數(shù)值的集合,每個(gè)元素的key名和模板中的變量名相應(yīng).可為空picList-內(nèi)嵌圖片文獻(xiàn)的集合.可為空Throws:MnsExceptionsendMsgpublicvoidsendMsg(java.lang.String
aSender,java.util.ArrayList
aReceiverList,java.lang.String
aSubject,java.lang.String
aMsg,java.lang.String
aSendType)throwsMnsException根據(jù)需要的發(fā)送方式發(fā)送消息Parameters:aSender-發(fā)送者,假如為null,使用系統(tǒng)配置的默認(rèn)發(fā)送者aReceiverList-消息接受人集合;每一個(gè)元素為Hashtable類型,有兩個(gè)key,address:郵件地址或手機(jī)號(hào)碼,channel:發(fā)送方式(email,sms等);為string時(shí),只能是郵件地址aSubject-消息主題aMsg-消息內(nèi)容aSendType-Mns.SYNC:立即發(fā)送,Mns.ASync:異步發(fā)送Throws:MnsExceptionsendMsgpublicvoidsendMsg(java.lang.String
aSender,java.util.ArrayList
aReceiverEmailList,java.lang.String
aSubject,java.lang.String
aMsg,java.util.ArrayList
aCCEmailList,java.util.ArrayList
aAttachFile,java.lang.String
aSendType)throwsMnsException以郵件的方式發(fā)送消息,支持cc和附件,使用模板Parameters:aSender-發(fā)送者,假如為null,使用系統(tǒng)配置的默認(rèn)發(fā)送者aReceiverEmailList-消息接受人集合;里面的元素String類型的郵件地址aSubject-消息主題aMsg-消息內(nèi)容aCCEmailList-CC人集合;里面的元素是郵件地址,String類型aAttachFile-附件集合;里面的元素帶絕對(duì)途徑的文獻(xiàn)名,String類型aSendType-0:立即發(fā)送,1:異步發(fā)送Throws:MnsException通訊網(wǎng)關(guān)連接方式通訊網(wǎng)關(guān)負(fù)責(zé)提供和外部系統(tǒng)連接的可配置框架,并提供數(shù)據(jù)轉(zhuǎn)換、通訊痕跡管理等功能。本系統(tǒng)和外部系統(tǒng)的連接有以下方式:外部系統(tǒng)在數(shù)據(jù)庫(kù)層面提供view,直接訪問外部系統(tǒng)的view獲取數(shù)據(jù)。將應(yīng)用模塊的數(shù)據(jù)對(duì)象轉(zhuǎn)換成XML格式,傳輸?shù)酵獠肯到y(tǒng),外部系統(tǒng)按本系統(tǒng)規(guī)定的格式返回XML格式的數(shù)據(jù),再轉(zhuǎn)換成數(shù)據(jù)對(duì)象為應(yīng)用模塊使用。將應(yīng)用模塊的數(shù)據(jù)對(duì)象轉(zhuǎn)換成XML格式,傳輸?shù)酵獠肯到y(tǒng),從外部系統(tǒng)自定義的接口獲取XML格式的數(shù)據(jù)后,轉(zhuǎn)換成本系統(tǒng)規(guī)定的XML格式的數(shù)據(jù),再轉(zhuǎn)換成數(shù)據(jù)對(duì)象為應(yīng)用模塊使用。其它的方式,在實(shí)行過程中定制(如發(fā)送報(bào)文到消息中間件)。連接方式的復(fù)雜性是以下因素導(dǎo)致的:不同省的業(yè)務(wù)系統(tǒng)千差萬(wàn)別,可連接的方式取決于雙方協(xié)作的結(jié)果,難以事先決定。不同省使用的數(shù)據(jù)庫(kù)類型和數(shù)據(jù)庫(kù)的設(shè)計(jì)必然不同樣,無法固定為一種。功能描述用例圖如下:技術(shù)框架數(shù)據(jù)轉(zhuǎn)換實(shí)現(xiàn)應(yīng)用模塊的數(shù)據(jù)對(duì)象與XML格式的互轉(zhuǎn),應(yīng)用傳給通訊網(wǎng)關(guān)自定義的對(duì)象類型,通訊網(wǎng)關(guān)與外部系統(tǒng)之間是XML格式,應(yīng)用與通訊網(wǎng)關(guān)之間使用通訊網(wǎng)關(guān)自定義的數(shù)據(jù)對(duì)象。通訊服務(wù)能方便連接不同數(shù)據(jù)庫(kù)的不同視圖,并將查詢的結(jié)果轉(zhuǎn)換成數(shù)據(jù)對(duì)象,外部系統(tǒng)的數(shù)據(jù)庫(kù)可以是任意的關(guān)系型數(shù)據(jù)庫(kù)。同時(shí)提供標(biāo)準(zhǔn)的socket連接的方式。根據(jù)本系統(tǒng)的業(yè)務(wù)功能規(guī)定,規(guī)范外部系統(tǒng)要?jiǎng)?chuàng)建的視圖(假如采用該方式),提供標(biāo)準(zhǔn)的適配器。根據(jù)本系統(tǒng)的業(yè)務(wù)功能規(guī)定,固化采用socket連接外部系統(tǒng)的解決,提供標(biāo)準(zhǔn)的適配器。與外部系統(tǒng)連接并解決數(shù)據(jù)的實(shí)現(xiàn)類自由可配置,以能解決例外情況。接口類設(shè)計(jì)AppData為自定義的一個(gè)數(shù)據(jù)類型,核心是一個(gè)Vector。executepublic\o"classinmon"AppDataexecute(java.lang.String
msgID,\o"classinmon"AppData
input)throwsjava.lang.Exception執(zhí)行一個(gè)業(yè)務(wù)操作Parameters:msgID-業(yè)務(wù)操作編號(hào),與業(yè)務(wù)類型定義文獻(xiàn)相符input-傳入的參數(shù)和數(shù)據(jù)Returns:通用數(shù)據(jù)接口Throws:java.lang.Exceptionexecutepublic\o"classinmn"AppDataexecute(java.lang.String
msgID,\o"classinmon"AppData
input,java.lang.String
adapterType)throwsjava.lang.Exception執(zhí)行一個(gè)業(yè)務(wù)操作Parameters:msgID-業(yè)務(wù)操作編號(hào),與業(yè)務(wù)類型定義文獻(xiàn)相符input-傳入的參數(shù)和數(shù)據(jù)adapterType-使用的適配器類型Returns:通用數(shù)據(jù)接口Throws:java.lang.Exception任務(wù)調(diào)度功能描述任務(wù)調(diào)度模塊實(shí)現(xiàn)在沒有人工干預(yù)下自動(dòng)執(zhí)行任務(wù),任務(wù)相應(yīng)的是一個(gè)API任務(wù)可一次性執(zhí)行或周期性執(zhí)行,周期類型可自由配置,如天天,每周的星期幾,每月的那幾天任務(wù)調(diào)度過程有日記記錄,可被查詢。任務(wù)執(zhí)行的時(shí)間不能動(dòng)態(tài)修改,假如需要修改,需要先停止服務(wù)器,修改后,再啟動(dòng)。解決方案本模塊使用spring內(nèi)建的quartz組件實(shí)現(xiàn),技術(shù)框架如下:描述技術(shù)實(shí)現(xiàn)job定義一個(gè)任務(wù),即要做的事,相應(yīng)著API任意bean的一個(gè)方法jobDetailQuartz能運(yùn)營(yíng)的一個(gè)任務(wù),是將Job封裝成一個(gè)Servicebean方法通過配置文獻(xiàn)產(chǎn)生一個(gè)新的jobDetailbeantrigger觸發(fā)器,包含一個(gè)jobDetail和任務(wù)觸發(fā)的時(shí)間條件(如每月地一天晚上18:00)jobDetailbean通過配置文獻(xiàn)產(chǎn)生一個(gè)新的觸發(fā)器beanschedulerFactory包含要調(diào)度任務(wù)的所有觸發(fā)器列表把已定義的所有觸發(fā)器beans都配置到schedulerFactory列表中使用spring后,無需編寫代碼就可以把一個(gè)功能配置成定期任務(wù)。假如希望用戶可以更改任務(wù)觸發(fā)的時(shí)間條件,也只需創(chuàng)建單獨(dú)的觸發(fā)器類。由于是注入式編程,由spring管理,無需接口,除了多點(diǎn)配置外,其它開發(fā)完全同普通JavaAPI功能的實(shí)現(xiàn)。應(yīng)用示例一方面,和常規(guī)API的開發(fā)同樣,寫API,實(shí)現(xiàn)某功能。com.longtop.ltfp.sts.SampleJob提供了兩個(gè)方法,作為這里的例子。API寫好后,接下來就是配置了,涉及如下的環(huán)節(jié),這里以提供的例子說明如何配置。定義springbean,假如已存在或使用現(xiàn)有的bean,則不需要此環(huán)節(jié),此環(huán)節(jié)屬于spring范疇,與任務(wù)調(diào)度無關(guān)。<beanid="sampleJob"class="com.longtop.ltfp.sts.SampleJob"/>定義一個(gè)jobDetail。jobDetail為quartz可辨認(rèn)的一個(gè)任務(wù),它包含一個(gè)方法run(),執(zhí)行任務(wù)的時(shí)候?qū)⒄{(diào)用該方法。<beanid="sampleCronJobDetail"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><propertyname="targetObject"><refbean="sampleJob"/></property><propertyname="targetMethod"><value>doCron</value></property></bean>targetObject和targetMethod設(shè)立run()方法體內(nèi)要調(diào)用的類和該類的一個(gè)方法。sampleJob引用了前面定義的bean,doCron為SampleJob的一個(gè)方法,該方法不能包含參數(shù)。定義任務(wù)的觸發(fā)器,當(dāng)?shù)竭_(dá)一定的時(shí)間條件時(shí),觸發(fā)器將啟動(dòng)相應(yīng)的任務(wù)。<beanid="sampleCronTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean"><propertyname="jobDetail"><refbean="sampleCronJobDetail"/></property><propertyname="cronExpression"><value>4,37****?</value></property></bean>jobDetail屬性把上一步定義的sampleCronJobDetail綁定到該觸發(fā)器,cronExpression設(shè)立任務(wù)觸發(fā)的時(shí)間點(diǎn)(具體介紹見下面)。定義調(diào)度引擎,管理所有觸發(fā)器。<beanclass="org.springframework.scheduling.quartz.SchedulerFactoryBean"><propertyname="triggers"><list><refbean="sampleCronTrigger"/></list></property></bean>啟動(dòng)應(yīng)用至此所有工作已完畢,啟動(dòng)應(yīng)用,應(yīng)當(dāng)可以出現(xiàn)以下調(diào)試信息。17:32:37,031INFO[LogService]runSampleJob.doCron()atsec4,3717:33:04,015INFO[LogService]runSampleJob.doCron()atsec4,3717:33:37,015INFO[LogService]runSampleJob.doCron()atsec4,37配置說明兩類常用的觸發(fā)器simpleTrigger<beanid="sampleSimpTrigger"class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <propertyname="jobDetail"><refbean="sampleSimpJobDetail"/></property> <propertyname="startDelay"><value>10000</value></property> <propertyname="repeatInterval"><value>15000</value></property> </bean> startDelay,調(diào)度引擎初始化后的10秒內(nèi)第一次執(zhí)行任務(wù),取值單位毫秒repeatInterval,任務(wù)每間隔15秒執(zhí)行一次,取值單位毫秒cronTrigger 通過具體的時(shí)間點(diǎn)來設(shè)立任務(wù)的執(zhí)行,參見上節(jié)的配置。
cronExpression格式:秒分時(shí)日期月份星期年(中間的空格必需,年假如為*可以省略)在相應(yīng)的位置輸入相應(yīng)的合法數(shù)字(如秒為:0~59),當(dāng)系統(tǒng)時(shí)間與該時(shí)間相同時(shí),則啟動(dòng)任務(wù)?!?”號(hào),允許一個(gè)時(shí)間域取多個(gè)值,如秒位置為(4,37)在4秒或37秒都會(huì)啟動(dòng)任務(wù)?!?”號(hào),表達(dá)任意的值,都會(huì)引起任務(wù)的執(zhí)行,一般不用于秒域。假如分鐘為*,則每分鐘都會(huì)執(zhí)行任務(wù)?!?”號(hào),用于日期或星期位置,由于不同時(shí)指定日期和星期,?的位置表達(dá)不考慮該因素?!?”表達(dá)聯(lián)系的一段取值,如5-8,等價(jià)于(5,6,7,8)?!?”僅用于星期,表達(dá)第幾個(gè)星期,如2#2,表達(dá)本月第2個(gè)星期一。具體內(nèi)容參見CronTriggersTutorial 任務(wù)清單需要待需求細(xì)化和分析后擬定任務(wù)名任務(wù)描述觸發(fā)條件備注報(bào)表開發(fā)報(bào)表設(shè)計(jì)本系統(tǒng)使用iReport1.2.5工具繪制報(bào)表模板,使用Jasper動(dòng)態(tài)產(chǎn)生報(bào)表并輸出到web頁(yè)面上或以文獻(xiàn)形態(tài)保存在服務(wù)器上,原理如下圖:報(bào)表種類本系統(tǒng)擬采用常規(guī)表格式報(bào)表和儀表圖展示監(jiān)管記錄信息,具體待需求明確和細(xì)化后擬定。如下是儀表圖的展現(xiàn)形式:報(bào)表清單需要待需求明確和分析后擬定。報(bào)表名內(nèi)容概述展現(xiàn)形式實(shí)時(shí)/定期報(bào)表打印使用ScriptX實(shí)現(xiàn)在IE上的打印控制()。數(shù)據(jù)同步設(shè)計(jì)本系統(tǒng)從外部業(yè)務(wù)系統(tǒng)獲取業(yè)務(wù)數(shù)據(jù),發(fā)送標(biāo)志位信息給專賣準(zhǔn)營(yíng)證系統(tǒng);國(guó)家局系統(tǒng)和省局系統(tǒng)是獨(dú)立的,但存在數(shù)據(jù)上的關(guān)系,即合作銀行信息、賬戶種類信息在國(guó)家局系統(tǒng)中維護(hù)后,下發(fā)到各省數(shù)據(jù)庫(kù),同時(shí)各省數(shù)據(jù)庫(kù)將數(shù)據(jù)按規(guī)定上傳到國(guó)家數(shù)據(jù)庫(kù)。本系統(tǒng)和外部系統(tǒng)的數(shù)據(jù)關(guān)系重要通過3種方式解決:通過通訊網(wǎng)關(guān)實(shí)時(shí)獲取外部系統(tǒng)的業(yè)務(wù)數(shù)據(jù)或發(fā)送標(biāo)志位信息。通過數(shù)據(jù)復(fù)制技術(shù)實(shí)現(xiàn)國(guó)家局和省局基礎(chǔ)數(shù)據(jù)的同步。通過任務(wù)調(diào)度機(jī)制定期上傳數(shù)據(jù)或更新數(shù)據(jù)。第(1)種方式的實(shí)現(xiàn)在“4.6通訊網(wǎng)關(guān)”中具體描述。第(3)種方式的實(shí)現(xiàn)在“4.7任務(wù)調(diào)度中具體描述,上傳或更新的具體數(shù)據(jù)和規(guī)定有待需求的細(xì)化,在具體設(shè)計(jì)中解決。本章重要關(guān)注第(2)種方式的實(shí)現(xiàn)。該方式實(shí)現(xiàn)的前提是國(guó)家局和省局的數(shù)據(jù)庫(kù)都使用Oracle數(shù)據(jù)庫(kù),以使用Oracle數(shù)據(jù)庫(kù)提供的復(fù)制技術(shù)。復(fù)制是一種實(shí)現(xiàn)數(shù)據(jù)分布的方法,也就是說把一個(gè)系統(tǒng)中的數(shù)據(jù)通過網(wǎng)絡(luò)分布到此外一個(gè)或者多個(gè)地理位置不同的系統(tǒng)中,以適應(yīng)可伸縮組織的需要、減輕主服務(wù)器的工作負(fù)荷和提高數(shù)據(jù)的使用效率。Oracle針對(duì)數(shù)據(jù)分布式計(jì)算的需要,提供了一整套功能強(qiáng)大的數(shù)據(jù)庫(kù)復(fù)制解決方案。Oracle的數(shù)據(jù)復(fù)制按功能可以分為三類:簡(jiǎn)樸復(fù)制、高級(jí)復(fù)制和混合復(fù)制,而高級(jí)復(fù)制又可分為多主節(jié)點(diǎn)復(fù)制和可更新快照復(fù)制。本系統(tǒng)使用其簡(jiǎn)樸復(fù)制功能。要實(shí)現(xiàn)的復(fù)制示意圖如下:技術(shù)實(shí)現(xiàn)如下:在各省局?jǐn)?shù)據(jù)庫(kù)中建一個(gè)servicename,連接到國(guó)家局?jǐn)?shù)據(jù)庫(kù)。在各省局?jǐn)?shù)據(jù)庫(kù)中創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接(DBLINK),如:SQL>CREATEPUBLICDATABASELINKDBL_CNYCCONNECTTOUSERAIDENTIFIEDBYUSERAUSING'TFM.';這里的用戶指國(guó)家局?jǐn)?shù)據(jù)庫(kù)用戶,TFM.為省局?jǐn)?shù)據(jù)庫(kù)可連接國(guó)家局?jǐn)?shù)據(jù)庫(kù)的servicename在各省局?jǐn)?shù)據(jù)庫(kù)中創(chuàng)建快照表空間和相應(yīng)國(guó)家局?jǐn)?shù)據(jù)庫(kù)需要復(fù)制的表的快照。在各省局?jǐn)?shù)據(jù)庫(kù)中創(chuàng)建一個(gè)定期刷新過程來定期刷新快照組。在各省局?jǐn)?shù)據(jù)庫(kù)中創(chuàng)建一個(gè)定期任務(wù)來調(diào)用定期刷新過程,實(shí)現(xiàn)定期將國(guó)家局?jǐn)?shù)據(jù)庫(kù)的數(shù)據(jù)復(fù)制到各省局?jǐn)?shù)據(jù)庫(kù)。具體創(chuàng)建環(huán)節(jié)請(qǐng)參考SVN上的“ORACLE快照實(shí)現(xiàn)數(shù)據(jù)復(fù)制.doc”。安全性設(shè)計(jì)本章描述應(yīng)用層面的安全性考慮。方案概述通過授權(quán)機(jī)制防止訪問保密數(shù)據(jù)或受限數(shù)據(jù)、創(chuàng)篡改數(shù)據(jù)以及執(zhí)行沒有授權(quán)的功能。通過使用CA的身份驗(yàn)證機(jī)制控制對(duì)系統(tǒng)的訪問通過良好的異常管理防止暴露敏感的系統(tǒng)級(jí)信息。通過日記和痕跡管理使系統(tǒng)的操作可查詢可追蹤。通過Server端校驗(yàn)防止繞過頁(yè)面的檢查或直接訪問無權(quán)限的URL權(quán)限控制參見4.2CA認(rèn)證CA認(rèn)證重要是商務(wù)上的一個(gè)考慮,具體是否使用根據(jù)在實(shí)行時(shí)的商務(wù)情況而定,在開發(fā)階段不考慮。登陸日記用戶登錄系統(tǒng)時(shí),記錄登陸人、登陸時(shí)間、IP
地址等信息,如下形式:操作痕跡日記分為三種,要記錄到數(shù)據(jù)庫(kù)中的系統(tǒng)流水或痕跡,記錄程序執(zhí)行的供調(diào)試和監(jiān)控的程序日記,其它記錄在文獻(xiàn)中的業(yè)務(wù)日記。操作痕跡。記錄操作人員的每一次操作。只在支付子系統(tǒng)中記錄操作痕跡,系統(tǒng)同時(shí)提供支付過程的軌跡查詢,保證每一步都可追蹤。程序日記。使用log4j在程序中記錄重要的調(diào)試信息和運(yùn)營(yíng)信息,記錄信息涉及類名、代碼行號(hào)和消息內(nèi)容。實(shí)現(xiàn)類名為:com.longtop.util.lg.ProLogService業(yè)務(wù)日記。類似程序日記,但日記文獻(xiàn)自由定義,可以單獨(dú)一個(gè)也可使用公共的,譬如消息發(fā)送的日記保存。實(shí)現(xiàn)類名:com.longtop.util.lg.BizLogService。程序日記的使用如下:importcom.longtop.util.lg.ProLogService;publicclassTest{ protectedstaticProLogServicelog=ProLogService.getLogger(Test.class);publicvoidXXXX(){log.debug(“hello”);}}日記文獻(xiàn)途徑在com.longtop.util.lg.log4j_pro.xml中由${pro.log.dir}定義,假如沒有設(shè)立,默認(rèn)為${user.home}/rabbit/logs下(如:C:\DocumentsandSettings\administrator\rabbit\logs),可以通過修改該文獻(xiàn)改變其它設(shè)立。示例如下:2023-08-1115:51:53,265[SessionImpl.java:3116:DEBUG]initializingnon-lazycollections2023-08-1115:51:53,265[WfServiceImpl.java:112:DEBUG]開始發(fā)起流程...2023-08-1115:51:54,093[WfServiceImpl.java:114:DEBUG]結(jié)束發(fā)起流程...業(yè)務(wù)日記的使用如下:在com.longtop.util.lg.log4j_biz.xml中配置category,調(diào)用時(shí)指定,如BizLogServicelogger=newBizLogService("NotifyFailLog");Stringaddress=””;logger.error("發(fā)送失敗,未發(fā)送郵件地址:"+address);審批痕跡流程的每一步審批都可追蹤,即可知道每一個(gè)流程的環(huán)節(jié)是如何進(jìn)行的,是何人在何時(shí)操作的,操作后下一個(gè)環(huán)節(jié)是什么。Server端校驗(yàn)Server端校驗(yàn)重要解決如下問題:防止沒有登陸系統(tǒng)的訪問。在server端重新做功能權(quán)限和操作權(quán)限的校驗(yàn),防止繞開頁(yè)面的控制。實(shí)現(xiàn)方案:在Request的入口檢查需要校驗(yàn)的請(qǐng)求是合法的。在每個(gè)業(yè)務(wù)的action實(shí)現(xiàn)類中對(duì)需要做server端校驗(yàn)的API檢查menuCode或funCode,保證不為空;假如為空,表白此時(shí)為非法的請(qǐng)求,不做任何解決。Server端校驗(yàn)的實(shí)現(xiàn)是通過如下類實(shí)現(xiàn):packagecom.longtop.bas.web;publicclassLTSecurityFilterimplementsFilter{}并配置在web.xml中,使所有的請(qǐng)求都會(huì)被校驗(yàn)。<filter><filter-name>LTSecurityFilter</filter-name> <filter-class>com.longtop.bas.web.LTSecurityFilter</filter-class></filter><filter-mapping> <filter-name>LTSecurityFilter</filter-name> <url-pattern>*.do</url-pattern></filter-mapping><filter-mapping> <filter-name>LTSecurityFilter</filter-name> <url-pattern>*.jsp</url-pattern></filter-mapping>性能設(shè)計(jì)性能設(shè)計(jì)的重要方案:適當(dāng)?shù)捻?yè)面緩沖。當(dāng)一個(gè)用戶需要在若干頁(yè)面間頻繁切換來完畢其業(yè)務(wù)解決時(shí),采用頁(yè)面緩沖技術(shù),以減少網(wǎng)絡(luò)因反復(fù)傳輸而花費(fèi)大量系統(tǒng)資源。分為如下幾種:系統(tǒng)緩存:系統(tǒng)啟動(dòng)時(shí)需要加載信息,涉及規(guī)則信息。用戶信息緩存:用戶登錄時(shí)用戶自身信息的緩存,涉及用戶基本信息、用戶權(quán)限數(shù)據(jù)、SessionID等。業(yè)務(wù)數(shù)據(jù)緩存:業(yè)務(wù)解決的公用數(shù)據(jù)。涉及賬戶類型、銀行信息等。在大數(shù)據(jù)量查詢方面,一頁(yè)可以顯示的行數(shù)以及一次可裝入內(nèi)存的頁(yè)數(shù)都可參數(shù)化配置。這種折中數(shù)據(jù)庫(kù)訪問次數(shù)和內(nèi)存占用的策略,可以根據(jù)實(shí)際部署環(huán)境進(jìn)行調(diào)優(yōu),以提高系統(tǒng)的綜合性能。采用的數(shù)據(jù)庫(kù)連接池,可以緩存指定個(gè)數(shù)的數(shù)據(jù)庫(kù)連接。系統(tǒng)不需要每次都重新建立數(shù)據(jù)庫(kù)連接,提高了數(shù)據(jù)庫(kù)訪問的速度。對(duì)資源來說,是可以反復(fù)使用的,緩存的訪問開銷比直接訪問資源開銷要小。系統(tǒng)頻繁使用的配置文獻(xiàn)都一次性裝入內(nèi)存,程序不需要每次都從硬盤讀取,大大減少系統(tǒng)的I/0承擔(dān)。建立數(shù)據(jù)庫(kù)良好的索引關(guān)系,提高查詢檢索速度??蛻艋O(shè)計(jì)本章描述系統(tǒng)在未來推廣實(shí)行過程中,也許要客戶化的問題以及解決方案,具體的客戶化過程參見“煙草資金監(jiān)管基礎(chǔ)平臺(tái)使用手冊(cè).doc”。改變監(jiān)管規(guī)則本系統(tǒng)中的規(guī)則專門使用規(guī)則庫(kù)進(jìn)行管理,從而做到規(guī)則變化時(shí)不修改代碼(增長(zhǎng)新的業(yè)務(wù)屬性或功能除外)。通過規(guī)則編輯器修改規(guī)則,編譯后測(cè)試、部署,實(shí)現(xiàn)規(guī)則的隨需應(yīng)變。改變業(yè)務(wù)流程本系統(tǒng)中的流程專門使用流程管理系統(tǒng)進(jìn)行解決,從而做到流程變化時(shí)代碼一般不需要修改。通過流程建模工具修改流程定義和配置任務(wù)的分派方式,編譯后測(cè)試、部署,實(shí)現(xiàn)流程的隨需應(yīng)變。外圍系統(tǒng)連接定制本系統(tǒng)使用通訊網(wǎng)關(guān)構(gòu)件連接外部系統(tǒng),在設(shè)計(jì)已考慮到的常規(guī)方式內(nèi),通過手工修改XML配置文獻(xiàn)實(shí)現(xiàn)連接任意系統(tǒng)和送收信息內(nèi)容的自由變動(dòng),對(duì)于非常規(guī)方式,實(shí)現(xiàn)本系統(tǒng)提供的接口,按接口返回?cái)?shù)據(jù),并將實(shí)現(xiàn)類配置在文獻(xiàn)中,做到代碼獨(dú)立修改。改變數(shù)據(jù)庫(kù)類型本系統(tǒng)通過良好的數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范,避免數(shù)據(jù)移植的工作量,即希望通過使用各數(shù)據(jù)庫(kù)共同的數(shù)據(jù)類型和數(shù)據(jù)訪問方式,使在不同的數(shù)據(jù)庫(kù)上運(yùn)營(yíng)時(shí)代碼不需要修改。改變組織數(shù)據(jù)來源將已存在的系統(tǒng)的組織概念映射到本系統(tǒng)。重新實(shí)現(xiàn)如下的組織接口:接
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東舞蹈戲劇職業(yè)學(xué)院《臨床藥理學(xué)B》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古能源職業(yè)學(xué)院《軟件工程專業(yè)實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 安徽信息工程學(xué)院《氣象與生活》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖北中醫(yī)藥高等??茖W(xué)?!缎旅襟w產(chǎn)品設(shè)計(jì)與制作實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 河南省豫東豫北十所名校2025屆高三第一次月考物理試題文試題含解析
- 常熟中學(xué)2025屆高三下第二次質(zhì)量檢查物理試題含解析
- 江西農(nóng)業(yè)大學(xué)《工程力學(xué)Ⅱ》2023-2024學(xué)年第一學(xué)期期末試卷
- 濰坊職業(yè)學(xué)院《高分子科學(xué)前沿與進(jìn)展》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州省南白中學(xué)2025屆高三下-第一次強(qiáng)化訓(xùn)練英語(yǔ)試題試卷含解析
- 供應(yīng)鏈管理與采購(gòu)制度
- 2025年上半年宜賓江安縣人社局招考易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年安徽工業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整版
- 《C#程序設(shè)計(jì)基礎(chǔ)》課件
- 2024年第五屆美麗中國(guó)全國(guó)國(guó)家版圖知識(shí)競(jìng)賽題庫(kù)及答案(中小學(xué)組)
- 2025年江蘇航空職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2023年湖北省技能高考計(jì)算機(jī)類備考題庫(kù)(萬(wàn)維題庫(kù))-中部分(800題)
- S145水表井標(biāo)準(zhǔn)圖集
- 2024年天翼云認(rèn)證運(yùn)維工程師考試復(fù)習(xí)題庫(kù)(含答案)
- 2025年云南曲靖市事業(yè)單位定向招聘駐曲部隊(duì)未就業(yè)隨軍家屬10人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 第4章水彈性力學(xué)-流體與剛體、彈性體相互耦合運(yùn)動(dòng)理論
- 2024年10月自考13003數(shù)據(jù)結(jié)構(gòu)與算法試題及答案
評(píng)論
0/150
提交評(píng)論