虛擬交易所系統(tǒng)2.0


數(shù)據(jù)庫

1. 用戶表

tbl_user

字段 類型 默認值 說明
uuid varchar(36) 主鍵
name varchar(100) 用戶名
password varchar(100) MD5密碼
exchangerate double(6,2) 0 交易手續(xù)費
createtime varchar(32) 創(chuàng)建時間
status int(3) 0 當(dāng)前狀態(tài) 0:正常 2:異常

2. 余額表

tbl_balance

字段 類型 默認值 說明
uuid varchar(36) 主鍵
userid varchar(36) 用戶ID
balance double(11,3) 0 賬戶余額
lastupdatetime varchar(32) 最后更新時間

3. 充值表

tbl_recharge

字段 類型 默認值 說明
uuid varchar(36) 主鍵
userid varchar(36) 用戶ID
amount double(11,3) 0 充值金額
createtime varchar(32) 創(chuàng)建時間
remark varchar(255) 說明

3. 持倉表

tbl_holdstock

字段 類型 默認值 說明
uuid varchar(36) 主鍵
userid varchar(36) 用戶ID
stockcode varchar(6) 股票代碼
count int(11) 0 持倉數(shù)量
lastupdatetime varchar(32) 最后更新時間
useridstockcode varchar(50) 標識 userid_stockcode

4. 交易記錄表 每日一張表

tbl_exchangehistoryYYYYMMDD

字段 類型 默認值 說明
uuid varchar(36) 主鍵
commandid varchar(36) 命令I(lǐng)D
userid varchar(36) 用戶ID
stockcode varchar(6) 股票代碼
type varchar(20) 類型 buy:買入 sell:賣出
price double(7,3) 0 交易價格
count int(11) 0 交易數(shù)量
exchangeamount double(11,3) 0 交易稅金額
stockamount double(11,3) 0 股票金額
totalamount double(11,3) 0 交易總金額
holdstockbefore int(11) 0 交易前持倉
holdstockafter int(11) 0 交易后持倉
balancebefore double(11,3) 0 交易前余額
balanceafter double(11,3) 0 交易后余額
createtime varchar(32) 創(chuàng)建時間

接口

Servlet

1. 創(chuàng)建用戶

/servlet/createuser

Request:
{
        "name":"15901197623",         //用戶名 手機號  中文英文
        "password":"12345678",        //密碼 6~20位 任意
        "exchangerate":"2.5"          //交易費率
}
Response:
{
        "statusCode":"000000",
        "result":{
            "uuid":"qwertyuioasdfghjkzxcvbnm",
            "name":"15901197623",
            "password":"12345678",
            "exchangerate":"2.5",
            "createtime":"2017-07-02 14:34:33",
            "status":"0"
         }
}

2. 檢查用戶名密碼

/servlet/checkuser

Request:
{
        "name":"15901197623",                            //用戶名 手機號  中文英文
        "password":"tyuiotrthfkghjhkfhgjhkjtyui",        //密碼 可以是明文也可以密文
}
Response:
{
        "statusCode":"000000",
        "result":{
            "uuid":"qwertyuioasdfghjkzxcvbnm",
            "name":"15901197623",
            "password":"12345678",
            "exchangerate":"2.5",
            "createtime":"2017-07-02 14:34:33",
            "status":"0"
         }
}

3. 檢查密碼

/servlet/checkpassword

Request:
{
        "userid":"qwertyuioasdfghjkzxcvbnm",          //用戶ID
        "password":"12345678"                         //密碼 可以是明文也可以密文
}
Response:
{
        "statusCode":"000000",
        "result":"ok"
}

4. 獲得用戶數(shù)據(jù)

/servlet/getuserdata

Request:
/servlet/getuserdata?userid=qwertyuioasdfghjkzxcvbnm
Response:
{
        "statusCode":"000000",
        "result":{
            "userid":"qwertyuioasdfghjkzxcvbnm",
            "name":"15901197623",
            "exchangerate":"2.5",
            "balance":"45000",
            "stockdata":[
                 {
                     "uuid":"fdaserqrewrqewrdgqeterqwe",
                     "userid":"qwertyuioasdfghjkzxcvbnm",
                     "stockcode":"601988",
                     "count":"2000",
                     "lastupdatetime":"2017-07-12 12:33:33",
                     "useridstockcode":"qwertyuioasdfghjkzxcvbnm_601988"
                  },
                  ……
             ]
         }
}

