欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

公式及公式數(shù)據(jù)處理裝置和公式及公式數(shù)據(jù)處理方法

文檔序號(hào):6443734閱讀:177來(lái)源:國(guó)知局
專利名稱:公式及公式數(shù)據(jù)處理裝置和公式及公式數(shù)據(jù)處理方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體而言,涉及公式及公式數(shù)據(jù)處理裝置和公式及公式數(shù)據(jù)處理方法。
背景技術(shù)
在目前的很多軟件系統(tǒng)中都需要對(duì)一些公式作處理,如在財(cái)務(wù)系統(tǒng),稅務(wù)系統(tǒng),HR 系統(tǒng)以及很多工業(yè)應(yīng)用系統(tǒng),但在這些系統(tǒng)中對(duì)公式的處理都沒(méi)有一種通用的處理機(jī)制, 都只能解決各自的問(wèn)題,代碼的重用程度不高,后期的維護(hù)復(fù)雜度加大,模塊的可擴(kuò)展性降低,對(duì)公式的支持單一,導(dǎo)致產(chǎn)品的易用性不好,軟件的研發(fā)成本增加。
在很多情況下,為了提高產(chǎn)品的運(yùn)行效率和開(kāi)發(fā)效率,還需要實(shí)現(xiàn)對(duì)象間的運(yùn)算, 但在目前的軟件系統(tǒng)中都避開(kāi)了這種處理方式,犧牲了軟件的效率。
在通常的軟件研發(fā)過(guò)程中,無(wú)論是軟件平臺(tái)部分還是產(chǎn)品開(kāi)發(fā)部分,也需要對(duì)一些公式處理的效率指標(biāo)進(jìn)行分析、需要對(duì)用戶數(shù)據(jù)的公式進(jìn)行跟蹤調(diào)試,如果產(chǎn)品中存在很多不同公式解析方法,要作一個(gè)統(tǒng)一的分析處理是一件費(fèi)力、費(fèi)時(shí)的事情。在現(xiàn)有的部分系統(tǒng)中,如果要對(duì)不同系統(tǒng)間的公式解析和公式計(jì)算進(jìn)行整合,還面臨著這些不同的系統(tǒng)在之前的開(kāi)發(fā)過(guò)程中固有的格式兼容問(wèn)題,例如有的系統(tǒng)是用逗號(hào)做參數(shù)分隔符,有的是用分號(hào)做參數(shù)分隔符等。
并且在很多系統(tǒng)中對(duì)公式的計(jì)算都是依次的單個(gè)運(yùn)算,有N個(gè)業(yè)務(wù)公式就至少需要向?qū)?yīng)的業(yè)務(wù)服務(wù)發(fā)送N次計(jì)算請(qǐng)求,占用大量的服務(wù)器資源。
因此,需要一種公式處理技術(shù),可以解決上述技術(shù)問(wèn)題。發(fā)明內(nèi)容
基于上述背景技術(shù)的考慮,本發(fā)明的一個(gè)目的是提供一種公式及公式數(shù)據(jù)處理裝置,本發(fā)明的另一目的是提供一種公式及公式數(shù)據(jù)處理方法,其可以提供一種通用的公式處理機(jī)制,可以將對(duì)象作為參數(shù)來(lái)輸入,提高了系統(tǒng)的運(yùn)行效率。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種公式及公式數(shù)據(jù)處理裝置,包括配置管理單元,用于讀取配置文件中不同業(yè)務(wù)模塊的配置參數(shù)并存儲(chǔ)在緩存單元中,所述配置參數(shù)包括與所述業(yè)務(wù)模塊對(duì)應(yīng)的業(yè)務(wù)標(biāo)識(shí)、業(yè)務(wù)服務(wù)庫(kù)文件名及路徑、分隔符、實(shí)現(xiàn)運(yùn)算符重載的庫(kù)文件名及路徑;所述緩存單元,接收從公式注冊(cè)接口輸入的不同業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的公式并進(jìn)行緩存,以及存儲(chǔ)公式解析結(jié)果和所述配置參數(shù);所述解析單元,獲取所述緩存單元中的所述公式和與所述公式對(duì)應(yīng)的業(yè)務(wù)標(biāo)識(shí),根據(jù)所述配置參數(shù)對(duì)所述公式進(jìn)行拆分和解析, 循環(huán)處理所述公式的字符串中的每個(gè)字符,生成計(jì)算機(jī)語(yǔ)言能夠識(shí)別的含有公式的數(shù)據(jù)結(jié)構(gòu)集合;運(yùn)算單元,響應(yīng)計(jì)算請(qǐng)求,根據(jù)每個(gè)所述數(shù)據(jù)結(jié)構(gòu)集合中的運(yùn)算符和參與運(yùn)算的量構(gòu)造二叉樹(shù),根據(jù)業(yè)務(wù)標(biāo)識(shí)對(duì)所述數(shù)據(jù)結(jié)構(gòu)集合進(jìn)行分組,調(diào)用業(yè)務(wù)適配器將經(jīng)過(guò)分組后的公式集合傳送給相應(yīng)的業(yè)務(wù)處理服務(wù)進(jìn)行處理,得到業(yè)務(wù)數(shù)據(jù),將所述業(yè)務(wù)數(shù)據(jù)替換到所述二叉樹(shù)中與所述業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)的公式所在的位置,形成一個(gè)具有業(yè)務(wù)數(shù)據(jù)的二叉樹(shù)結(jié)構(gòu)的公式數(shù)據(jù)結(jié)構(gòu)體,基于所述二叉樹(shù)計(jì)算得到運(yùn)算結(jié)果。
在該技術(shù)方案中,可以解決所有類似y = f(x)的公式解析和運(yùn)算,并支持公式的嵌套,提供一種通用的處理機(jī)制。
在上述技術(shù)方案中,優(yōu)選地,所述解析單元可以包括判斷子單元,判斷當(dāng)前從所述字符串中取出的字符的類型;邏輯處理子單元,根據(jù)字符的不同類型選擇相應(yīng)的處理邏輯,將處理結(jié)果返回到所述字符串中最后一個(gè)字符所在的位置,所述字符的類型包括字母、 數(shù)字、分隔符和運(yùn)算符。針對(duì)每個(gè)字符的類型有相應(yīng)的處理邏輯,得到結(jié)構(gòu)性的數(shù)據(jù),在調(diào)試狀態(tài)可以清晰地看到日志中記錄的各個(gè)公式的結(jié)構(gòu)。
在上述技術(shù)方案中,優(yōu)選地,所述運(yùn)算單元在構(gòu)造所述二叉樹(shù)時(shí),將所述二叉樹(shù)的根節(jié)點(diǎn)設(shè)置為所述公式集合中的運(yùn)算符,將所述二叉樹(shù)的左右葉子節(jié)點(diǎn)設(shè)置為參與運(yùn)算的量,按照從所述二叉樹(shù)的左樹(shù)到所述二叉樹(shù)的右樹(shù)的方向順序進(jìn)行遞歸運(yùn)算,得到計(jì)算結(jié)果;所述運(yùn)算單元在進(jìn)行運(yùn)算時(shí),還判斷參與運(yùn)算的量是否是復(fù)雜數(shù)據(jù)類型,若是復(fù)雜數(shù)據(jù)類型,則根據(jù)存儲(chǔ)的實(shí)現(xiàn)運(yùn)算符重載的庫(kù)文件名及路徑,反射調(diào)用當(dāng)前運(yùn)算符相應(yīng)的服務(wù)接口進(jìn)行計(jì)算,返回一個(gè)復(fù)雜數(shù)據(jù)對(duì)象,將所述復(fù)雜數(shù)據(jù)對(duì)象放入所述二叉樹(shù)中繼續(xù)從左到右進(jìn)行運(yùn)算,得到計(jì)算結(jié)果。這種結(jié)構(gòu)樹(shù)準(zhǔn)確體現(xiàn)了公式中的各種運(yùn)算關(guān)系以及參與運(yùn)算的量,并且在運(yùn)算時(shí),可以按照公式中運(yùn)算符的優(yōu)先級(jí)先后順序的高低進(jìn)行運(yùn)算,進(jìn)一步保證運(yùn)算結(jié)果的準(zhǔn)確性。在運(yùn)算時(shí),也并不是對(duì)各公式進(jìn)行單個(gè)依次運(yùn)算,無(wú)需占用大量的服務(wù)器資源,提高了運(yùn)算效率,因?yàn)橄嗤墓接?jì)算一次之后,結(jié)果會(huì)存入緩存中,下次計(jì)算直接取出,無(wú)需再次進(jìn)行業(yè)務(wù)計(jì)算。
在上述技術(shù)方案中,優(yōu)選地,所述配置管理單元按照配置文件中指定的映射關(guān)系將所述配置參數(shù)進(jìn)行緩存,所述配置參數(shù)包括所述業(yè)務(wù)標(biāo)識(shí)和分隔符的對(duì)應(yīng)關(guān)系、業(yè)務(wù)標(biāo)識(shí)和業(yè)務(wù)處理服務(wù)庫(kù)文件的對(duì)應(yīng)關(guān)系、業(yè)務(wù)標(biāo)識(shí)和運(yùn)算符重載庫(kù)文件的對(duì)應(yīng)關(guān)系,所述解析單元根據(jù)與所述業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的分隔符對(duì)所述公式進(jìn)行解析拆分,例如有的系統(tǒng)公式是 FS(" 6001" ’""’ “年〃,“月〃,“貸〃),有的系統(tǒng)公式是i^e(6001,年,月,貸), 這樣在FS公式對(duì)應(yīng)的業(yè)務(wù)系統(tǒng)中定義雙引號(hào)與逗號(hào)作分隔符,F(xiàn)ee公式對(duì)應(yīng)的業(yè)務(wù)系統(tǒng)用逗號(hào)做分隔符即可。
在上述技術(shù)方案中,優(yōu)選地,所述緩存單元還將輸入的公式與所述公式的業(yè)務(wù)標(biāo)識(shí)進(jìn)行關(guān)聯(lián)緩存,具有相同所述業(yè)務(wù)標(biāo)識(shí)的公式存儲(chǔ)在同一組中。
根據(jù)本發(fā)明的技術(shù)方案,可以解決所有類似y = f(x)的公式解析和運(yùn)算,并支持公式的嵌套,提供一種通用的處理機(jī)制;可以實(shí)現(xiàn)對(duì)象間的運(yùn)算,可以將對(duì)象作為參數(shù)輸入;在調(diào)試狀態(tài)可以清晰的查看到日志中記錄的各個(gè)公式的結(jié)構(gòu)和處理對(duì)應(yīng)的公式耗費(fèi)的時(shí)間;可以通過(guò)配置關(guān)鍵字的方式,解決諸如同一系統(tǒng)中不同模塊公式格式不同的問(wèn)題; 可以對(duì)公式進(jìn)行分組處理,提高運(yùn)行效率。
根據(jù)本發(fā)明的又一方面,還提供了一種公式數(shù)據(jù)處理方法,包括步驟202,讀取配置文件中不同業(yè)務(wù)服務(wù)的配置參數(shù),接收從公式注冊(cè)接口輸入的不同業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的公式,根據(jù)所述配置參數(shù)對(duì)所述公式進(jìn)行拆分和解析,循環(huán)處理所述公式的字符串中的每個(gè)字符,生成計(jì)算機(jī)語(yǔ)言能夠識(shí)別的含有公式的數(shù)據(jù)結(jié)構(gòu)集合,其中,所述配置參數(shù)包括分隔符、業(yè)務(wù)處理服務(wù)庫(kù)文件名及路徑和運(yùn)算符重載庫(kù)文件名及路徑分別與業(yè)務(wù)標(biāo)識(shí)的對(duì)應(yīng)關(guān)系;步驟204,響應(yīng)計(jì)算請(qǐng)求,根據(jù)所述含有公式的數(shù)據(jù)結(jié)構(gòu)集合中的運(yùn)算符和參與運(yùn)算的量構(gòu)造二叉樹(shù),根據(jù)業(yè)務(wù)標(biāo)識(shí)對(duì)所述數(shù)據(jù)結(jié)構(gòu)集合進(jìn)行分組,并根據(jù)存儲(chǔ)的業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的業(yè)務(wù)服務(wù)庫(kù)文件名和路徑,反射調(diào)用相應(yīng)的業(yè)務(wù)處理服務(wù)接口處理每個(gè)分組,得到業(yè)務(wù)數(shù)據(jù),將所述業(yè)務(wù)數(shù)據(jù)替換到所述二叉樹(shù)中與所述業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)的公式所在的位置,形成一個(gè)具有業(yè)務(wù)數(shù)據(jù)的二叉樹(shù)結(jié)構(gòu)的公式數(shù)據(jù)結(jié)構(gòu)體,基于所述二叉樹(shù)計(jì)算得到運(yùn)算結(jié)果。
在上述技術(shù)方案中,優(yōu)選地,循環(huán)處理所述公式對(duì)應(yīng)的字符串中的每個(gè)字符的過(guò)程包括判斷當(dāng)前取出的字符的類型,若當(dāng)前取出的字符是字母,則調(diào)用字符處理邏輯對(duì)所述字符進(jìn)行處理,返回處理結(jié)果到所述字符串中最后一個(gè)字符所在的位置,將所述位置在當(dāng)前字符串中的位置加1,并作為下一個(gè)循環(huán)的起始值;若當(dāng)前取出的字符是數(shù)字,則調(diào)用數(shù)字處理邏輯對(duì)所述數(shù)字進(jìn)行處理,返回處理結(jié)果到所述字符串中最后一個(gè)字符所在的位置,將所述位置在當(dāng)前字符串中的位置加1,并作為下一個(gè)循環(huán)的起始值;若當(dāng)前取出的字符是分隔符,則調(diào)用分隔符處理邏輯對(duì)所述分隔符進(jìn)行處理,返回處理結(jié)果到所述字符串中最后一個(gè)字符所在的位置,將所述位置在當(dāng)前字符串中的位置加1,并作為下一個(gè)循環(huán)的起始值;若當(dāng)前取出的字符是運(yùn)算符,則調(diào)用運(yùn)算符處理邏輯對(duì)所述運(yùn)算符進(jìn)行處理,返回處理結(jié)果到所述字符串中最后一個(gè)字符所在的位置,將所述位置在當(dāng)前字符串中的位置加 1,并作為下一個(gè)循環(huán)的起始值。
在上述技術(shù)方案中,優(yōu)選地,所述步驟204還可以包括所述二叉樹(shù)的根節(jié)點(diǎn)設(shè)置為所述公式集合中的運(yùn)算符,所述二叉樹(shù)的左右葉子節(jié)點(diǎn)設(shè)置為參與運(yùn)算的量,定義所述二叉樹(shù)的左樹(shù)的優(yōu)先級(jí)高于所述二叉樹(shù)的右樹(shù),在進(jìn)行數(shù)據(jù)計(jì)算時(shí),判斷參與運(yùn)算的量是否為復(fù)雜數(shù)據(jù)類型,如果是復(fù)雜數(shù)據(jù)類型,則根據(jù)存儲(chǔ)的實(shí)現(xiàn)運(yùn)算符重載的庫(kù)文件名及路徑,反射調(diào)用當(dāng)前運(yùn)算符相應(yīng)的服務(wù)接口進(jìn)行計(jì)算,返回一個(gè)復(fù)雜數(shù)據(jù)對(duì)象,將所述復(fù)雜數(shù)據(jù)對(duì)象放入所述二叉樹(shù)中繼續(xù)從左到右進(jìn)行運(yùn)算,得到計(jì)算結(jié)果。
在上述技術(shù)方案中,優(yōu)選地,所述步驟202還包括按照指定的映射關(guān)系將所述配置參數(shù)進(jìn)行緩存,所述配置參數(shù)包括業(yè)務(wù)標(biāo)識(shí)和分隔符的對(duì)應(yīng)關(guān)系,根據(jù)與所述業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的分隔符對(duì)所述公式進(jìn)行拆分。分隔符例如逗號(hào)、分號(hào)。
在上述技術(shù)方案中,優(yōu)選地,還可以包括將輸入的公式與所述公式的業(yè)務(wù)標(biāo)識(shí)進(jìn)行關(guān)聯(lián)緩存,具有相同所述業(yè)務(wù)標(biāo)識(shí)的公式存儲(chǔ)在同一組中。
根據(jù)本發(fā)明的技術(shù)方案,可以解決所有類似y = f (X)的公式解析和運(yùn)算,并支持公式的嵌套,提供一種通用的處理機(jī)制;可以實(shí)現(xiàn)對(duì)象間的運(yùn)算,可以將對(duì)象作為參數(shù)輸入;在調(diào)試狀態(tài)可以清晰的查看到日志中記錄的各個(gè)公式的結(jié)構(gòu)和處理對(duì)應(yīng)的公式耗費(fèi)的時(shí)間;可以通過(guò)配置關(guān)鍵字的方式,解決諸如同一系統(tǒng)中不同模塊公式格式不同的問(wèn)題; 可以對(duì)公式進(jìn)行分組處理,提高運(yùn)行效率。


