專利名稱:分筆成交的高效處理方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理技術(shù),具體涉及一種分筆成交的高效處理方法及系統(tǒng)。
背景技術(shù):
在證券行業(yè),證券業(yè)務(wù)的手續(xù)費(fèi)通常是根據(jù)成交回報進(jìn)行計算的,計算方式如 下 手續(xù)費(fèi)=成交數(shù)X成交價格X費(fèi)率。 如果計算出來的手續(xù)費(fèi)小于設(shè)定的每筆委托最低費(fèi)用,則取設(shè)定的最低費(fèi)用,如 果超過最低費(fèi)用就取計算出來的手續(xù)費(fèi)。 從上面計算方式可以看出,每筆委托會有一個最低費(fèi)用,該筆委托的所有分筆成 交計算出來的總和沒有超過最低費(fèi)用時,需要用設(shè)定的最低費(fèi)用,所以如果不對分筆成交 計算手續(xù)費(fèi)的操作進(jìn)行并發(fā)控制,是會存在計算最低費(fèi)用計算不準(zhǔn)確的問題,可能會導(dǎo)至 重復(fù)扣除費(fèi)用,甚至?xí)?dǎo)致股民資金為負(fù)的情況。另外,如果先按分筆并發(fā)計算扣費(fèi)的方 式,再采用回沖的方式將資金調(diào)整正確的做法會使得系統(tǒng)開銷增加(因為要判斷該委托的 所有分筆成交處理有沒有完成),同時在處理期間內(nèi),客戶資金都會不準(zhǔn)確甚至出現(xiàn)為負(fù)數(shù) 的情況,從而導(dǎo)致業(yè)務(wù)糾紛發(fā)生。所以,交易系統(tǒng)對分筆成交計算通常都是按順序進(jìn)行,不 會并發(fā)處理。
目前,由于證券金融業(yè)務(wù)系統(tǒng)隨著業(yè)務(wù)量和客戶量的提高,系統(tǒng)實現(xiàn)越來越復(fù)雜, 呈現(xiàn)為典型的多層架構(gòu)。而且,為了提高系統(tǒng)處理效率,采用多線程并發(fā)處理模式。
如圖1所示,在這種架構(gòu)下,證券成交處理的高效主要體現(xiàn)在具體負(fù)責(zé)業(yè)務(wù)處理 的中間件上面。業(yè)務(wù)中間件往往會分成多個,采用多機(jī)器或多進(jìn)程處理,同時在每個業(yè)務(wù)中 間件上也會采用多線程來并發(fā)處理成交回報請求。 在這種處理模式下,證券成交回報在滿足客戶高效資金/股份回轉(zhuǎn)的同時也遇到 了新的問題,這個問題是由于一筆證券委托在經(jīng)過證券交易所撮合后返回多筆成交引起 的,因為證券業(yè)務(wù)的手續(xù)費(fèi)是按委托單筆計算且存在最低收費(fèi)標(biāo)準(zhǔn),這樣一筆證券委托的 分筆成交計算必須按串行進(jìn)行,不能并發(fā)處理,否則可能會多算費(fèi)用。 對此,業(yè)界常用做法是通過報盤機(jī)控制分筆成交發(fā)送,收到前一筆的應(yīng)當(dāng)后再發(fā) 送后續(xù)分筆成交,或者通過業(yè)務(wù)系統(tǒng)后臺記錄處理情況加鎖等方法控制分筆成交并發(fā)。具 體有以下幾種分筆成交控制并發(fā)方法 1.通過報盤機(jī)(證券交易系統(tǒng)與證券交易所接口庫之間處理數(shù)據(jù)交互的程序)記 錄本地控制文件的方式將分筆成交在前端報盤機(jī)控制住,即每當(dāng)一筆分筆成交發(fā)送給交易 后臺時,就將該分筆成交的申請編號(交易所接口庫中對委托所標(biāo)識的唯一編號)寫入到 控制文件中,當(dāng)再讀下一筆成交發(fā)現(xiàn)該筆成交已經(jīng)在控制文件中,就將該分筆成交放到隊 列中,不發(fā)送;當(dāng)收到一筆成交的應(yīng)答后,如果在隊列中找到有相同的申請編碼,則將該筆 成交取出發(fā)送到交易后臺。這種方法需要不停地對控制文件進(jìn)行讀、寫操作,較為耗時,報 盤機(jī)存在一定開銷,且分筆成交處理性能不高。層加鎖的方式將分筆成交在后端數(shù)據(jù)庫控制住,即每當(dāng)業(yè)務(wù)系 統(tǒng)在數(shù)據(jù)庫存儲層接收到一筆分筆成交的處理請求時,就到一個表中記錄該筆成交記錄的 申請編號,當(dāng)其他線程接收到同一筆委托的其他分筆成交請求時,必須先更新表內(nèi)本成交 對應(yīng)申請編號的記錄,此時通過數(shù)據(jù)庫的加鎖控制來讓同一筆委托的分筆成交處理線程之 間進(jìn)行"排隊"等待。但這種方法會引起數(shù)據(jù)庫線程處理效率降低,進(jìn)而影響其他普通成交 和分筆成交的處理效率。 3.通過報盤機(jī)支持重發(fā)模式和DB數(shù)據(jù)庫存儲層增加事務(wù)內(nèi)外兩次判斷校驗的方 式將分筆成交通過報盤機(jī)和后端數(shù)據(jù)庫的協(xié)作控制住,即每當(dāng)業(yè)務(wù)系統(tǒng)DB數(shù)據(jù)庫存儲層 接收到一筆分筆成交的處理請求時,就在處理最初查找相關(guān)委托信息的成交數(shù)量字段記錄 下來,然后到處理最后再查找相關(guān)委托信息的成交數(shù)量字段和初始記錄值相比較,若不一 致則將本筆分筆成交按特定值返回給報盤機(jī),報盤機(jī)將分筆成交加入重發(fā)隊列,重發(fā)隊列 按設(shè)定時間(一般為5秒)進(jìn)行重發(fā)。這種方法雖然能解決第2種方法中數(shù)據(jù)庫線程處理 效率低的問題,但是分筆成交處理效率卻大大降低了,而且增加了較多報盤機(jī)和DB數(shù)據(jù)庫 的交互信息,增加了系統(tǒng)負(fù)擔(dān)。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種分筆成交的高效處理方法及系統(tǒng),以在控制分筆成交并發(fā) 的同時,減少前后臺通訊交互次數(shù),提高處理效率和處理性能。
為此,本發(fā)明實施例提供如下技術(shù)方案
—種分筆成交的高效處理方法,包括 讀線程逐筆讀取成交記錄,根據(jù)所述成交記錄對應(yīng)的申請編號將讀取的成交記錄 存放到對應(yīng)該申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中;
發(fā)送線程從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加入 到發(fā)送隊列中; 發(fā)送線程并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中的分筆成交 數(shù)據(jù)給交易后臺; 應(yīng)答處理線程接收到所述交易后臺返回對應(yīng)所述節(jié)點(diǎn)的分筆成交數(shù)據(jù)的處理結(jié)
果后,將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除。 可選地,所述讀線程讀取成交記錄包括 讀線程從交易接口庫逐筆讀取成交記錄。 優(yōu)選地,所述根據(jù)所述成交記錄對應(yīng)的申請編號將讀取的成交記錄存放到對應(yīng)該 申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中包括 根據(jù)所述成交記錄對應(yīng)的申請編號檢查當(dāng)前讀取的成交記錄是否為讀取的上一 筆成交記錄的分筆成交數(shù)據(jù); 如果不是,則將所述當(dāng)前讀取的成交記錄的分筆成交數(shù)據(jù)保存到對應(yīng)該申請編號 的節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中; 如果是,則將所述當(dāng)前讀取的成交記錄的分筆成交數(shù)據(jù)與上一筆成交記錄的分筆 成交數(shù)據(jù)合并保存到對應(yīng)該申請編號的節(jié)點(diǎn),并在所述節(jié)點(diǎn)存滿后,將所述節(jié)點(diǎn)加入到已 讀隊列中。
5
優(yōu)選地,所述方法還包括 根據(jù)合并保存的分筆成交記錄的分筆數(shù)確定所述節(jié)點(diǎn)是否存滿;
如果所述分筆數(shù)達(dá)到預(yù)設(shè)的最大值,則確定所述節(jié)點(diǎn)已存滿。
優(yōu)選地,所述方法還包括 發(fā)送線程將一個節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加入到發(fā)送隊列中后,將所述節(jié)點(diǎn)對應(yīng)的 申請編號設(shè)置為在途狀態(tài); 所述發(fā)送線程從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交數(shù)據(jù) 加入到發(fā)送隊列中包括 發(fā)送線程從所述已讀隊列中讀取一個節(jié)點(diǎn); 如果該節(jié)點(diǎn)對應(yīng)的申請編號為在途狀態(tài),則將該節(jié)點(diǎn)作為發(fā)送隊列中所述申請編
號為在途狀態(tài)的節(jié)點(diǎn)的下一個節(jié)點(diǎn)。 優(yōu)選地,所述方法還包括 所述應(yīng)答處理線程將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除后,檢查所述發(fā)送隊列中是
否還有與所述節(jié)點(diǎn)對應(yīng)的申請編號相同的其他節(jié)點(diǎn); 如果是,則所述應(yīng)答處理線程依次發(fā)送所述其他節(jié)點(diǎn); 如果否,則所述應(yīng)答處理線程將所述節(jié)點(diǎn)對應(yīng)的申請編號設(shè)置為非在途狀態(tài)。
—種分筆成交的高效處理系統(tǒng),包括 讀取單元,用于逐筆讀取成交記錄,根據(jù)所述成交記錄對應(yīng)的申請編號將讀取的 成交記錄存放到對應(yīng)該申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中;
發(fā)送單元,用于從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交數(shù) 據(jù)加入到發(fā)送隊列中;并且并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中的分 筆成交數(shù)據(jù)給交易后臺; 應(yīng)答處理單元,用于接收所述交易后臺返回對應(yīng)所述節(jié)點(diǎn)的分筆成交數(shù)據(jù)的處理
結(jié)果,并在接收到所述處理結(jié)果后,將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除。 優(yōu)選地,所述讀取單元包括 成交記錄讀取子單元,用于從交易接口庫逐筆讀取成交記錄;
緩存子單元,用于緩存所述讀取子單元讀取的成交記錄; 第一檢查子單元,用于根據(jù)所述成交記錄對應(yīng)的申請編號檢查所述讀取子單元當(dāng) 前讀取的成交記錄是否為讀取的上一筆成交記錄的分筆成交數(shù)據(jù);如果不是,則將所述當(dāng) 前讀取的成交記錄的分筆成交數(shù)據(jù)保存到對應(yīng)該申請編號的節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已 讀隊列中;如果是,則將所述當(dāng)前讀取的成交記錄的分筆成交數(shù)據(jù)與上一筆成交記錄的分 筆成交數(shù)據(jù)合并保存到對應(yīng)該申請編號的節(jié)點(diǎn),并在所述節(jié)點(diǎn)存滿后,將所述節(jié)點(diǎn)加入到 已讀隊列中。 優(yōu)選地,所述發(fā)送單元包括 節(jié)點(diǎn)讀取子單元,用于從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆 成交數(shù)據(jù)加入到發(fā)送隊列中; 并行發(fā)送子單元,用于并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中
的分筆成交數(shù)據(jù)給交易后臺。
優(yōu)選地,所述發(fā)送單元還包括
6
狀態(tài)設(shè)置子單元,用于在所述節(jié)點(diǎn)讀取子單元將一個節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加入
到發(fā)送隊列中后,將所述節(jié)點(diǎn)對應(yīng)的申請編號設(shè)置為在途狀態(tài); 所述節(jié)點(diǎn)讀取子單元包括 讀子單元,用于從所述已讀隊列中讀取節(jié)點(diǎn); 第二檢查子單元,用于檢查所述節(jié)點(diǎn)對應(yīng)的申請編號是否為在途狀態(tài);如果是,則 將該節(jié)點(diǎn)作為發(fā)送隊列中所述申請編號為在途狀態(tài)的節(jié)點(diǎn)的下一個節(jié)點(diǎn);如果否,則將該 節(jié)點(diǎn)作為發(fā)送隊列中當(dāng)前的最后一個節(jié)點(diǎn)。 優(yōu)選地,所述應(yīng)答處理單元,還用于將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除后,檢查所 述發(fā)送隊列中是否還有與所述節(jié)點(diǎn)對應(yīng)的申請編號相同的其他節(jié)點(diǎn);如果是,則依次發(fā)送 所述其他節(jié)點(diǎn);如果否,則將所述節(jié)點(diǎn)對應(yīng)的申請編號設(shè)置為非在途狀態(tài)。
本發(fā)明實施例分筆成交的高效處理方法及系統(tǒng),針對分筆成交業(yè)務(wù)中,有分筆成 交產(chǎn)生的時候,其成交記錄可能不是連續(xù)的情況,通過讀線程、發(fā)送線程和應(yīng)答處理線程獨(dú) 立進(jìn)行相應(yīng)的操作,即讀線程逐筆讀取成交記錄,根據(jù)所述成交記錄對應(yīng)的申請編號將讀 取的成交記錄存放到對應(yīng)該申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列 中;發(fā)送線程從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加入到發(fā) 送隊列中,并且并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中的分筆成交數(shù)據(jù) 給交易后臺;應(yīng)答處理線程接收到所述交易后臺返回對應(yīng)所述節(jié)點(diǎn)的分筆成交數(shù)據(jù)的處理 結(jié)果后,將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除。從而在控制分筆成交并發(fā)的同時,減少了前、 后臺之間通訊交互次數(shù),提高了處理效率和處理性能。
圖1是現(xiàn)有技術(shù)中證券金融業(yè)務(wù)系統(tǒng)的多層架構(gòu)示意圖; 圖2是本發(fā)明實施例分筆成交的高效處理方法的流程圖; 圖3是本發(fā)明實施例是本發(fā)明實施例的方法中讀線程的處理流程圖; 圖4是本發(fā)明實施例中各隊列的結(jié)構(gòu)示意圖; 圖5是圖4所示的已讀成交隊列對應(yīng)的存儲鏈表結(jié)構(gòu)示意圖; 圖6是圖4所示的發(fā)送隊列對應(yīng)的存儲鏈表結(jié)構(gòu)示意圖; 圖7是本發(fā)明實施例中發(fā)送線程的處理流程圖; 圖8是本發(fā)明實施例中應(yīng)答處理線程的處理流程圖; 圖9是利用本發(fā)明實施例的方法報盤機(jī)與后臺交互的時序圖; 圖10是本發(fā)明實施例分筆成交的高效處理系統(tǒng)的一種結(jié)構(gòu)示意圖; 圖11是本發(fā)明實施例分筆成交的高效處理系統(tǒng)的一種結(jié)構(gòu)示意圖。
具體實施例方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實施例的方案,下面結(jié)合附圖和實施 方式對本發(fā)明實施例作進(jìn)一步的詳細(xì)說明。 本發(fā)明實施例分筆成交的高效處理方法及系統(tǒng),針對分筆成交業(yè)務(wù)中,有分筆成 交產(chǎn)生的時候,其成交記錄可能不是連續(xù)的情況,將分筆的成交記錄存放到與該成交記錄 對應(yīng)的申請編號對應(yīng)的一個或多個節(jié)點(diǎn)中,也就是說,每個節(jié)點(diǎn)包含了對應(yīng)同一申請編號
7的一筆或多筆分筆成交數(shù)據(jù)。而且,并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié) 點(diǎn)中的分筆成交數(shù)據(jù)給交易后臺,即將每個節(jié)點(diǎn)作為一個請求發(fā)送給交易后臺進(jìn)行處理, 從而在控制分筆成交并發(fā)的同時,減少前、后臺之間通訊交互次數(shù),提高處理效率和處理性 能。 如圖2所示,是本發(fā)明實施例分筆成交的高效處理方法的流程圖,包括以下步驟
步驟201 ,讀線程逐筆讀取成交記錄,根據(jù)所述成交記錄對應(yīng)的申請編號將讀取的 成交記錄存放到對應(yīng)該申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中。
讀線程可以是從交易接口庫中逐筆讀取成交記錄,并將讀取這些成交記錄根據(jù)其 對應(yīng)的申請編號存放到對應(yīng)該申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列 中,具體過程如下 讀線程根據(jù)所述成交記錄對應(yīng)的申請編號檢查當(dāng)前讀取的成交記錄是否為讀取 的上一筆成交記錄的分筆成交數(shù)據(jù); 如果不是,則將所述當(dāng)前讀取的成交記錄的分筆成交數(shù)據(jù)保存到對應(yīng)該申請編號 的節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中; 如果是,則將所述當(dāng)前讀取的成交記錄的分筆成交數(shù)據(jù)與上一筆成交記錄的分筆 成交數(shù)據(jù)合并保存到對應(yīng)該申請編號的節(jié)點(diǎn),并在所述節(jié)點(diǎn)存滿后,將所述節(jié)點(diǎn)加入到已 讀隊列中。 步驟202,發(fā)送線程從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交 數(shù)據(jù)加入到發(fā)送隊列中。 步驟203,發(fā)送線程并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中的 分筆成交數(shù)據(jù)給交易后臺。 步驟204,應(yīng)答處理線程接收到所述交易后臺返回對應(yīng)所述節(jié)點(diǎn)的分筆成交數(shù)據(jù) 的處理結(jié)果后,將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除。 由于證券交易有分筆成交產(chǎn)生的時候,其成交記錄可能不是連續(xù)的。比如當(dāng)有一
筆委托,假設(shè)會產(chǎn)生100筆分筆成交,那有可能會在交易接口庫中連續(xù)地產(chǎn)生10筆成交記
錄,而第11筆可能是其他委托的成交記錄。針對這種情況,本發(fā)明實施例的方法中讀線程
需要將前面10筆成交合并,并存放到一個節(jié)點(diǎn)中,將第11筆成交單獨(dú)放到一個節(jié)點(diǎn)中,也
就是說,在讀線程中需要對前后兩筆成交判斷是否是同一個委托產(chǎn)生的。 如圖3所示,是本發(fā)明實施例的方法中讀線程的處理流程圖,包括以下步驟 步驟301,從交易接口庫讀出一筆成交記錄; 步驟302,判斷當(dāng)前讀取的成交記錄是否是第一筆分筆成交記錄;如果是,則執(zhí)行 步驟303 ;否則執(zhí)行步驟304 ; 步驟303,將當(dāng)前讀取的成交記錄放到緩存;然后返回步驟301,繼續(xù)讀取下一筆 成交記錄; 步驟304,判斷該筆成交記錄是否是上一筆成交記錄的分筆成交數(shù)據(jù);如果是,則 執(zhí)行步驟307 ;否則執(zhí)行步驟305 ; 具體地,可根據(jù)每筆成交記錄的申請編號來判斷,如果申請編號相同,則表明是同 一筆成交的分筆成交數(shù)據(jù); 步驟305,將緩存中的成交記錄的分筆成交數(shù)據(jù)保存到相應(yīng)的節(jié)點(diǎn),即該成交記錄的申請編號對應(yīng)的節(jié)點(diǎn); 步驟306,將所述節(jié)點(diǎn)加入已讀隊列;然后執(zhí)行步驟303 ; 步驟307,將該筆分筆成交數(shù)據(jù)與上一筆分筆成交數(shù)據(jù)合并保存到相應(yīng)的節(jié)點(diǎn);
需要說明的是,此處的合并是指在存儲形式上,對一些相同的信息如申請編號進(jìn) 行合并,即只保存一項,而對應(yīng)每筆分筆成交數(shù)據(jù)的其他信息則需要全部保存,對此將在后 面舉例詳細(xì)說明。 步驟308,增加對應(yīng)該節(jié)點(diǎn)的分筆記數(shù); 步驟309,根據(jù)對應(yīng)該節(jié)點(diǎn)的分筆記數(shù)判斷該節(jié)點(diǎn)是否存滿;如果是,則執(zhí)行步驟 306 ;否則返回步驟301,繼續(xù)讀取下一筆成交記錄。 具體地,可以預(yù)先設(shè)置各節(jié)點(diǎn)的存儲空間,根據(jù)該存儲空間的大小以及各分筆成 交數(shù)據(jù)所占用的最大空間,計算出每個節(jié)點(diǎn)可存儲的分筆數(shù)的最大值。如果某節(jié)點(diǎn)其所存 儲的分筆記數(shù)達(dá)到該最大值,則表明該節(jié)點(diǎn)已存滿。此時,需要將該節(jié)點(diǎn)加入已讀隊列。也 就是說,將節(jié)點(diǎn)中存儲的分筆成交數(shù)據(jù)加到已讀隊列中。 可見,通過上述流程,將讀取出來的成交記錄存放在已讀隊列(該已讀隊列為單 向鏈表形式)中,等待發(fā)送線程來讀取已讀隊列,并將其存放到發(fā)送隊列進(jìn)行發(fā)送。為保證 高效,發(fā)送隊列可采用二維方式的鏈表。 下面舉例進(jìn)一步詳細(xì)說明本發(fā)明實施例中的已讀成交隊列和發(fā)送隊列的結(jié)構(gòu)。
假設(shè)交易接口庫中存儲的原始成交隊列如圖4所示左邊一欄所示,則按照上述讀 線程的處理流程讀取原始成交隊列,生成的已讀成交隊列如圖4所示中間一欄所示,已讀 成交隊列對應(yīng)的存儲鏈表如圖5所示。 從圖中可以看出,已讀成交隊列是雜亂無章的。為了更好地控制成交并發(fā)處理并 提高處理效率,在本發(fā)明實施列中,還需要發(fā)送線程對圖5所示的線性鏈表做進(jìn)一步的整 理,生成如圖4右邊一欄所示的發(fā)送隊列,該發(fā)送隊列對應(yīng)的存儲鏈表如圖6所示。由圖6 可以看出 (1)申請編號為1的一共有5筆分筆記錄,按記錄的先后順序?qū)⑵浞纸M放在2個 分筆節(jié)點(diǎn)中。這樣,在本發(fā)明實施例中,只需要向業(yè)務(wù)系統(tǒng)發(fā)送2個回報數(shù)據(jù)請求包即可完 成回報,明顯減少了后臺與數(shù)據(jù)庫交互的次數(shù)(原來要交互5次,現(xiàn)在交互2次)和計算次 數(shù)。 (2)申請編號為2的只有一筆回報,沒有分筆。 (3)申請編號為3的一共有2筆分筆,按記錄的先后順序?qū)⑵浞纸M放在一個分筆 節(jié)點(diǎn)中。這樣,在本發(fā)明實施例中,只需要向業(yè)務(wù)系統(tǒng)發(fā)送一個回報數(shù)據(jù)請求包即可完成回 報,明顯減少了后臺與數(shù)據(jù)庫交互的次數(shù)(原來要交互2次,現(xiàn)在交互1次)和計算次數(shù)。
(4)當(dāng)應(yīng)答處理線程收到申請編號為1、分筆序號為1的處理應(yīng)答后,會將申請編 號1、分筆序號1的節(jié)點(diǎn)放回空閑隊列,將申請編號1、分筆序號2的節(jié)點(diǎn)往前移動,并發(fā)送 該節(jié)點(diǎn)中的內(nèi)容。 在本發(fā)明實施例中,通過發(fā)送線程和應(yīng)答處理線程完成發(fā)送隊列的發(fā)送,由交易 后臺對這些分筆成交數(shù)據(jù)進(jìn)行處理,并返回處理結(jié)果。對于不同申請編號的多個節(jié)點(diǎn),由多 個發(fā)送線程實現(xiàn)并行發(fā)送,對于同一申請編號的多個節(jié)點(diǎn),由一個發(fā)送線程和一個應(yīng)答處 理線程實現(xiàn)串行發(fā)送。
9
為此,在本發(fā)明實施例中,可以通過設(shè)置申請編號的狀態(tài)來實現(xiàn)對節(jié)點(diǎn)發(fā)送的控 制。具體地,發(fā)送線程和應(yīng)答處理線程分別還需要做以下處理 發(fā)送線程將一個節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加入到發(fā)送隊列中后,將所述節(jié)點(diǎn)對應(yīng)的 申請編號設(shè)置為在途狀態(tài)。在發(fā)送節(jié)點(diǎn)時,首先從所述已讀隊列中讀取一個節(jié)點(diǎn);判斷該節(jié) 點(diǎn)對應(yīng)的申請編號是否為在途狀態(tài),如果是,則將該節(jié)點(diǎn)作為發(fā)送隊列中所述申請編號為 在途狀態(tài)的節(jié)點(diǎn)的下一個節(jié)點(diǎn)。 相應(yīng)地,應(yīng)答處理線程將某節(jié)點(diǎn)從所述發(fā)送隊列中刪除后,檢查所述發(fā)送隊列中
是否還有與該節(jié)點(diǎn)對應(yīng)的申請編號相同的其他節(jié)點(diǎn); 如果是,則所述應(yīng)答處理線程依次發(fā)送所述其他節(jié)點(diǎn); 如果否,則所述應(yīng)答處理線程將所述節(jié)點(diǎn)對應(yīng)的申請編號設(shè)置為非在途狀態(tài)。
如圖7所示,是本發(fā)明實施例中發(fā)送線程的處理流程圖,包括以下步驟
步驟701,從已讀隊列中取出一個節(jié)點(diǎn); 步驟702,判斷該節(jié)點(diǎn)對應(yīng)的申請編號的狀態(tài)是否為在途;如果是,則執(zhí)行步驟 703 ;否則執(zhí)行步驟704 ; 步驟703,將該節(jié)點(diǎn)放到發(fā)送隊列中對應(yīng)的申請編號相同,并且狀態(tài)為在途的節(jié)點(diǎn) 的下一個節(jié)點(diǎn);如圖6所示結(jié)構(gòu)中的申請編號1、分筆序號1與申請編號1、分筆序號2的結(jié) 構(gòu); 步驟704,發(fā)送該節(jié)點(diǎn)中的成交信息; 步驟705,將該申請編號的狀態(tài)設(shè)置為在途。 如圖8所示,是本發(fā)明實施例中應(yīng)答處理線程的處理流程圖,包括以下步驟
步驟801,收到對應(yīng)一個節(jié)點(diǎn)的成交應(yīng)答;
步驟802,將將該成交節(jié)點(diǎn)從發(fā)送隊列中取出; 步驟803,檢查該筆成交是否有分筆需要發(fā)送,在此,只需要檢查所述節(jié)點(diǎn)的右邊 是否有分筆成交節(jié)點(diǎn)即可;如果是,則執(zhí)行步驟804 ;否則執(zhí)行步驟805 ;
步驟804,發(fā)送該節(jié)點(diǎn)對應(yīng)的申請編號的分筆成交,即串行發(fā)送對應(yīng)同一申請編號 的多個節(jié)點(diǎn); 步驟805,將該節(jié)點(diǎn)對應(yīng)的申請編號的狀態(tài)設(shè)置為非在途。 可見,通過本發(fā)明實施例中這種發(fā)送處理方式,可以將分筆成交并發(fā)的情況很好 地在前臺控制住,減少了后臺數(shù)據(jù)庫對分筆成交并發(fā)控制的加鎖,提高了后臺處理的性能。 在應(yīng)答處理線程中發(fā)送同一申請編號的下一筆的分筆成交,從而保證了分筆成交回報的速 度。當(dāng)分筆成交數(shù)量更大時,性能的提升將會更加顯著。例如,有iooo筆分筆成交,每次可 以合并200筆,則交互次數(shù)可由1000次減少為5次。 圖9示出了利用本發(fā)明實施例的方法報盤機(jī)與后臺交互的時序圖。 901.報盤機(jī)讀線程讀交易接口庫; 902.讀線程發(fā)現(xiàn)有分筆成交,則合并分筆成交; 903.將讀取的分筆成交加入到已讀隊列中; 904.報盤機(jī)發(fā)送線程從已讀隊列中取出成交數(shù)據(jù),需要說明的是,此處的成交數(shù) 據(jù)是一個節(jié)點(diǎn)包含的所有分筆成交數(shù)據(jù); 905.發(fā)送線程檢查是否有對應(yīng)該成交數(shù)據(jù)的在途成交;
10
906.如果有,則將該成交數(shù)據(jù)加入到發(fā)送隊列中; 907.如果沒有,則直接發(fā)送該成交數(shù)據(jù)到交易后后,并將其對應(yīng)的申請編號的狀 態(tài)設(shè)置為在途; 908.報盤機(jī)應(yīng)答處理線程收到交易后臺返回的成交處理結(jié)果;
909.將對應(yīng)該成交的申請編號的狀態(tài)設(shè)置為非在途;
910.回收存放成交節(jié)點(diǎn),并檢查是否有其他的分筆成交數(shù)據(jù)需要發(fā)送;
911.如果有,則發(fā)送其他分筆成交數(shù)據(jù)。 由圖9可見,本發(fā)明實施例中,讀成交數(shù)據(jù)、發(fā)送成交數(shù)據(jù)、處理成交應(yīng)答分別由 不同的線程來完成。具體地,讀線程從交易接口庫中讀取分筆成交數(shù)據(jù),并盡可能地將數(shù)據(jù) 進(jìn)行合并,以減少發(fā)送線程與交易后臺的交互過程;發(fā)送線程控制成交回報的并發(fā)處理,應(yīng) 答處理線程在收到一個分筆成交的應(yīng)答后將同一申請編號的下一批分筆成交數(shù)據(jù)(一個 節(jié)點(diǎn)包含的所有分筆成交數(shù)據(jù)在一個數(shù)據(jù)包中)發(fā)送給交易后臺,從而減少了與交易后臺 的交互次數(shù),有效地提高了分筆成交處理的速度。 本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分步驟是可以 通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲于一計算機(jī)可讀取存儲介質(zhì)中, 所述的存儲介質(zhì),如R0M/RAM、磁碟、光盤等。 相應(yīng)地,本發(fā)明實施例還提供了一種分筆成交的高效處理系統(tǒng),如圖IO所示,是
該系統(tǒng)的一種結(jié)構(gòu)示意圖。
在該實施例中,所述系統(tǒng)100包括 讀取單元101,用于逐筆讀取成交記錄,根據(jù)所述成交記錄對應(yīng)的申請編號將讀取 的成交記錄存放到對應(yīng)該申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中;
發(fā)送單元102,用于從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交 數(shù)據(jù)加入到發(fā)送隊列中;并且并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中的 分筆成交數(shù)據(jù)給交易后臺; 應(yīng)答處理單元103,用于接收所述交易后臺返回對應(yīng)所述節(jié)點(diǎn)的分筆成交數(shù)據(jù)的
處理結(jié)果,并在接收到所述處理結(jié)果后,將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除。 在本發(fā)明實施例中,所述讀取單元101的一種優(yōu)選結(jié)構(gòu)包括 成交記錄讀取子單元lll,用于從交易接口庫逐筆讀取成交記錄; 緩存子單元112,用于緩存所述讀取子單元讀取的成交記錄; 第一檢查子單元113,用于根據(jù)所述成交記錄對應(yīng)的申請編號檢查所述讀取子單 元當(dāng)前讀取的成交記錄是否為讀取的上一筆成交記錄的分筆成交數(shù)據(jù);如果不是,則將所 述當(dāng)前讀取的成交記錄的分筆成交數(shù)據(jù)保存到對應(yīng)該申請編號的節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入 到已讀隊列中;如果是,則將所述當(dāng)前讀取的成交記錄的分筆成交數(shù)據(jù)與上一筆成交記錄 的分筆成交數(shù)據(jù)合并保存到對應(yīng)該申請編號的節(jié)點(diǎn),并在所述節(jié)點(diǎn)存滿后,將所述節(jié)點(diǎn)加 入到已讀隊列中。 在本發(fā)明實施例中,所述發(fā)送單元102的一種優(yōu)選結(jié)構(gòu)包括 節(jié)點(diǎn)讀取子單元121,用于從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分 筆成交數(shù)據(jù)加入到發(fā)送隊列中; 并行發(fā)送子單元122,用于并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中的分筆成交數(shù)據(jù)給交易后臺。 本發(fā)明分筆成交的高效處理系統(tǒng),讀取單元從交易接口庫中讀取分筆成交數(shù)據(jù),
并盡可能地將數(shù)據(jù)進(jìn)行合并,以減少發(fā)送單元與交易后臺的交互過程;由發(fā)送單元控制成
交回報的并發(fā)處理,應(yīng)答處理單元在收到一個分筆成交的應(yīng)答后將同一申請編號的下一批
分筆成交數(shù)據(jù)(一個節(jié)點(diǎn)包含的所有分筆成交數(shù)據(jù)在一個數(shù)據(jù)包中)發(fā)送給交易后臺,從
而減少了與交易后臺的交互次數(shù),有效地提高了分筆成交處理的速度。 如圖11所示,是本發(fā)明實施例分筆成交的高效處理系統(tǒng)的另一種結(jié)構(gòu)示意圖。 與圖10所示實施例不同的是,在該實施例的系統(tǒng)200中, 所述發(fā)送單元22不僅包括節(jié)點(diǎn)讀取子單元221和并行發(fā)送子單元222,而且還 進(jìn)一步包括 狀態(tài)設(shè)置子單元223,用于在所述節(jié)點(diǎn)讀取子單元121將一個節(jié)點(diǎn)中的分筆成交
數(shù)據(jù)加入到發(fā)送隊列中后,將所述節(jié)點(diǎn)對應(yīng)的申請編號設(shè)置為在途狀態(tài)。 相應(yīng)地,所述節(jié)點(diǎn)讀取子單元221包括 讀子單元231,用于從所述已讀隊列中讀取節(jié)點(diǎn); 第二檢查子單元232,用于檢查所述節(jié)點(diǎn)對應(yīng)的申請編號是否為在途狀態(tài);如果 是,則將該節(jié)點(diǎn)作為發(fā)送隊列中所述申請編號為在途狀態(tài)的節(jié)點(diǎn)的下一個節(jié)點(diǎn);如果否,則 將該節(jié)點(diǎn)作為發(fā)送隊列中當(dāng)前的最后一個節(jié)點(diǎn)。 在該實施例中,所述應(yīng)答處理單元103還用于將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除 后,檢查所述發(fā)送隊列中是否還有與所述節(jié)點(diǎn)對應(yīng)的申請編號相同的其他節(jié)點(diǎn);如果是,則 依次發(fā)送所述其他節(jié)點(diǎn);如果否,則將所述節(jié)點(diǎn)對應(yīng)的申請編號設(shè)置為非在途狀態(tài)。
利用本發(fā)明實施例的系統(tǒng)實現(xiàn)分筆成交的高效處理過程可參照前面本發(fā)明實施 例的方法中的描述,在此不再贅述。 本發(fā)明實施例的系統(tǒng),針對分筆成交業(yè)務(wù)中,有分筆成交產(chǎn)生的時候,其成交記錄 可能不是連續(xù)的情況,在控制分筆成交并發(fā)的同時,可以減少前、后臺之間通訊交互次數(shù), 提高處理效率和處理性能。 本發(fā)明實施例實現(xiàn)分筆成交的高效處理方法及系統(tǒng),可以應(yīng)用于各種不同領(lǐng)域的 分筆成交處理中,比如證券、金融等領(lǐng)域。 以上對本發(fā)明實施例進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體實施方式
對本發(fā)明進(jìn)行 了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及設(shè)備;同時,對于本領(lǐng)域的 一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所 述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
一種分筆成交的高效處理方法,其特征在于,包括讀線程逐筆讀取成交記錄,根據(jù)所述成交記錄對應(yīng)的申請編號將讀取的成交記錄存放到對應(yīng)該申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中;發(fā)送線程從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加入到發(fā)送隊列中;發(fā)送線程并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中的分筆成交數(shù)據(jù)給交易后臺;應(yīng)答處理線程接收到所述交易后臺返回對應(yīng)所述節(jié)點(diǎn)的分筆成交數(shù)據(jù)的處理結(jié)果后,將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述讀線程讀取成交記錄包括 讀線程從交易接口庫逐筆讀取成交記錄。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述成交記錄對應(yīng)的申請編號 將讀取的成交記錄存放到對應(yīng)該申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊 列中包括根據(jù)所述成交記錄對應(yīng)的申請編號檢查當(dāng)前讀取的成交記錄是否為讀取的上一筆成 交記錄的分筆成交數(shù)據(jù);如果不是,則將所述當(dāng)前讀取的成交記錄的分筆成交數(shù)據(jù)保存到對應(yīng)該申請編號的節(jié) 點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中;如果是,則將所述當(dāng)前讀取的成交記錄的分筆成交數(shù)據(jù)與上一筆成交記錄的分筆成交 數(shù)據(jù)合并保存到對應(yīng)該申請編號的節(jié)點(diǎn),并在所述節(jié)點(diǎn)存滿后,將所述節(jié)點(diǎn)加入到已讀隊 列中。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括 根據(jù)合并保存的分筆成交記錄的分筆數(shù)確定所述節(jié)點(diǎn)是否存滿; 如果所述分筆數(shù)達(dá)到預(yù)設(shè)的最大值,則確定所述節(jié)點(diǎn)已存滿。
5. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括發(fā)送線程將一個節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加入到發(fā)送隊列中后,將所述節(jié)點(diǎn)對應(yīng)的申請 編號設(shè)置為在途狀態(tài);所述發(fā)送線程從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加入 到發(fā)送隊列中包括發(fā)送線程從所述已讀隊列中讀取一個節(jié)點(diǎn);如果該節(jié)點(diǎn)對應(yīng)的申請編號為在途狀態(tài),則將該節(jié)點(diǎn)作為發(fā)送隊列中所述申請編號為 在途狀態(tài)的節(jié)點(diǎn)的下一個節(jié)點(diǎn)。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述方法還包括所述應(yīng)答處理線程將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除后,檢查所述發(fā)送隊列中是否還 有與所述節(jié)點(diǎn)對應(yīng)的申請編號相同的其他節(jié)點(diǎn);如果是,則所述應(yīng)答處理線程依次發(fā)送所述其他節(jié)點(diǎn);如果否,則所述應(yīng)答處理線程將所述節(jié)點(diǎn)對應(yīng)的申請編號設(shè)置為非在途狀態(tài)。
7. —種分筆成交的高效處理系統(tǒng),其特征在于,包括讀取單元,用于逐筆讀取成交記錄,根據(jù)所述成交記錄對應(yīng)的申請編號將讀取的成交記錄存放到對應(yīng)該申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中;發(fā)送單元,用于從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加 入到發(fā)送隊列中;并且并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中的分筆成 交數(shù)據(jù)給交易后臺;應(yīng)答處理單元,用于接收所述交易后臺返回對應(yīng)所述節(jié)點(diǎn)的分筆成交數(shù)據(jù)的處理結(jié) 果,并在接收到所述處理結(jié)果后,將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除。
8. 根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述讀取單元包括 成交記錄讀取子單元,用于從交易接口庫逐筆讀取成交記錄; 緩存子單元,用于緩存所述讀取子單元讀取的成交記錄;第一檢查子單元,用于根據(jù)所述成交記錄對應(yīng)的申請編號檢查所述讀取子單元當(dāng)前讀 取的成交記錄是否為讀取的上一筆成交記錄的分筆成交數(shù)據(jù);如果不是,則將所述當(dāng)前讀 取的成交記錄的分筆成交數(shù)據(jù)保存到對應(yīng)該申請編號的節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊 列中;如果是,則將所述當(dāng)前讀取的成交記錄的分筆成交數(shù)據(jù)與上一筆成交記錄的分筆成 交數(shù)據(jù)合并保存到對應(yīng)該申請編號的節(jié)點(diǎn),并在所述節(jié)點(diǎn)存滿后,將所述節(jié)點(diǎn)加入到已讀 隊列中。
9. 根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述發(fā)送單元包括節(jié)點(diǎn)讀取子單元,用于從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交 數(shù)據(jù)加入到發(fā)送隊列中;并行發(fā)送子單元,用于并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中的分 筆成交數(shù)據(jù)給交易后臺。
10. 根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述發(fā)送單元還包括 狀態(tài)設(shè)置子單元,用于在所述節(jié)點(diǎn)讀取子單元將一個節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加入到發(fā)送隊列中后,將所述節(jié)點(diǎn)對應(yīng)的申請編號設(shè)置為在途狀態(tài); 所述節(jié)點(diǎn)讀取子單元包括 讀子單元,用于從所述已讀隊列中讀取節(jié)點(diǎn);第二檢查子單元,用于檢查所述節(jié)點(diǎn)對應(yīng)的申請編號是否為在途狀態(tài);如果是,則將該 節(jié)點(diǎn)作為發(fā)送隊列中所述申請編號為在途狀態(tài)的節(jié)點(diǎn)的下一個節(jié)點(diǎn);如果否,則將該節(jié)點(diǎn) 作為發(fā)送隊列中當(dāng)前的最后一個節(jié)點(diǎn)。
11. 根據(jù)權(quán)利要求io所述的系統(tǒng),其特征在于,所述應(yīng)答處理單元,還用于將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除后,檢查所述發(fā)送隊列 中是否還有與所述節(jié)點(diǎn)對應(yīng)的申請編號相同的其他節(jié)點(diǎn);如果是,則依次發(fā)送所述其他節(jié) 點(diǎn);如果否,則將所述節(jié)點(diǎn)對應(yīng)的申請編號設(shè)置為非在途狀態(tài)。
全文摘要
本發(fā)明涉及數(shù)據(jù)處理技術(shù),公開了一種分筆成交的高效處理方法及系統(tǒng),所述方法包括讀線程逐筆讀取成交記錄,根據(jù)所述成交記錄對應(yīng)的申請編號將讀取的成交記錄存放到對應(yīng)該申請編號的一個或多個節(jié)點(diǎn),并將所述節(jié)點(diǎn)加入到已讀隊列中;發(fā)送線程從所述已讀隊列中讀取所述節(jié)點(diǎn),并將所述節(jié)點(diǎn)中的分筆成交數(shù)據(jù)加入到發(fā)送隊列中;發(fā)送線程并行發(fā)送所述發(fā)送隊列中對應(yīng)不同申請編號的多個節(jié)點(diǎn)中的分筆成交數(shù)據(jù)給交易后臺;應(yīng)答處理線程接收到所述交易后臺返回對應(yīng)所述節(jié)點(diǎn)的分筆成交數(shù)據(jù)的處理結(jié)果后,將所述節(jié)點(diǎn)從所述發(fā)送隊列中刪除。利用本發(fā)明,可以在控制分筆成交并發(fā)的同時,減少前后臺通訊交互次數(shù),提高處理效率和處理性能。
文檔編號G06Q40/00GK101770632SQ20101010394
公開日2010年7月7日 申請日期2010年1月26日 優(yōu)先權(quán)日2010年1月26日
發(fā)明者何仲君, 張國強(qiáng), 王仁云, 鄧志國, 陳飛 申請人:恒生電子股份有限公司