5. 獲得持倉數(shù)據(jù)

/servlet/getbalanceholdstock

Request:
{
        "userid":"qwertyuioasdfghjkzxcvbnm",          //用戶ID
        "stockcode":"601988"                         //股票代碼
}
Response:
{
        "statusCode":"000000",
        "result":{
            "userid":"qwertyuioasdfghjkzxcvbnm",
            "stockcode":"601988",
            "balance":"45000",
            "holdcount":"2000"
        }
}

6. 獲得股票數(shù)據(jù)

/servlet/getstockdata

Request:
/servlet/getstockdata?stockcode=601988
}
Response:
{
        "statusCode":"000000",
        "result":{
            "gid":"sh601009",               /*股票編號*/
            "increPer": "9.91",             /*漲跌百分比*/
            "increase": "43.99",            /*漲跌額*/
            "name":"南京銀行",              /*股票名稱*/
            "todayStartPri":"8.26",         /*今日開盤價*/
            "yestodEndPri":"8.26",          /*昨日收盤價*/
            "nowPri":"8.37",                /*當(dāng)前價格*/
            "todayMax":"8.55",              /*今日最高價*/
            "todayMin":"8.25",              /*今日最低價*/
            "competitivePri":"8.37",        /*競買價*/
            "reservePri":"8.38",            /*競賣價*/
            "traNumber":"34501453",         /*成交量*/
            "traAmount":"290889560",        /*成交金額*/
            "buyOne":"10870",               /*買一*/
            "buyOnePri":"8.37",             /*買一報價*/
            "buyTwo":"177241",              /*買二*/
            "buyTwoPri":"8.36",             /*買二報價*/
            "buyThree":"92600",             /*買三*/
            "buyThreePri":"8.35",           /*買三報價*/
            "buyFour":"87200"               /*買四*/
            "buyFourPri":"8.34",            /*買四報價*/
            "buyFive":"113700",             /*買五*/
            "buyFivePri":"8.42",            /*買五報價*/
            "sellOne":"47556",              /*賣一*/
            "sellOnePri":"8.38",            /*賣一報價*/
            "sellTwo":"103057",             /*賣二*/
            "sellTwoPri":"8.39",            /*賣二報價*/
            "sellThree":"186689",           /*賣三*/
            "sellThreePri":"8.40",          /*賣三報價*/
            "sellFour":"49000",             /*賣四*/
            "sellFourPri":"8.41",           /*賣四報價*/        
            "sellFive":"214535",            /*賣五*/
            "sellFivePri":"15.21",          /*賣五報價*/
            "date":"2012-12-11",            /*日期*/
            "time":"15:03:06",              /*時間*/
        }
}

7. 充值

/servlet/rechargebalance

Request:
{
        "userid":"qwertyuioasdfghjkzxcvbnm",          //用戶ID
        "password":"12345678",                        //密碼 6~20位 任意
        "amount":"1002.5"                                //充值金額
}
Response:
{
        "statusCode":"000000",
        "result":{
            "uuid":"fdas6fdsa6f5dsa5f536adsf3ad5ads",
            "userid":"qwertyuioasdfghjkzxcvbnm",
            "balance":"46002.5",
            "lastupdatetime":"2017-06-11 12:34:33"
        }
}

8. 提現(xiàn)

/servlet/withdrawbalance

Request:
{
        "userid":"qwertyuioasdfghjkzxcvbnm",          //用戶ID
        "password":"12345678",                        //密碼 6~20位 任意
        "amount":"2.5"                                //提現(xiàn)金額
}
Response:
{
        "statusCode":"000000",
        "result":{
            "uuid":"fuytrurtyurtyurtsfgfdsyurtyuyetrytr",
            "userid":"qwertyuioasdfghjkzxcvbnm",
            "balance":"46000",
            "lastupdatetime":"2017-06-11 12:38:33"
        }
}

9. 買入股票

/servlet/buystock

