|
|
@@ -1,206 +1,24 @@
|
|
|
import { v4 } from 'uuid'
|
|
|
import { quoteServerRequest } from '@/services/socket/quote'
|
|
|
-import { futuresStore } from '@/stores'
|
|
|
-import { timerInterceptor } from '@/utils/timer'
|
|
|
+import { sessionData } from '@/stores'
|
|
|
import eventBus from '@/services/bus'
|
|
|
import socket from '@/services/socket'
|
|
|
-import moment from 'moment'
|
|
|
|
|
|
/**
|
|
|
- * 订阅通知
|
|
|
+ * 订阅行情
|
|
|
*/
|
|
|
export default new (class {
|
|
|
/** 行情订阅列表 */
|
|
|
private quoteSubscribeMap = new Map<string, string[]>()
|
|
|
- private quotes: Proto.Quote[] = []
|
|
|
-
|
|
|
- quotePushNotify
|
|
|
- quoteServerReconnectNotify
|
|
|
|
|
|
constructor() {
|
|
|
- // 接收行情推送通知
|
|
|
- this.quotePushNotify = eventBus.$on('QuotePushNotify', (res) => {
|
|
|
- const data = res as Proto.Quote[]
|
|
|
- data.forEach((item) => {
|
|
|
- const index = this.quotes.findIndex((e) => e.goodscode === item.goodscode)
|
|
|
- if (index > -1) {
|
|
|
- this.quotes[index] = item
|
|
|
- } else {
|
|
|
- this.quotes.push(item)
|
|
|
- }
|
|
|
- })
|
|
|
- this.handleQuote()
|
|
|
- })
|
|
|
-
|
|
|
// 接收行情服务断线重连成功通知
|
|
|
- this.quoteServerReconnectNotify = eventBus.$on('QuoteServerReconnectNotify', () => {
|
|
|
- this.quoteSubscribe()
|
|
|
+ eventBus.$on('QuoteServerReconnectNotify', () => {
|
|
|
+ this.quoteSubscribe();
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 处理行情数据
|
|
|
- */
|
|
|
- private handleQuote = timerInterceptor.setThrottle(() => {
|
|
|
- const quoteList = futuresStore.quoteDayList.value
|
|
|
- this.quotes.forEach((item) => {
|
|
|
- const quote = quoteList.find((e) => e.goodscode.toUpperCase() === item.goodscode?.toUpperCase())
|
|
|
- const last = item.last ?? 0
|
|
|
- const lasttime = (item.date && item.time) ? moment(item.date + item.time, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss') : ''
|
|
|
-
|
|
|
- if (quote) {
|
|
|
- Object.entries(item).forEach(([key, value]) => {
|
|
|
- // 只更新存在的属性
|
|
|
- if (Reflect.has(quote, key)) {
|
|
|
- const prop = key as keyof Ermcp.QuoteDay;
|
|
|
- (<K extends typeof prop>(key: K) => quote[key] = value)(prop);
|
|
|
- }
|
|
|
- })
|
|
|
- // 处理最高最低价
|
|
|
- if (last) {
|
|
|
- if (last > quote.highest) {
|
|
|
- quote.highest = last;
|
|
|
- }
|
|
|
- if (last < quote.lowest) {
|
|
|
- quote.lowest = last;
|
|
|
- }
|
|
|
- }
|
|
|
- // 处理最新时间
|
|
|
- if (lasttime) {
|
|
|
- quote.lasttime = lasttime;
|
|
|
- }
|
|
|
- } else {
|
|
|
- console.warn('行情推送的商品 ' + item.goodscode + ' 缺少盘面信息')
|
|
|
- quoteList.push({
|
|
|
- Lastturnover: 0,
|
|
|
- ask: item.ask ?? 0,
|
|
|
- ask2: item.ask2 ?? 0,
|
|
|
- ask3: item.ask3 ?? 0,
|
|
|
- ask4: item.ask4 ?? 0,
|
|
|
- ask5: item.ask5 ?? 0,
|
|
|
- ask6: 0,
|
|
|
- ask7: 0,
|
|
|
- ask8: 0,
|
|
|
- ask9: 0,
|
|
|
- ask10: 0,
|
|
|
- askorderid: 0,
|
|
|
- askorderid2: 0,
|
|
|
- askorderid3: 0,
|
|
|
- askorderid4: 0,
|
|
|
- askorderid5: 0,
|
|
|
- askordervolume: 0,
|
|
|
- askordervolume2: 0,
|
|
|
- askordervolume3: 0,
|
|
|
- askordervolume4: 0,
|
|
|
- askordervolume5: 0,
|
|
|
- askordervolume6: 0,
|
|
|
- askordervolume7: 0,
|
|
|
- askordervolume8: 0,
|
|
|
- askordervolume9: 0,
|
|
|
- askordervolume10: 0,
|
|
|
- askqueueinfo: "",
|
|
|
- askvolume: item.askvolume ?? 0,
|
|
|
- askvolume2: item.askvolume2 ?? 0,
|
|
|
- askvolume3: item.askvolume3 ?? 0,
|
|
|
- askvolume4: item.askvolume4 ?? 0,
|
|
|
- askvolume5: item.askvolume5 ?? 0,
|
|
|
- askvolume6: 0,
|
|
|
- askvolume7: 0,
|
|
|
- askvolume8: 0,
|
|
|
- askvolume9: 0,
|
|
|
- askvolume10: 0,
|
|
|
- averageprice: 0,
|
|
|
- bid: item.bid ?? 0,
|
|
|
- bid2: item.bid2 ?? 0,
|
|
|
- bid3: item.bid3 ?? 0,
|
|
|
- bid4: item.bid4 ?? 0,
|
|
|
- bid5: item.bid5 ?? 0,
|
|
|
- bid6: 0,
|
|
|
- bid7: 0,
|
|
|
- bid8: 0,
|
|
|
- bid9: 0,
|
|
|
- bid10: 0,
|
|
|
- bidorderid: 0,
|
|
|
- bidorderid2: 0,
|
|
|
- bidorderid3: 0,
|
|
|
- bidorderid4: 0,
|
|
|
- bidorderid5: 0,
|
|
|
- bidordervolume: 0,
|
|
|
- bidordervolume2: 0,
|
|
|
- bidordervolume3: 0,
|
|
|
- bidordervolume4: 0,
|
|
|
- bidordervolume5: 0,
|
|
|
- bidordervolume6: 0,
|
|
|
- bidordervolume7: 0,
|
|
|
- bidordervolume8: 0,
|
|
|
- bidordervolume9: 0,
|
|
|
- bidordervolume10: 0,
|
|
|
- bidqueueinfo: "",
|
|
|
- bidvolume: item.bidvolume ?? 0,
|
|
|
- bidvolume2: item.bidvolume2 ?? 0,
|
|
|
- bidvolume3: item.bidvolume3 ?? 0,
|
|
|
- bidvolume4: item.bidvolume4 ?? 0,
|
|
|
- bidvolume5: item.bidvolume5 ?? 0,
|
|
|
- bidvolume6: 0,
|
|
|
- bidvolume7: 0,
|
|
|
- bidvolume8: 0,
|
|
|
- bidvolume9: 0,
|
|
|
- bidvolume10: 0,
|
|
|
- calloptionpremiums: item.calloptionpremiums ?? 0,
|
|
|
- calloptionpremiums2: item.calloptionpremiums2 ?? 0,
|
|
|
- calloptionpremiums3: item.calloptionpremiums3 ?? 0,
|
|
|
- calloptionpremiums4: item.calloptionpremiums4 ?? 0,
|
|
|
- calloptionpremiums5: item.calloptionpremiums5 ?? 0,
|
|
|
- cleartime: 0,
|
|
|
- exchangecode: item.exchangecode ?? 0,
|
|
|
- exchangedate: item.exchangedate ?? 0,
|
|
|
- goodscode: item.goodscode ?? '',
|
|
|
- grepmarketprice: 0,
|
|
|
- highest: item.highest ?? 0,
|
|
|
- holdincrement: 0,
|
|
|
- holdvolume: item.holdvolume ?? 0,
|
|
|
- iep: 0,
|
|
|
- iev: 0,
|
|
|
- inventory: item.inventory ?? 0,
|
|
|
- iscleared: 0,
|
|
|
- issettled: 0,
|
|
|
- last,
|
|
|
- lastlot: 0,
|
|
|
- lasttime,
|
|
|
- lastvolume: item.lastvolume ?? 0,
|
|
|
- limitdown: item.limitlow ?? 0,
|
|
|
- limitup: item.limithigh ?? 0,
|
|
|
- lowest: item.lowest ?? 0,
|
|
|
- nontotalholdervolume: 0,
|
|
|
- nontotallot: 0,
|
|
|
- nontotalturnover: 0,
|
|
|
- nontotalvolume: 0,
|
|
|
- opened: item.opened ?? 0,
|
|
|
- opentime: '',
|
|
|
- orderid: 0,
|
|
|
- preclose: item.preclose ?? 0,
|
|
|
- preholdvolume: item.preholdvolume ?? 0,
|
|
|
- presettle: item.presettle ?? 0,
|
|
|
- publictradetype: '',
|
|
|
- putoptionpremiums: item.putoptionpremiums ?? 0,
|
|
|
- putoptionpremiums2: item.putoptionpremiums2 ?? 0,
|
|
|
- putoptionpremiums3: item.putoptionpremiums3 ?? 0,
|
|
|
- putoptionpremiums4: item.putoptionpremiums4 ?? 0,
|
|
|
- putoptionpremiums5: item.putoptionpremiums5 ?? 0,
|
|
|
- settle: item.settle ?? 0,
|
|
|
- strikeprice: 0,
|
|
|
- totalaskvolume: 0,
|
|
|
- totalbidvolume: 0,
|
|
|
- totallot: 0,
|
|
|
- totalturnover: item.totalturnover ?? 0,
|
|
|
- totalvolume: item.totalvolume ?? 0,
|
|
|
- utclasttime: ''
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
- }, 200)
|
|
|
-
|
|
|
- /**
|
|
|
* 开始行情订阅
|
|
|
*/
|
|
|
private quoteSubscribe = () => {
|
|
|
@@ -260,7 +78,9 @@ export default new (class {
|
|
|
if (flag) {
|
|
|
console.log('删除订阅', uuid)
|
|
|
}
|
|
|
- this.quoteSubscribe()
|
|
|
+ if (sessionData.getLoginInfo('Token')) {
|
|
|
+ this.quoteSubscribe()
|
|
|
+ }
|
|
|
return flag
|
|
|
},
|
|
|
}
|
|
|
@@ -278,7 +98,7 @@ export default new (class {
|
|
|
}
|
|
|
})
|
|
|
} else {
|
|
|
- console.log('清空订阅', keys)
|
|
|
+ console.log('取消订阅')
|
|
|
this.quoteSubscribeMap.clear()
|
|
|
}
|
|
|
this.quoteSubscribe()
|