




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、廉價融資融券或QFII系統建設思路TOC o 1-3 h u HYPERLINK l _Toc31705 1. 題記 PAGEREF _Toc31705 3 HYPERLINK l _Toc27070 2. 總體構想 PAGEREF _Toc27070 4 HYPERLINK l _Toc14312 3. 搭建思路 PAGEREF _Toc14312 5 HYPERLINK l _Toc30795 3.1 總思路 PAGEREF _Toc30795 5 HYPERLINK l _Toc7980 3.2 平臺定位 PAGEREF _Toc7980 5 HYPERLINK l _Toc30815
2、4. 具體功能 PAGEREF _Toc30815 7 HYPERLINK l _Toc12661 4.1系統特點 PAGEREF _Toc12661 7 HYPERLINK l _Toc28054 4.2 系統功能 PAGEREF _Toc28054 9 HYPERLINK l _Toc8886 4.2.1總后臺功能 PAGEREF _Toc8886 9 HYPERLINK l _Toc10172 客戶治理 PAGEREF _Toc10172 9 HYPERLINK l _Toc18602 代理商治理 PAGEREF _Toc18602 10 HYPERLINK l _Toc15954 留倉
3、股票查詢 PAGEREF _Toc15954 10 HYPERLINK l _Toc23218 交割清單查詢 PAGEREF _Toc23218 11 HYPERLINK l _Toc14708 股票設置 PAGEREF _Toc14708 11 HYPERLINK l _Toc15804 財務治理 PAGEREF _Toc15804 11 HYPERLINK l _Toc23214 總賬查詢 PAGEREF _Toc23214 12 HYPERLINK l _Toc9255 資金變動查詢 PAGEREF _Toc9255 12 HYPERLINK l _Toc19909 治理員設置 PAGE
4、REF _Toc19909 12 HYPERLINK l _Toc18943 4.2.2 PC代理商功能 PAGEREF _Toc18943 12 HYPERLINK l _Toc2177 用戶治理 PAGEREF _Toc2177 13 HYPERLINK l _Toc6166 交割清單 PAGEREF _Toc6166 13 HYPERLINK l _Toc6644 出入金記錄 PAGEREF _Toc6644 13 HYPERLINK l _Toc3253 總賬查詢 PAGEREF _Toc3253 14 HYPERLINK l _Toc27862 4.2.3 PC客戶端功能 PAGER
5、EF _Toc27862 14 HYPERLINK l _Toc32504 股票查詢 PAGEREF _Toc32504 14 HYPERLINK l _Toc24047 股票交易 PAGEREF _Toc24047 14 HYPERLINK l _Toc14883 資金轉賬 PAGEREF _Toc14883 15 HYPERLINK l _Toc20136 留倉查詢 PAGEREF _Toc20136 16 HYPERLINK l _Toc6248 交割單查詢 PAGEREF _Toc6248 16 HYPERLINK l _Toc23858 其他功能 PAGEREF _Toc23858
6、16 HYPERLINK l _Toc16619 4.3.4安卓客戶端 PAGEREF _Toc16619 16 HYPERLINK l _Toc30442 4.2.5 IOS客戶端 PAGEREF _Toc30442 16 HYPERLINK l _Toc2844 4.2.6 商城 PAGEREF _Toc2844 16 HYPERLINK l _Toc24295 4.2.7股價監聽程序 PAGEREF _Toc24295 16 HYPERLINK l _Toc22933 自動監聽股價 PAGEREF _Toc22933 17 HYPERLINK l _Toc20939 采集歷史股價數據 P
7、AGEREF _Toc20939 17 HYPERLINK l _Toc4377 依照股價波動自動平倉 PAGEREF _Toc4377 17 HYPERLINK l _Toc31057 自動收取過夜費 PAGEREF _Toc31057 17 HYPERLINK l _Toc13423 超過六個工作日自動售出股票 PAGEREF _Toc13423 18 HYPERLINK l _Toc13623 5. 技術要點 PAGEREF _Toc13623 18 HYPERLINK l _Toc13351 5.1 開發技術和語言 PAGEREF _Toc13351 18 HYPERLINK l _T
8、oc11370 5.2 服務端接口技術 PAGEREF _Toc11370 18 HYPERLINK l _Toc14743 5.3 數據庫技術 PAGEREF _Toc14743 23 HYPERLINK l _Toc28833 5.4 高并發技術 PAGEREF _Toc28833 26 HYPERLINK l _Toc11907 5.5 轉賬接口 PAGEREF _Toc11907 28 HYPERLINK l _Toc4043 5.6 股票接口 PAGEREF _Toc4043 30 HYPERLINK l _Toc3926 5.7 自動處理技術 PAGEREF _Toc3926 33
9、 HYPERLINK l _Toc2560 5.8 分頁技術 PAGEREF _Toc2560 33 HYPERLINK l _Toc17365 5.9 手機端開發技術 PAGEREF _Toc17365 39題記把看似復雜的情況想透徹了,就會變得專門簡單。我沒事喜愛將一件情況研究透徹,證券市場平臺是我突發靈感,感受一向奇妙的證券平臺或許門檻沒有這么高,如是開始著手研究,我研究證券平臺有三個目的:證券平臺一向奇妙,沒有工作經驗的人專門難窺其真容,這對我是一個誘惑,我想從網上搜集資料,整理一下。一直認為技術大數據的分析能夠降低投資風險,假如擁有那個大數據,加上先進的分析模型,確信能夠大幅降低理財
10、風險,形成群狼效應。互聯網資源豐富,依靠廉價的互聯網自建為大伙兒服務是我的愛好。 歷時接近三個月的測試,差不多形成一部分成果:一種小型、有用的A股融資融券平臺搭建思路。能夠專門少量的投資就能夠窺探證券動向,并能夠對外提供一些增值服務。總體構想總部代理分部客戶客戶代理分部客戶客戶客戶 系統是一個小規模的生態,有三種用戶:總部、代理分部和客戶。總部負責運維整個系統,包括股票設置、用戶賬號治理、虛擬資金統計分析、真實資金治理等;代理商能夠依靠那個平臺搭建小型的運營生態,包括開設自己下面的客戶賬號、歸屬自己的資金分析、和總部進行真實資金結算等;客戶確實是股民了,能夠在平臺開倉、平倉、資金轉賬等等。平臺
11、建成之后,“總部”能夠按照自己的“運作”特點,精選一些股票,在平臺設置一下,客戶就能夠放心的按照我們的“指導”夠買了。總部貢獻技巧,代理商做大市場,客戶分享收益,一個良好的生態。搭建思路3.1 總思路總后臺服務端PC客戶端安卓客戶端IOS客戶端股價監聽器PC代理端商城 有人可能會講,你個大騙子,不是講好的廉價平臺嗎?則么搞這么多東東?道理專門簡單:您誤會我了。據我了解,一套成熟的融資融券系統,造價在1000多萬甚至幾千萬,而且是在中國的價格,現在美國的專門多系統都交給中國開發,因為中國開發廉價。如此的整個系統互相依托運作,筆者可能大概僅需要30-60萬,是不是專門“廉價”呢?那么我們看看每一個
12、系統差不多上干什么的吧?3.2 平臺定位 服務端整個系統的中心,位于我們的中心機房為各個系統提供網絡服務,讓我們的總后臺、代理端和客戶端都能在它的服務下互相協作。總后臺 顧名思義是整個系統的最高權力機構,負責治理整個系統的運作,那個程序運行在運行那個平臺的個人電腦上面,依靠服務端進行設置,整個系統在那個總后臺的指導下運作。PC代理端 代理端負責進展客戶,給自己的客戶開戶,開戶以后客戶端就能夠立即使用客戶端了,但那個時候是不能立即開倉的,需要客戶自己登錄到PC客戶端進行充值,有了資金以后客戶能夠開倉了。客戶操作所收取的費用,代理端能夠查看自己的利潤。PC客戶端 PC客戶端提供給客戶使用,客戶進行
13、股票查詢、開倉、留倉股票查詢、平倉、資金轉賬等操作。Android客戶端 功能參照PC客戶端,去掉了資金轉賬功能,因為移動支付開發相對苦惱,我沒有做相關研究。IOS客戶端 功能參照PC客戶端,去掉了資金轉賬功能,因為移動支付開發相對苦惱,我沒有做相關研究。監聽器這也是系統的重點之一。首先因為我們整個系統需要實時股價作為支撐,那個監聽器就負責從網上拉取最新股價信息放到我們系統,供開倉、平倉和風險操縱等操作;其次我們系統作為指導性強的系統,應該指導用戶操作,包括是否當日留倉、股價波動到一定幅度自動平倉等等,因為這些操作需要我們的客戶端不打開也能夠做到的。商城之因此要建立一個商城是因為我們的平臺資金
14、賬號,因為如此的系統,即使是玩票,可能也專門難申請到,然而商城就比較容易申請了,建議公司開通一個商城,利用商城的資金賬號進行模擬交易。具體功能終于到了重點,如此一個系統是如何實現的呢?我們先分析系統的特點和特色,然后依照那個脈絡接著向下分析。4.1系統特點一種獨立的系統它不依靠大型券商系統,形成自己的交易生態,所有交易規則自己來定獨立的用戶體系賬號治理是獨立的,系統和第三方支付平臺對接實現資金轉賬高價值用戶服務包括優選股票、開倉和平倉風險操縱、股價波動風險操縱、T+0等服務項目。雙向支持開多倉和開空倉。透明靈活的計費計費是運營的基礎,系統應該計費透明而且合理才更有競爭力。杠桿能夠放大可用資金,
15、用戶以小博大。快速這是所有系統的共性了,股價瞬息萬變,股民確信要求依照最新的股價操作,我們不是大券商,股價數據比大券商言辭1-2秒依舊專門靠譜的吧。廣泛支持滬深股票、股指期貨、貴金屬交易。安全可靠整個系統并不是基于網頁實現,而是基于客戶端服務器技術,客戶、代理商、總后臺的功能均通過安裝包安裝應用程序實現,和服務器通信快速,安全可靠,整個實現和大券商客戶端相同。4.2 系統功能4.2.1總后臺功能融資融券總后臺客戶治理代理商治理留倉股票查詢交割單查詢股票設置財務治理總賬查詢資金變動查詢治理員設置客戶治理客戶治理負責對所有客戶賬號進行治理,要緊功能有客戶列表、客戶統計、資金調整、賬號凍結和解凍、客
16、戶信息修改等。客戶列表顯示所有客戶的信息,能夠依照客戶姓名、賬號、所屬代理商、注冊時刻來查詢某些客戶信息。客戶統計能夠按照區域、代理商、注冊時段、開戶行來統計客戶分布情況。資金調整修改某一個客戶的賬戶資金,該功能是為了系統機動處理某些專門賬戶資金的預留功能。賬號凍結、解凍凍結一個客戶,凍結后該客戶將不能使用客戶端功能,包括交易。解凍是指恢復一個客戶賬號的正常狀態。客戶信息修改修改客戶的信息,包括銀行賬號、初始化密碼等。代理商治理該模塊負責代理商所有治理功能,開設代理商賬號、凍結代理商賬號、代理商資金結算等。開設代理商賬號開設一個代理商賬號,將能夠使用該賬號登錄PC代理端。凍結代理商賬號凍結代理
17、商賬號的功能是指關閉該代理商的治理功能,凍結以后該代理商無法開設賬號,其下面的客戶仍然能夠使用客戶端交易。代理商資金結算平臺結算給代理商利潤是分期結算的,平臺提供簡單的結算功能即可:平臺實時計算應計算的金額,并能夠依照時刻查詢應結算總額,總后臺不提供網銀轉賬結算功能,通過網銀直接轉賬或線下方式結算,完成以后到平臺標記結算金額,下次結算的時候系統統計待結算金額(扣除往常結算的金額),直接結算即可。留倉股票查詢查詢所有客戶當前持倉的股票信息,包括客戶信息、股票信息、購買時刻、當前盈虧、各種費用收取和待收取情況等,能夠強平客戶的持倉股票,強平客戶持倉股票是指在任意時刻點,后臺能夠指定一個價格強行將該
18、股票售出。交割清單查詢查詢客戶差不多平倉的股票信息,包括客戶信息、股票信息、購買時的股票價格,售出時的股票價格,盈利情況,平臺費用收取情況等信息。股票設置設置系統支持操作的股票,在此登記的股票,在客戶端才能夠進行交易。功能包括添加股票信息、刪除股票信息、快速導入多支股票信息、導出股票信息、設置是否同意開多倉或開空倉、是否禁止交易、是否啟用風險操縱。股票設置的信息會立即體現在每一個客戶的客戶端,當禁止交易或者修改了股票信息,客戶端要立即禁止相關操作或顯示最新內容。股票設置的差不多信息僅僅包括股票代碼和股票名稱即可,信息一定要和A股一定要一致,否則后面提到的獵取股價功能將無法實現。財務治理該功能實
19、際值出入金的治理,用于財務查看客戶入金的明細情況、按月統計入金報表,財務出金轉賬登記,出金匯總等。入金治理 客戶轉賬到平臺稱為入金,系統能夠開通資金賬號,PC客戶端直接調用網銀功能實現立即轉賬,平臺能夠收到轉賬成功后的各種信息。入金治理是指統計客戶轉賬到平臺的時刻、資金情況等信息。出金治理 平臺轉賬給客戶稱為出金。出金不通過平臺,客戶從PC客戶端發起出金請求,平臺審核通過以后,在當日將資金通過其他平臺轉賬,系統只需登記即可,登記完成后,用戶的可用資金將減少。總賬查詢 查詢平臺目前的資金情況、客戶的收益情況、平臺的收益情況、客戶預期收益情況、平臺預期收益情況、代理商收益和預期收益情況等信息。資金
20、變動查詢 用于查看客戶的資金變動歷史,包括客戶的各種操作引發的資金變動:入金、出金、開倉、平倉、后臺強制平倉、系統自動平倉、后臺修改資金等。 治理員設置包括開通治理員賬號、修改治理員賬號等功能。4.2.2 PC代理商功能PC代理端用戶治理交割清單出入金記錄總賬查詢 PC代理端提供給代理商使用,包括代理商治理自己的客戶、交割清單、出入金記錄、總賬查詢。用戶治理 用戶治理包括客戶治理負責對所有客戶賬號進行治理,要緊功能有客戶列表、客戶統計、資金調整、賬號凍結和解凍、客戶信息修改等。客戶列表 顯示所有客戶的信息,能夠依照客戶姓名、賬號、所屬代理商、注冊時刻來查詢某些客戶信息。賬號凍結、解凍 凍結一個
21、客戶,凍結后該客戶將不能使用客戶端功能,包括交易。解凍是指恢復一個客戶賬號的正常狀態。客戶信息修改 修改客戶的信息,包括銀行賬號、初始化密碼等。交割清單查詢所有客戶當前持倉的股票信息,包括客戶信息、股票信息、購買時刻、當前盈虧、各種費用收取和待收取情況等。出入金記錄該功能實際值出入金的治理,用于財務查看客戶入金的明細情況、按月統計入金報表,財務出金轉賬登記,出金匯總等。入金治理 統計該代理商的客戶轉賬到平臺的時刻、資金情況等信息。出金治理 統計該代理商的客戶從平臺提取資金的時刻、資金情況等信息。 總賬查詢 查詢平臺目前的資金情況、客戶的收益情況、平臺的收益情況、客戶預期收益情況、平臺預期收益情
22、況、代理商收益和預期收益情況等信息。4.2.3 PC客戶端功能PC客戶端是客戶進行股票交易的客戶端軟件。包括股票查詢、股票交易、資金轉賬、修改密碼、留倉查詢、交割單查詢等功能。PC客戶端股票查詢股票交易資金轉賬修改密碼留倉查詢交割單查詢 股票查詢股票查詢功能是指為客戶端提供能夠交易的股票列表,用戶能夠按照股票代碼和股票名稱查詢某一只股票。股票查詢所包括的信息包括股票代碼、股票名稱、是否同意多開、是否同意空開、是否禁止交易等。 股票交易股票交易是指進行股票開倉和交割兩類操作。開倉開倉是指用戶購入某一只股票,包括股票查詢、購買和刷新留倉四個環節。股票查詢負責從服務器查詢股票信息,包括獵取股票代碼、
23、股票名稱、多空開倉限制、是否禁止交易、依照開盤停盤時刻停止交易、依照節假日停止交易、依照股價波動停止交易、查詢最新的股價信息、顯示平臺規定的交易價格等信息。購買包括對用戶輸入的手數進行推斷是否同意交易,執行購買同時扣除用戶的資金。刷新留倉是指刷新客戶端的留倉信息,看到自己的開倉成功,開倉后30分鐘不同意交易,防止客戶頻繁刷單。開倉分為開多倉和開空倉,開多倉是指股價漲的時候盈利,開空倉是指股價跌的時候盈利。交割交割是指出售一只股票交割的交割的操作包括出售股票和返還資金兩部分。 資金轉賬資金轉賬包括銀證轉賬和證銀轉賬。銀證轉賬銀證轉賬是指從客戶的銀行賬號到平臺的資金賬號轉賬,客戶發起銀證轉賬以后,
24、系統調用平臺開通的網銀頁面,用戶輸入轉賬的金額,將客戶的銀行資金轉入到平臺,轉賬成功后用戶的信用資金立即增加。證銀轉賬證銀轉賬是指平臺資金轉入到客戶的銀行賬號,用戶從客戶端發起證銀轉賬,后臺收到轉賬請求以后,財務通過其他渠道轉給用戶資金,轉出以后在系統中確認訂單完成,客戶的使用資金降低。留倉查詢留倉查詢用于查詢留倉信息,所查詢信息包括自己所留倉的股票,信息包括股票差不多信息、當前股價、當前盈虧、費用收取情況、立即收取的費用情況、是否同意平倉等。能夠對留倉股票出倉。交割單查詢交割單查詢用于查詢差不多交割的股票情況,包括股票差不多信息、交割盈虧情況、費用收取情況等信息。 其他功能包括修改密碼、鎖定
25、客戶端等功能。4.3.4安卓客戶端參見PC客戶端功能。比客戶端少了資金轉賬功能。4.2.5 IOS客戶端參見PC客戶端功能。比客戶端少了資金轉賬功能。4.2.6 商城商城負責在申請平臺的資金賬號的時候使用,用戶銀證轉賬的時候也能夠使用商城的商品名稱進行交易,那個地點沒有什么技術含量。4.2.7股價監聽程序股價監聽程序負責從互聯網拉取最新的股價信息,供平臺所用,同時提供平臺服務端自動化處理的功能。 自動監聽股價 自動監聽股價的功能是依照系統設定的股價范圍,從互聯網拉取股價,提供給系統使用。我們優先選用新浪財經的股價接口,因為那個接口包含的信息是相當齊全的,而且響應速度快,特不穩定。據我測試200
26、0只股票,獵取時刻最長2秒,因此假如我們的服務器夠好,應該能做到1秒以內,這就完全夠我們使用了。采集歷史股價數據前面提到我們希望平臺具有“分析功能”,依照股價波動來分析風險,從而自動平倉或者自動禁止開倉,那個新浪接口不能直接幫我們實現,因為它沒有查詢歷史股價的能力,我們系統能夠做一個補償設計,確實是每日掃描一次股價信息,保存在我們系統中,供查詢使用,這也是“大數據”哦。我們能夠采集的信息包括“最近一周的最高價波動情況”、“近期開盤就漲停情況”,“近期漲停和跌停次數”等等。依照股價波動自動平倉系統有一個功能:當股價波動到一定幅度以后,系統會自動止損或者止盈平倉。該功能是平臺自動的,因此需要靠監聽
27、程序來實現。監聽程序首先遍歷所有留倉中的股票,然后對比當前的股價,假如股價波動超過一定的比例,自動按照當前的股價出倉,同時將利潤返回給當前賬號。自動收取過夜費 假如平臺開啟收取過夜費的收費項目,那么過夜費在第一個交易日結束或者第一日收盤的時候開始自動收取。該功能也是系統主動+主動的行為,按照行規,過夜費收取的時候,假如用戶的賬戶資金不夠,則自動出售該股票,將該股票的資金用于過夜費,假如股票賣出以后仍然不夠,則出售其他股票收取。超過六個工作日自動售出股票 假如系統系統中的留倉股票超過6個工作日仍未手動出倉,系統將強制自動出倉。技術要點既然需求差不多分析,我們一起看看要完成如此的系統所需要的技術。
28、5.1 開發技術和語言 前端技術是為操作本系統的人提供的交互界面開發技術。包括PC客戶端、代理商客戶端、總后臺和股價監聽系統的界面,考慮數據交換的及時性、系統安全性和交互體驗,系統需要采納C/S的架構,這也是絕大多數大型券商系統的通用格式。 那么我們應該采納什么技術實現呢?目前主流的服務端技術有java、.net等,其中java不適合做前端開發,因此我們應該選用.net作為開發語言,前端采納Winform技術開發,后臺采納.net WebAPI技術。Winform研發所用到的技術包括控件技術、排版布局技術,因此假如要做得更好,需要用到自定義控件技術、多線程預加載技術、進度條交互技術。5.2 服
29、務端接口技術服務端接口技術要緊是服務端的處理業務邏輯以及和客戶端API對接的技術,剛講到要緊是使用.net WEBAPI技術,建議接口采納restful規范,要緊約束如下:由于系統接口不多,建議只使用get 和post兩類接口方式,一般向服務端上報數據采納post方式,從服務端拉取數據采納get方式。服務端收到客戶端的請求以后,開始進行業務處理,完畢以后返回數據,舉例:webAPI 首先需要初始化一些參數,對WebAPIConfig改造一下。using CacheCow.Server;using Newtonsoft.Json.Serialization;using System.Linq;u
30、sing System.Net.Http.Formatting;using System.Web.Http;namespace FundAPI public static class WebApiConfig public static void Register(HttpConfiguration config) / 去掉json序列化時的循環引用 var json = config.Formatters.JsonFormatter; json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHa
31、ndling.Ignore; config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc; / 去掉XML序列化器 config.Formatters.Remove(config.Formatters.XmlFormatter); var jsonFormatter = config.Formatters.OfType().First(); jsonFormatter.SerializerSettings.ContractRe
32、solver = new CamelCasePropertyNamesContractResolver(); /服務端緩存器 GlobalConfiguration.Configuration.MessageHandlers.Add(new CachingHandler(GlobalConfiguration.Configuration); / Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: DefaultApi, routeTemplate: fstock/v2/api/control
33、ler/action/id, defaults: new id = RouteParameter.Optional ); 然后在API層進行接口代碼編寫,首先一個API的代碼文件存放一塊業務邏輯,例如節假日設置的API,我們能夠按照如下編寫:using FundAPI.Models;using FundAPI.Models.vo;using FundAPI.Services;using System;using System.Collections.Generic;using System.Web.Http;namespace FundAPI.Controllers public class
34、SyslogController : ApiController / / 獵取一個客戶在指定日期的操作資金變動日志 / / / HttpPost public IHttpActionResult AllSyslogByCustomerAndDate(DeliveryQueryVO vo) DateTime dtBegin = DateTime.Parse(vo.begindate); DateTime dtEnd = DateTime.Parse(vo.enddate); List ret = new List(); ret.Add(new SyslogService().GetByCusto
35、merId(vo.u_loginname); ret.Add(new Info(獵取成功); return Ok(ret); / / 獵取該日所有用戶的資金變動日志 / / / HttpPost public IHttpActionResult AllSyslogByDate(DeliveryQueryVO vo) DateTime dtBegin = DateTime.Parse(vo.begindate); DateTime dtEnd = DateTime.Parse(vo.enddate); List ret = new List(); ret.Add(new SyslogServic
36、e().GetAllByDate( dtBegin, dtEnd); ret.Add(new Info(獵取成功); return Ok(ret); / / 所有客戶的總變動日志 / / HttpPost public IHttpActionResult AllSyslog() List ret = new List(); ret.Add(new SyslogService().SelectAll(); ret.Add(new Info(獵取成功); return Ok(ret); 在服務層,我們需要書寫具體的實現代碼:using FundAPI.commons;using FundAPI.M
37、odels;using FundDB;using MongoDB;using System;using System.Collections.Generic;using System.Linq;namespace FundAPI.Services public class SyslogService public void ADD(SysLog item) using (FundMongoDB mdb = new FundMongoDB() var collection = mdb.GetCollection(); collection.Insert(item); public IEnumer
38、able SelectAll() using (FundMongoDB mdb = new FundMongoDB() var collection = mdb.GetCollection(); var query = from deliveryStock in collection.Linq() select deliveryStock; IEnumerable deliveryStockIEnumerator = query.AsEnumerable(); deliveryStockIEnumerator = StructClone.CloneList(deliveryStockIEnum
39、erator); return deliveryStockIEnumerator; / / 依照客戶查找 / / / public IEnumerable GetByCustomerId(string loginname) using (FundMongoDB mdb = new FundMongoDB() var collection = mdb.GetCollection(); IEnumerable deliveryStockIEnumerable = collection.Find(c = c.u_loginname = loginname).Documents; deliverySt
40、ockIEnumerable = StructClone.CloneList(deliveryStockIEnumerable); return deliveryStockIEnumerable; / / 依照客戶查找 / / / public IEnumerable GetAllByDate(DateTime dtBegin, DateTime dtEnd) using (FundMongoDB mdb = new FundMongoDB() var collection = mdb.GetCollection(); IEnumerable deliveryStockIEnumerable
41、= collection.Find(c = c.date dtBegin & c.date dtEnd).Documents; deliveryStockIEnumerable = StructClone.CloneList(deliveryStockIEnumerable); return deliveryStockIEnumerable; public void Save(SysLog item) using (FundMongoDB mdb = new FundMongoDB() var collection = mdb.GetCollection(); collection.Save(
42、item); 5.3 數據庫技術選用數據庫涉及到專門多地點,本文選中了Mongodb數據庫,確信專門多人都講了,什么緣故選用一種大伙兒都不熟悉的數據庫呢?緣故如下:Mongodb到3.0版本以后依舊專門穩定的,內置的緩存使查詢速度特不快,如此服務器會降低專門多壓力。Mongodb沒有SQL語言,如此能夠讓我們的業務邏輯更清晰,大伙兒都希望自己的代碼專門潔凈。我們的系統知識規劃的第一步,今后要做大數據分析,Mongodb作為非關系型數據庫,在多版本迭代、多版本數據并存分析方面依舊特不有實力的。MondoDB基礎封裝如下:using System;using MongoDB;namespace F
43、undDB public class FundMongoDB: IDisposable private Mongo _mongo; private IMongoDatabase _db; private static string connectionString = Server=;JD_DB; private static readonly string _connectionString = connectionString.Split(;)0;/ Server=; private static readonly string _dbName = connectionString.Spl
44、it(;)1; public FundMongoDB() : this(_connectionString, _dbName) public FundMongoDB(string dbName) : this(_connectionString, dbName) / / 構造函數。依照指定連接字符串和數據庫名 / / 連接字符串 / 數據庫名,可為空,但必須在任何操作數據庫之前要調用UseDb()方法 public FundMongoDB(string connectionString, string dbName) if (string.IsNullOrEmpty(connectionStr
45、ing) throw new ArgumentNullException(connectionString); _mongo = new Mongo(connectionString); / 立即連接 MongoDB _mongo.Connect(); if (string.IsNullOrEmpty(dbName) = false) _db = _mongo.GetDatabase(dbName); / / 切換到指定的數據庫 / / / public IMongoDatabase UseDb(string dbName) if (string.IsNullOrEmpty(dbName) t
46、hrow new ArgumentNullException(dbName); _db = _mongo.GetDatabase(dbName); return _db; / / 獵取當前連接的數據庫 / public IMongoDatabase CurrentDb get if (_db = null) throw new Exception(當前連接沒有指定任何數據庫。); return _db; / / 獵取當前連接數據庫的指定集合【依據類型】 / / / public IMongoCollection GetCollection() where T : class return th
47、is.CurrentDb.GetCollection(); / / 獵取當前連接數據庫的指定集合【依照指定名稱】 / / / 集合名稱 / public IMongoCollection GetCollection(string name) where T : class return this.CurrentDb.GetCollection(name); public void Dispose() if (_mongo != null) _mongo.Dispose(); _mongo = null; 5.4 高并發技術基于IIS的.net技術作為服務端,那么如何做到專門高的并發,能讓APP
48、有更流暢的訪問速度,同時可不能因為客戶多速度而明顯降低,我們應該如何做呢?設置IIS,能同意更多的請求;定期回收資源,保證在健康的狀況下運行。多使用緩存,采納數據庫會損耗服務器性能,而且通常存放在數據庫中的內容越多,越有利于并發。例如股價的訪問一定要快,我們放在內存中,保障客戶端只要是訪問,就能立即返回。我們用的是Memcache作為緩存服務,因此我更傾向于用Redis。using FundAPI.Models;using FundAPI.Services;using System;using System.Collections.Generic;using System.Web;namesp
49、ace FundAPI.App_Catche public class StockPriceHistoryCache private static int CACHEDDAYS = 7; /緩存7個工作日的股票價格 public static void CacheStockPriceHistory() IEnumerable holidays = new CloseDaysService().getWorkDaysBefore(CACHEDDAYS); CacheStockPriceHistory(holidays); private static void CacheStockPriceHi
50、story(IEnumerable days) if (days = null) return; IEnumerable catchedDays = (IEnumerable)HttpRuntime.CacheSTOCKPRICE_HISTORYDAYS; if (catchedDays = null) catchedDays = new List(); List cachedDayList = new List(); foreach (DateTime dateItem in catchedDays) cachedDayList.Add(dateItem); List toCacheDayL
51、ist = new List(); foreach (DateTime dateItem in days) toCacheDayList.Add(dateItem); /將沒有緩存的歷史股價加入到緩存 /假如差不多緩存的時刻表里面沒有緩存當前日期的數據,則緩存 foreach (DateTime dateItem in days) if (!cachedDayList.Contains(dateItem) cacheStockPriceByDay(dateItem); /清除掉差不多緩存的,過期的數據 foreach (DateTime dateItem in cachedDayList) i
52、f (!toCacheDayList.Contains(dateItem) removeCachedStockPriceByDay(dateItem); private static void removeCachedStockPriceByDay(DateTime day) IEnumerable stockSettings = StockSettingCache.GetCachedStockSetting(); if (stockSettings = null) return; string dateStr = day.ToString(yyyy-MM-dd); foreach (Stoc
53、kSetting stockSetting in stockSettings) HttpRuntime.CachedateStr + stockSetting.s_stockcode = null; private static void cacheStockPriceByDay(DateTime day) day = day.Date; string dateStr = day.ToString(yyyy-MM-dd); StockPriceService stockPriceService = new StockPriceService(); IEnumerable stockPriceB
54、yDate = stockPriceService.GetPrice(day); foreach (StockPrice stockPriceItem in stockPriceByDate) if (dateStr = 2015-11-03 & stockPriceItem.StockCode = 600017) Console.WriteLine(dateStr + stockPriceItem.StockCode); HttpRuntime.CachedateStr + stockPriceItem.StockCode = stockPriceItem; 所業務邏輯,使業務邏輯的處理簡單
55、化,不要邏輯互相糾纏,引起服務端的過多操作。5.5 轉賬接口轉賬接口要緊負責銀證轉賬,轉賬接口是對銀行的支付接口,通常在支付完成后會有兩次握手。實例代碼如下: using System;using System.Collections.Generic;using System.Collections.Specialized;using System.Text.RegularExpressions;namespace FundAPI.Pay.Mobao public partial class Callback : System.Web.UI.Page public string apiName
56、; public string notifyTime; public string tradeAmt; public string merchNo; public string merchParam; public string orderNo; public string tradeDate; public string accNo; public string accDate; public string orderStatus; public string veryfyDesc; protected void Page_Load(object sender, EventArgs e) i
57、f (!IsPostBack) /此處可增加一個日志來記錄通知數據,便于調試接口。 Dictionary dict = GetRequestPost(); / 推斷是否有帶返回參數 if (dict.Count 0) / 驗證簽名,先獵取到簽名源字符串和簽名字符串后,做簽名驗證。 string srcString = string.Format(apiName=0¬ifyTime=1&tradeAmt=2&merchNo=3&merchParam=4&orderNo=5&tradeDate=6&accNo=7&accDate=8&orderStatus=9, dictapiName, d
58、ictnotifyTime, dicttradeAmt, dictmerchNo, dictmerchParam, dictorderNo, dicttradeDate, dictaccNo, dictaccDate, dictorderStatus); string sigString = dictsignMsg; string notifyType = dictnotifyType; sigString = sigString.Replace(r, ).Replace(n, ); bool verifyResult = MobaopaySignUtil.Instance.verifyDat
59、a(sigString, srcString); veryfyDesc = verifyResult ? 簽名驗證通過 : 簽名驗證失敗; apiName = dictapiName; notifyTime = dictnotifyTime; tradeAmt = dicttradeAmt; /交易金額 merchNo = dictmerchNo; /商戶號 merchParam = dictmerchParam; /商戶參數 orderNo = dictorderNo; /商戶訂單號 tradeDate = dicttradeDate; /商戶交易日期 accNo = dictaccNo;
60、/支付平臺訂單號 accDate = dictaccDate; /支付平臺訂單日期 orderStatus = dictorderStatus; /訂單狀態:0-未支付,1-成功,2-失敗 if (verifyResult) if (Int32.Parse(notifyType) != 0) Response.Redirect(notify.aspx, true); / 回寫 else Response.Write(無通知參數); public static string StripSQLInjection(string sql) if (!string.IsNullOrEmpty(sql)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能汽車零部件生產線項目可行性研究報告
- 雨污管網改造項目可行性研究報告(范文參考)
- 漁光互補示范項目規劃設計方案(范文)
- 油氣泊位改造工程實施方案(范文模板)
- 氣體放電燈項目投資風險評估報告
- 機載設備維修服務項目投資風險評估報告
- 全球化供應鏈管理優化-洞察闡釋
- 廣告創意與用戶體驗-第1篇-洞察闡釋
- 西南民族大學《科技文獻閱讀與寫作1》2023-2024學年第二學期期末試卷
- 寧夏大學《教材教法Ⅲ》2023-2024學年第二學期期末試卷
- 心肺運動試驗教學課件
- 手衛生規范-課件
- 英語四級單詞表TXT
- 紅星照耀中國1-6章練習匯編(含答案)
- 債權登記申報表
- DB15T 2763-2022一般工業固體廢物用于礦山采坑回填和生態恢復技術規范
- 產能驗證分析報告
- Unit2Thestoneintheroad讀寫課件-高中英語人教版必修第三冊
- 繞圓柱無環量流動和有環量流動流線分布圖
- DB32∕T 2914-2016 危險場所電氣防爆安全檢測作業規范
- 中國海洋大學論文封面模板
評論
0/150
提交評論