Request:
{
        "userid":"qwertyuioasdfghjkzxcvbnm",          //用戶ID
        "password":"12345678",                        //密碼 6~20位
        "stockcode":"601988",                         //股票代碼
        "count":"1000"                                //買入數(shù)量
        "execute":"true",                             //是否真實執(zhí)行
}
Response:
{
        "statusCode":"000000",
        "result":{
            "uuid":"dafadsfdagvcthtrygdsfgsdg",
            "commandid":"",
            "userid":"qwertyuioasdfghjkzxcvbnm",
            "stockcode":"601988",
            "type":"buy",
            "price":"7.12",
            "count":"1000",
            "holdstockbefore":"0",
            "holdstockafter":"1000",
            "balancebefore":"46000",
            "balanceafter":"38862.2",
            "exchangeamount":"17.8",
            "stockamount":"7120",
            "totalamount":"7137.8",
            "createtime":"2017-06-13 14:28:31"
        }
}

10. 買出股票

/servlet/sellstock

Request:
{
        "userid":"qwertyuioasdfghjkzxcvbnm",          //用戶ID
        "password":"12345678",                        //密碼 6~20位
        "stockcode":"601988",                         //股票代碼
        "count":"1000"                                //買入數(shù)量
        "execute":"true",                             //是否真實執(zhí)行
}
Response:
{
        "statusCode":"000000",
        "result":{
            "uuid":"kljhvcbyujewvdcjhwofiuldvklc",
            "commandid":"",
            "userid":"qwertyuioasdfghjkzxcvbnm",
            "stockcode":"601988",
            "type":"sell",
            "price":"7.12",
            "count":"1000",
            "holdstockbefore":"0",
            "holdstockafter":"1000",
            "balancebefore":"38862.2",
            "balanceafter":"45964.4",
            "exchangeamount":"17.8",
            "stockamount":"7120",
            "totalamount":"7102.2",
            "createtime":"2017-06-13 15:18:32"
        }
}

11. 批量操作命令

/servlet/batchcommand

Request:
{
        "12321df43refd45refd4":{
                "type":"balance",
                "userid":"qwertyuioasdfghjkzxcvbnm", 
                "password":"12345678",
         },
         "oi89vfadsnq4irdadaf78":{
                "type":"holdstock",
                "userid":"qwertyuioasdfghjkzxcvbnm",
                "password":"12345678",
                "stockcode":"601988"
         },
         "54786fdasfas6d8f57fa":{
                "type":"balance&holdstock",
                "userid":"qwertyuioasdfghjkzxcvbnm",
                "password":"12345678",
                "stockcode":"601988"
         },
         "dfaoiusfads68afsdljfdas":{
                "type":"buy",
                "commandid":"fdfidsapo68fsadhifads",
                "userid":"qwertyuioasdfghjkzxcvbnm", 
                "stockcode":"601988"
                "count":"1000"
         },
         "7a89f0ds576fadsfasd987":{
                "type":"sell",
                "commandid":"dfasiuy687sfdadfasdfasd",
                "userid":"qwertyuioasdfgffhjkzxcvbnm", 
                "password":"12345678",
                "stockcode":"601988"
                "count":"1000"
         }
}
Response:
{
        "statusCode":"000000",
        "result":{
            "12321df43refd45refd4":{
                "userid":"qwertyuioasdfghjkzxcvbnm", 
                "balance":"45964.4"
            },
            "oi89vfadsnq4irdadaf78":{
                "userid":"qwertyuioasddfghjkzxcvbnm",
                "stockcode":"601988"
                "holdcount":"1000"
            },
            "54786fdasfas6d8f57fa":{
                "userid":"qwertyuioasdfghjkzxcvbnm",
                "stockcode":"601988"
                "holdcount":"1000",
                "balance":"45964.4"
           },
           "dfaoiusfads68afsdljfdas":{
                "userid":"qwertyuioasdfghdjkzxcvbnm", 
                "stockcode":"601988"
                "count":"1000"
           },
           "7a89f0ds576fadsfasd987":{
                "userid":"qwertyuioasdfdghjkzxcvbnm",
                "stockcode":"601988"
                "count":"1000"
         }
    }
}

Cache存儲結(jié)構(gòu)

|名稱|說明|結(jié)構(gòu)|
|:--|:--:|
|cachekey_user|用戶集合|Map<userid,UserMap>|
|cachekey_user_name|用戶名集合|Map<username,UserMap>|
|cachekey_balance|余額集合|Map<balanceid,BalanceMap>|
|cachekey_balance_userid|用戶余額集合|Map<userid,BalanceMap>|
|cachekey_holdstock|持倉集合|Map<holdstockid,HoldstockMap|
|cachekey_holdstock_userid|用戶持倉集合|Map< userid,HoldstockMapList>|

