index.ts 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. import APP from '@/services';
  2. import { getGoodsByCode } from '@/services/bus/goods';
  3. import { geLoginID_number, isLogin } from '@/services/bus/login';
  4. import { getToken } from '@/services/bus/token';
  5. import { funCode } from '@/services/funcode/index';
  6. import { QueryQuoteDayRsp } from '@/services/go/quote/interface';
  7. import { Package40 } from '@/utils/websocket/package';
  8. import Long from 'long';
  9. import moment from 'moment';
  10. import { SubscribeInfoType } from '../interface';
  11. import { byteArrayToUInt, subscribeInfosToByteArrary } from './byteUtils';
  12. /**
  13. * 构建行情订阅请求包
  14. */
  15. export function buildSubscribePeq(subscribeInfos: SubscribeInfoType[]): Package40 {
  16. // 如果是登录状态,就走正常行情链路. 否则走游客
  17. const loginId = isLogin() ? Long.fromNumber(geLoginID_number()) : Long.fromNumber(2);
  18. const token = isLogin() ? getToken() : '2_TOKEN_NEKOT_';
  19. const content = subscribeInfosToByteArrary(subscribeInfos, token, loginId);
  20. const reqPackage = new Package40([funCode.MainClassNumber_Quota_SubscriptReq, content], undefined);
  21. return reqPackage;
  22. }
  23. /**
  24. * 解析行情订阅请求包
  25. * @param rspPackage
  26. */
  27. export function parseSubscribeRsp(rspPackage: any): Promise<string | SubscribeInfoType[]> {
  28. return new Promise((resolve, reject) => {
  29. const content = rspPackage.content;
  30. if (content.length === 0) {
  31. // 有可能空订阅,也有可能订阅返回数据为空,但其实已经订阅了商品
  32. // 暂做正常返回 空字符串 处理,如遇到问题继续优化即可
  33. console.warn('行情订阅请求包返回为空');
  34. resolve('');
  35. }
  36. const count = byteArrayToUInt(content.subarray(0, 4), false);
  37. if (count > 1000) {
  38. // 游客模式 刷新成长问题,为了不让页面卡死,暂时处理
  39. return null;
  40. }
  41. switch (count) {
  42. case -1:
  43. reject('订阅失败');
  44. break;
  45. case -2:
  46. reject('Token校验失败');
  47. break;
  48. case -3:
  49. reject('无对应商品信息');
  50. break;
  51. default:
  52. break;
  53. }
  54. // 判断返回的Count是否有问题
  55. if (!count || count > (content.length - 4) / 66) {
  56. reject('行情订阅返回数据不正确');
  57. }
  58. const result: SubscribeInfoType[] = [];
  59. let position = 4;
  60. for (let i = 0; i < count; i++) {
  61. const dataArray = content.subarray(position, position + 66);
  62. const subState = dataArray[0];
  63. // FIXME: 目前行情接入服务不能正确返回交易所代码
  64. const exchangeCode = dataArray[2];
  65. const goodsCode = String.fromCharCode(...dataArray.subarray(2, dataArray.length)).trim();
  66. result.push({ subState, goodsCode, exchangeCode });
  67. position += 66;
  68. }
  69. resolve(result);
  70. });
  71. }
  72. /**
  73. * 解析行情推送报文
  74. * @param {Array} quotationData 行情信息
  75. * @param {Boolean} isPushQuote 实时行情推送为true;盘面为false
  76. *
  77. */
  78. export function parseReceivePush(quotationData: any) {
  79. // 目前发现可能会传入空数组
  80. if (!quotationData.length) {
  81. return;
  82. }
  83. // 分解行正则
  84. const regRow = /10\s.*?11/g;
  85. // 分解单行 key 正则
  86. const regKey = /01\s.*?02/g;
  87. // 分解单行 value 正则
  88. const regValue = /02\s.*?01|02\s.*?11/g;
  89. // 记录已经更新盘面的商品信息数组
  90. // 0x10 ... 0x01 key 0x02 value 0x01 key 0x02 value ... 0x11
  91. const hexString = Array.prototype.map.call(quotationData, (x) => ('00' + x.toString(16)).slice(-2)).join(' ');
  92. // let hexString = 'FF 10 01 55 02 45 46 47 48 01 66 02 48 47 46 45 11 10 01 77 02 AA BB CC DD 11 00';
  93. // 获取单行行情
  94. const rows = hexString.match(regRow);
  95. if (rows === null) {
  96. return;
  97. }
  98. for (const low of rows) {
  99. // 获取 key value 表列
  100. const keys: any = low.match(regKey);
  101. const values: any = low.match(regValue);
  102. const goodsQuoteTik: any = {};
  103. for (let i = 0; i < keys.length; i++) {
  104. const key = parseInt(keys[i].substring(3, 5), 16);
  105. const tmpValue = values[i];
  106. const value = new Uint8Array(
  107. tmpValue
  108. .substring(3, tmpValue.length - 3)
  109. .split(' ')
  110. .map((byte: any) => parseInt(byte, 16))
  111. );
  112. // 缓存值
  113. setQuoteTikFieldByByte(goodsQuoteTik, key, value);
  114. }
  115. const quoteDayInfo = APP.getRef('quoteDayInfo');
  116. const itemQuote = quoteDayInfo.value.find((el: QueryQuoteDayRsp) => {
  117. const goodcode = el.refgoodscode || el.goodscode
  118. // console.log(el.goodscode, el.refgoodscode, goodsQuoteTik.goodscode)
  119. return goodcode === goodsQuoteTik.goodscode
  120. });
  121. if (itemQuote) {
  122. const goods = getGoodsByCode(itemQuote.goodscode);
  123. if (goods) {
  124. console.log('goodsQuoteTik', goodsQuoteTik)
  125. // 处理报价小数为
  126. const decimalplace = goods.decimalplace
  127. const num = Math.pow(10, decimalplace)
  128. const fn = (value: number) => +(value / num).toFixed(decimalplace)
  129. //
  130. // 处理 报价小数位
  131. const handleDeimalplace = (key: string) => {
  132. return Reflect.has(goodsQuoteTik, key) ? fn(goodsQuoteTik[key]) : itemQuote[key]
  133. }
  134. // 处理 如果有值则更新值,没有的话,则取上次的值
  135. // 注意: 0 也是有效数字
  136. const handleNoneValue = (key: string) => {
  137. return Reflect.has(goodsQuoteTik, key) ? goodsQuoteTik[key] : itemQuote[key]
  138. }
  139. const changeValue = () => {
  140. // 实时行情由于行情源的问题可能不会下发现量,这时用盘面的总量来计算
  141. if (!goodsQuoteTik.lastvolume) {
  142. if (itemQuote.totalvolume) {
  143. itemQuote.lastvolume = goodsQuoteTik.totalvolume - itemQuote.totalvolume;
  144. }
  145. }
  146. // 处理 最高最低价
  147. if (Reflect.has(goodsQuoteTik, 'last')) {
  148. const last = itemQuote.last = handleDeimalplace('last')
  149. if (last < itemQuote.lowest) {
  150. itemQuote.lowest = handleDeimalplace('last')
  151. } else if (last > itemQuote.highest) {
  152. itemQuote.highest = handleDeimalplace('last')
  153. }
  154. }
  155. // 处理价格
  156. itemQuote.decimalplace = decimalplace
  157. itemQuote.ask = handleDeimalplace('ask')
  158. itemQuote.ask2 = handleDeimalplace('ask2')
  159. itemQuote.ask3 = handleDeimalplace('ask3')
  160. itemQuote.ask4 = handleDeimalplace('ask4')
  161. itemQuote.ask5 = handleDeimalplace('ask5')
  162. itemQuote.ask6 = handleDeimalplace('ask6')
  163. itemQuote.ask7 = handleDeimalplace('ask7')
  164. itemQuote.ask8 = handleDeimalplace('ask8')
  165. itemQuote.ask9 = handleDeimalplace('ask9')
  166. itemQuote.ask10 = handleDeimalplace('ask10')
  167. itemQuote.bid = handleDeimalplace('bid')
  168. itemQuote.bid2 = handleDeimalplace('bid2')
  169. itemQuote.bid3 = handleDeimalplace('bid3')
  170. itemQuote.bid4 = handleDeimalplace('bid4')
  171. itemQuote.bid5 = handleDeimalplace('bid5')
  172. itemQuote.bid6 = handleDeimalplace('bid6')
  173. itemQuote.bid7 = handleDeimalplace('bid7')
  174. itemQuote.bid8 = handleDeimalplace('bid8')
  175. itemQuote.bid9 = handleDeimalplace('bid9')
  176. itemQuote.averageprice = handleDeimalplace('averageprice')
  177. itemQuote.grepmarketprice = handleDeimalplace('grepmarketprice')
  178. itemQuote.iep = handleDeimalplace('iep')
  179. itemQuote.limitdown = handleDeimalplace('limitdown')
  180. itemQuote.limitup = handleDeimalplace('limitup')
  181. itemQuote.opened = handleDeimalplace('opened')
  182. itemQuote.lastturnover = handleDeimalplace('lastturnover')
  183. itemQuote.nontotalturnover = handleDeimalplace('nontotalturnover')
  184. itemQuote.lastturnover = handleDeimalplace('lastturnover')
  185. itemQuote.preclose = handleDeimalplace('preclose')
  186. itemQuote.settle = handleDeimalplace('settle')
  187. itemQuote.totalturnover = handleDeimalplace('totalturnover')
  188. itemQuote.askorderid = handleNoneValue('askorderid')
  189. itemQuote.askorderid2 = handleNoneValue('askorderid2')
  190. itemQuote.askorderid3 = handleNoneValue('askorderid3')
  191. itemQuote.askorderid4 = handleNoneValue('askorderid4')
  192. itemQuote.askorderid5 = handleNoneValue('askorderid5')
  193. itemQuote.askordervolume = handleNoneValue('askordervolume')
  194. itemQuote.askordervolume2 = handleNoneValue('askordervolume2')
  195. itemQuote.askordervolume3 = handleNoneValue('askordervolume3')
  196. itemQuote.askordervolume4 = handleNoneValue('askordervolume4')
  197. itemQuote.askordervolume5 = handleNoneValue('askordervolume5')
  198. itemQuote.askordervolume6 = handleNoneValue('askordervolume6')
  199. itemQuote.askordervolume7 = handleNoneValue('askordervolume7')
  200. itemQuote.askordervolume8 = handleNoneValue('askordervolume8')
  201. itemQuote.askordervolume9 = handleNoneValue('askordervolume9')
  202. itemQuote.askqueueinfo = handleNoneValue('askqueueinfo')
  203. itemQuote.askvolume = handleNoneValue('askvolume')
  204. itemQuote.askvolume2 = handleNoneValue('askvolume2')
  205. itemQuote.askvolume3 = handleNoneValue('askvolume3')
  206. itemQuote.askvolume4 = handleNoneValue('askvolume4')
  207. itemQuote.askvolume5 = handleNoneValue('askvolume5')
  208. itemQuote.askvolume6 = handleNoneValue('askvolume6')
  209. itemQuote.askvolume7 = handleNoneValue('askvolume7')
  210. itemQuote.askvolume8 = handleNoneValue('askvolume8')
  211. itemQuote.askvolume9 = handleNoneValue('askvolume9')
  212. itemQuote.bidorderid = handleNoneValue('bidorderid')
  213. itemQuote.bidorderid2 = handleNoneValue('bidorderid2')
  214. itemQuote.bidorderid3 = handleNoneValue('bidorderid3')
  215. itemQuote.bidorderid4 = handleNoneValue('bidorderid4')
  216. itemQuote.bidorderid5 = handleNoneValue('bidorderid5')
  217. itemQuote.bidordervolume = handleNoneValue('bidordervolume')
  218. itemQuote.bidordervolume2 = handleNoneValue('bidordervolume2')
  219. itemQuote.bidordervolume3 = handleNoneValue('bidordervolume3')
  220. itemQuote.bidordervolume4 = handleNoneValue('bidordervolume4')
  221. itemQuote.bidordervolume5 = handleNoneValue('bidordervolume5')
  222. itemQuote.bidordervolume6 = handleNoneValue('bidordervolume6')
  223. itemQuote.bidordervolume7 = handleNoneValue('bidordervolume7')
  224. itemQuote.bidordervolume8 = handleNoneValue('bidordervolume8')
  225. itemQuote.bidordervolume9 = handleNoneValue('bidordervolume9')
  226. itemQuote.bidqueueinfo = handleNoneValue('bidqueueinfo')
  227. itemQuote.bidvolume = handleNoneValue('bidvolume')
  228. itemQuote.bidvolume2 = handleNoneValue('bidvolume2')
  229. itemQuote.bidvolume3 = handleNoneValue('bidvolume3')
  230. itemQuote.bidvolume4 = handleNoneValue('bidvolume4')
  231. itemQuote.bidvolume5 = handleNoneValue('bidvolume5')
  232. itemQuote.bidvolume6 = handleNoneValue('bidvolume6')
  233. itemQuote.bidvolume7 = handleNoneValue('bidvolume7')
  234. itemQuote.bidvolume8 = handleNoneValue('bidvolume8')
  235. itemQuote.bidvolume9 = handleNoneValue('bidvolume9')
  236. itemQuote.calloptionpremiums = handleNoneValue('calloptionpremiums')
  237. itemQuote.calloptionpremiums2 = handleNoneValue('calloptionpremiums2')
  238. itemQuote.calloptionpremiums3 = handleNoneValue('calloptionpremiums3')
  239. itemQuote.calloptionpremiums4 = handleNoneValue('calloptionpremiums4')
  240. itemQuote.calloptionpremiums5 = handleNoneValue('calloptionpremiums5')
  241. itemQuote.holdincrement = handleNoneValue('holdincrement')
  242. itemQuote.holdvolume = handleNoneValue('holdvolume')
  243. itemQuote.inventory = handleNoneValue('inventory')
  244. itemQuote.lastlot = handleNoneValue('lastlot')
  245. itemQuote.nontotalholdervolume = handleNoneValue('nontotalholdervolume')
  246. itemQuote.nontotallot = handleNoneValue('nontotallot')
  247. itemQuote.nontotalvolume = handleNoneValue('nontotalvolume')
  248. itemQuote.totallot = handleNoneValue('totallot')
  249. itemQuote.totalvolume = handleNoneValue('totalvolume')
  250. }
  251. // 判断是一下行情时间是否比现在的要早
  252. if (goodsQuoteTik.lasttime) {
  253. const quoteTime = moment(goodsQuoteTik.lasttime, 'YYYY-MM-DD HH:mm:ss')
  254. const localTime = moment(itemQuote.lasttime, 'YYYY-MM-DD HH:mm:ss')
  255. if (quoteTime >= localTime) {
  256. changeValue()
  257. itemQuote.lasttime = handleNoneValue('lasttime')
  258. }
  259. } else {
  260. // 委托单 没有 行情变更时间
  261. changeValue()
  262. }
  263. // goodsQuoteTik.averageprice = goodsQuoteTik.averageprice ? (fn(goodsQuoteTik.averageprice)) : '--'
  264. // goodsQuoteTik.grepmarketprice = goodsQuoteTik.grepmarketprice ? (fn(goodsQuoteTik.grepmarketprice)) : '--'
  265. // goodsQuoteTik.highest = goodsQuoteTik.highest ? (fn(goodsQuoteTik.highest)) : '--'
  266. // goodsQuoteTik.iep = goodsQuoteTik.iep ? (fn(goodsQuoteTik.iep)) : '--'
  267. // goodsQuoteTik.limitdown = goodsQuoteTik.limitdown ? (fn(goodsQuoteTik.limitdown)) : '--'
  268. // goodsQuoteTik.limitup = goodsQuoteTik.limitup ? (fn(goodsQuoteTik.limitup)) : '--'
  269. // goodsQuoteTik.lowest = goodsQuoteTik.lowest ? (fn(goodsQuoteTik.lowest)) : '--'
  270. // goodsQuoteTik.opened = goodsQuoteTik.opened ? (fn(goodsQuoteTik.opened)) : '--'
  271. // goodsQuoteTik.preclose = goodsQuoteTik.preclose ? (fn(goodsQuoteTik.preclose)) : '--'
  272. // goodsQuoteTik.settle = goodsQuoteTik.settle ? (fn(goodsQuoteTik.settle)) : '--'
  273. // goodsQuoteTik.strikeprice = goodsQuoteTik.strikeprice ? (fn(goodsQuoteTik.strikeprice)) : '--'
  274. // goodsQuoteTik.lasttime = moment(goodsQuoteTik.date + goodsQuoteTik.time, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss')
  275. // // 实时行情由于行情源的问题可能不会下发现量,这时用盘面的总量来计算
  276. // if (!goodsQuoteTik.lastvolume) {
  277. // if (itemQuote.totalvolume) {
  278. // goodsQuoteTik.lastvolume = goodsQuoteTik.totalvolume - itemQuote.totalvolume;
  279. // } else {
  280. // goodsQuoteTik.lastvolume = "--";
  281. // }
  282. // }
  283. // !goodsQuoteTik.holdvolume && (goodsQuoteTik.holdvolume = '--')
  284. // !goodsQuoteTik.holdincrement && (goodsQuoteTik.holdincrement = '--')
  285. // !goodsQuoteTik.totalturnover && (goodsQuoteTik.totalturnover = '--')
  286. // console.log('goodsQuoteTik', goodsQuoteTik)
  287. // mergeObj(itemQuote, goodsQuoteTik);
  288. } else {
  289. console.warn(`行情推送的商品goods:${itemQuote.goodscode}在商品列表里不存在`)
  290. }
  291. // 注意:此处已 go 服务查询出来的盘面数据为基准,查询盘面 先修改成go 服务,第一次进入项目时候回查询一次所有盘面
  292. // 之前是 通过 websocket 查询的,故 可能存在字段发生变化问题,如遇到,则进行优化处理
  293. // 判断是一下行情时间是否比现在的要早
  294. // const quoteTime = moment(goodsQuoteTik.lasttime, 'YYYY-MM-DD HH:mm:ss')
  295. // const localTime = moment(itemQuote.lasttime, 'YYYY-MM-DD HH:mm:ss')
  296. // if (quoteTime >= localTime) {
  297. // mergeObj(itemQuote, goodsQuoteTik);
  298. // }
  299. } else {
  300. // 此处 待优化(存在字段变化问题)
  301. // console.log('itemQuote', itemQuote)
  302. // quoteDayInfo.value.push(itemQuote);
  303. }
  304. }
  305. }
  306. /**
  307. * 分解缓存行情字段的方法
  308. * goodsQuoteTik
  309. * keyItem
  310. * valueItem
  311. */
  312. function setQuoteTikFieldByByte(goodsQuoteTik: any, keyItem: any, valueItem: any) {
  313. const strValue = String.fromCharCode(...valueItem);
  314. switch (keyItem) {
  315. case 0x56:
  316. goodsQuoteTik.exchangecode = strValue;
  317. break;
  318. case 0x21:
  319. goodsQuoteTik.goodscode = strValue;
  320. break;
  321. case 0x24:
  322. goodsQuoteTik.last = Number(strValue);
  323. break;
  324. case 0x5b:
  325. goodsQuoteTik.holdvolume = Number(strValue);
  326. break;
  327. case 0x25:
  328. goodsQuoteTik.lastvolume = Number(strValue);
  329. break;
  330. case 0x3c:
  331. goodsQuoteTik.preholdvolume = Number(strValue);
  332. break;
  333. case 0x32:
  334. goodsQuoteTik.presettle = Number(strValue);
  335. break;
  336. case 0x33:
  337. goodsQuoteTik.settle = Number(strValue);
  338. break;
  339. case 0x29:
  340. goodsQuoteTik.totalturnover = Number(strValue);
  341. break;
  342. case 0x28:
  343. goodsQuoteTik.totalvolume = Number(strValue);
  344. break;
  345. case 0x35:
  346. goodsQuoteTik.limithigh = Number(strValue);
  347. break;
  348. case 0x36:
  349. goodsQuoteTik.limitlow = Number(strValue);
  350. break;
  351. case 'L'.charCodeAt(0):
  352. goodsQuoteTik.ask = Number(strValue);
  353. break;
  354. case 'M'.charCodeAt(0):
  355. goodsQuoteTik.ask2 = Number(strValue);
  356. break;
  357. case 'N'.charCodeAt(0):
  358. goodsQuoteTik.ask3 = Number(strValue);
  359. break;
  360. case 'O'.charCodeAt(0):
  361. goodsQuoteTik.ask4 = Number(strValue);
  362. break;
  363. case 'P'.charCodeAt(0):
  364. goodsQuoteTik.ask5 = Number(strValue);
  365. break;
  366. case 'Q'.charCodeAt(0):
  367. goodsQuoteTik.askvolume = Number(strValue);
  368. break;
  369. case 'R'.charCodeAt(0):
  370. goodsQuoteTik.askvolume2 = Number(strValue);
  371. break;
  372. case 'S'.charCodeAt(0):
  373. goodsQuoteTik.askvolume3 = Number(strValue);
  374. break;
  375. case 'T'.charCodeAt(0):
  376. goodsQuoteTik.askvolume4 = Number(strValue);
  377. break;
  378. case 'U'.charCodeAt(0):
  379. goodsQuoteTik.askvolume5 = Number(strValue);
  380. break;
  381. case 'B'.charCodeAt(0):
  382. goodsQuoteTik.bid = Number(strValue);
  383. break;
  384. case 'C'.charCodeAt(0):
  385. goodsQuoteTik.bid2 = Number(strValue);
  386. break;
  387. case 'D'.charCodeAt(0):
  388. goodsQuoteTik.bid3 = Number(strValue);
  389. break;
  390. case 'E'.charCodeAt(0):
  391. goodsQuoteTik.bid4 = Number(strValue);
  392. break;
  393. case 'F'.charCodeAt(0):
  394. goodsQuoteTik.bid5 = Number(strValue);
  395. break;
  396. case 'G'.charCodeAt(0):
  397. goodsQuoteTik.bidvolume = Number(strValue);
  398. break;
  399. case 'H'.charCodeAt(0):
  400. goodsQuoteTik.bidvolume2 = Number(strValue);
  401. break;
  402. case 'I'.charCodeAt(0):
  403. goodsQuoteTik.bidvolume3 = Number(strValue);
  404. break;
  405. case 'J'.charCodeAt(0):
  406. goodsQuoteTik.bidvolume4 = Number(strValue);
  407. break;
  408. case 'K'.charCodeAt(0):
  409. goodsQuoteTik.bidvolume5 = Number(strValue);
  410. break;
  411. case ','.charCodeAt(0):
  412. goodsQuoteTik.highest = Number(strValue);
  413. break;
  414. case '-'.charCodeAt(0):
  415. goodsQuoteTik.lowest = Number(strValue);
  416. break;
  417. case '@'.charCodeAt(0):
  418. goodsQuoteTik.date = strValue;
  419. break;
  420. case 'A'.charCodeAt(0):
  421. goodsQuoteTik.time = strValue;
  422. break;
  423. case '+'.charCodeAt(0):
  424. goodsQuoteTik.preclose = Number(strValue);
  425. break;
  426. case '.'.charCodeAt(0):
  427. goodsQuoteTik.opened = Number(strValue);
  428. break;
  429. case 0x5c:
  430. goodsQuoteTik.exerciseprice = Number(strValue);
  431. break;
  432. case 0x7a:
  433. goodsQuoteTik.inventory = Number(strValue);
  434. break;
  435. case 0x7c:
  436. goodsQuoteTik.exchangedate = Number(strValue);
  437. break;
  438. case 0x70:
  439. goodsQuoteTik.strbidorder = strValue;
  440. break;
  441. case 0x71:
  442. goodsQuoteTik.strbidorder2 = strValue;
  443. break;
  444. case 0x72:
  445. goodsQuoteTik.strbidorder3 = strValue;
  446. break;
  447. case 0x73:
  448. goodsQuoteTik.strbidorder4 = strValue;
  449. break;
  450. case 0x74:
  451. goodsQuoteTik.strbidorder5 = strValue;
  452. break;
  453. case 0x75:
  454. goodsQuoteTik.straskorder = strValue;
  455. break;
  456. case 0x76:
  457. goodsQuoteTik.straskorder2 = strValue;
  458. break;
  459. case 0x77:
  460. goodsQuoteTik.straskorder3 = strValue;
  461. break;
  462. case 0x78:
  463. goodsQuoteTik.straskorder4 = strValue;
  464. break;
  465. case 0x79:
  466. goodsQuoteTik.straskorder5 = strValue;
  467. break;
  468. case 0x7d:
  469. goodsQuoteTik.putoptionpremiums = strValue;
  470. break;
  471. case 0x7e:
  472. goodsQuoteTik.putoptionpremiums2 = strValue;
  473. break;
  474. case 0x80:
  475. goodsQuoteTik.putoptionpremiums3 = strValue;
  476. break;
  477. case 0x81:
  478. goodsQuoteTik.putoptionpremiums4 = strValue;
  479. break;
  480. case 0x82:
  481. goodsQuoteTik.putoptionpremiums5 = strValue;
  482. break;
  483. case 0x83:
  484. goodsQuoteTik.calloptionpremiums = strValue;
  485. break;
  486. case 0x84:
  487. goodsQuoteTik.calloptionpremiums2 = strValue;
  488. break;
  489. case 0x85:
  490. goodsQuoteTik.calloptionpremiums3 = strValue;
  491. break;
  492. case 0x86:
  493. goodsQuoteTik.calloptionpremiums4 = strValue;
  494. break;
  495. case 0x87:
  496. goodsQuoteTik.calloptionpremiums5 = strValue;
  497. break;
  498. default:
  499. break;
  500. }
  501. }