一種對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的方法
【專利摘要】本發(fā)明是一種對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的方法,使用數(shù)據(jù)庫表單一記錄+發(fā)票快速查驗+微結(jié)構(gòu)+JAVA反射類二次解析;通過發(fā)票模板基類自動識別主桿和明細(xì)主要信息;通過模板基類中解析的模板代碼,自動去模板管理類中,找到相應(yīng)的具體發(fā)票模板類;再通過反射技術(shù)生成具體的發(fā)票模板類,并對微結(jié)構(gòu)中的結(jié)點進(jìn)行完整解析;最后返回具體的發(fā)票模板類。本發(fā)明可以保證發(fā)票數(shù)據(jù)的完整性和一致性,無需進(jìn)行二次解析,可直接進(jìn)行快速查詢,且自動對微結(jié)構(gòu)進(jìn)行二次解析工作,并容易對其進(jìn)行封裝,簡化發(fā)票的存取。
【專利說明】一種對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種網(wǎng)絡(luò)發(fā)票開票系統(tǒng)發(fā)票信息的存儲解析技術(shù),具體的說是一種對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的方法。
【背景技術(shù)】
[0002]目前對于有很多票樣的普通發(fā)票存儲與解析的方法,都是純基于數(shù)據(jù)庫的,最多也是配合代碼表進(jìn)行存儲,在存儲時,通常有以下兩種方式:一主表加多子表或一種模板發(fā)票對應(yīng)一張表。
[0003]對于一主表加多子表的方式來講,就是把發(fā)票共性的存在一張主表中,并把不同模板的發(fā)票明細(xì)信息,通過模板類型存在不同的子表中,在查詢時先查主表,再根據(jù)模板類型查子表,從而可以解析出一張完整的發(fā)票。對于一種模板發(fā)票對應(yīng)一張表的方式,是通過一張不同的發(fā)票模板,存于不同表,每表設(shè)計成共性部分和明細(xì)部分,按模板的每行明細(xì)信息放于一行數(shù)據(jù)的明細(xì)部分,這樣每一條記錄都記錄共性部分和一行的明細(xì)信息,把這張表的多行信息讀取后,就組成了一張完整發(fā)票的信息。
[0004]以上現(xiàn)有技術(shù)存在的問題是:(1)一主表加多子表方式:a)子表主健是主表主健的強(qiáng)制外健,以保持一致性,對數(shù)據(jù)庫性能壓力較大;b)在子表中由于存在多行,非常容易可能刪除一條,從而不利于保整完整性;c)由于表比較多維護(hù)比較困難,在備份發(fā)票數(shù)據(jù)時,需要多表備份,并容易形成死鎖,并且不利于利用大型關(guān)系型數(shù)據(jù)庫的分區(qū)表技術(shù)實現(xiàn)分區(qū)管理。⑵一種模板發(fā)票對應(yīng)一張表的方式:a)由于對共性部份要保存多個備份,數(shù)據(jù)冗余度較大山)在子表中由于存在多行,非常容易可能刪除一條,從而不利于保整完整性;c)由于表比較多維護(hù)比較困難,在備份發(fā)票數(shù)據(jù)時,需要多表備份;d)需要通過軟件確定訪問那個數(shù)據(jù)表,如果一個用戶有多種票時,給應(yīng)用提供了困難。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問題是,克服現(xiàn)有技術(shù)的缺點,提供一種對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的方法,保證發(fā)票數(shù)據(jù)的完整性和一致性,無需進(jìn)行二次解析,可直接進(jìn)行快速查詢,且自動對微結(jié)構(gòu)進(jìn)行二次解析工作,并容易對其進(jìn)行封裝,簡化發(fā)票的存取。
[0006]本發(fā)明解決以上技術(shù)問題的技術(shù)方案是:
一種對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的方法,按以下步驟進(jìn)行:
㈠把普通發(fā)票存儲分成三部分:主桿信息、明細(xì)主要信息和微結(jié)構(gòu),其中,所述主桿信息為各種發(fā)票的共同所有的字段,包括:發(fā)票代碼、發(fā)票號碼、開票防偽碼、開票方納稅人識別號、開票方名稱、授票方納稅人識別號、授票方納稅人名稱、開票金額、開票時間、開票狀態(tài)及發(fā)票數(shù)據(jù)來源類型,用以通用的發(fā)票查詢;所述明細(xì)主要信息為發(fā)票中的明細(xì)條目中金額最大的那一條,如果最大金額有多條,則取第一條,包括這一條明細(xì)信息中的品目名稱、數(shù)量、單價和金額,用以進(jìn)行發(fā)票真?zhèn)尾轵灒凰鑫⒔Y(jié)構(gòu)由兩個字段組成,一個是發(fā)票模板代碼,另一個是可存儲小于4GB的CLOB類型字段,所述CLOB類型字段存儲了發(fā)票的明細(xì)數(shù)據(jù),存儲形式為完整的XML文件;
(二)在微結(jié)構(gòu)的XML文件中定義發(fā)票的三個層次節(jié)點:主桿節(jié)點、明細(xì)主要節(jié)點和發(fā)票上具體每行的記錄信息節(jié)點,在XML中不但存儲字符結(jié)點,同時提供其它二進(jìn)制信息的存儲,在對這個微結(jié)構(gòu)進(jìn)行解析時使用一個模板管理類、一個發(fā)票模板基類以及基于這個基類所派生的發(fā)票模板類,將各個發(fā)票模板類自動注冊到模板管理類中,在對單張發(fā)票進(jìn)行完整解析時,步驟如下:
⑴通過發(fā)票模板基類、自動識別主桿和明細(xì)主要信息;
⑵通過模板基類中解析的模板代碼,自動去模板管理類中找到相應(yīng)的具體發(fā)票模板類;
⑶通過JAVA的反射技術(shù),即通過類的字符串名稱來動態(tài)生成實體發(fā)票模板對象,并根據(jù)微結(jié)構(gòu)中節(jié)點的字符串名稱來獲取實體發(fā)票模板對象中相應(yīng)名稱的屬性,并把此節(jié)點中的值賦給此屬性,以此盾環(huán),直至微結(jié)構(gòu)中的所有節(jié)點都處理了一次,從而對整個微結(jié)構(gòu)的數(shù)據(jù)進(jìn)行解析;
⑷返回具體的發(fā)票模板類。
[0007]以上方法中,如果是發(fā)票查詢與查驗,則只要執(zhí)行步驟⑴解析即可。以上方法中,發(fā)票上具體每行的記錄信息節(jié)點包括:品名、規(guī)格、單價、數(shù)量和總價。本發(fā)明所用的JAVA的反射技術(shù)為本領(lǐng)域的常用技術(shù),在此不再詳細(xì)描述。
[0008]本發(fā)明的有益效果是:⑴使發(fā)票數(shù)據(jù)可以統(tǒng)一存儲在一張關(guān)系表中,并且是一張發(fā)票一條記錄,更好的保證了其完整性和一致性,降底了數(shù)據(jù)庫處理和存儲資源的開銷,并為實現(xiàn)分區(qū)存儲提供了便利;⑵對于發(fā)票主體查詢和查驗工作,無需進(jìn)行二次解析,可直接進(jìn)行查詢,并滿足快速查驗要求;(3)即使在不同的軟件中傳遞發(fā)票數(shù)據(jù),因為無需解析微結(jié)構(gòu),所以不會影響發(fā)票的查詢和查驗功能;⑷利用反射技術(shù),可以較好的自動對微結(jié)構(gòu)進(jìn)行二次解析工作,并容易對其進(jìn)行封裝,簡化發(fā)票的存取工作;(5)使用微結(jié)構(gòu),可以在三個層次中增加數(shù)據(jù)結(jié)點,并支持多種數(shù)據(jù)類型,提供了良好的模板擴(kuò)展性。
【專利附圖】
【附圖說明】
[0009]圖1為本發(fā)明的對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的示意圖。
【具體實施方式】
[0010]實施例1
本實施例是一種對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的方法,如圖1所示,首先把普通發(fā)票存儲分成三部分:主桿信息、明細(xì)主要信息和微結(jié)構(gòu)。主桿信息是指各種發(fā)票的共同所有的字段,包括:發(fā)票代碼、發(fā)票號碼、開票防偽碼、開票方納稅人識別號、開票方名稱、授票方納稅人識別號、授票方納稅人名稱、開票金額、開票時間、開票狀態(tài)及發(fā)票數(shù)據(jù)來源類型等,它主要來應(yīng)付通用的發(fā)票查詢;明細(xì)主要信息是指發(fā)票中的明細(xì)條目中金額最大的那一條,如果最大金額有多條,則取第一條,包括了這一條明細(xì)信息中的:品目名稱、數(shù)量、單價和金額,它可以用來進(jìn)行發(fā)票真?zhèn)尾轵?;微結(jié)構(gòu)是有兩個字段組成,一個是發(fā)票模板代碼,另一個是可存儲小于4GB的CLOB類型字段,它存儲了發(fā)票的明細(xì)數(shù)據(jù),存儲形式為完整的XML(擴(kuò)展性標(biāo)識語言)文件。
[0011]在微結(jié)構(gòu)的XML文件中定義發(fā)票的三個層次節(jié)點:主桿節(jié)點、明細(xì)主要節(jié)點和發(fā)票上具體每行的記錄信息節(jié)點,發(fā)票上具體每行的記錄信息節(jié)點包括:品名、規(guī)格、單價、數(shù)量和總價等,這三個層次,可以為模板中不同層次中增加結(jié)點信息提供支持。在XML中不但存儲字符結(jié)點,同時提供其它二進(jìn)制信息的存儲,比如加密信息等。在對這個微結(jié)構(gòu)進(jìn)行解析時使用一個模板管理類、一個發(fā)票模板基類以及基于這個基類所派生的發(fā)票模板類,將各個發(fā)票模板類自動注冊到模板管理類中,在對單張發(fā)票進(jìn)行完整解析時,步驟如下:
⑴通過發(fā)票模板基類、自動識別主桿和明細(xì)主要信息;
⑵通過模板基類中解析的模板代碼,自動去模板管理類中找到相應(yīng)的具體發(fā)票模板類;
⑶通過JAVA的反射技術(shù),即通過類的字符串名稱來動態(tài)生成實體發(fā)票模板對象,并根據(jù)微結(jié)構(gòu)中節(jié)點的字符串名稱來獲取實體發(fā)票模板對象中相應(yīng)名稱的屬性,并把此節(jié)點中的值賦給此屬性,以此盾環(huán),直至微結(jié)構(gòu)中的所有節(jié)點都處理了一次,從而對整個微結(jié)構(gòu)的數(shù)據(jù)進(jìn)行解析;
⑷返回具體的發(fā)票模板類。
[0012]如果是發(fā)票查詢與查驗,則只要執(zhí)行第一步解析即可。
[0013]除上述實施例外,本發(fā)明還可以有其他實施方式。凡采用等同替換或等效變換形成的技術(shù)方案,均落在本發(fā)明要求的保護(hù)范圍。
【權(quán)利要求】
1.一種對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的方法,其特征在于:按以下步驟進(jìn)行: ㈠把普通發(fā)票存儲分成三部分:主桿信息、明細(xì)主要信息和微結(jié)構(gòu),其中,所述主桿信息為各種發(fā)票的共同所有的字段,包括:發(fā)票代碼、發(fā)票號碼、開票防偽碼、開票方納稅人識別號、開票方名稱、授票方納稅人識別號、授票方納稅人名稱、開票金額、開票時間、開票狀態(tài)及發(fā)票數(shù)據(jù)來源類型,用以通用的發(fā)票查詢;所述明細(xì)主要信息為發(fā)票中的明細(xì)條目中金額最大的那一條,如果最大金額有多條,則取第一條,包括這一條明細(xì)信息中的品目名稱、數(shù)量、單價和金額,用以進(jìn)行發(fā)票真?zhèn)尾轵?;所述微結(jié)構(gòu)由兩個字段組成,一個是發(fā)票模板代碼,另一個是可存儲小于4GB的CLOB類型字段,所述CLOB類型字段存儲了發(fā)票的明細(xì)數(shù)據(jù),存儲形式為完整的XML文件; (二)在微結(jié)構(gòu)的XML文件中定義發(fā)票的三個層次節(jié)點:主桿節(jié)點、明細(xì)主要節(jié)點和發(fā)票上具體每行的記錄信息節(jié)點,在XML中不但存儲字符結(jié)點,同時提供其它二進(jìn)制信息的存儲,在對這個微結(jié)構(gòu)進(jìn)行解析時使用一個模板管理類、一個發(fā)票模板基類以及基于這個基類所派生的發(fā)票模板類,將各個發(fā)票模板類自動注冊到模板管理類中,在對單張發(fā)票進(jìn)行完整解析時,步驟如下: ⑴通過發(fā)票模板基類、自動識別主桿和明細(xì)主要信息; ⑵通過模板基類中解析的模板代碼,自動去模板管理類中找到相應(yīng)的具體發(fā)票模板類; ⑶通過JAVA的反射技術(shù),即通過類的字符串名稱來動態(tài)生成實體發(fā)票模板對象,并根據(jù)微結(jié)構(gòu)中節(jié)點的字符串名稱來獲取實體發(fā)票模板對象中相應(yīng)名稱的屬性,并把此節(jié)點中的值賦給此屬性,以此盾環(huán),直至微結(jié)構(gòu)中的所有節(jié)點都處理了一次,從而對整個微結(jié)構(gòu)的數(shù)據(jù)進(jìn)行解析; ⑷返回具體的發(fā)票模板類。
2.如權(quán)利要求1所述的對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的方法,其特征在于:如果是發(fā)票查詢與查驗,則只要執(zhí)行步驟⑴解析。
3.如權(quán)利要求1或2所述的對普通發(fā)票數(shù)據(jù)進(jìn)行存儲解析的方法,其特征在于:所述發(fā)票上具體每行的記錄信息節(jié)點包括:品名、規(guī)格、單價、數(shù)量和總價。
【文檔編號】G06Q40/00GK104463665SQ201410767426
【公開日】2015年3月25日 申請日期:2014年12月11日 優(yōu)先權(quán)日:2014年12月11日
【發(fā)明者】徐燁 申請人:江蘇愛信諾航天信息科技有限公司