圖1示出了根據(jù)本發(fā)明的實(shí)施例的公式及公式數(shù)據(jù)處理裝置的框圖2示出了根據(jù)本發(fā)明的實(shí)施例的公式及公式數(shù)據(jù)處理過(guò)程示意圖3示出了根據(jù)本發(fā)明的實(shí)施例的對(duì)公式進(jìn)行緩存的示意圖4示出了根據(jù)本發(fā)明的實(shí)施例的公式解析的流程圖5示出了根據(jù)本發(fā)明的實(shí)施例的公式解析的流程圖6示出了根據(jù)本發(fā)明的實(shí)施例的公式數(shù)據(jù)處理方法的流程圖;以及
圖7示出了根據(jù)本發(fā)明的一個(gè)具體實(shí)施例在進(jìn)行公式數(shù)據(jù)計(jì)算時(shí)的數(shù)據(jù)結(jié)構(gòu)圖。
具體實(shí)施方式
為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。
在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來(lái)實(shí)施,因此,本發(fā)明并不限于下面公開(kāi)的具體實(shí)施例的限制。
圖1示出了根據(jù)本發(fā)明的實(shí)施例的公式及公式數(shù)據(jù)處理裝置的框圖。
如圖1所示,根據(jù)本發(fā)明的實(shí)施例的公式及公式數(shù)據(jù)處理裝置100包括配置管理單元102,用于讀取配置文件中不同業(yè)務(wù)模塊的配置參數(shù)并存儲(chǔ)在緩存單元104中,所述配置參數(shù)包括與所述業(yè)務(wù)模塊對(duì)應(yīng)的業(yè)務(wù)標(biāo)識(shí)、業(yè)務(wù)服務(wù)庫(kù)文件名及路徑、分隔符、實(shí)現(xiàn)運(yùn)算符重載的庫(kù)文件名及路徑;緩存單元104,接收從公式注冊(cè)接口輸入的不同業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的公式并進(jìn)行緩存,以及存儲(chǔ)所述配置參數(shù)和解析單元106產(chǎn)生的公式解析結(jié)果;所述解析單元106,獲取所述緩存單元104中的所述公式和與所述公式對(duì)應(yīng)的業(yè)務(wù)標(biāo)識(shí),根據(jù)所述配置參數(shù)對(duì)所述公式進(jìn)行拆分和解析,循環(huán)處理所述公式的字符串中的每個(gè)字符,生成計(jì)算機(jī)語(yǔ)言能夠識(shí)別的含有公式的數(shù)據(jù)結(jié)構(gòu)集合;運(yùn)算單元108,響應(yīng)計(jì)算請(qǐng)求,根據(jù)每個(gè)所述數(shù)據(jù)結(jié)構(gòu)集合中的運(yùn)算符和參與運(yùn)算的量構(gòu)造二叉樹(shù),根據(jù)業(yè)務(wù)標(biāo)識(shí)對(duì)所述數(shù)據(jù)結(jié)構(gòu)集合進(jìn)行分組,調(diào)用業(yè)務(wù)適配器將經(jīng)過(guò)分組后的公式集合傳送給相應(yīng)的業(yè)務(wù)處理服務(wù)進(jìn)行處理,得到業(yè)務(wù)數(shù)據(jù),將所述業(yè)務(wù)數(shù)據(jù)替換到所述二叉樹(shù)中與所述業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)的公式所在的位置,形成一個(gè)具有業(yè)務(wù)數(shù)據(jù)的二叉樹(shù)結(jié)構(gòu)的公式數(shù)據(jù)結(jié)構(gòu)體,基于所述二叉樹(shù)計(jì)算得到運(yùn)算結(jié)果。
在該技術(shù)方案中,可以解決所有類似y = f(x)的公式解析和運(yùn)算,并支持公式的嵌套,提供一種通用的處理機(jī)制。
在上述技術(shù)方案中,優(yōu)選地,配置的業(yè)務(wù)服務(wù)從一個(gè)給定的基類繼承,配置的實(shí)現(xiàn)運(yùn)算符重載的庫(kù)文件中的類從一個(gè)給定的基類;所述解析單元106可以包括判斷子單元 1062,判斷當(dāng)前從所述字符串中取出的字符的類型;邏輯處理子單元1064,根據(jù)字符的不同類型選擇相應(yīng)的處理邏輯,將處理結(jié)果返回到所述字符串中最后一個(gè)字符所在的位置, 所述字符的類型包括字母、數(shù)字、分隔符和運(yùn)算符。針對(duì)每個(gè)字符的類型有相應(yīng)的處理邏輯,得到結(jié)構(gòu)性的數(shù)據(jù),在調(diào)試狀態(tài)可以清晰地看到日志中記錄的各個(gè)公式的結(jié)構(gòu)。
在上述技術(shù)方案中,優(yōu)選地,所述運(yùn)算單元108在構(gòu)造所述二叉樹(shù)時(shí),將所述二叉樹(shù)的根節(jié)點(diǎn)設(shè)置為所述公式集合中的運(yùn)算符,將所述二叉樹(shù)的左右葉子節(jié)點(diǎn)設(shè)置為參與運(yùn)算的量,按照從所述二叉樹(shù)的左樹(shù)到所述二叉樹(shù)的右樹(shù)的方向順序進(jìn)行遞歸運(yùn)算,得到計(jì)算結(jié)果;所述運(yùn)算單元108在進(jìn)行運(yùn)算時(shí),還判斷參與運(yùn)算的量是否是復(fù)雜數(shù)據(jù)類型,若是復(fù)雜數(shù)據(jù)類型,則根據(jù)存儲(chǔ)的實(shí)現(xiàn)運(yùn)算符重載的庫(kù)文件名及路徑,反射調(diào)用當(dāng)前運(yùn)算符相應(yīng)的服務(wù)接口進(jìn)行計(jì)算,返回一個(gè)復(fù)雜數(shù)據(jù)對(duì)象,將所述復(fù)雜數(shù)據(jù)對(duì)象放入所述二叉樹(shù)中繼續(xù)從左到右進(jìn)行運(yùn)算,得到計(jì)算結(jié)果。這種結(jié)構(gòu)樹(shù)準(zhǔn)確體現(xiàn)了公式中的各種運(yùn)算關(guān)系以及參與運(yùn)算的量,并且在運(yùn)算時(shí),可以按照先后順序來(lái)進(jìn)行運(yùn)算,進(jìn)一步保證運(yùn)算結(jié)果的準(zhǔn)確性。在運(yùn)算時(shí),也并不是對(duì)各公式進(jìn)行單個(gè)依次運(yùn)算,無(wú)需占用大量的服務(wù)器資源,提高了運(yùn)算效率。
在上述技術(shù)方案中,優(yōu)選地,所述配置管理單元102按照配置文件中指定的映射關(guān)系將所述配置參數(shù)進(jìn)行緩存,所述配置參數(shù)包括所述業(yè)務(wù)標(biāo)識(shí)和分隔符的對(duì)應(yīng)關(guān)系,所述解析單元根據(jù)與所述業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的分隔符對(duì)所述公式進(jìn)行拆分。
在上述技術(shù)方案中,優(yōu)選地,所述緩存單元104還將輸入的公式與所述公式的業(yè)務(wù)標(biāo)識(shí)進(jìn)行關(guān)聯(lián)緩存,具有相同所述業(yè)務(wù)標(biāo)識(shí)的公式存儲(chǔ)在同一組中。
根據(jù)本發(fā)明的技術(shù)方案,可以解決所有類似y = f (X)的公式解析和運(yùn)算,并支持公式的嵌套,提供一種通用的處理機(jī)制;可以實(shí)現(xiàn)對(duì)象間的運(yùn)算,可以將對(duì)象作為參數(shù)輸入;在調(diào)試狀態(tài)可以清晰的查看到日志中記錄的各個(gè)公式的結(jié)構(gòu)和處理對(duì)應(yīng)的公式耗費(fèi)的時(shí)間;可以通過(guò)配置關(guān)鍵字的方式,解決諸如同一系統(tǒng)中不同模塊公式格式不同的問(wèn)題; 可以對(duì)公式進(jìn)行分組處理,提高運(yùn)行效率。
在此,應(yīng)該理解,本發(fā)明提供的一種通用的公式及公式數(shù)據(jù)處理裝置,可以應(yīng)用于財(cái)務(wù)系統(tǒng)、報(bào)表系統(tǒng)、生產(chǎn)制造系統(tǒng)、人事系統(tǒng)、稅務(wù)系統(tǒng),以及其它所有需要采用數(shù)學(xué)公式的系統(tǒng);并且可以自動(dòng)擴(kuò)展到一些應(yīng)用或者計(jì)算比較特殊的領(lǐng)域,實(shí)現(xiàn)對(duì)象間的運(yùn)算;通過(guò)將這個(gè)裝置應(yīng)用到全系統(tǒng)中,可以為系統(tǒng)帶來(lái)統(tǒng)一的公式處理機(jī)制,提高系統(tǒng)的運(yùn)行效率和穩(wěn)定性。
圖2示出了根據(jù)本發(fā)明的實(shí)施例的公式數(shù)據(jù)處理原理示意圖。
如圖2所示,描述了該公式及公式數(shù)據(jù)處理裝置的內(nèi)部系統(tǒng)結(jié)構(gòu)圖,包括公式緩存組件(對(duì)應(yīng)圖1中的緩存單元104),公式解析組件(對(duì)應(yīng)圖1中的解析單元106),四則運(yùn)算組件(對(duì)應(yīng)圖1中的運(yùn)算單元108),配置管理組件(對(duì)應(yīng)圖1中的配置單元102)、對(duì)象數(shù)據(jù)處理組件和業(yè)務(wù)適配器,各個(gè)模塊之間協(xié)調(diào)運(yùn)行過(guò)程如下
步驟302,配置管理組件在公式及公式數(shù)據(jù)處理裝置初始化時(shí)讀取配置參數(shù)(配置參數(shù)包括分隔符以及與分隔符對(duì)應(yīng)的業(yè)務(wù)標(biāo)識(shí)),并放入內(nèi)存。公式緩存組件通過(guò)公式注冊(cè)接口接收不同業(yè)務(wù)模塊的公式注冊(cè)請(qǐng)求,并存儲(chǔ)在對(duì)應(yīng)的緩沖區(qū)中,注冊(cè)的公式包括公式名稱和業(yè)務(wù)標(biāo)志(即業(yè)務(wù)標(biāo)識(shí))。
步驟304,公式解析組件接收傳入的公式,響應(yīng)解析請(qǐng)求,具體解析過(guò)程如下
讀取在步驟302中存放內(nèi)存中的配置信息;
將傳入的公式根據(jù)配置信息進(jìn)行解析;
將解析的結(jié)果存儲(chǔ)在一個(gè)Hash表中;
將該Hash數(shù)據(jù)返回至公式解析組件。
公式解析組件繼續(xù)接收傳入的公式,響應(yīng)解析請(qǐng)求,過(guò)程如下
重復(fù)步驟304的解析請(qǐng)求,將公式及參數(shù)轉(zhuǎn)入到Hash結(jié)構(gòu)的數(shù)據(jù)中;
將公式中所有的運(yùn)算關(guān)系分解出來(lái),并根據(jù)運(yùn)算符號(hào)的優(yōu)先級(jí)裝入一個(gè)自定義的結(jié)構(gòu)體中,并同時(shí)將公式按公式名稱進(jìn)行分組,存入一個(gè)緩存區(qū)。
步驟306,調(diào)用業(yè)務(wù)適配器,將緩存區(qū)中的公式傳給不同的業(yè)務(wù)服務(wù)進(jìn)行處理,得到業(yè)務(wù)數(shù)據(jù),每個(gè)業(yè)務(wù)數(shù)據(jù)都是一個(gè)對(duì)象;
判斷返回的業(yè)務(wù)數(shù)據(jù)的實(shí)際類型,如果是簡(jiǎn)單類型,則暫時(shí)放入緩存區(qū),如果是復(fù)雜對(duì)象數(shù)據(jù)類型,例如dataTable型,則調(diào)用對(duì)象數(shù)據(jù)運(yùn)算組件進(jìn)行大數(shù)據(jù)的計(jì)算,并將返回結(jié)果存入該原復(fù)雜對(duì)象數(shù)據(jù)的位置;
其中,對(duì)于不同業(yè)務(wù)系統(tǒng)的擴(kuò)展運(yùn)算,不同業(yè)務(wù)領(lǐng)域的人員只需從對(duì)象數(shù)據(jù)運(yùn)算組件的一個(gè)運(yùn)算符處理基類繼承,重載運(yùn)算符,然后在配置文件中增加實(shí)現(xiàn)運(yùn)算符重載的庫(kù)文件名及路徑。
當(dāng)所有的復(fù)雜對(duì)象數(shù)據(jù)類型都處理完成后,則進(jìn)行簡(jiǎn)單數(shù)據(jù)間的四則混合運(yùn)算, 最終得到計(jì)算結(jié)果。
下面針對(duì)圖2中的相關(guān)組件進(jìn)行詳細(xì)說(shuō)明。
(1)公式緩存組件
圖3示出了公式在內(nèi)存中的存儲(chǔ)結(jié)構(gòu),具有相同業(yè)務(wù)標(biāo)識(shí)的公式存儲(chǔ)在一個(gè)相同的組中。
第一公式緩存組件可以存儲(chǔ)不同業(yè)務(wù)類型的公式。
第二 根據(jù)接收到的數(shù)據(jù),分析該數(shù)據(jù)的標(biāo)簽特征(即業(yè)務(wù)標(biāo)識(shí)),在緩存中建立不同的數(shù)據(jù)緩存段。將符合對(duì)應(yīng)數(shù)據(jù)緩存段特征的數(shù)據(jù)存入該數(shù)據(jù)緩存段對(duì)應(yīng)的緩存區(qū), 以標(biāo)簽作為緩存的頁(yè)標(biāo)簽。
第三當(dāng)向緩存區(qū)發(fā)出獲取數(shù)據(jù)的請(qǐng)求時(shí),根據(jù)請(qǐng)求的相關(guān)標(biāo)簽快速定位到相關(guān)的數(shù)據(jù)緩存頁(yè)并從緩存中取出所需數(shù)據(jù)。
(2)公式解析組件
該公式解析組件主要用來(lái)將單個(gè)或者多個(gè)公式解析成一定的計(jì)算機(jī)開(kāi)發(fā)語(yǔ)言可以識(shí)別并處理的數(shù)據(jù)結(jié)構(gòu)。
該公式解析組件可以分為兩種解析方式,一種是單個(gè)公式或單個(gè)公式組成的集合的批量解析,例如,可以將單個(gè)公式數(shù)組如{SLQC(" 2010",“ 1002",〃〃,〃 〃), QC(" 1131",“ 01〃,“年〃,“月〃,“借〃,“原幣〃,[部門="001〃,客戶 ="002" ])}解析成如下表1所示的數(shù)據(jù)結(jié)構(gòu)
權(quán)利要求
1.一種公式及公式數(shù)據(jù)處理裝置,其特征在于,包括配置管理單元,用于讀取配置文件中不同業(yè)務(wù)模塊的配置參數(shù)并存儲(chǔ)在緩存單元中, 所述配置參數(shù)包括分隔符、業(yè)務(wù)處理服務(wù)庫(kù)文件名及路徑和運(yùn)算符重載庫(kù)文件名及路徑分別與業(yè)務(wù)標(biāo)識(shí)的對(duì)應(yīng)關(guān)系;所述緩存單元,接收從公式注冊(cè)接口輸入的不同業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的公式并進(jìn)行緩存,以及存儲(chǔ)所述配置參數(shù)和解析單元產(chǎn)生的公式解析結(jié)果;所述解析單元,獲取所述緩存單元中的所述公式和與所述公式對(duì)應(yīng)的業(yè)務(wù)標(biāo)識(shí),根據(jù)所述配置參數(shù)對(duì)所述公式進(jìn)行拆分和解析,循環(huán)處理所述公式的字符串中的每個(gè)字符,生成含有公式的數(shù)據(jù)結(jié)構(gòu)集合;運(yùn)算單元,響應(yīng)計(jì)算請(qǐng)求,根據(jù)每個(gè)所述數(shù)據(jù)結(jié)構(gòu)集合中的運(yùn)算符和參與運(yùn)算的量構(gòu)造二叉樹(shù),根據(jù)業(yè)務(wù)標(biāo)識(shí)對(duì)所述數(shù)據(jù)結(jié)構(gòu)集合進(jìn)行分組,調(diào)用業(yè)務(wù)適配器將經(jīng)過(guò)分組后的公式集合傳送給相應(yīng)的業(yè)務(wù)處理服務(wù)進(jìn)行處理,得到業(yè)務(wù)數(shù)據(jù),將所述業(yè)務(wù)數(shù)據(jù)替換到所述二叉樹(shù)中與所述業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)的公式所在的位置,形成一個(gè)具有業(yè)務(wù)數(shù)據(jù)的二叉樹(shù)結(jié)構(gòu)的公式數(shù)據(jù)結(jié)構(gòu)體,基于所述二叉樹(shù)計(jì)算得到運(yùn)算結(jié)果。
2.根據(jù)權(quán)利要求1所述的公式及公式數(shù)據(jù)處理裝置,其特征在于,所述解析單元包括判斷子單元,判斷當(dāng)前從所述字符串中取出的字符的類型;邏輯處理子單元,根據(jù)字符的不同類型選擇相應(yīng)的處理邏輯,將處理結(jié)果返回到所述字符串中最后一個(gè)字符所在的位置,所述字符的類型包括字母、數(shù)字、分隔符和運(yùn)算符。
3.根據(jù)權(quán)利要求1所述的公式及公式數(shù)據(jù)處理裝置,其特征在于,所述運(yùn)算單元在構(gòu)造所述二叉樹(shù)時(shí),將所述二叉樹(shù)的根節(jié)點(diǎn)設(shè)置為所述公式集合中的運(yùn)算符,將所述二叉樹(shù)的左右葉子節(jié)點(diǎn)設(shè)置為參與運(yùn)算的量,按照從所述二叉樹(shù)的左樹(shù)到所述二叉樹(shù)的右樹(shù)的方向順序進(jìn)行遞歸運(yùn)算,得到計(jì)算結(jié)果;所述運(yùn)算單元在進(jìn)行運(yùn)算時(shí),還判斷參與運(yùn)算的量是否是復(fù)雜數(shù)據(jù)類型,若是復(fù)雜數(shù)據(jù)類型,則根據(jù)所述實(shí)現(xiàn)運(yùn)算符重載的庫(kù)文件名及路徑,反射調(diào)用當(dāng)前運(yùn)算符相應(yīng)的服務(wù)接口進(jìn)行計(jì)算,返回一個(gè)復(fù)雜數(shù)據(jù)對(duì)象,將所述復(fù)雜數(shù)據(jù)對(duì)象放入所述二叉樹(shù)中繼續(xù)從左到右進(jìn)行運(yùn)算,得到計(jì)算結(jié)果。
4.根據(jù)權(quán)利要求1所述的公式及公式數(shù)據(jù)處理裝置,其特征在于,所述配置管理單元按照配置文件中指定的映射關(guān)系將所述配置參數(shù)進(jìn)行緩存,所述解析單元根據(jù)與所述業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的分隔符對(duì)所述公式進(jìn)行拆分。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的公式及公式數(shù)據(jù)處理裝置,其特征在于,所述緩存單元將輸入的公式與所述公式的業(yè)務(wù)標(biāo)識(shí)進(jìn)行關(guān)聯(lián)緩存,具有相同所述業(yè)務(wù)標(biāo)識(shí)的公式存儲(chǔ)在同一組中。
6.一種公式及公式數(shù)據(jù)處理方法,其特征在于,包括步驟202,讀取配置文件中不同業(yè)務(wù)服務(wù)的配置參數(shù),接收從公式注冊(cè)接口輸入的不同業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的公式,根據(jù)所述配置參數(shù)對(duì)所述公式進(jìn)行拆分和解析,循環(huán)處理所述公式的字符串中的每個(gè)字符,生成含有公式的數(shù)據(jù)結(jié)構(gòu)集合,其中,所述配置參數(shù)包括分隔符、業(yè)務(wù)處理服務(wù)庫(kù)文件名及路徑和運(yùn)算符重載庫(kù)文件名及路徑分別與業(yè)務(wù)標(biāo)識(shí)的對(duì)應(yīng)關(guān)系;步驟204,響應(yīng)計(jì)算請(qǐng)求,根據(jù)所述含有公式的數(shù)據(jù)結(jié)構(gòu)集合中的運(yùn)算符和參與運(yùn)算的量構(gòu)造二叉樹(shù),根據(jù)業(yè)務(wù)標(biāo)識(shí)對(duì)所述數(shù)據(jù)結(jié)構(gòu)集合進(jìn)行分組,并根據(jù)存儲(chǔ)的業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的業(yè)務(wù)服務(wù)庫(kù)文件名和路徑,反射調(diào)用相應(yīng)的業(yè)務(wù)處理服務(wù)接口處理每個(gè)分組,得到業(yè)務(wù)數(shù)據(jù),將所述業(yè)務(wù)數(shù)據(jù)替換到所述二叉樹(shù)中與所述業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)的公式所在的位置,形成一個(gè)具有業(yè)務(wù)數(shù)據(jù)的二叉樹(shù)結(jié)構(gòu)的公式數(shù)據(jù)結(jié)構(gòu)體,基于所述二叉樹(shù)計(jì)算得到運(yùn)算結(jié)果。
7.根據(jù)權(quán)利要求6所述的公式及公式數(shù)據(jù)處理方法,其特征在于,循環(huán)處理所述公式對(duì)應(yīng)的字符串中的每個(gè)字符的過(guò)程包括判斷當(dāng)前取出的字符的類型,若當(dāng)前取出的字符是字母,則調(diào)用字符處理邏輯對(duì)所述字符進(jìn)行處理,返回處理結(jié)果到所述字符串中最后一個(gè)字符所在的位置,將所述位置在當(dāng)前字符串中的位置加1,并作為下一個(gè)循環(huán)的起始值;若當(dāng)前取出的字符是數(shù)字,則調(diào)用數(shù)字處理邏輯對(duì)所述數(shù)字進(jìn)行處理,返回處理結(jié)果到所述字符串中最后一個(gè)字符所在的位置,將所述位置在當(dāng)前字符串中的位置加1,并作為下一個(gè)循環(huán)的起始值;若當(dāng)前取出的字符是分隔符,則調(diào)用分隔符處理邏輯對(duì)所述分隔符進(jìn)行處理,返回處理結(jié)果到所述字符串中最后一個(gè)字符所在的位置,將所述位置在當(dāng)前字符串中的位置加1, 并作為下一個(gè)循環(huán)的起始值;若當(dāng)前取出的字符是運(yùn)算符,則調(diào)用運(yùn)算符處理邏輯對(duì)所述運(yùn)算符進(jìn)行處理,返回處理結(jié)果到所述字符串中最后一個(gè)字符所在的位置,將所述位置在當(dāng)前字符串中的位置加1, 并作為下一個(gè)循環(huán)的起始值。
8.根據(jù)權(quán)利要求6所述的公式及公式數(shù)據(jù)處理方法,其特征在于,所述步驟204還包括所述二叉樹(shù)的根節(jié)點(diǎn)設(shè)置為所述公式集合中的運(yùn)算符,所述二叉樹(shù)的左右葉子節(jié)點(diǎn)設(shè)置為參與運(yùn)算的量,定義所述二叉樹(shù)的左樹(shù)的優(yōu)先級(jí)高于所述二叉樹(shù)的右樹(shù),在進(jìn)行數(shù)據(jù)計(jì)算時(shí),判斷參與運(yùn)算的量是否為復(fù)雜數(shù)據(jù)類型,如果是復(fù)雜數(shù)據(jù)類型,則根據(jù)存儲(chǔ)的實(shí)現(xiàn)運(yùn)算符重載的庫(kù)文件名及路徑,反射調(diào)用當(dāng)前運(yùn)算符相應(yīng)的服務(wù)接口進(jìn)行計(jì)算,返回一個(gè)復(fù)雜數(shù)據(jù)對(duì)象,將所述復(fù)雜數(shù)據(jù)對(duì)象放入所述二叉樹(shù)中繼續(xù)從左到右進(jìn)行運(yùn)算,得到計(jì)算結(jié)果。
9.根據(jù)權(quán)利要求6所述的公式及公式數(shù)據(jù)處理方法,其特征在于,所述步驟202還包括按照指定的映射關(guān)系將所述配置參數(shù)進(jìn)行緩存,所述配置參數(shù)包括業(yè)務(wù)標(biāo)識(shí)和分隔符的對(duì)應(yīng)關(guān)系,根據(jù)與所述業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的分隔符對(duì)所述公式進(jìn)行拆分。
10.根據(jù)權(quán)利要求6至9中任一項(xiàng)所述的公式及公式數(shù)據(jù)處理方法,其特征在于,還包括將輸入的公式與所述公式的業(yè)務(wù)標(biāo)識(shí)進(jìn)行關(guān)聯(lián)緩存,具有相同所述業(yè)務(wù)標(biāo)識(shí)的公式存儲(chǔ)在同一組中。
全文摘要
本發(fā)明提供了一種公式及公式數(shù)據(jù)處理裝置,包括配置管理單元,用于讀取業(yè)務(wù)配置參數(shù);緩存單元,存儲(chǔ)不同業(yè)務(wù)服務(wù)對(duì)應(yīng)的公式;解析單元,獲取公式和與公式對(duì)應(yīng)的業(yè)務(wù)標(biāo)識(shí),根據(jù)配置參數(shù)對(duì)公式進(jìn)行拆分和解析,循環(huán)處理公式的字符串中的每個(gè)字符,生成數(shù)據(jù)結(jié)構(gòu)集合;運(yùn)算單元,響應(yīng)計(jì)算請(qǐng)求,根據(jù)數(shù)據(jù)結(jié)構(gòu)集合中的運(yùn)算符和參與運(yùn)算的量構(gòu)造二叉樹(shù),根據(jù)業(yè)務(wù)標(biāo)識(shí)對(duì)數(shù)據(jù)集合進(jìn)行分組,調(diào)用業(yè)務(wù)適配器將分組傳送給相應(yīng)的業(yè)務(wù)處理服務(wù)進(jìn)行處理,得到業(yè)務(wù)數(shù)據(jù),將業(yè)務(wù)數(shù)據(jù)替換到二叉樹(shù)中與業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)的公式所在的位置,基于二叉樹(shù)計(jì)算得到運(yùn)算結(jié)果。為系統(tǒng)帶來(lái)統(tǒng)一的公式處理機(jī)制,提供系統(tǒng)運(yùn)行效率和穩(wěn)定性。本發(fā)明還提供了一種公式數(shù)據(jù)處理方法。
文檔編號(hào)G06F17/30GK102521411SQ20111044774
公開(kāi)日2012年6月27日 申請(qǐng)日期2011年12月28日 優(yōu)先權(quán)日2011年12月28日
發(fā)明者王加位 申請(qǐng)人:暢捷通信息技術(shù)股份有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
东明县| 阿拉善左旗| 永修县| 大同市| 怀宁县| 桦南县| 延庆县| 昭通市| 柳河县| 西昌市| 奉化市| 衡南县| 蓬溪县| 靖西县| 锦屏县| 财经| 巴马| 都昌县| 商丘市| 昌乐县| 怀宁县| 绵阳市| 宜阳县| 吉隆县| 涡阳县| 长武县| 扬州市| 博白县| 咸阳市| 乌海市| 临清市| 九台市| 黄梅县| 六盘水市| 台东市| 临夏县| 新泰市| 托克托县| 秦安县| 梨树县| 商河县|