ApplicationParameter.cs 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971
  1. using Muchinfo.MTPClient.Data.Enums;
  2. using Muchinfo.MTPClient.Infrastructure.LinkProxy;
  3. using Muchinfo.MTPClient.Infrastructure.LinkProxy.Enum;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Net.NetworkInformation;
  10. using System.Text;
  11. using System.Text.RegularExpressions;
  12. using System.Threading.Tasks;
  13. using System.Windows;
  14. using System.Xml.Linq;
  15. using GalaSoft.MvvmLight.Ioc;
  16. using Muchinfo.MTPClient.Data.Model;
  17. using Muchinfo.MTPClient.Data.Model.Account;
  18. using Muchinfo.MTPClient.Infrastructure.Cache;
  19. using Muchinfo.MTPClient.Infrastructure.Helpers;
  20. using Muchinfo.MTPClient.Infrastructure.MessageBox;
  21. using Muchinfo.MTPClient.IService;
  22. namespace Muchinfo.MTPClient.Infrastructure.Utilities
  23. {
  24. /// <summary>
  25. /// ApplicationParameter类
  26. /// </summary>
  27. public class ApplicationParameter
  28. {
  29. #region 私有字段
  30. private static DateTime _serverTimeNow;
  31. private static int _showChart = 0;
  32. private static System.Timers.Timer _serverTimer;
  33. /// <summary>
  34. /// 基础时间 1970/01/01 00:00:00
  35. /// </summary>
  36. private static DateTime _basicDateTime = new DateTime(1970, 1, 1, 0, 0, 0);
  37. #endregion
  38. #region 公有静态属性
  39. /// <summary>
  40. /// 获取服务器当前时间
  41. /// </summary>
  42. public static DateTime ServerTimeNow
  43. {
  44. get { return _serverTimeNow; }
  45. set { _serverTimeNow = value; }
  46. }
  47. /// <summary>
  48. /// 获取基础时间 1970/01/01 00:00:00
  49. /// </summary>
  50. public static DateTime BasicDateTime
  51. {
  52. get { return _basicDateTime; }
  53. }
  54. /// <summary>
  55. /// 配置是否显示图表
  56. /// </summary>
  57. public static int ShowChart
  58. {
  59. get { return _showChart; }
  60. set { _showChart = value; }
  61. }
  62. /// <summary>
  63. /// 配置是否显示报表
  64. /// </summary>
  65. public static string ReportAddress { get; set; }
  66. /// <summary>
  67. /// 配置F10地址
  68. /// </summary>
  69. public static string FtenAddress { get; set; }
  70. private static string _isShowIdentifyingCode;
  71. /// <summary>
  72. /// 是否显示验证码【 0:不显示,1:显示,2:错误后显示】
  73. /// </summary>
  74. public static string IsShowIdentifyingCode
  75. {
  76. get { return _isShowIdentifyingCode; }
  77. set { _isShowIdentifyingCode = value; }
  78. }
  79. private static int _MarketTradeDefaultPriceMode = -1;
  80. /// <summary>
  81. /// 做市模式默认价格类型:若商品为做市模式,则默认成交的价格类型为“市价”【备注:0为市价,1为限价】
  82. /// </summary>
  83. public static int MarketTradeDefaultPriceMode
  84. {
  85. get { return _MarketTradeDefaultPriceMode; }
  86. set { _MarketTradeDefaultPriceMode = value; }
  87. }
  88. private static int _BidTradeDefaultPriceMode = -1;
  89. /// <summary>
  90. /// 竞价模式默认价格类型: 若商品为竞价模式,则默认成交的价格类型为“限价”【备注:0为市价,1为限价】
  91. /// </summary>
  92. public static int BidTradeDefaultPriceMode
  93. {
  94. get { return _BidTradeDefaultPriceMode; }
  95. set { _BidTradeDefaultPriceMode = value; }
  96. }
  97. /// <summary>
  98. /// 是否显示总浮动盈亏
  99. /// </summary>
  100. public static int IsShowSumPL { get; set; }
  101. /// <summary>
  102. /// 会员风控间隔时间
  103. /// </summary>
  104. public static int MemberMonitorTick { get; set; }
  105. /// <summary>
  106. /// 取历史Tick数据量
  107. /// </summary>
  108. public static short QuoteTickCount
  109. {
  110. get;
  111. set;
  112. }
  113. /// <summary>
  114. /// 是否显示风险提示
  115. /// </summary>
  116. public static int IsShowRateTips { get; set; }
  117. /// <summary>
  118. /// 是否显示托管计划
  119. /// </summary>
  120. public static bool IsShowDepositPlanMarket
  121. {
  122. get;
  123. set;
  124. }
  125. /// <summary>
  126. /// 服务超时时间
  127. /// </summary>
  128. public static int ServerTimeOut { get; set; }
  129. /// <summary>
  130. /// 交易地址
  131. /// </summary>
  132. public static string BizAddress { get; set; }
  133. /// <summary>
  134. /// 行情地址
  135. /// </summary>
  136. public static string QuoteAddress { get; set; }
  137. /// <summary>
  138. /// 游客行情地址
  139. /// </summary>
  140. public static string GuestQuoteAddress { get; set; }
  141. /// <summary>
  142. /// 开户注册地址
  143. /// </summary>
  144. public static string RegAccountAddress { get; set; }
  145. /// <summary>
  146. /// 是否显示预埋单功能
  147. /// </summary>
  148. public static int IsPrePostVisible { get; set; }
  149. /// <summary>
  150. /// 是否限制预埋单数量:【是否限制预埋单数量(不限制:0,限制数量:1)】
  151. /// </summary>
  152. public static decimal MaxPrePostOrderLot { get; set; }
  153. /// <summary>
  154. /// 默认下单数量
  155. /// </summary>
  156. public static decimal DefaultOrderLot { get; set; }
  157. private static int _defaultOpenMode = 1; //edit by dk 默认为1 建仓方式,枚举值发生变化20171128
  158. /// <summary>
  159. /// 设置下单默认建仓模式(1:建仓 2平仓;先平后建:3)
  160. /// </summary>
  161. public static int DefaultOpenMode
  162. {
  163. get { return _defaultOpenMode; }
  164. set { _defaultOpenMode = value; }
  165. }
  166. /// <summary>
  167. /// 提货单打印地址
  168. /// </summary>
  169. public static string TakeOrderPrintAdress { get; set; }
  170. #endregion
  171. #region 系统参数属性
  172. /// <summary>
  173. /// 官网
  174. /// </summary>
  175. public static string WebSite { get; set; }
  176. /// <summary>
  177. /// 系统布局样色
  178. /// </summary>
  179. public static string LayoutStyle { get; set; }
  180. /// <summary>
  181. /// 系统颜色主题
  182. /// </summary>
  183. public static string ColorStyle { get; set; }
  184. /// <summary>
  185. /// 应用程序版本
  186. /// </summary>
  187. public static string Version
  188. {
  189. get;
  190. set;
  191. }
  192. /// <summary>
  193. /// 显示表格的样式
  194. /// </summary>
  195. public static string DataGridColor { get; set; }
  196. /// <summary>
  197. /// 显示登录界面提示信息
  198. /// </summary>
  199. public static string LoginRemark { get; set; }
  200. /// <summary>
  201. /// 免责条款文件路径
  202. /// </summary>
  203. public static string EscapeClauseFilePath
  204. {
  205. get
  206. {
  207. return Path.Combine(UserManager.SysConfigFolderPath, "EscapeClause.rtf");
  208. }
  209. }
  210. /// <summary>
  211. /// 应用程序默认升级文件夹
  212. /// </summary>
  213. public static string UpdateFolderName { get; set; }
  214. /// <summary>
  215. /// 发送邮件地址
  216. /// </summary>
  217. public static string ToAddress { get; set; }
  218. /// <summary>
  219. /// 应用程序升级地址
  220. /// </summary>
  221. public static string UpdateAddress { get; set; }
  222. public static string TradeSystemName { get; set; }
  223. public static string ExchangeName { get; set; }
  224. public static string MarketName { get; set; }
  225. /// <summary>
  226. /// 登录Guid
  227. /// </summary>
  228. public static string LoginGuid { get; set; }
  229. /// <summary>
  230. /// 图片扩展名
  231. /// </summary>
  232. public static string ImageExtension { get; set; }
  233. /// <summary>
  234. /// 锁屏时间(0时不锁屏)
  235. /// </summary>
  236. public static int LockSreenTime { get; set; }
  237. /// <summary>
  238. /// 是否显示锁屏背景图片【0:不显示,1显示】
  239. /// </summary>
  240. private static int _IsShowBGLockSreen = 0;
  241. public static int IsShowBGLockSreen
  242. {
  243. get { return _IsShowBGLockSreen; }
  244. set { _IsShowBGLockSreen = value; }
  245. }
  246. /// <summary>
  247. /// 同步账号信息周期
  248. /// </summary>
  249. public static int SyncAccountCycle { get; set; }
  250. private static string _cusBankNetSign = string.Empty;
  251. /// <summary>
  252. /// 网银端签约的银行
  253. /// </summary>
  254. public static string CusBankNetSign
  255. {
  256. get { return _cusBankNetSign; }
  257. set { _cusBankNetSign = value; }
  258. }
  259. /// <summary>
  260. /// 配置是否显示银行绑卡解绑功能
  261. /// </summary>
  262. public static int IsConfigShowBingCard { get; set; }
  263. /// <summary>
  264. /// 网银端签约的提示信息
  265. /// </summary>
  266. public static string CusBankNetSignTipsInfo { get; set; }
  267. public static int DayQuoteInterval { get; set; }
  268. /// <summary>
  269. /// 订单在市
  270. /// </summary>
  271. public static string OrderOnMarket { get; set; }
  272. /// <summary>
  273. /// 已成交
  274. /// </summary>
  275. public static string OrderTraded { get; set; }
  276. /// <summary>
  277. /// 单据是否显示买卖方向
  278. /// </summary>
  279. public static int IsShowDirection { get; set; }
  280. /// <summary>
  281. /// 抬头保存的版本1.1.1.1 (自选.即期.竞价.混合)
  282. /// </summary>
  283. public static string ConfigHeadersVer { get; set; }
  284. /// <summary>
  285. /// 是否为对接新银行
  286. /// </summary>
  287. public static int NewBankPlatform { get; set; }
  288. /// <summary>
  289. /// 是否显示交割信息
  290. /// </summary>
  291. public static int IsDeliveryVisible { get; set; }
  292. /// <summary>
  293. /// 是否显示大字报价
  294. /// </summary>
  295. //public static int IsShowQuoteBoard
  296. //{
  297. // get; set;
  298. //}
  299. private static int _IsShowQuoteBoard = 0;
  300. /// <summary>
  301. /// 是否显示大字报价【默认不显示】
  302. /// </summary>
  303. public static int IsShowQuoteBoard
  304. {
  305. get { return _IsShowQuoteBoard; }
  306. set { _IsShowQuoteBoard = value; }
  307. }
  308. /// <summary>
  309. /// 发售列表头(1,2,)
  310. /// </summary>
  311. public static string SaleQuoteHeaders { get; set; }
  312. /// <summary>
  313. /// 是否显示五档委托量(大利市)
  314. /// </summary>
  315. public static int QuoteQueueInfo { get; set; }
  316. /// <summary>
  317. /// 竞价市场显示的字段
  318. /// </summary>
  319. public static string BidQuoteHeaders { get; set; }
  320. /// <summary>
  321. /// 混合市场显示的字段
  322. /// </summary>
  323. public static string BidMarketQuoteHeaders { get; set; }
  324. /// <summary>
  325. /// 做市市场显示的字段
  326. /// </summary>
  327. public static string MakeMarketQuoteHeaders { get; set; }
  328. /// <summary>
  329. /// 若商品为混合模式,则默认成交的价格类型为“限价”【备注:0为市价,1为限价】
  330. /// </summary>
  331. public static int XMarketDefaultPriceMode { get; set; }
  332. /// <summary>
  333. /// 若商品为混合模式,则默认不显示”【备注:0为不显示,1为显示】
  334. /// </summary>
  335. public static int XMarketShowMarketPrice { get; set; }
  336. /// <summary>
  337. /// 通道交易市场显示的字段
  338. /// </summary>
  339. public static string ChannelQuoteHeaders { get; set; }
  340. public static string Copyright { get; set; }
  341. /// <summary>
  342. /// 是否显示所有商品
  343. /// </summary>
  344. /// <value><c>true</c> if [show all goods]; otherwise, <c>false</c>.</value>
  345. public static bool ShowAllGoods { get; set; }
  346. /// <summary>
  347. /// 是否显示我的自选
  348. /// </summary>
  349. /// <value><c>true</c> if [show my selected goods]; otherwise, <c>false</c>.</value>
  350. public static bool ShowMySelectedGoods { get; set; }
  351. /// <summary>
  352. /// 是否显示外部交易所
  353. /// </summary>
  354. /// <value><c>true</c> if [show external exchage]; otherwise, <c>false</c>.</value>
  355. public static bool ShowExternalExchage { get; set; }
  356. /// <summary>
  357. /// 是否显示平仓
  358. /// </summary>
  359. /// <value><c>true</c> if [show close order]; otherwise, <c>false</c>.</value>
  360. public static bool ShowCloseOrder { get; set; }
  361. public static bool ShowOpenCloseOrder { get; set; }
  362. /// <summary>
  363. /// 是否显示下单界面的买卖价,来源config.xml
  364. /// </summary>
  365. public static bool ShowBuyOrSellPrice { get; set; }
  366. public static bool CanUseAllCloseOrder { get;set; }
  367. public static bool CanUseQuickClose { get;set; }
  368. public static bool CanUseBackHandOpen { get;set; }
  369. public static bool CanUseQuickLockOrder { get;set; }
  370. public static string PublishNetIpAddress { get; set; }
  371. #endregion
  372. #region 风管云平台
  373. /// <summary>
  374. /// 风管云平台服务地址
  375. /// </summary>
  376. public static string ErmcpAddress { get; set; }
  377. /// <summary>
  378. /// 风管云平台WEB端地址
  379. /// </summary>
  380. public static string ErmcpWebUrl { get; set; }
  381. #endregion
  382. #region 公有静态方法
  383. /// <summary>
  384. /// 从Config.xml读取系统配置
  385. /// </summary>
  386. public static void InitializeSystemConfig()
  387. {
  388. try
  389. {
  390. LoginGuid = Guid.NewGuid().ToString();
  391. var path = Path.Combine(UserManager.SysConfigFolderPath, "Config.xml");
  392. var xdoc = XDocument.Load(path);
  393. if (xdoc.Root == null) return;
  394. var config = (from e in xdoc.Root.Elements("Config")
  395. select new
  396. {
  397. QuoteAddress = (string)e.Element("QuoteAddress"),
  398. BizAddress = (string)e.Element("BizAddress"),
  399. UpdateAddress = (string)e.Element("UpdateAddress"),
  400. UpdateFolderName = (string)e.Element("UpdateFolderName"),
  401. LoginRemark = (string)e.Element("LoginRemark"),
  402. TradeSystemName = (string)e.Element("TradeSystemName"),
  403. GuestQuoteAddress = (string)e.Element("GuestQuoteAddress"),
  404. DayQuoteInterval = (string)e.Element("DayQuoteInterval"),
  405. RegAccountAddress = (string)e.Element("RegAccountAddress"),
  406. IsShowIdentifyingCode = (string)e.Element("IsShowIdentifyingCode"),
  407. ConfigHeadersVer = (string)e.Element("ConfigHeadersVer"),
  408. FtenAddress = (string)e.Element("FtenAddress"),
  409. ExchangeName = (string)e.Element("ExchangeName"),
  410. WebSite = (string)e.Element("WebSite"),
  411. LayoutStyle = (string)e.Element("LayoutStyle"),
  412. Copyright = (e.Element("Copyright") == null) ? "Copyright © 2020" : (string)e.Element("Copyright"),
  413. ShowAllGoods =e.Element("ShowAllGoods") == null || (bool)e.Element("ShowAllGoods"),
  414. ShowMySelectedGoods = e.Element("ShowMySelectedGoods") != null && (bool)e.Element("ShowMySelectedGoods"),
  415. ShowExternalExchage = e.Element("ShowExternalExchage") != null && (bool)e.Element("ShowExternalExchage"),
  416. ShowCloseOrder = e.Element("ShowCloseOrder") != null && (bool)e.Element("ShowCloseOrder"),
  417. ShowOpenCloseOrder = e.Element("ShowOpenCloseOrder") != null && (bool)e.Element("ShowOpenCloseOrder"),
  418. ShowBuyOrSellPrice = e.Element("ShowBuyOrSellPrice") != null && (bool)e.Element("ShowBuyOrSellPrice"),
  419. CanUseAllCloseOrder = e.Element("CanUseAllCloseOrder") != null && (bool)e.Element("CanUseAllCloseOrder"),
  420. CanUseQuickClose = e.Element("CanUseQuickClose") != null && (bool)e.Element("CanUseQuickClose"),
  421. CanUseBackHandOpen = e.Element("CanUseBackHandOpen") != null && (bool)e.Element("CanUseBackHandOpen"),
  422. CanUseQuickLockOrder = e.Element("CanUseQuickLockOrder") != null && (bool)e.Element("CanUseQuickLockOrder"),
  423. PublishNetIpAddress = (string)e.Element("PublishNetIpAddress"),
  424. ErmcpAddress = (string)e.Element("ErmcpAddress"),
  425. ErmcpWebUrl = (string)e.Element("ErmcpWebUrl"),
  426. }).FirstOrDefault();
  427. if (config == null) return;
  428. QuoteAddress = config.QuoteAddress;
  429. BizAddress = config.BizAddress;
  430. UpdateAddress = config.UpdateAddress;
  431. UpdateFolderName = config.UpdateFolderName;
  432. Version = Application.ResourceAssembly.GetName().Version.ToString();
  433. LoginRemark = config.LoginRemark;
  434. TradeSystemName = config.TradeSystemName;
  435. GuestQuoteAddress = config.GuestQuoteAddress;
  436. RegAccountAddress = config.RegAccountAddress;
  437. ConfigHeadersVer = config.ConfigHeadersVer;
  438. FtenAddress = config.FtenAddress;
  439. IsShowIdentifyingCode = config.IsShowIdentifyingCode;
  440. int interval = 0;
  441. int.TryParse(config.DayQuoteInterval, out interval);
  442. DayQuoteInterval = interval;
  443. ExchangeName = config.ExchangeName;
  444. WebSite = config.WebSite;
  445. LayoutStyle = config.LayoutStyle;
  446. Copyright = config.Copyright;
  447. ShowAllGoods = config.ShowAllGoods;
  448. ShowMySelectedGoods = config.ShowMySelectedGoods;
  449. ShowExternalExchage = config.ShowExternalExchage;
  450. ShowCloseOrder = config.ShowCloseOrder;
  451. ShowOpenCloseOrder = config.ShowOpenCloseOrder;
  452. ShowBuyOrSellPrice = config.ShowBuyOrSellPrice;
  453. CanUseAllCloseOrder = config.CanUseAllCloseOrder;
  454. CanUseQuickClose = config.CanUseQuickClose;
  455. CanUseBackHandOpen = config.CanUseBackHandOpen;
  456. CanUseQuickLockOrder = config.CanUseQuickLockOrder;
  457. PublishNetIpAddress = config.PublishNetIpAddress;
  458. ErmcpAddress = config.ErmcpAddress;
  459. ErmcpWebUrl = config.ErmcpWebUrl;
  460. ////初始化链路
  461. InitializeLink();
  462. }
  463. catch (Exception e)
  464. {
  465. throw e;
  466. }
  467. }
  468. /// <summary>
  469. /// 设置系统时间s
  470. /// </summary>
  471. /// <param name="seconds"></param>
  472. public static void SetSystemTime(ulong seconds)
  473. {
  474. seconds -= 60 * 60 * 8;
  475. long lTime = long.Parse(seconds + "0000000");
  476. TimeSpan toNow = new TimeSpan(lTime);
  477. var timeNow = TimeZone.CurrentTimeZone.ToLocalTime(_basicDateTime.Add(toNow));
  478. SetServerTime(timeNow);
  479. }
  480. /// <summary>
  481. /// 设置系统时间s
  482. /// </summary>
  483. /// <param name="seconds"></param>
  484. public static void SetSystemTime(int seconds)
  485. {
  486. seconds -= 60 * 60 * 8;
  487. var timeNow = TimeZone.CurrentTimeZone.ToLocalTime(_basicDateTime.AddMilliseconds(seconds));
  488. SetServerTime(timeNow);
  489. }
  490. /// <summary>
  491. /// 设置服务器时间
  492. /// </summary>
  493. /// <param name="serverTime">服务器时间</param>
  494. public static void SetServerTime(DateTime serverTime)
  495. {
  496. if (_serverTimer == null)
  497. {
  498. _serverTimer = new System.Timers.Timer(1000);
  499. _serverTimer.Elapsed += new System.Timers.ElapsedEventHandler(m_ServerTimer_Elapsed);
  500. }
  501. _serverTimer.Stop();
  502. _serverTimeNow = serverTime;
  503. _serverTimer.Start();
  504. }
  505. #endregion
  506. /// <summary>
  507. /// 判断是否显示市价
  508. /// </summary>
  509. public static bool CanMarketPrice(QuoteGoods currentGoods)
  510. {
  511. var external = CacheManager.CacheExchanges;
  512. var groups = CacheManager.CacheGoodsGroups;
  513. var isMarketPrice = "";
  514. if (groups != null && groups.Any())
  515. {
  516. groups.ForEach((group) =>
  517. {
  518. if (currentGoods != null)
  519. {
  520. if (group.GoodsGroupid == currentGoods.GroupID)// 先用商品中的groupId 去 商品组中查找,找出ExchangeId
  521. {
  522. var exchangeId = group.ExChangeId;
  523. if (external != null && external.Any())
  524. {
  525. var exchaneInfo = external.Find((externalExchange) => exchangeId == externalExchange.ExchangeId);
  526. if (exchaneInfo != null)
  527. {
  528. isMarketPrice = exchaneInfo.IsMarketPrice;
  529. }
  530. }
  531. }
  532. }
  533. });
  534. }
  535. if ("0".Equals(isMarketPrice)) // 不支持
  536. {
  537. return false;
  538. }
  539. else if ("1".Equals(isMarketPrice)) // 支持
  540. {
  541. return true;
  542. }
  543. return false;
  544. }
  545. #region 私有静态方法
  546. /// <summary>
  547. /// Handles the Elapsed event of the m_ServerTimer control.
  548. /// </summary>
  549. /// <param name="sender">The source of the event.</param>
  550. /// <param name="e">The <see cref="System.Timers.ElapsedEventArgs"/> instance containing the event data.</param>
  551. private static void m_ServerTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  552. {
  553. _serverTimeNow = _serverTimeNow.AddSeconds(1);
  554. }
  555. /// <summary>
  556. /// 初始化链路
  557. /// </summary>
  558. private static void InitializeLink()
  559. {
  560. var quotationAddress = QuoteAddress.Split(':');
  561. var tradeAddress = BizAddress.Split(':');
  562. string quotationHost = string.Empty;
  563. string guestQuoteHost = string.Empty;
  564. string tradeHost = string.Empty;
  565. int quotationPort = 0, tradePort = 0, guestQuotePort = 0;
  566. if (quotationAddress.Length == 2)
  567. {
  568. quotationHost = quotationAddress[0];
  569. int.TryParse(quotationAddress[1], out quotationPort);
  570. }
  571. if (tradeAddress.Length == 2)
  572. {
  573. tradeHost = tradeAddress[0];
  574. int.TryParse(tradeAddress[1], out tradePort);
  575. }
  576. if (!string.IsNullOrWhiteSpace(GuestQuoteAddress))
  577. {
  578. var guestQuoteAdd = GuestQuoteAddress.Split(':');
  579. if (quotationAddress.Length == 2)
  580. {
  581. guestQuoteHost = guestQuoteAdd[0];
  582. int.TryParse(guestQuoteAdd[1], out guestQuotePort);
  583. }
  584. }
  585. LinkManager.Instance.Initialize(new LinkManagerParameters()
  586. {
  587. QuotationHost = quotationHost,
  588. QuotationPort = quotationPort,
  589. TradeHost = tradeHost,
  590. TradePort = tradePort,
  591. GuestQuotationHost = guestQuoteHost,
  592. GuestQuotationPort = guestQuotePort,
  593. TradeLinkeType = LinkType.TCP,
  594. TradeDatagramType = DatagramType.Protobuf
  595. });
  596. }
  597. #endregion
  598. #region 风管云平台
  599. /// <summary>
  600. /// 风管云平台参数更新方法,主要是通过GO服务更新相关配置信息
  601. /// </summary>
  602. public static bool UpdateErmcpParamete()
  603. {
  604. // 获取交易与行情 Host
  605. var jsonString = HttpUtility.HttpGet(ErmcpAddress);
  606. if (jsonString != null)
  607. {
  608. Dictionary<String, Object> dicJson =
  609. Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<String, Object>>(jsonString);
  610. Dictionary<String, String> dataJson =
  611. Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<String, String>>(dicJson["data"].ToString());
  612. LinkManager.Instance.Parameters.TradeHost = dataJson["tradeHost"];
  613. LinkManager.Instance.Parameters.TradePort = int.Parse(dataJson["tradePort"]);
  614. LinkManager.Instance.Parameters.QuotationHost = dataJson["quoteHost"];
  615. LinkManager.Instance.Parameters.QuotationPort = int.Parse(dataJson["quotePort"]);
  616. LinkManager.Instance.Parameters.GoCommonSearchUrl = dataJson["goCommonSearchUrl"];
  617. return true;
  618. }
  619. return false;
  620. }
  621. #endregion
  622. public static LockType _LockType = LockType.UnLock;// 锁定商品
  623. /// <summary>
  624. /// 适配自动止损止盈的功能-将本地设置的止盈止损上传到服务端去。由服务端处理
  625. /// </summary>
  626. /// <param name="newOrder"></param>
  627. /// <param name="order"></param>
  628. public static void MakeSpsl(NewEntrustOrder newOrder)
  629. {
  630. if (newOrder == null)
  631. {
  632. return;
  633. }
  634. var userInfo = UserManager.GetCurrentUserInfo();
  635. if (userInfo != null && userInfo.TradeParams != null)
  636. {
  637. var goodsParams = userInfo.TradeParams.AllGoodsForAutoEntrust;
  638. if (goodsParams != null && goodsParams.Count > 0)
  639. {
  640. var _params = goodsParams.FirstOrDefault(item => newOrder.GoodsId == item.GoodsId && newOrder.BuyOrSell == (Direction)item.Direction);// 在匹配商品的同时,还需要匹配买卖方向
  641. if (_params != null && newOrder.BuildType == OpenCloseMode.BUILDTYPE_OPEN) // 只有建仓时候才会考虑上传止盈止损
  642. {
  643. newOrder.SPPoint = _params.Profit;
  644. newOrder.SLPoint = _params.Loss;
  645. }
  646. }
  647. }
  648. }
  649. /// <summary>
  650. /// 交易所下商品组、商品的关系
  651. /// 1、交易所下有多个商品组,商品组下有多个商品。
  652. /// </summary>
  653. /// <returns></returns>
  654. public static void MakeExChangeGroupGoodsMap()
  655. {
  656. // uint是商品组的groupId ,商品的数量
  657. ExChangeCheckModel changeCheckModel = new ExChangeCheckModel();
  658. var allGoods = CacheManager.CacheGoodsBaseInfos;// 所有的商品
  659. foreach (QuoteGoods item in allGoods)
  660. {
  661. if (changeCheckModel.Group.ContainsKey(item.GroupID))
  662. {
  663. changeCheckModel.Group[item.GroupID].Add(item.GoodsId);
  664. }
  665. else
  666. {
  667. List<uint> goodsIds = new List<uint> {item.GoodsId};
  668. changeCheckModel.Group.Add(item.GroupID, goodsIds);
  669. }
  670. }
  671. // 查找交易所和商品组的关系
  672. var groups = CacheManager.CacheGoodsGroups;
  673. foreach (GoodsGroup goodsGroup in groups)
  674. {
  675. if (changeCheckModel.ExChangeGroup.ContainsKey(goodsGroup.ExChangeId))
  676. {
  677. changeCheckModel.ExChangeGroup[goodsGroup.ExChangeId].Add(goodsGroup.GoodsGroupid);
  678. }
  679. else
  680. {
  681. List<long> groupIds = new List<long>() {goodsGroup.GoodsGroupid};
  682. changeCheckModel.ExChangeGroup.Add(goodsGroup.ExChangeId, groupIds);
  683. }
  684. }
  685. CacheManager.LoadExChangeGroupGoods(changeCheckModel);
  686. }
  687. #region 获取ip地址
  688. private static string _publisgNetIp = "";
  689. public static string PublisgNetIp
  690. {
  691. get { return _publisgNetIp ?? HttpGetPublishNetIp(); }
  692. set { _publisgNetIp = value; }
  693. }
  694. /// <summary>
  695. /// 获取公网ip地址 --如果机器是局域网的,获取到的地址就是本机地址,如果电脑是拨号上网或者具有独立的公网IP的情况下,获取到的是公网地址
  696. /// </summary>
  697. /// <param name="netType">"" 表示本地所有ip,InterNetWork表示ipv类型的网络ip,InterNetworkV6 表示获取ipv6类型的网络ip地址</param>
  698. /// <returns></returns>
  699. private static string GetIp(string netType)
  700. {
  701. string hostName = Dns.GetHostName();
  702. IPAddress[] addresses = Dns.GetHostAddresses(hostName);
  703. List<string> ipsList = new List<string>();
  704. if (netType == string.Empty)
  705. {
  706. for (int i = 0; i < addresses.Length; i++)
  707. {
  708. ipsList.Add(addresses[i].ToString());
  709. }
  710. }
  711. else
  712. {
  713. for (int i = 0; i < addresses.Length; i++)
  714. {
  715. if (addresses[i].AddressFamily.ToString() == netType)
  716. {
  717. ipsList.Add(addresses[i].ToString());
  718. }
  719. }
  720. }
  721. for (int i = 0; i < ipsList.Count; i++)
  722. {
  723. if (ipsList[i].Equals("::1"))
  724. {
  725. continue;
  726. }
  727. return ipsList[i];
  728. }
  729. return "";
  730. }
  731. private static string GetNetIp()
  732. {
  733. //试试这个
  734. NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
  735. foreach (NetworkInterface ni in interfaces)
  736. {
  737. if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
  738. {
  739. foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
  740. {
  741. if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
  742. {
  743. return ip.Address.ToString();
  744. }
  745. }
  746. }
  747. }
  748. return GetIp("");
  749. }
  750. public static void MakePublishNetIp()
  751. {
  752. _publisgNetIp = "";
  753. Task.Factory.StartNew(() =>
  754. {
  755. PublisgNetIp = HttpGetPublishNetIp();
  756. });
  757. }
  758. private static string HttpGetPublishNetIp()
  759. {
  760. if (_publisgNetIp != string.Empty)
  761. {
  762. return _publisgNetIp;
  763. }
  764. string ret = "";
  765. try
  766. {
  767. if (ApplicationParameter.PublishNetIpAddress == null ||
  768. ApplicationParameter.PublishNetIpAddress.Equals(""))
  769. {
  770. return GetNetIp();
  771. }
  772. else
  773. {
  774. string url = "";
  775. string encoding = "";
  776. if (ApplicationParameter.PublishNetIpAddress.Contains(@"|"))
  777. {
  778. string[] datas = ApplicationParameter.PublishNetIpAddress.Split(Convert.ToChar(@"|"));
  779. if (datas.Length > 1)
  780. {
  781. url = datas[0];
  782. encoding = datas[1];
  783. }
  784. }
  785. else
  786. {
  787. url = ApplicationParameter.PublishNetIpAddress;
  788. }
  789. if (encoding == string.Empty)
  790. {
  791. encoding = "gbk";
  792. }
  793. Encoding encode = Encoding.GetEncoding(encoding);
  794. MyWebClient MyWebClient = new MyWebClient(3*1000);
  795. MyWebClient.Headers.Add("User-Agent",
  796. "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36");
  797. MyWebClient.Credentials = CredentialCache.DefaultCredentials; //获取或设置用于向Internet资源的请求进行身份验证的网络凭据
  798. Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
  799. string pageHtml = encode.GetString(pageData); //如果获取网站页面采用的是GB2312,则 使用这句
  800. ret = parseHtml(pageHtml);
  801. if (ret != String.Empty)
  802. {
  803. return ret;
  804. }
  805. return GetNetIp();
  806. }
  807. }
  808. catch (Exception e)
  809. {
  810. if (ret == String.Empty)
  811. {
  812. GetNetIp();
  813. }
  814. }
  815. finally
  816. {
  817. if (ret == String.Empty)
  818. {
  819. GetNetIp();
  820. }
  821. }
  822. return GetNetIp();
  823. }
  824. private static string parseHtml(String pageHtml)
  825. {
  826. string ip = "";
  827. //Match m = Regex.Match(pageHtml, @"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}");
  828. Match m = Regex.Match(pageHtml, @"((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)");
  829. if (m.Success)
  830. {
  831. return m.Value;
  832. }
  833. ip = pageHtml;
  834. return ip;
  835. }
  836. #endregion
  837. }
  838. }