數(shù)據(jù)庫存儲算法

配置文件

配置項 默認值 說明
STOCK_DATA_BASEURL 獲得股票大盤數(shù)據(jù)接口
COMMAND_FILE_ROOT 數(shù)據(jù)庫更新文件夾根目錄位置

文件夾

task 為命令任務(wù)文件夾 有三種命令 竿痰,分別在三個文件夾中

  1. 創(chuàng)建交易記錄 create_exchange 每秒鐘一個文件. 追寫
  2. 更改用戶余額 update_balance 每個用戶一個文件 新寫
  3. 修改用戶股票持倉 update_holdstock 每個用戶每只股票一個文件 新寫 每次都覆蓋之前的記錄

update_balance update_holdstock 分別為線程碎浇,做了容器ConcurrentHashMap<userid,command>. 每次有新的數(shù)據(jù),將覆蓋之前的數(shù)據(jù)

database 為準備入庫文件夾 里面每10秒一個文件夾
2017091610452.cmd
2017091610453.cmd
在每個10秒的文件夾中洽蛀,分別有如下文件

  1. new.db 等待入庫文件 這個文件是將最近10秒的文件內(nèi)容,一并寫入到此文件中
  2. process.db 正在入庫文件

process.db僅僅是new.db在執(zhí)行階段的替身rename

history 為入庫歸檔文件夾 每小時一個文件夾
2017091610.cmd 這里只有create_exchange命令需要存儲

文件夾示例

[-]/CacheFile/TradeCommand
    [-]task
         [-]create_exchange.cmd   #每秒一個文件
             [-]20170916104523.cmd    
             [-]20170916104524.cmd
             [-]20170916104525.cmd
             [-]20170916104526.cmd
         [-]update_holdstock.cmd   #每用戶一個文件
             [-]fdardashj23hh324jlk324ghj.cmd
             [-]sdaffad89s7fdjash32u4342j.cmd
             [-]fda9fds9a8h2i4342ifjdu342j.cmd
         [-]update_balance.cmd   #每用戶每只股票一個文件
             [-]fdardashj23hh324jlk324ghj_601988.cmd
             [-]sdaffad89s7fdjash32u4342j_601988.cmd
             [-]sdaffad89s7fdjash32u4342j_601931.cmd
             [-]sdaffad89s7fdjash32u4342j_602483.cmd
             [-]fda9fds9a8h2i4342ifjdu342j_601988.cmd
    [-]database
             [-]create_exchange.cmd   #每10秒一個文件
                  [-]2017091610452.cmd
             [-]update_holdstock.cmd  #每10秒一個文件
                  [-]2017091610452.cmd
             [-]update_balance.cmd  #每10秒一個文件
                  [-]2017091610452.cmd
    [-]history
             [-]2017091610.cmd   #每小時一個文件  這里只有交易記錄  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棒妨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌含长,老刑警劉巖券腔,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拘泞,居然都是意外死亡纷纫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門陪腌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辱魁,“玉大人,你說我怎么就攤上這事诗鸭∩烫荆” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵只泼,是天一觀的道長。 經(jīng)常有香客問我卵洗,道長请唱,這世上最難降的妖魔是什么弥咪? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮十绑,結(jié)果婚禮上聚至,老公的妹妹穿的比我還像新娘。我一直安慰自己本橙,他們只是感情好扳躬,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甚亭,像睡著了一般贷币。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亏狰,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天役纹,我揣著相機與錄音,去河邊找鬼暇唾。 笑死促脉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的策州。 我是一名探鬼主播瘸味,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼够挂!你這毒婦竟也來了旁仿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤下硕,失蹤者是張志新(化名)和其女友劉穎丁逝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梭姓,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡霜幼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了誉尖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罪既。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铡恕,靈堂內(nèi)的尸體忽然破棺而出琢感,到底是詐尸還是另有隱情,我是刑警寧澤探熔,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布驹针,位于F島的核電站,受9級特大地震影響诀艰,放射性物質(zhì)發(fā)生泄漏柬甥。R本人自食惡果不足惜饮六,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苛蒲。 院中可真熱鬧卤橄,春花似錦、人聲如沸臂外。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漏健。三九已至嚎货,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間漾肮,已是汗流浹背厂抖。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留克懊,地道東北人忱辅。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像谭溉,于是被迫代替她去往敵國和親墙懂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容