LoginService.cs 60 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248
  1. using System.Threading;
  2. using Muchinfo.MTPClient.Adapter.Abstract;
  3. using Muchinfo.MTPClient.CustomException;
  4. using Muchinfo.MTPClient.Data;
  5. using Muchinfo.MTPClient.Data.Enums;
  6. using Muchinfo.MTPClient.Data.Model;
  7. using Muchinfo.MTPClient.Data.Model.Account;
  8. using Muchinfo.MTPClient.Data.Model.GoodRules;
  9. using Muchinfo.MTPClient.Infrastructure.Cache;
  10. using Muchinfo.MTPClient.Infrastructure.Helpers;
  11. using Muchinfo.MTPClient.Infrastructure.LinkProxy;
  12. using Muchinfo.MTPClient.Infrastructure.Utilities;
  13. using Muchinfo.MTPClient.IService;
  14. using Muchinfo.MTPClient.NetworkCore;
  15. using Muchinfo.MTPClient.Resources;
  16. using Muchinfo.MTPClient.Service.Utilities;
  17. using Muchinfo.PC.Common.Helpers;
  18. using System;
  19. using System.Collections.Generic;
  20. using System.Collections.ObjectModel;
  21. using System.Drawing;
  22. using System.Linq;
  23. using Muchinfo.MTPClient.Data.Model.Message;
  24. namespace Muchinfo.MTPClient.Service
  25. {
  26. public class LoginService : ILoginService
  27. {
  28. private readonly AccountAdapter _accountAdapter;
  29. public LoginService()
  30. {
  31. _accountAdapter = LinkManager.Instance.TradeAdapterFactory.CreateAccountAdapter();
  32. }
  33. /// <summary>
  34. /// 通知查询 MTP2.0
  35. /// </summary>
  36. /// <param name="loginID">The login identifier.</param>
  37. /// <param name="LastNoticeId">最后一条通知id</param>
  38. /// <param name="successAction">The success action.</param>
  39. /// <param name="errorAction">The error action.</param>
  40. public void NoticeQuerySearch(ulong loginID, long LastNoticeId, Action<List<NoticeMsg>> successAction, Action<ErrorEntity> errorAction)
  41. {
  42. var reqeust = _accountAdapter.ToReqeustNoticeQuery(loginID, LastNoticeId);
  43. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_NoticeQueryReq };
  44. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  45. {
  46. var responeEntrity = _accountAdapter.ResponeNoticeQuery(revPackgage.Content);
  47. if (responeEntrity.RetCode == 0)
  48. {
  49. //todo:本地缓存公告,赋值CacheServerLastNoticeId为最大的MSGID;
  50. successAction(responeEntrity.Entity);
  51. }
  52. else
  53. {
  54. if (errorAction != null)
  55. {
  56. errorAction(new ErrorEntity()
  57. {
  58. //RequestFunc = 通知查询
  59. ReturnCode = responeEntrity.RetCode,
  60. ReturnDesc = responeEntrity.RetMessage,
  61. RequestFunc = "通知查询",
  62. });
  63. }
  64. }
  65. }), new Action<int, string>((errorCode, errorDesc) =>
  66. { ////通信错误
  67. if (errorAction != null)
  68. {
  69. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "通知查询" });
  70. }
  71. }));
  72. }
  73. /// <summary>
  74. /// 风险协议书查询 MTP2.0
  75. /// </summary>
  76. /// <param name="RiskMsgUTime">上次更新配置时间</param>
  77. public void RiskTipQuerySearch(ulong RiskMsgUTime, Action<RiskTipQueryRspModel, ulong> successAction, Action<ErrorEntity> errorAction)
  78. {
  79. var reqeust = _accountAdapter.ToReqeustRiskTipQueryReq(RiskMsgUTime);
  80. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_RiskTipQueryReq };
  81. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  82. {
  83. var responeEntrity = _accountAdapter.ResponeRiskTipQueryReq(revPackgage.Content);
  84. if (responeEntrity.RetCode == 0)
  85. {
  86. successAction(responeEntrity.Entity, RiskMsgUTime);
  87. }
  88. else
  89. {
  90. if (errorAction != null)
  91. {
  92. errorAction(new ErrorEntity()
  93. {
  94. //RequestFunc = 风险协议书查询
  95. ReturnCode = responeEntrity.RetCode,
  96. ReturnDesc = responeEntrity.RetMessage,
  97. RequestFunc = "风险协议书查询",
  98. });
  99. }
  100. }
  101. }), new Action<int, string>((errorCode, errorDesc) =>
  102. { ////通信错误
  103. if (errorAction != null)
  104. {
  105. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "风险协议书查询" });
  106. }
  107. }));
  108. }
  109. /// <summary>
  110. /// 市场运行计划查询 MTP2.0
  111. /// </summary>
  112. /// <param name="TradeDate">交易日</param>
  113. public void MarketRunQuerySearch(string TradeDate, Action<MarketRunQueryRspModel> successAction, Action<ErrorEntity> errorAction)
  114. {
  115. var reqeust = _accountAdapter.ToReqeustMarketRunQueryReq(TradeDate);
  116. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_MarketRunQueryReq };
  117. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  118. {
  119. var responeEntrity = _accountAdapter.ResponeMarketRunQueryReq(revPackgage.Content);
  120. if (responeEntrity.RetCode == 0)
  121. {
  122. successAction(responeEntrity.Entity);
  123. }
  124. else
  125. {
  126. if (errorAction != null)
  127. {
  128. errorAction(new ErrorEntity()
  129. {
  130. //RequestFunc = 市场运行计划查询
  131. ReturnCode = responeEntrity.RetCode,
  132. ReturnDesc = responeEntrity.RetMessage,
  133. RequestFunc = "市场运行计划查询",
  134. });
  135. }
  136. }
  137. }), new Action<int, string>((errorCode, errorDesc) =>
  138. { ////通信错误
  139. if (errorAction != null)
  140. {
  141. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "市场运行计划查询" });
  142. }
  143. }));
  144. }
  145. /// <summary>
  146. /// 市场查询 MTP2.0
  147. /// </summary>
  148. /// <param name="MarketsUTime">上次更新配置时间</param>
  149. public void MarketsQuerySearch(ulong MarketsUTime, Action<List<MarketsInfoModel>, ulong, bool> successAction, Action<ErrorEntity> errorAction)
  150. {
  151. var reqeust = _accountAdapter.ToReqeustMarketsQueryReq(MarketsUTime);
  152. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_MarketsQueryReq };
  153. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  154. {
  155. var responeEntrity = _accountAdapter.ResponeMarketsQueryReq(revPackgage.Content);
  156. if (responeEntrity.RetCode == 0)
  157. {
  158. ///缓存市场信息
  159. CacheManager.LoadMarketInfoList(responeEntrity.Entity);
  160. successAction(responeEntrity.Entity, MarketsUTime, true);
  161. }
  162. else
  163. {
  164. if (errorAction != null)
  165. {
  166. errorAction(new ErrorEntity()
  167. {
  168. //RequestFunc = 市场查询
  169. ReturnCode = responeEntrity.RetCode,
  170. ReturnDesc = responeEntrity.RetMessage,
  171. RequestFunc = "市场查询",
  172. });
  173. }
  174. }
  175. }), new Action<int, string>((errorCode, errorDesc) =>
  176. { ////通信错误
  177. if (errorAction != null)
  178. {
  179. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "市场查询" });
  180. }
  181. }));
  182. }
  183. /// <summary>
  184. /// 枚举常量字典查询 MTP2.0
  185. /// </summary>
  186. /// <param name="DirctionaryUTime">上次更新配置时间</param>
  187. public void DictionaryQuerySearch(ulong DictionaryUTime, Action<List<DictionaryInfoModel>, ulong> successAction, Action<ErrorEntity> errorAction)
  188. {
  189. var reqeust = _accountAdapter.ToReqeustDictionaryQueryReq(DictionaryUTime);
  190. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_DictionaryQueryReq };
  191. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  192. {
  193. var responeEntrity = _accountAdapter.ResponeDictionaryQueryReq(revPackgage.Content);
  194. if (responeEntrity.RetCode == 0)
  195. {
  196. successAction(responeEntrity.Entity, DictionaryUTime);
  197. }
  198. else
  199. {
  200. if (errorAction != null)
  201. {
  202. errorAction(new ErrorEntity()
  203. {
  204. //RequestFunc = 枚举常量字典查询
  205. ReturnCode = responeEntrity.RetCode,
  206. ReturnDesc = responeEntrity.RetMessage,
  207. RequestFunc = "枚举常量字典查询",
  208. });
  209. }
  210. }
  211. }), new Action<int, string>((errorCode, errorDesc) =>
  212. { ////通信错误
  213. if (errorAction != null)
  214. {
  215. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "枚举常量字典查询" });
  216. }
  217. }));
  218. }
  219. /// <summary>
  220. /// 错误码字典查询 MTP2.0
  221. /// </summary>
  222. /// <param name="ConfigUTime">上次更新配置时间</param>
  223. public void ErrorCodeQuerySearch(ulong ErrorcodeUTime, Action<List<ErrorCodeInfoModel>, ulong> successAction, Action<ErrorEntity> errorAction)
  224. {
  225. var reqeust = _accountAdapter.ToReqeustErrorCodeQueryReq(ErrorcodeUTime);
  226. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ErrorCodeQueryReq };
  227. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  228. {
  229. var responeEntrity = _accountAdapter.ResponeErrorCodeQueryReq(revPackgage.Content);
  230. if (responeEntrity.RetCode == 0)
  231. {
  232. successAction(responeEntrity.Entity, ErrorcodeUTime);
  233. }
  234. else
  235. {
  236. if (errorAction != null)
  237. {
  238. errorAction(new ErrorEntity()
  239. {
  240. //RequestFunc = 错误码字典查询
  241. ReturnCode = responeEntrity.RetCode,
  242. ReturnDesc = responeEntrity.RetMessage,
  243. RequestFunc = "错误码字典查询",
  244. });
  245. }
  246. }
  247. }), new Action<int, string>((errorCode, errorDesc) =>
  248. { ////通信错误
  249. if (errorAction != null)
  250. {
  251. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "错误码字典查询" });
  252. }
  253. }));
  254. }
  255. /// <summary>
  256. /// 终端系统参数查询 MTP2.0
  257. /// </summary>
  258. /// <param name="ConfigUTime">配置时间</param>
  259. public void ConfigQuerySearch(ulong ConfigUTime, Action<List<ConfigInfoModel>, ulong, bool> successAction, Action<ErrorEntity> errorAction)
  260. {
  261. var reqeust = _accountAdapter.ToReqeustConfigQueryReq(ConfigUTime);
  262. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ConfigQueryReq };
  263. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  264. {
  265. var responeEntrity = _accountAdapter.ResponeConfigQueryReq(revPackgage.Content);
  266. if (responeEntrity.RetCode == 0)
  267. {
  268. SetApplicationParameters(responeEntrity.Entity); ////设置系统参数
  269. ////设置系统参数 - mtp2.0
  270. SystemParamManager.ParamConfigs = responeEntrity.Entity;
  271. UserManager.CurrentTradeAccount.RiskRatioCalcMode = SystemParamManager.RiskRatioCalcMode;
  272. //更新系统参数浮动盈利是否可用
  273. if (UserManager.CurrentTradeAccount.FundsAccounts != null)
  274. {
  275. foreach (var fundsAccount in UserManager.CurrentTradeAccount.FundsAccounts)
  276. {
  277. fundsAccount.FloatAvaliabelFlag = SystemParamManager.IsFloatPLAvaliabled;
  278. }
  279. }
  280. successAction(responeEntrity.Entity, ConfigUTime, true);
  281. }
  282. else
  283. {
  284. if (errorAction != null)
  285. {
  286. errorAction(new ErrorEntity()
  287. {
  288. //RequestFunc = 终端系统参数查询
  289. ReturnCode = responeEntrity.RetCode,
  290. ReturnDesc = responeEntrity.RetMessage,
  291. RequestFunc = "终端系统参数查询",
  292. });
  293. }
  294. }
  295. }), new Action<int, string>((errorCode, errorDesc) =>
  296. { ////通信错误
  297. if (errorAction != null)
  298. {
  299. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "终端系统参数查询" });
  300. }
  301. }));
  302. }
  303. public void DeliveryGoodsQuerySearch(ulong DeliveryGoodsUTime, Action<List<DeliveryGoodsInfoModel>, ulong, bool> successAction, Action<ErrorEntity> errorAction)
  304. {
  305. var reqeust = _accountAdapter.ToReqeustDeliveryGoodsReq(DeliveryGoodsUTime);
  306. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_DeliveryGoodsQueryReq };
  307. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  308. {
  309. var responeEntrity = _accountAdapter.ResponeDeliveryGoodsReq(revPackgage.Content);
  310. if (responeEntrity.RetCode == 0)
  311. {
  312. successAction(responeEntrity.Entity, DeliveryGoodsUTime, true);
  313. }
  314. else
  315. {
  316. if (errorAction != null)
  317. {
  318. errorAction(new ErrorEntity()
  319. {
  320. //RequestFunc = 终端系统参数查询
  321. ReturnCode = responeEntrity.RetCode,
  322. ReturnDesc = responeEntrity.RetMessage,
  323. RequestFunc = "终端交割商品查询",
  324. });
  325. }
  326. }
  327. }), new Action<int, string>((errorCode, errorDesc) =>
  328. { ////通信错误
  329. if (errorAction != null)
  330. {
  331. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "终端交割商品查询" });
  332. }
  333. }));
  334. }
  335. /// <summary>
  336. /// 商品查询请求 MTP2.0
  337. /// </summary>
  338. /// <param name="GoodsUTime">商品更新时间</param>
  339. public void GoodsInfoSearch(ulong GoodsUTime, List<TradeGoodsFeeRule> midParam, Action<List<QuoteGoods>, ulong, bool, List<TradeGoodsFeeRule>> successAction, Action<ErrorEntity> errorAction)
  340. {
  341. var reqeust = _accountAdapter.ToReqeustGoodsQueryReq(GoodsUTime);
  342. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_GoodsQueryReq };
  343. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  344. {
  345. var responeEntrity = _accountAdapter.ResponeGoodsQueryReq(revPackgage.Content);
  346. if (responeEntrity.RetCode == 0)
  347. {
  348. CacheManager.LoadGoodsInfoList(responeEntrity.Entity == null ? new List<QuoteGoods>() : responeEntrity.Entity.OrderBy(z => z.GoodsCode).ToList(), GoodsFromScr.Trade);
  349. successAction(responeEntrity.Entity, GoodsUTime, true, midParam);
  350. }
  351. else
  352. {
  353. if (errorAction != null)
  354. {
  355. errorAction(new ErrorEntity()
  356. {
  357. //RequestFunc = 商品查询请求
  358. ReturnCode = responeEntrity.RetCode,
  359. ReturnDesc = responeEntrity.RetMessage,
  360. RequestFunc = "商品查询请求",
  361. });
  362. }
  363. }
  364. }), new Action<int, string>((errorCode, errorDesc) =>
  365. { ////通信错误
  366. if (errorAction != null)
  367. {
  368. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "商品查询请求" });
  369. }
  370. }));
  371. }
  372. /// <summary>
  373. /// 获取最后更新时间 MTP2.0
  374. /// </summary>
  375. /// <param name="parameterAction">成功回调</param>
  376. /// <param name="errorAction">失败回应</param>
  377. public void LastUpdateTimeSearch(Action<LastUpdateTimeModel> successAction, Action<ErrorEntity> errorAction)
  378. {
  379. var reqeust = _accountAdapter.ToReqeustLastUpdateTimeReq();
  380. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_LastUpdateTimeReq };
  381. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  382. {
  383. var responeEntrity = _accountAdapter.ResponeLastUpdateTimeReq(revPackgage.Content);
  384. if (responeEntrity.RetCode == 0)
  385. {
  386. successAction(responeEntrity.Entity);
  387. }
  388. else
  389. {
  390. if (errorAction != null)
  391. {
  392. errorAction(new ErrorEntity()
  393. {
  394. //RequestFunc = 获取最后更新时间
  395. ReturnCode = responeEntrity.RetCode,
  396. ReturnDesc = responeEntrity.RetMessage,
  397. RequestFunc = "获取最后更新时间",
  398. });
  399. }
  400. }
  401. }), new Action<int, string>((errorCode, errorDesc) =>
  402. { ////通信错误
  403. if (errorAction != null)
  404. {
  405. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "获取最后更新时间" });
  406. }
  407. }));
  408. }
  409. /// <summary>
  410. /// 获取功能菜单
  411. /// </summary>
  412. /// <param name="MenuUTime"></param>
  413. /// <param name="successAction"></param>
  414. /// <param name="errorAction"></param>
  415. public void QueryAccountFuncMenu(ulong MenuUTime, List<TradeGoodsFeeRule> GoodsRuleLst, Action<List<SysMenuItem>, ulong, List<TradeGoodsFeeRule>, bool> successAction, Action<ErrorEntity> errorAction)
  416. {
  417. var reqeust = _accountAdapter.ToReqeustFuncMenuQueryReq(MenuUTime);
  418. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_FuncMenuReq };
  419. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  420. {
  421. var responeEntrity = _accountAdapter.ResponeLocalFuncMenu(revPackgage.Content);
  422. if (responeEntrity.RetCode == 0)
  423. {
  424. successAction(responeEntrity.Entity, MenuUTime, GoodsRuleLst, true);
  425. }
  426. else
  427. {
  428. if (errorAction != null)
  429. {
  430. errorAction(new ErrorEntity()
  431. {
  432. ReturnCode = responeEntrity.RetCode,
  433. ReturnDesc = responeEntrity.RetMessage,
  434. RequestFunc = "菜单查询请求",
  435. });
  436. }
  437. }
  438. }), new Action<int, string>((errorCode, errorDesc) =>
  439. { ////通信错误
  440. if (errorAction != null)
  441. {
  442. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "菜单查询请求" });
  443. }
  444. }));
  445. }
  446. /// <summary>
  447. /// 登录查询/基本信息【打包】查询 MTP2.0
  448. /// 【账户信息 资金账户信息 实物持仓列表 持仓头寸列表 商品交易规则和费用规则列表 市场权限列表 菜单权限列表】
  449. /// </summary>
  450. /// <param name="accountId">交易账号</param>
  451. /// <param name="parameterAction">成功回调</param>
  452. /// <param name="errorAction">失败回应</param>
  453. public void LoginQuerySearch(ulong loginID, LoginQueryType queryType, Action<AccountBaseInfoModel> successAction, Action<ErrorEntity> errorAction)
  454. {
  455. var reqeust = _accountAdapter.ToReqeustLoginQueryReq(loginID, ((int)queryType).ToString());
  456. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_LoginQueryReq };
  457. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  458. {
  459. var responeEntrity = _accountAdapter.ResponeLoginQueryReq(revPackgage.Content);
  460. if (responeEntrity.RetCode == 0)
  461. {
  462. if (queryType == LoginQueryType.All || queryType == LoginQueryType.TAAccountList)
  463. {
  464. if (responeEntrity.Entity.TradeAccount != null)
  465. {
  466. responeEntrity.Entity.TradeAccount.Token = UserManager.CurrentTradeAccount.Token;
  467. responeEntrity.Entity.TradeAccount.AreaId = UserManager.CurrentTradeAccount.AreaId;
  468. responeEntrity.Entity.TradeAccount.AccountType = UserManager.CurrentTradeAccount.AccountType;
  469. responeEntrity.Entity.TradeAccount.SystemTime = UserManager.CurrentTradeAccount.SystemTime;
  470. responeEntrity.Entity.TradeAccount.AccountStatus = UserManager.CurrentTradeAccount.AccountStatus;
  471. responeEntrity.Entity.TradeAccount.MemberAreaId = UserManager.CurrentTradeAccount.MemberAreaId;
  472. responeEntrity.Entity.TradeAccount.Md5Password = UserManager.CurrentTradeAccount.Md5Password;
  473. responeEntrity.Entity.TradeAccount.LoginID = UserManager.CurrentTradeAccount.LoginID;
  474. responeEntrity.Entity.TradeAccount.HasUpdatedPwd = UserManager.CurrentTradeAccount.HasUpdatedPwd;
  475. responeEntrity.Entity.TradeAccount.PwdWrongCnt = UserManager.CurrentTradeAccount.PwdWrongCnt;
  476. responeEntrity.Entity.TradeAccount.LoginLockHourNum = UserManager.CurrentTradeAccount.LoginLockHourNum;
  477. responeEntrity.Entity.TradeAccount.RiskRatioCalcMode = UserManager.CurrentTradeAccount.RiskRatioCalcMode;
  478. responeEntrity.Entity.TradeAccount.ClientId = UserManager.CurrentTradeAccount.ClientId;
  479. responeEntrity.Entity.TradeAccount.ClientSystemInfo =
  480. UserManager.CurrentTradeAccount.ClientSystemInfo;
  481. }
  482. //资金信息单独查询
  483. if (responeEntrity.Entity.TAAccountList != null && responeEntrity.Entity.TAAccountList.Any())
  484. {
  485. responeEntrity.Entity.TradeAccount.FundsAccounts = new ObservableCollection<FundsAccount>(responeEntrity.Entity.TAAccountList.Select(x => x.FundsAccounts).ToList());
  486. responeEntrity.Entity.TradeAccount.FundsAccountIds = new List<ulong>(responeEntrity.Entity.TAAccountList.Select(x => x.FundsAccounts.AccountId).ToList());
  487. responeEntrity.Entity.TradeAccount.FundsAccountId = responeEntrity.Entity.TradeAccount.FundsAccountIds[0];
  488. responeEntrity.Entity.TradeAccount.AccountId = responeEntrity.Entity.TradeAccount.FundsAccountIds[0];
  489. //更新所属交易账号
  490. foreach (var fundsAccount in responeEntrity.Entity.TradeAccount.FundsAccounts)
  491. {
  492. fundsAccount.TradeAccount = UserManager.CurrentTradeAccount;
  493. //更新系统参数浮动盈利是否可用
  494. fundsAccount.FloatAvaliabelFlag = SystemParamManager.IsFloatPLAvaliabled;
  495. }
  496. }
  497. }
  498. //缓存登陆后基本信息
  499. CacheManager.LoadLoginBaseInfo(responeEntrity.Entity);
  500. //更新当前账户信息
  501. UserManager.CurrentTradeAccount = responeEntrity.Entity.TradeAccount;
  502. successAction(responeEntrity.Entity);
  503. }
  504. else
  505. {
  506. if (errorAction != null)
  507. {
  508. errorAction(new ErrorEntity()
  509. {
  510. //RequestFunc = 登录查询
  511. ReturnCode = responeEntrity.RetCode,
  512. ReturnDesc = responeEntrity.RetMessage,
  513. RequestFunc = "登录查询",
  514. });
  515. }
  516. }
  517. }), new Action<int, string>((errorCode, errorDesc) =>
  518. { ////通信错误
  519. if (errorAction != null)
  520. {
  521. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "登录查询" });
  522. }
  523. }));
  524. }
  525. //=====================================================MTP2.0 NEW ABOVE===============================================================================
  526. /// <summary>
  527. /// 认证账号登录
  528. /// </summary>
  529. /// <param name="loginType">登录类型</param>
  530. /// <param name="loginID">登录账号</param>
  531. /// <param name="phoneUserName">手机号</param>
  532. /// <param name="password">The password.</param>
  533. /// <param name="action">The action.</param>
  534. /// <param name="errorAction">The error action.</param>
  535. /// <returns>返回码:0为成功,其它为失败</returns>
  536. public void TradeAccountLogin(LoginType loginType, ulong loginID, string phoneUserName, string password, Action<TradeAccount> action, Action<ErrorEntity> errorAction)
  537. {
  538. var appId = "muchinfo_mtpclient_5.0.1";
  539. var reqeust = _accountAdapter.ToReqeustLogin((int)loginType, password, loginID, ApplicationParameter.LoginGuid, IPHelper.GetMACAddress(), string.Empty, ApplicationParameter.Version, new byte[128], appId);
  540. LogInfoHelper.WriteInfo("登陆请求ToString:" + System.Text.Encoding.UTF8.GetString(reqeust) + "Guid.NewGuid():" + Guid.NewGuid());
  541. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_LoginReq };
  542. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  543. {
  544. var responeEntity = _accountAdapter.ToLocalLoginEntity(revPackgage.Content);
  545. if (responeEntity.RetCode == 0)
  546. {
  547. responeEntity.Entity.Md5Password = password;
  548. responeEntity.Entity.LoginID = loginID;
  549. //更新当前账户
  550. UserManager.CurrentTradeAccount = responeEntity.Entity;
  551. if (action != null)
  552. {
  553. action(responeEntity.Entity);
  554. }
  555. }
  556. else
  557. {
  558. if (errorAction != null)
  559. {
  560. errorAction(new ErrorEntity()
  561. {
  562. //RequestFunc = string.Format("查询结算信息({0})" Client_Resource.Resources_Service_RequestTradeAccountLogin
  563. ReturnCode = responeEntity.RetCode,
  564. ReturnDesc = responeEntity.RetMessage,
  565. RequestFunc = Client_Resource.LoginService_Login_FuntionName,
  566. });
  567. }
  568. }
  569. }), new Action<int, string>((errorCode, errorDesc) =>
  570. {
  571. ////通信错误
  572. if (errorAction != null)
  573. {
  574. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.LoginService_Login_FuntionName });
  575. }
  576. }));
  577. }
  578. public void TradeAccountLogout(TradeAccount tradeAccount)
  579. {
  580. var reqeust = _accountAdapter.ToReqeustLogOut(tradeAccount.LoginID);
  581. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_LogoutReq };
  582. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  583. {
  584. }), new Action<int, string>((errorCode, errorDesc) =>
  585. {
  586. }));
  587. }
  588. public EntityResult<AccountPwds> ModifyPasswords(AccountPwds aPwds)
  589. {
  590. throw new NotImplementedException();
  591. }
  592. public void UpdateAccountAmount(TradeAccount tradeAccount)
  593. {
  594. //todo:
  595. }
  596. public void AccountRiskRate(TradeAccount tradeAccount)
  597. {
  598. throw new NotImplementedException();
  599. }
  600. public void QueryBankRate(string loginCode)
  601. {
  602. throw new NotImplementedException();
  603. }
  604. public void UpdateTaAccount(TradeAccount tradeAccount)
  605. {
  606. throw new NotImplementedException();
  607. }
  608. public void SetServerTimeOut(string loginCode)
  609. {
  610. }
  611. /// <summary>
  612. /// 账号基本信息查询(账号信息,资金信息,交易所信息,市场信息,商品)
  613. /// </summary>
  614. /// <param name="accountId">The account identifier.</param>
  615. /// <param name="successAction">The success action.</param>
  616. /// <param name="errorAction">The error action.</param>
  617. public void AccountBaseInfoInit(ulong accountId, Action<AccountInfoEntity> successAction, Action<ErrorEntity> errorAction)
  618. {
  619. var reqeust = _accountAdapter.ToReqeustAccountInfo(accountId);
  620. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_AccountFundInfoReq };
  621. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  622. {
  623. var responeEntrity = _accountAdapter.TolocalAccountInfoEntity(revPackgage.Content);
  624. if (responeEntrity.RetCode == 0)
  625. {
  626. CacheManager.LoadGoodsBaseInfo(responeEntrity.Entity);
  627. if (responeEntrity.Entity.TradeAccount != null)
  628. {
  629. responeEntrity.Entity.TradeAccount.Token = UserManager.CurrentTradeAccount.Token;
  630. responeEntrity.Entity.TradeAccount.AccountStatus = UserManager.CurrentTradeAccount.AccountStatus;
  631. responeEntrity.Entity.TradeAccount.MemberAreaId = UserManager.CurrentTradeAccount.MemberAreaId;
  632. responeEntrity.Entity.TradeAccount.Md5Password = UserManager.CurrentTradeAccount.Md5Password;
  633. responeEntrity.Entity.TradeAccount.LoginID = UserManager.CurrentTradeAccount.LoginID;
  634. ////登录的Token
  635. UserManager.CurrentTradeAccount = responeEntrity.Entity.TradeAccount;
  636. }
  637. //资金信息单独查询
  638. if (responeEntrity.Entity.FundsAccounts != null && responeEntrity.Entity.FundsAccounts.Any())
  639. {
  640. foreach (var fundsAccount in responeEntrity.Entity.FundsAccounts)
  641. {
  642. ////显示账号的状态
  643. fundsAccount.TradeAccount = UserManager.CurrentTradeAccount;
  644. }
  645. }
  646. ////刷新商品时解决合约单位不显示问题
  647. if (Muchinfo.MTPClient.Infrastructure.Cache.CacheManager.TradeGoodsUnit != null)
  648. {
  649. foreach (var quoteGoods in CacheManager.CacheGoodsBaseInfos)
  650. {
  651. quoteGoods.AgreeUnitDisplay = quoteGoods.GoodsParameters.AgreeUnit.ToString() +
  652. CacheManager.TradeGoodsUnit.Where(
  653. x =>
  654. x.UNITID ==
  655. quoteGoods.GoodsParameters.AgreeUnitType)
  656. .Select(x => x.GOODSUNITNAME)
  657. .FirstOrDefault();
  658. }
  659. }
  660. UserManager.CurrentTradeAccount.FundsAccounts =
  661. new ObservableCollection<FundsAccount>(responeEntrity.Entity.FundsAccounts);
  662. successAction(responeEntrity.Entity);
  663. }
  664. else
  665. {
  666. if (errorAction != null)
  667. {
  668. errorAction(new ErrorEntity()
  669. {
  670. //RequestFunc = 账号基本信息查询
  671. ReturnCode = responeEntrity.RetCode,
  672. ReturnDesc = responeEntrity.RetMessage,
  673. RequestFunc = Client_Resource.Resources_Service_QueryAccountBaseInfo
  674. });
  675. }
  676. }
  677. }), new Action<int, string>((errorCode, errorDesc) =>
  678. { ////通信错误
  679. if (errorAction != null)
  680. {
  681. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_QueryAccountBaseInfo });
  682. }
  683. }));
  684. }
  685. /// <summary>
  686. /// 判断当前Token是否有有效的方法
  687. /// 内容处理逻辑:
  688. /// 1、如果当前Token有效,则在方法内部会自动进行静默登录;
  689. /// 2、如果当前Token已失效,则直接返回失效状态。
  690. /// </summary>
  691. /// <param name="action">请求成功回调,将包含Token状态信息</param>
  692. /// <param name="errorAction">请求失败回调</param>
  693. public void TokenCheck(Action<int> action, Action<ErrorEntity> errorAction)
  694. {
  695. if (null == UserManager.CurrentTradeAccount || null == UserManager.CurrentTradeAccount.Token)
  696. {
  697. //if (null != errorAction)
  698. // // warning:错误码需要添加
  699. // errorAction(new ErrorEntity() { ReturnCode = -1, ReturnDesc = "当前Token为空。" });
  700. return;
  701. }
  702. var timeSpan = ApplicationParameter.ServerTimeNow - ApplicationParameter.BasicDateTime;
  703. var request = _accountAdapter.ToTokenCheck(UserManager.CurrentTradeAccount.LoginID, UserManager.CurrentTradeAccount.Token, (ulong)timeSpan.TotalMilliseconds);
  704. var package = new TCPPackage() { Content = request, FunCode = FuncCode.FID_TokenCheckReq };
  705. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(package, new Action<TCPPackage>((responsePackage) =>
  706. {
  707. ResponeEntity<ulong> responeEntity = _accountAdapter.GetTokenStatus(responsePackage.Content);
  708. if (responeEntity.RetCode == 0) // Check登录
  709. {
  710. ApplicationParameter.SetSystemTime(responeEntity.Entity); //重新连接设置时间
  711. if (action != null)
  712. {
  713. action(responeEntity.RetCode);
  714. }
  715. }
  716. else
  717. {
  718. // 服务端返回操作失败
  719. if (null != errorAction) errorAction(new ErrorEntity() { ReturnCode = responeEntity.RetCode, ReturnDesc = responeEntity.RetMessage, RequestFunc = Client_Resource.LoginService_CheckedToken_funcName });
  720. LogInfoHelper.WriteInfo(string.Format("令牌校检失败,错误代码:{0}({1})", responeEntity.RetCode, responeEntity.RetMessage));
  721. }
  722. }), new Action<int, string>((errorCode, errorDesc) =>
  723. {
  724. // 发送信息失败
  725. if (errorAction != null)
  726. {
  727. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.LoginService_CheckedToken_funcName });
  728. }
  729. LogInfoHelper.WriteInfo(string.Format("令牌校检失败,错误代码:{0}({1})", errorCode, errorDesc));
  730. }));
  731. }
  732. /// <summary>
  733. /// 查询交易端的系统参数
  734. /// </summary>
  735. /// <param name="parameterAction">成功调用</param>
  736. /// <param name="errorAction"></param>
  737. public void SystemClientParamterConfig(Action<List<ParameterConfig>> parameterAction,
  738. Action<ErrorEntity> errorAction)
  739. {
  740. var queryCommonParams = new List<QueryCommonParam>();
  741. //参数2,PC交易端
  742. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "type", ParamValue = 2 + string.Empty });
  743. QueryCommonHelper.QueryCommon(QueryStatement.QueryParamConfig, queryCommonParams, new Action<List<ParameterConfig>>(
  744. (parameterConfigs) =>
  745. {
  746. //SetApplicationParameters(parameterConfigs); ////设置系统参数
  747. if (parameterAction != null)
  748. {
  749. parameterAction(parameterConfigs);
  750. }
  751. }), (errorEntity) =>
  752. {
  753. errorEntity.RequestFunc = Client_Resource.Client_ParamterConfig;
  754. if (errorAction != null) errorAction(errorEntity);
  755. });
  756. }
  757. /// <summary>
  758. /// 查询交易端的系统参数
  759. /// </summary>
  760. /// <param name="parameterAction">成功调用</param>
  761. /// <param name="errorAction"></param>
  762. public void SystemClientParamterConfigByID(string paramid, Action<List<ParameterConfig>> parameterAction,
  763. Action<ErrorEntity> errorAction)
  764. {
  765. var queryCommonParams = new List<QueryCommonParam>();
  766. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "ParamID", ParamValue = paramid });
  767. QueryCommonHelper.QueryCommon(QueryStatement.QueryParamConfig, queryCommonParams, new Action<List<ParameterConfig>>(
  768. (parameterConfigs) =>
  769. {
  770. if (parameterAction != null)
  771. {
  772. parameterAction(parameterConfigs);
  773. }
  774. }), (errorEntity) =>
  775. {
  776. errorEntity.RequestFunc = Client_Resource.Client_ParamterConfig + paramid;
  777. if (errorAction != null) errorAction(errorEntity);
  778. });
  779. }
  780. /// <summary>
  781. /// 设置程序参数
  782. /// </summary>
  783. /// <param name="parameterConfigs">查询的参数</param>
  784. private void SetApplicationParameters(List<ConfigInfoModel> parameterConfigs)
  785. {
  786. try
  787. {
  788. if (parameterConfigs != null && parameterConfigs.Count > 0)
  789. {
  790. Type t = typeof(ApplicationParameter);
  791. var properties = t.GetProperties().Where((item) => item.CanWrite);
  792. foreach (var propertyInfo in properties)
  793. {
  794. var parameter =
  795. parameterConfigs.Where(u => !string.IsNullOrEmpty(u.ParamName) && u.ParamName.Trim().ToLower().Equals(propertyInfo.Name.Trim().ToLower())).ToList();
  796. if (parameter != null && parameter.Count > 0)
  797. {
  798. var finacingModel = parameter[0];
  799. if (propertyInfo.PropertyType == typeof(String))
  800. {
  801. propertyInfo.SetValue(t, finacingModel.ParamValue, null);
  802. }
  803. else if (propertyInfo.PropertyType == typeof(Int32))
  804. {
  805. propertyInfo.SetValue(t, Convert.ToInt32(finacingModel.ParamValue), null);
  806. }
  807. else if (propertyInfo.PropertyType == typeof(DateTime))
  808. {
  809. propertyInfo.SetValue(t, Convert.ToDateTime(finacingModel.ParamValue), null);
  810. }
  811. else if (propertyInfo.PropertyType == typeof(Decimal))
  812. {
  813. propertyInfo.SetValue(t, Convert.ToDecimal(finacingModel.ParamValue), null);
  814. }
  815. else if (propertyInfo.PropertyType == typeof(Boolean))
  816. {
  817. propertyInfo.SetValue(t, Convert.ToBoolean(finacingModel.ParamValue), null);
  818. }
  819. }
  820. }
  821. }
  822. }
  823. catch (Exception ex)
  824. {
  825. ////写错误日志
  826. LogHelper.WriteError(typeof(Exception), ex.ToString());
  827. }
  828. }
  829. /// <summary>
  830. /// 查询资金信息
  831. /// </summary>
  832. /// <param name="successAction"></param>
  833. /// <param name="errorAction"></param>
  834. public void QueryTaAccount(ulong accountid, Action<List<FundsAccount>> successAction, Action<ErrorEntity> errorAction)
  835. {
  836. List<QueryCommonParam> queryCommonParams = new List<QueryCommonParam>();
  837. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountid + string.Empty });
  838. QueryCommonHelper.QueryCommon(QueryStatement.QueryTaAccount, queryCommonParams, new Action<List<FundsAccount>>((fundsAccounts) =>
  839. {
  840. foreach (var fundsAccount in fundsAccounts)
  841. {
  842. ////显示账号的状态
  843. fundsAccount.TradeAccount = UserManager.CurrentTradeAccount;
  844. }
  845. UserManager.CurrentTradeAccount.FundsAccounts = new ObservableCollection<FundsAccount>(fundsAccounts);
  846. if (successAction != null)
  847. {
  848. successAction(fundsAccounts);
  849. }
  850. }), (error) =>
  851. {
  852. //RequestFunc = 查询资金信息
  853. error.RequestFunc = Client_Resource.Resources_Service_QueryTaAccount;
  854. if (errorAction != null) errorAction(error);
  855. });
  856. }
  857. /// <summary>
  858. /// 修改账号相关密码
  859. /// </summary>
  860. /// <param name="pwds">密码对象</param>
  861. /// <param name="successAction">成功回应</param>
  862. /// <param name="errorAction">失败回应</param>
  863. public void ModifyPasswords(AccountPwds pwds, Action<bool> successAction, Action<ErrorEntity> errorAction)
  864. {
  865. var reqeust = _accountAdapter.ToReqeustModifyPwds(pwds);
  866. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ModifyPwdReq };
  867. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  868. {
  869. var responeEntrity = _accountAdapter.ResponeModifyPWDEntity(revPackgage.Content);
  870. if (responeEntrity.RetCode == 0)
  871. {
  872. successAction(true);
  873. }
  874. else
  875. {
  876. if (errorAction != null)
  877. {
  878. errorAction(new ErrorEntity()
  879. {
  880. //RequestFunc = 修改账号相关密码
  881. ReturnCode = responeEntrity.RetCode,
  882. ReturnDesc = responeEntrity.RetMessage,
  883. RequestFunc = Client_Resource.Resources_Service_ModifyPasswords,
  884. });
  885. }
  886. }
  887. }), new Action<int, string>((errorCode, errorDesc) =>
  888. { ////通信错误
  889. if (errorAction != null)
  890. {
  891. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_ModifyPasswords });
  892. }
  893. }));
  894. }
  895. /// <summary>
  896. /// 查询交易端配置的菜单
  897. /// </summary>
  898. /// <param name="loginCode">登录账号</param>
  899. /// <param name="successAction">成功回调</param>
  900. /// <param name="errorAction">失败回应</param>
  901. public void QueryAccountFuncMenu(string loginCode, Action<List<SysMenuItem>> successAction, Action<ErrorEntity> errorAction)
  902. {
  903. return;
  904. //var reqeust = _accountAdapter.ToReqeustFuncMenu(loginCode);
  905. //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_QueryAccountFuncMenuReq };
  906. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  907. //{
  908. // var responeEntrity = _accountAdapter.ResponeLocalFuncMenu(revPackgage.Content);
  909. // if (responeEntrity.RetCode == 0)
  910. // {
  911. // successAction(responeEntrity.Entity);
  912. // }
  913. // else
  914. // {
  915. // if (errorAction != null)
  916. // {
  917. // errorAction(new ErrorEntity()
  918. // {
  919. // //RequestFunc = 查询交易端配置的菜单
  920. // ReturnCode = responeEntrity.RetCode,
  921. // ReturnDesc = responeEntrity.RetMessage,
  922. // RequestFunc = Client_Resource.Resources_Service_QueryAccountFuncMenu,
  923. // });
  924. // }
  925. // }
  926. //}), new Action<int, string>((errorCode, errorDesc) =>
  927. //{ ////通信错误
  928. // if (errorAction != null)
  929. // {
  930. // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_QueryAccountFuncMenu });
  931. // }
  932. //}));
  933. }
  934. /// <summary>
  935. /// 查询交易端交易费用
  936. /// </summary>
  937. /// <param name="accountId"></param>
  938. /// <param name="successAction"></param>
  939. /// <param name="errorAction"></param>
  940. public void QueryAccountTradeFee(uint accountId, Action<System.Collections.Generic.List<Data.Model.GoodRules.TradeGoodsFeeRule>> successAction, Action<ErrorEntity> errorAction)
  941. {
  942. return;
  943. //var reqeust = _accountAdapter.ToReqeustTradeFeeRules(accountId);
  944. //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_QueryAccountGoodsTypeReq };
  945. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  946. //{
  947. // var responeEntrity = _accountAdapter.ResoneLocalGoodsFeeRules(revPackgage.Content);
  948. // if (responeEntrity.RetCode == 0)
  949. // {
  950. // successAction(responeEntrity.Entity);
  951. // ///更新商品涨跌停价
  952. // }
  953. // else
  954. // {
  955. // if (errorAction != null)
  956. // {
  957. // errorAction(new ErrorEntity()
  958. // {
  959. // //RequestFunc = 查询交易端交易费用
  960. // ReturnCode = responeEntrity.RetCode,
  961. // ReturnDesc = responeEntrity.RetMessage,
  962. // RequestFunc = Client_Resource.Resources_Service_QueryAccountTradeFee,
  963. // });
  964. // }
  965. // }
  966. //}), new Action<int, string>((errorCode, errorDesc) =>
  967. //{ ////通信错误
  968. // if (errorAction != null)
  969. // {
  970. // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_QueryAccountTradeFee });
  971. // }
  972. //}));
  973. }
  974. /// <summary>
  975. /// 查询交易商品费用及规则参数
  976. /// </summary>
  977. /// <param name="accountId"></param>
  978. /// <param name="successAction"></param>
  979. /// <param name="errorAction"></param>
  980. public void QueryAccountGoodsParams(ulong accountId, Action<Dictionary<int, TradeGoodsFeeRule>> successAction, Action<ErrorEntity> errorAction)
  981. {
  982. var queryCommonParams = new List<QueryCommonParam>();
  983. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountId + string.Empty });
  984. QueryCommonHelper.QueryCommon(QueryStatement.QueryAccountGoodsParams, queryCommonParams, new Action<List<GoodsFeeType>>((feeTypes) =>
  985. {
  986. var goodsFeeRules = new Dictionary<int, TradeGoodsFeeRule>();
  987. foreach (var goodsFeeType in feeTypes)
  988. {
  989. if (!goodsFeeRules.ContainsKey(goodsFeeType.GoodsId))
  990. {
  991. var goodsFee = new TradeGoodsFeeRule();
  992. goodsFeeRules[goodsFeeType.GoodsId] = goodsFee;
  993. }
  994. switch (goodsFeeType.KeyType)
  995. {
  996. case FeeRuleType.GoodsFee:
  997. goodsFeeRules[goodsFeeType.GoodsId].GoodsFees[goodsFeeType.FeeTypeId] = goodsFeeType;
  998. break;
  999. case FeeRuleType.GoodsRule:
  1000. goodsFeeRules[goodsFeeType.GoodsId].GoodsRules[goodsFeeType.FeeTypeId] = goodsFeeType;
  1001. break;
  1002. case FeeRuleType.PersonalFee:
  1003. goodsFeeRules[goodsFeeType.GoodsId].AccountGoodsFees[goodsFeeType.FeeTypeId] = goodsFeeType;
  1004. break;
  1005. case FeeRuleType.PersonalRule:
  1006. goodsFeeRules[goodsFeeType.GoodsId].AccountGoodsRules[goodsFeeType.FeeTypeId] = goodsFeeType;
  1007. break;
  1008. case FeeRuleType.GoodsRaiseFall:
  1009. //goodsFeeRules[goodsFeeType.GoodsId].RaisePrice = goodsFeeType.FeeMode;
  1010. //goodsFeeRules[goodsFeeType.GoodsId].FallPrice = goodsFeeType.FeeValue;
  1011. //var goods = CacheManager.CacheGoodsBaseInfos.FirstOrDefault(
  1012. // (item) => item.GoodsId == goodsFeeType.GoodsId);
  1013. //if (goods != null)
  1014. //{
  1015. //goods.RaisesPrice = goodsFeeType.FeeMode; //涨停价
  1016. //goods.FallsPrice = goodsFeeType.FeeValue; //跌停价
  1017. // goods.IssueTotal = goodsFeeType.FeeTypeId; //对应发售商品发行总量
  1018. //}
  1019. break;
  1020. case FeeRuleType.QuoteValidStatus:
  1021. //goodsFeeRules[goodsFeeType.GoodsId].RaisePrice = goodsFeeType.FeeMode;
  1022. //goodsFeeRules[goodsFeeType.GoodsId].FallPrice = goodsFeeType.FeeValue;
  1023. //var goods = CacheManager.CacheGoodsBaseInfos.FirstOrDefault(
  1024. // (item) => item.GoodsId == goodsFeeType.GoodsId && goodsFeeType.Trademode==eTradeMode.TRADEMODE_BIDDINGMARKETMAKE);
  1025. //if (goods != null)
  1026. //{
  1027. // //goods.RaisesPrice = goodsFeeType.FeeMode; //涨停价
  1028. // //goods.FallsPrice = goodsFeeType.FeeValue; //跌停价
  1029. // goods.IsQuoteValid = goodsFeeType.FeeValue==1; //外部行情是否有效
  1030. //}
  1031. break;
  1032. default:
  1033. break;
  1034. }
  1035. }
  1036. CacheManager.TradeGoodsFeeRules = goodsFeeRules;
  1037. if (successAction != null)
  1038. {
  1039. successAction(goodsFeeRules);
  1040. }
  1041. }), (error) =>
  1042. {
  1043. //RequestFunc = 查询交易商品费用及规则参数
  1044. error.RequestFunc = Client_Resource.Resources_Service_QueryAccountGoodsParams;
  1045. if (errorAction != null) errorAction(error);
  1046. });
  1047. }
  1048. public void QueryOutMoneyThresholdRatio(ulong accountId, Action<List<OutMoneyThresholdRatio>> successAction,
  1049. Action<ErrorEntity> errorAction)
  1050. {
  1051. var queryCommonParams = new List<QueryCommonParam>();
  1052. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountId + string.Empty });
  1053. QueryCommonHelper.QueryCommon(QueryStatement.SearchOutMoneyThresholdRatio, queryCommonParams,
  1054. new Action<List<OutMoneyThresholdRatio>>(
  1055. (ratios) =>
  1056. {
  1057. successAction(ratios);
  1058. }), (error) =>
  1059. {
  1060. error.RequestFunc = Client_Resource.Resources_Service_QueryAccountGoodsParams;
  1061. if (errorAction != null) errorAction(error);
  1062. });
  1063. }
  1064. public void SystemRateComfrim(ulong accountId, ComfrimType comfrim, Action<bool> successAction, Action<ErrorEntity> errorAction)
  1065. {
  1066. return;
  1067. //var reqeust = _accountAdapter.ToReqeustRiskChecked(accountId,(uint) comfrim);
  1068. //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_RiskCheckNotifyReq };
  1069. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  1070. //{
  1071. // var responeEntrity = _accountAdapter.ResponeRiskChecked(revPackgage.Content);
  1072. // if (responeEntrity.RetCode == 0)
  1073. // {
  1074. // successAction(true);
  1075. // }
  1076. // else
  1077. // {
  1078. // if (errorAction != null)
  1079. // {
  1080. // errorAction(new ErrorEntity()
  1081. // {
  1082. // ReturnCode = responeEntrity.RetCode,
  1083. // ReturnDesc = responeEntrity.RetMessage,
  1084. // });
  1085. // }
  1086. // }
  1087. //}), new Action<int, string>((errorCode, errorDesc) =>
  1088. //{ ////通信错误
  1089. // if (errorAction != null)
  1090. // {
  1091. // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, });
  1092. // }
  1093. //}));
  1094. }
  1095. /// <summary>
  1096. /// 查询外部交易所信息
  1097. /// </summary>
  1098. /// <param name="successAction"></param>
  1099. /// <param name="errorAction"></param>
  1100. public void QueryExternalExchange(Action<List<ExternalExchangeModel>> successAction, Action<ErrorEntity> errorAction)
  1101. {
  1102. var reqeust = _accountAdapter.ToExternalExchangeReq();
  1103. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ExternalExchangeReq };
  1104. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  1105. {
  1106. var responeEntrity = _accountAdapter.ResponseExternalExchange(revPackgage.Content);
  1107. if (responeEntrity.RetCode == 0)
  1108. {
  1109. successAction(responeEntrity.Entity);
  1110. }
  1111. else
  1112. {
  1113. if (errorAction != null)
  1114. {
  1115. errorAction(new ErrorEntity()
  1116. {
  1117. ReturnCode = responeEntrity.RetCode,
  1118. ReturnDesc = responeEntrity.RetMessage,
  1119. RequestFunc = "ExternalExchangeReq",
  1120. });
  1121. }
  1122. }
  1123. }), new Action<int, string>((errorCode, errorDesc) =>
  1124. { ////通信错误
  1125. if (errorAction != null)
  1126. {
  1127. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "ExternalExchangeReq" });
  1128. }
  1129. }));
  1130. }
  1131. /// <summary>
  1132. /// 查询商品组
  1133. /// </summary>
  1134. /// <param name="successAction"></param>
  1135. /// <param name="errorAction"></param>
  1136. public void QueryGoodsGroup(Action<List<GoodsGroup>> successAction, Action<ErrorEntity> errorAction)
  1137. {
  1138. var reqeust = _accountAdapter.ToGoodsGroupReq();
  1139. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_GoodsGroupReq };
  1140. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  1141. {
  1142. var responeEntrity = _accountAdapter.ResponseGoodsGroup(revPackgage.Content);
  1143. if (responeEntrity.RetCode == 0)
  1144. {
  1145. CacheManager.LoadGoodsGroupList(responeEntrity.Entity);
  1146. if (successAction != null) successAction(responeEntrity.Entity);
  1147. }
  1148. else
  1149. {
  1150. if (errorAction != null)
  1151. {
  1152. errorAction(new ErrorEntity()
  1153. {
  1154. ReturnCode = responeEntrity.RetCode,
  1155. ReturnDesc = responeEntrity.RetMessage,
  1156. RequestFunc = "GoodsGroupReq",
  1157. });
  1158. }
  1159. }
  1160. }), new Action<int, string>((errorCode, errorDesc) =>
  1161. { ////通信错误
  1162. if (errorAction != null)
  1163. {
  1164. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "GoodsGroupReq" });
  1165. }
  1166. }));
  1167. }
  1168. }
  1169. }