LoginService.cs 60 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249
  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="systemInfo">CTP Client System Info.</param>
  534. /// <param name="action">The action.</param>
  535. /// <param name="errorAction">The error action.</param>
  536. /// <returns>返回码:0为成功,其它为失败</returns>
  537. public void TradeAccountLogin(LoginType loginType, ulong loginID, string phoneUserName, string password, byte[] systemInfo, Action<TradeAccount> action, Action<ErrorEntity> errorAction)
  538. {
  539. var appId = "muchinfo_mtpclient_5.0.1";
  540. var reqeust = _accountAdapter.ToReqeustLogin((int)loginType, password, loginID, ApplicationParameter.LoginGuid, IPHelper.GetMACAddress(), string.Empty, ApplicationParameter.Version, systemInfo, appId);
  541. LogInfoHelper.WriteInfo("登陆请求ToString:" + System.Text.Encoding.UTF8.GetString(reqeust) + "Guid.NewGuid():" + Guid.NewGuid());
  542. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_LoginReq };
  543. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  544. {
  545. var responeEntity = _accountAdapter.ToLocalLoginEntity(revPackgage.Content);
  546. if (responeEntity.RetCode == 0)
  547. {
  548. responeEntity.Entity.Md5Password = password;
  549. responeEntity.Entity.LoginID = loginID;
  550. //更新当前账户
  551. UserManager.CurrentTradeAccount = responeEntity.Entity;
  552. if (action != null)
  553. {
  554. action(responeEntity.Entity);
  555. }
  556. }
  557. else
  558. {
  559. if (errorAction != null)
  560. {
  561. errorAction(new ErrorEntity()
  562. {
  563. //RequestFunc = string.Format("查询结算信息({0})" Client_Resource.Resources_Service_RequestTradeAccountLogin
  564. ReturnCode = responeEntity.RetCode,
  565. ReturnDesc = responeEntity.RetMessage,
  566. RequestFunc = Client_Resource.LoginService_Login_FuntionName,
  567. });
  568. }
  569. }
  570. }), new Action<int, string>((errorCode, errorDesc) =>
  571. {
  572. ////通信错误
  573. if (errorAction != null)
  574. {
  575. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.LoginService_Login_FuntionName });
  576. }
  577. }));
  578. }
  579. public void TradeAccountLogout(TradeAccount tradeAccount)
  580. {
  581. var reqeust = _accountAdapter.ToReqeustLogOut(tradeAccount.LoginID);
  582. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_LogoutReq };
  583. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  584. {
  585. }), new Action<int, string>((errorCode, errorDesc) =>
  586. {
  587. }));
  588. }
  589. public EntityResult<AccountPwds> ModifyPasswords(AccountPwds aPwds)
  590. {
  591. throw new NotImplementedException();
  592. }
  593. public void UpdateAccountAmount(TradeAccount tradeAccount)
  594. {
  595. //todo:
  596. }
  597. public void AccountRiskRate(TradeAccount tradeAccount)
  598. {
  599. throw new NotImplementedException();
  600. }
  601. public void QueryBankRate(string loginCode)
  602. {
  603. throw new NotImplementedException();
  604. }
  605. public void UpdateTaAccount(TradeAccount tradeAccount)
  606. {
  607. throw new NotImplementedException();
  608. }
  609. public void SetServerTimeOut(string loginCode)
  610. {
  611. }
  612. /// <summary>
  613. /// 账号基本信息查询(账号信息,资金信息,交易所信息,市场信息,商品)
  614. /// </summary>
  615. /// <param name="accountId">The account identifier.</param>
  616. /// <param name="successAction">The success action.</param>
  617. /// <param name="errorAction">The error action.</param>
  618. public void AccountBaseInfoInit(ulong accountId, Action<AccountInfoEntity> successAction, Action<ErrorEntity> errorAction)
  619. {
  620. var reqeust = _accountAdapter.ToReqeustAccountInfo(accountId);
  621. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_AccountFundInfoReq };
  622. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  623. {
  624. var responeEntrity = _accountAdapter.TolocalAccountInfoEntity(revPackgage.Content);
  625. if (responeEntrity.RetCode == 0)
  626. {
  627. CacheManager.LoadGoodsBaseInfo(responeEntrity.Entity);
  628. if (responeEntrity.Entity.TradeAccount != null)
  629. {
  630. responeEntrity.Entity.TradeAccount.Token = UserManager.CurrentTradeAccount.Token;
  631. responeEntrity.Entity.TradeAccount.AccountStatus = UserManager.CurrentTradeAccount.AccountStatus;
  632. responeEntrity.Entity.TradeAccount.MemberAreaId = UserManager.CurrentTradeAccount.MemberAreaId;
  633. responeEntrity.Entity.TradeAccount.Md5Password = UserManager.CurrentTradeAccount.Md5Password;
  634. responeEntrity.Entity.TradeAccount.LoginID = UserManager.CurrentTradeAccount.LoginID;
  635. ////登录的Token
  636. UserManager.CurrentTradeAccount = responeEntrity.Entity.TradeAccount;
  637. }
  638. //资金信息单独查询
  639. if (responeEntrity.Entity.FundsAccounts != null && responeEntrity.Entity.FundsAccounts.Any())
  640. {
  641. foreach (var fundsAccount in responeEntrity.Entity.FundsAccounts)
  642. {
  643. ////显示账号的状态
  644. fundsAccount.TradeAccount = UserManager.CurrentTradeAccount;
  645. }
  646. }
  647. ////刷新商品时解决合约单位不显示问题
  648. if (Muchinfo.MTPClient.Infrastructure.Cache.CacheManager.TradeGoodsUnit != null)
  649. {
  650. foreach (var quoteGoods in CacheManager.CacheGoodsBaseInfos)
  651. {
  652. quoteGoods.AgreeUnitDisplay = quoteGoods.GoodsParameters.AgreeUnit.ToString() +
  653. CacheManager.TradeGoodsUnit.Where(
  654. x =>
  655. x.UNITID ==
  656. quoteGoods.GoodsParameters.AgreeUnitType)
  657. .Select(x => x.GOODSUNITNAME)
  658. .FirstOrDefault();
  659. }
  660. }
  661. UserManager.CurrentTradeAccount.FundsAccounts =
  662. new ObservableCollection<FundsAccount>(responeEntrity.Entity.FundsAccounts);
  663. successAction(responeEntrity.Entity);
  664. }
  665. else
  666. {
  667. if (errorAction != null)
  668. {
  669. errorAction(new ErrorEntity()
  670. {
  671. //RequestFunc = 账号基本信息查询
  672. ReturnCode = responeEntrity.RetCode,
  673. ReturnDesc = responeEntrity.RetMessage,
  674. RequestFunc = Client_Resource.Resources_Service_QueryAccountBaseInfo
  675. });
  676. }
  677. }
  678. }), new Action<int, string>((errorCode, errorDesc) =>
  679. { ////通信错误
  680. if (errorAction != null)
  681. {
  682. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_QueryAccountBaseInfo });
  683. }
  684. }));
  685. }
  686. /// <summary>
  687. /// 判断当前Token是否有有效的方法
  688. /// 内容处理逻辑:
  689. /// 1、如果当前Token有效,则在方法内部会自动进行静默登录;
  690. /// 2、如果当前Token已失效,则直接返回失效状态。
  691. /// </summary>
  692. /// <param name="action">请求成功回调,将包含Token状态信息</param>
  693. /// <param name="errorAction">请求失败回调</param>
  694. public void TokenCheck(Action<int> action, Action<ErrorEntity> errorAction)
  695. {
  696. if (null == UserManager.CurrentTradeAccount || null == UserManager.CurrentTradeAccount.Token)
  697. {
  698. //if (null != errorAction)
  699. // // warning:错误码需要添加
  700. // errorAction(new ErrorEntity() { ReturnCode = -1, ReturnDesc = "当前Token为空。" });
  701. return;
  702. }
  703. var timeSpan = ApplicationParameter.ServerTimeNow - ApplicationParameter.BasicDateTime;
  704. var request = _accountAdapter.ToTokenCheck(UserManager.CurrentTradeAccount.LoginID, UserManager.CurrentTradeAccount.Token, (ulong)timeSpan.TotalMilliseconds);
  705. var package = new TCPPackage() { Content = request, FunCode = FuncCode.FID_TokenCheckReq };
  706. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(package, new Action<TCPPackage>((responsePackage) =>
  707. {
  708. ResponeEntity<ulong> responeEntity = _accountAdapter.GetTokenStatus(responsePackage.Content);
  709. if (responeEntity.RetCode == 0) // Check登录
  710. {
  711. ApplicationParameter.SetSystemTime(responeEntity.Entity); //重新连接设置时间
  712. if (action != null)
  713. {
  714. action(responeEntity.RetCode);
  715. }
  716. }
  717. else
  718. {
  719. // 服务端返回操作失败
  720. if (null != errorAction) errorAction(new ErrorEntity() { ReturnCode = responeEntity.RetCode, ReturnDesc = responeEntity.RetMessage, RequestFunc = Client_Resource.LoginService_CheckedToken_funcName });
  721. LogInfoHelper.WriteInfo(string.Format("令牌校检失败,错误代码:{0}({1})", responeEntity.RetCode, responeEntity.RetMessage));
  722. }
  723. }), new Action<int, string>((errorCode, errorDesc) =>
  724. {
  725. // 发送信息失败
  726. if (errorAction != null)
  727. {
  728. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.LoginService_CheckedToken_funcName });
  729. }
  730. LogInfoHelper.WriteInfo(string.Format("令牌校检失败,错误代码:{0}({1})", errorCode, errorDesc));
  731. }));
  732. }
  733. /// <summary>
  734. /// 查询交易端的系统参数
  735. /// </summary>
  736. /// <param name="parameterAction">成功调用</param>
  737. /// <param name="errorAction"></param>
  738. public void SystemClientParamterConfig(Action<List<ParameterConfig>> parameterAction,
  739. Action<ErrorEntity> errorAction)
  740. {
  741. var queryCommonParams = new List<QueryCommonParam>();
  742. //参数2,PC交易端
  743. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "type", ParamValue = 2 + string.Empty });
  744. QueryCommonHelper.QueryCommon(QueryStatement.QueryParamConfig, queryCommonParams, new Action<List<ParameterConfig>>(
  745. (parameterConfigs) =>
  746. {
  747. //SetApplicationParameters(parameterConfigs); ////设置系统参数
  748. if (parameterAction != null)
  749. {
  750. parameterAction(parameterConfigs);
  751. }
  752. }), (errorEntity) =>
  753. {
  754. errorEntity.RequestFunc = Client_Resource.Client_ParamterConfig;
  755. if (errorAction != null) errorAction(errorEntity);
  756. });
  757. }
  758. /// <summary>
  759. /// 查询交易端的系统参数
  760. /// </summary>
  761. /// <param name="parameterAction">成功调用</param>
  762. /// <param name="errorAction"></param>
  763. public void SystemClientParamterConfigByID(string paramid, Action<List<ParameterConfig>> parameterAction,
  764. Action<ErrorEntity> errorAction)
  765. {
  766. var queryCommonParams = new List<QueryCommonParam>();
  767. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "ParamID", ParamValue = paramid });
  768. QueryCommonHelper.QueryCommon(QueryStatement.QueryParamConfig, queryCommonParams, new Action<List<ParameterConfig>>(
  769. (parameterConfigs) =>
  770. {
  771. if (parameterAction != null)
  772. {
  773. parameterAction(parameterConfigs);
  774. }
  775. }), (errorEntity) =>
  776. {
  777. errorEntity.RequestFunc = Client_Resource.Client_ParamterConfig + paramid;
  778. if (errorAction != null) errorAction(errorEntity);
  779. });
  780. }
  781. /// <summary>
  782. /// 设置程序参数
  783. /// </summary>
  784. /// <param name="parameterConfigs">查询的参数</param>
  785. private void SetApplicationParameters(List<ConfigInfoModel> parameterConfigs)
  786. {
  787. try
  788. {
  789. if (parameterConfigs != null && parameterConfigs.Count > 0)
  790. {
  791. Type t = typeof(ApplicationParameter);
  792. var properties = t.GetProperties().Where((item) => item.CanWrite);
  793. foreach (var propertyInfo in properties)
  794. {
  795. var parameter =
  796. parameterConfigs.Where(u => !string.IsNullOrEmpty(u.ParamName) && u.ParamName.Trim().ToLower().Equals(propertyInfo.Name.Trim().ToLower())).ToList();
  797. if (parameter != null && parameter.Count > 0)
  798. {
  799. var finacingModel = parameter[0];
  800. if (propertyInfo.PropertyType == typeof(String))
  801. {
  802. propertyInfo.SetValue(t, finacingModel.ParamValue, null);
  803. }
  804. else if (propertyInfo.PropertyType == typeof(Int32))
  805. {
  806. propertyInfo.SetValue(t, Convert.ToInt32(finacingModel.ParamValue), null);
  807. }
  808. else if (propertyInfo.PropertyType == typeof(DateTime))
  809. {
  810. propertyInfo.SetValue(t, Convert.ToDateTime(finacingModel.ParamValue), null);
  811. }
  812. else if (propertyInfo.PropertyType == typeof(Decimal))
  813. {
  814. propertyInfo.SetValue(t, Convert.ToDecimal(finacingModel.ParamValue), null);
  815. }
  816. else if (propertyInfo.PropertyType == typeof(Boolean))
  817. {
  818. propertyInfo.SetValue(t, Convert.ToBoolean(finacingModel.ParamValue), null);
  819. }
  820. }
  821. }
  822. }
  823. }
  824. catch (Exception ex)
  825. {
  826. ////写错误日志
  827. LogHelper.WriteError(typeof(Exception), ex.ToString());
  828. }
  829. }
  830. /// <summary>
  831. /// 查询资金信息
  832. /// </summary>
  833. /// <param name="successAction"></param>
  834. /// <param name="errorAction"></param>
  835. public void QueryTaAccount(ulong accountid, Action<List<FundsAccount>> successAction, Action<ErrorEntity> errorAction)
  836. {
  837. List<QueryCommonParam> queryCommonParams = new List<QueryCommonParam>();
  838. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountid + string.Empty });
  839. QueryCommonHelper.QueryCommon(QueryStatement.QueryTaAccount, queryCommonParams, new Action<List<FundsAccount>>((fundsAccounts) =>
  840. {
  841. foreach (var fundsAccount in fundsAccounts)
  842. {
  843. ////显示账号的状态
  844. fundsAccount.TradeAccount = UserManager.CurrentTradeAccount;
  845. }
  846. UserManager.CurrentTradeAccount.FundsAccounts = new ObservableCollection<FundsAccount>(fundsAccounts);
  847. if (successAction != null)
  848. {
  849. successAction(fundsAccounts);
  850. }
  851. }), (error) =>
  852. {
  853. //RequestFunc = 查询资金信息
  854. error.RequestFunc = Client_Resource.Resources_Service_QueryTaAccount;
  855. if (errorAction != null) errorAction(error);
  856. });
  857. }
  858. /// <summary>
  859. /// 修改账号相关密码
  860. /// </summary>
  861. /// <param name="pwds">密码对象</param>
  862. /// <param name="successAction">成功回应</param>
  863. /// <param name="errorAction">失败回应</param>
  864. public void ModifyPasswords(AccountPwds pwds, Action<bool> successAction, Action<ErrorEntity> errorAction)
  865. {
  866. var reqeust = _accountAdapter.ToReqeustModifyPwds(pwds);
  867. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ModifyPwdReq };
  868. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  869. {
  870. var responeEntrity = _accountAdapter.ResponeModifyPWDEntity(revPackgage.Content);
  871. if (responeEntrity.RetCode == 0)
  872. {
  873. successAction(true);
  874. }
  875. else
  876. {
  877. if (errorAction != null)
  878. {
  879. errorAction(new ErrorEntity()
  880. {
  881. //RequestFunc = 修改账号相关密码
  882. ReturnCode = responeEntrity.RetCode,
  883. ReturnDesc = responeEntrity.RetMessage,
  884. RequestFunc = Client_Resource.Resources_Service_ModifyPasswords,
  885. });
  886. }
  887. }
  888. }), new Action<int, string>((errorCode, errorDesc) =>
  889. { ////通信错误
  890. if (errorAction != null)
  891. {
  892. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_ModifyPasswords });
  893. }
  894. }));
  895. }
  896. /// <summary>
  897. /// 查询交易端配置的菜单
  898. /// </summary>
  899. /// <param name="loginCode">登录账号</param>
  900. /// <param name="successAction">成功回调</param>
  901. /// <param name="errorAction">失败回应</param>
  902. public void QueryAccountFuncMenu(string loginCode, Action<List<SysMenuItem>> successAction, Action<ErrorEntity> errorAction)
  903. {
  904. return;
  905. //var reqeust = _accountAdapter.ToReqeustFuncMenu(loginCode);
  906. //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_QueryAccountFuncMenuReq };
  907. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  908. //{
  909. // var responeEntrity = _accountAdapter.ResponeLocalFuncMenu(revPackgage.Content);
  910. // if (responeEntrity.RetCode == 0)
  911. // {
  912. // successAction(responeEntrity.Entity);
  913. // }
  914. // else
  915. // {
  916. // if (errorAction != null)
  917. // {
  918. // errorAction(new ErrorEntity()
  919. // {
  920. // //RequestFunc = 查询交易端配置的菜单
  921. // ReturnCode = responeEntrity.RetCode,
  922. // ReturnDesc = responeEntrity.RetMessage,
  923. // RequestFunc = Client_Resource.Resources_Service_QueryAccountFuncMenu,
  924. // });
  925. // }
  926. // }
  927. //}), new Action<int, string>((errorCode, errorDesc) =>
  928. //{ ////通信错误
  929. // if (errorAction != null)
  930. // {
  931. // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_QueryAccountFuncMenu });
  932. // }
  933. //}));
  934. }
  935. /// <summary>
  936. /// 查询交易端交易费用
  937. /// </summary>
  938. /// <param name="accountId"></param>
  939. /// <param name="successAction"></param>
  940. /// <param name="errorAction"></param>
  941. public void QueryAccountTradeFee(uint accountId, Action<System.Collections.Generic.List<Data.Model.GoodRules.TradeGoodsFeeRule>> successAction, Action<ErrorEntity> errorAction)
  942. {
  943. return;
  944. //var reqeust = _accountAdapter.ToReqeustTradeFeeRules(accountId);
  945. //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_QueryAccountGoodsTypeReq };
  946. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  947. //{
  948. // var responeEntrity = _accountAdapter.ResoneLocalGoodsFeeRules(revPackgage.Content);
  949. // if (responeEntrity.RetCode == 0)
  950. // {
  951. // successAction(responeEntrity.Entity);
  952. // ///更新商品涨跌停价
  953. // }
  954. // else
  955. // {
  956. // if (errorAction != null)
  957. // {
  958. // errorAction(new ErrorEntity()
  959. // {
  960. // //RequestFunc = 查询交易端交易费用
  961. // ReturnCode = responeEntrity.RetCode,
  962. // ReturnDesc = responeEntrity.RetMessage,
  963. // RequestFunc = Client_Resource.Resources_Service_QueryAccountTradeFee,
  964. // });
  965. // }
  966. // }
  967. //}), new Action<int, string>((errorCode, errorDesc) =>
  968. //{ ////通信错误
  969. // if (errorAction != null)
  970. // {
  971. // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_QueryAccountTradeFee });
  972. // }
  973. //}));
  974. }
  975. /// <summary>
  976. /// 查询交易商品费用及规则参数
  977. /// </summary>
  978. /// <param name="accountId"></param>
  979. /// <param name="successAction"></param>
  980. /// <param name="errorAction"></param>
  981. public void QueryAccountGoodsParams(ulong accountId, Action<Dictionary<int, TradeGoodsFeeRule>> successAction, Action<ErrorEntity> errorAction)
  982. {
  983. var queryCommonParams = new List<QueryCommonParam>();
  984. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountId + string.Empty });
  985. QueryCommonHelper.QueryCommon(QueryStatement.QueryAccountGoodsParams, queryCommonParams, new Action<List<GoodsFeeType>>((feeTypes) =>
  986. {
  987. var goodsFeeRules = new Dictionary<int, TradeGoodsFeeRule>();
  988. foreach (var goodsFeeType in feeTypes)
  989. {
  990. if (!goodsFeeRules.ContainsKey(goodsFeeType.GoodsId))
  991. {
  992. var goodsFee = new TradeGoodsFeeRule();
  993. goodsFeeRules[goodsFeeType.GoodsId] = goodsFee;
  994. }
  995. switch (goodsFeeType.KeyType)
  996. {
  997. case FeeRuleType.GoodsFee:
  998. goodsFeeRules[goodsFeeType.GoodsId].GoodsFees[goodsFeeType.FeeTypeId] = goodsFeeType;
  999. break;
  1000. case FeeRuleType.GoodsRule:
  1001. goodsFeeRules[goodsFeeType.GoodsId].GoodsRules[goodsFeeType.FeeTypeId] = goodsFeeType;
  1002. break;
  1003. case FeeRuleType.PersonalFee:
  1004. goodsFeeRules[goodsFeeType.GoodsId].AccountGoodsFees[goodsFeeType.FeeTypeId] = goodsFeeType;
  1005. break;
  1006. case FeeRuleType.PersonalRule:
  1007. goodsFeeRules[goodsFeeType.GoodsId].AccountGoodsRules[goodsFeeType.FeeTypeId] = goodsFeeType;
  1008. break;
  1009. case FeeRuleType.GoodsRaiseFall:
  1010. //goodsFeeRules[goodsFeeType.GoodsId].RaisePrice = goodsFeeType.FeeMode;
  1011. //goodsFeeRules[goodsFeeType.GoodsId].FallPrice = goodsFeeType.FeeValue;
  1012. //var goods = CacheManager.CacheGoodsBaseInfos.FirstOrDefault(
  1013. // (item) => item.GoodsId == goodsFeeType.GoodsId);
  1014. //if (goods != null)
  1015. //{
  1016. //goods.RaisesPrice = goodsFeeType.FeeMode; //涨停价
  1017. //goods.FallsPrice = goodsFeeType.FeeValue; //跌停价
  1018. // goods.IssueTotal = goodsFeeType.FeeTypeId; //对应发售商品发行总量
  1019. //}
  1020. break;
  1021. case FeeRuleType.QuoteValidStatus:
  1022. //goodsFeeRules[goodsFeeType.GoodsId].RaisePrice = goodsFeeType.FeeMode;
  1023. //goodsFeeRules[goodsFeeType.GoodsId].FallPrice = goodsFeeType.FeeValue;
  1024. //var goods = CacheManager.CacheGoodsBaseInfos.FirstOrDefault(
  1025. // (item) => item.GoodsId == goodsFeeType.GoodsId && goodsFeeType.Trademode==eTradeMode.TRADEMODE_BIDDINGMARKETMAKE);
  1026. //if (goods != null)
  1027. //{
  1028. // //goods.RaisesPrice = goodsFeeType.FeeMode; //涨停价
  1029. // //goods.FallsPrice = goodsFeeType.FeeValue; //跌停价
  1030. // goods.IsQuoteValid = goodsFeeType.FeeValue==1; //外部行情是否有效
  1031. //}
  1032. break;
  1033. default:
  1034. break;
  1035. }
  1036. }
  1037. CacheManager.TradeGoodsFeeRules = goodsFeeRules;
  1038. if (successAction != null)
  1039. {
  1040. successAction(goodsFeeRules);
  1041. }
  1042. }), (error) =>
  1043. {
  1044. //RequestFunc = 查询交易商品费用及规则参数
  1045. error.RequestFunc = Client_Resource.Resources_Service_QueryAccountGoodsParams;
  1046. if (errorAction != null) errorAction(error);
  1047. });
  1048. }
  1049. public void QueryOutMoneyThresholdRatio(ulong accountId, Action<List<OutMoneyThresholdRatio>> successAction,
  1050. Action<ErrorEntity> errorAction)
  1051. {
  1052. var queryCommonParams = new List<QueryCommonParam>();
  1053. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountId + string.Empty });
  1054. QueryCommonHelper.QueryCommon(QueryStatement.SearchOutMoneyThresholdRatio, queryCommonParams,
  1055. new Action<List<OutMoneyThresholdRatio>>(
  1056. (ratios) =>
  1057. {
  1058. successAction(ratios);
  1059. }), (error) =>
  1060. {
  1061. error.RequestFunc = Client_Resource.Resources_Service_QueryAccountGoodsParams;
  1062. if (errorAction != null) errorAction(error);
  1063. });
  1064. }
  1065. public void SystemRateComfrim(ulong accountId, ComfrimType comfrim, Action<bool> successAction, Action<ErrorEntity> errorAction)
  1066. {
  1067. return;
  1068. //var reqeust = _accountAdapter.ToReqeustRiskChecked(accountId,(uint) comfrim);
  1069. //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_RiskCheckNotifyReq };
  1070. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  1071. //{
  1072. // var responeEntrity = _accountAdapter.ResponeRiskChecked(revPackgage.Content);
  1073. // if (responeEntrity.RetCode == 0)
  1074. // {
  1075. // successAction(true);
  1076. // }
  1077. // else
  1078. // {
  1079. // if (errorAction != null)
  1080. // {
  1081. // errorAction(new ErrorEntity()
  1082. // {
  1083. // ReturnCode = responeEntrity.RetCode,
  1084. // ReturnDesc = responeEntrity.RetMessage,
  1085. // });
  1086. // }
  1087. // }
  1088. //}), new Action<int, string>((errorCode, errorDesc) =>
  1089. //{ ////通信错误
  1090. // if (errorAction != null)
  1091. // {
  1092. // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, });
  1093. // }
  1094. //}));
  1095. }
  1096. /// <summary>
  1097. /// 查询外部交易所信息
  1098. /// </summary>
  1099. /// <param name="successAction"></param>
  1100. /// <param name="errorAction"></param>
  1101. public void QueryExternalExchange(Action<List<ExternalExchangeModel>> successAction, Action<ErrorEntity> errorAction)
  1102. {
  1103. var reqeust = _accountAdapter.ToExternalExchangeReq();
  1104. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ExternalExchangeReq };
  1105. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  1106. {
  1107. var responeEntrity = _accountAdapter.ResponseExternalExchange(revPackgage.Content);
  1108. if (responeEntrity.RetCode == 0)
  1109. {
  1110. successAction(responeEntrity.Entity);
  1111. }
  1112. else
  1113. {
  1114. if (errorAction != null)
  1115. {
  1116. errorAction(new ErrorEntity()
  1117. {
  1118. ReturnCode = responeEntrity.RetCode,
  1119. ReturnDesc = responeEntrity.RetMessage,
  1120. RequestFunc = "ExternalExchangeReq",
  1121. });
  1122. }
  1123. }
  1124. }), new Action<int, string>((errorCode, errorDesc) =>
  1125. { ////通信错误
  1126. if (errorAction != null)
  1127. {
  1128. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "ExternalExchangeReq" });
  1129. }
  1130. }));
  1131. }
  1132. /// <summary>
  1133. /// 查询商品组
  1134. /// </summary>
  1135. /// <param name="successAction"></param>
  1136. /// <param name="errorAction"></param>
  1137. public void QueryGoodsGroup(Action<List<GoodsGroup>> successAction, Action<ErrorEntity> errorAction)
  1138. {
  1139. var reqeust = _accountAdapter.ToGoodsGroupReq();
  1140. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_GoodsGroupReq };
  1141. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  1142. {
  1143. var responeEntrity = _accountAdapter.ResponseGoodsGroup(revPackgage.Content);
  1144. if (responeEntrity.RetCode == 0)
  1145. {
  1146. CacheManager.LoadGoodsGroupList(responeEntrity.Entity);
  1147. if (successAction != null) successAction(responeEntrity.Entity);
  1148. }
  1149. else
  1150. {
  1151. if (errorAction != null)
  1152. {
  1153. errorAction(new ErrorEntity()
  1154. {
  1155. ReturnCode = responeEntrity.RetCode,
  1156. ReturnDesc = responeEntrity.RetMessage,
  1157. RequestFunc = "GoodsGroupReq",
  1158. });
  1159. }
  1160. }
  1161. }), new Action<int, string>((errorCode, errorDesc) =>
  1162. { ////通信错误
  1163. if (errorAction != null)
  1164. {
  1165. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "GoodsGroupReq" });
  1166. }
  1167. }));
  1168. }
  1169. }
  1170. }