OrderService.cs 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213
  1. //----------------------------------------------------------------
  2. //Module Name: OrderService
  3. //Purpose:
  4. //CopyRight: Muchinfo
  5. //History:
  6. //----------------------------------------------------------------
  7. //DateTime Author Description
  8. //----------------------------------------------------------------
  9. //2014-03-22 deng.yinping Create
  10. //----------------------------------------------------------------
  11. //#define test
  12. using Muchinfo.MTPClient.Adapter.Abstract;
  13. using Muchinfo.MTPClient.Data;
  14. using Muchinfo.MTPClient.Data.Enums;
  15. using Muchinfo.MTPClient.Data.Model;
  16. using Muchinfo.MTPClient.Data.Model.Account;
  17. using Muchinfo.MTPClient.Infrastructure.Cache;
  18. using Muchinfo.MTPClient.Infrastructure.LinkProxy;
  19. using Muchinfo.MTPClient.Infrastructure.Utilities;
  20. using Muchinfo.MTPClient.IService;
  21. using Muchinfo.MTPClient.NetworkCore;
  22. using Muchinfo.MTPClient.Resources;
  23. using Muchinfo.MTPClient.Service.Utilities;
  24. using System;
  25. using System.Collections;
  26. using System.Collections.Generic;
  27. using System.Collections.ObjectModel;
  28. using System.Linq;
  29. namespace Muchinfo.MTPClient.Service
  30. {
  31. public class OrderService : IOrderService
  32. {
  33. private OrderAdapter _orderAdapter;
  34. public OrderService()
  35. {
  36. _orderAdapter = LinkManager.Instance.TradeAdapterFactory.CreateOrderAdapter();
  37. }
  38. #region 委托下单
  39. /// <summary>
  40. /// OTC市场委托订单
  41. /// </summary>
  42. /// <param name="entrustOrder"></param>
  43. /// <param name="successAction"></param>
  44. /// <param name="errorAction"></param>
  45. public void MakeMarketEntrustOrder(Data.Model.NewEntrustOrder entrustOrder, Action<Data.Model.Account.OrderDetail> successAction, Action<Data.ErrorEntity> errorAction)
  46. {
  47. var userId = UserManager.CurrentTradeAccount.CustomerId;
  48. var reqeust = _orderAdapter.ToMakeMarketEntrustOrder(entrustOrder, userId);
  49. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_OrderReq };
  50. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  51. {
  52. var responeEntrity = _orderAdapter.ToMakeLimitOrder(revPackgage.Content);
  53. if (responeEntrity.RetCode == 0)
  54. {
  55. //todo:生成委托单
  56. successAction(responeEntrity.Entity);
  57. }
  58. else
  59. {
  60. if (errorAction != null)
  61. {
  62. //RequestFunc = 市场委托订单
  63. errorAction(new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = Client_Resource.Resources_Service_MakeMarketEntrustOrder });
  64. }
  65. }
  66. }), new Action<int, string>((errorCode, errorDesc) =>
  67. { ////通信错误
  68. if (errorAction != null)
  69. {
  70. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_MakeMarketEntrustOrder });
  71. }
  72. }));
  73. }
  74. public void CancelOrder(NewEntrustOrder entrustOrder, Action successAction,
  75. Action<ErrorEntity> errorAction)
  76. {
  77. var userId = UserManager.CurrentTradeAccount.CustomerId;
  78. var reqeust = _orderAdapter.ToCancelOrder(entrustOrder, userId);
  79. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_CancelOrderReq };
  80. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  81. {
  82. var responeEntrity = _orderAdapter.ToResponseCancelOrder(revPackgage.Content);
  83. if (responeEntrity.RetCode == 0)
  84. {
  85. successAction();
  86. }
  87. else
  88. {
  89. if (errorAction != null)
  90. {
  91. errorAction(new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = Client_Resource.Button_Cancellation });
  92. }
  93. }
  94. }), new Action<int, string>((errorCode, errorDesc) =>
  95. { ////通信错误
  96. if (errorAction != null)
  97. {
  98. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Button_Cancellation });
  99. }
  100. }));
  101. }
  102. public void CancelOrderWithoutResult(NewEntrustOrder entrustOrder)
  103. {
  104. var userId = UserManager.CurrentTradeAccount.CustomerId;
  105. var reqeust = _orderAdapter.ToCancelOrder(entrustOrder, userId);
  106. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_CancelOrderReq };
  107. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  108. {
  109. var responeEntrity = _orderAdapter.ToResponseCancelOrder(revPackgage.Content);
  110. //todo
  111. }), new Action<int, string>((errorCode, errorDesc) =>
  112. {
  113. }));
  114. }
  115. /// <summary>
  116. /// 竞价市场委托订单
  117. /// </summary>
  118. /// <param name="entrustOrder"></param>
  119. /// <param name="successAction"></param>
  120. /// <param name="errorAction"></param>
  121. public void BidMarketEntrustOrder(Data.Model.NewEntrustOrder entrustOrder, Action<Data.Model.Account.OrderDetail> successAction, Action<Data.ErrorEntity> errorAction)
  122. {
  123. //var reqeust = _orderAdapter.ToBidMarketEntrustOrder(entrustOrder);
  124. //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_BMOrderReq };
  125. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  126. //{
  127. // var responeEntrity = _orderAdapter.ToBidMarketLimitOrder(revPackgage.Content);
  128. // if (responeEntrity.RetCode == 0)
  129. // {
  130. // //todo:生成委托单
  131. // successAction(responeEntrity.Entity);
  132. // }
  133. // else
  134. // {
  135. // if (errorAction != null)
  136. // {
  137. // //RequestFunc = 竞价市场委托订单 M
  138. // errorAction(new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = Client_Resource.Resources_Service_BidMarketEntrustOrder });
  139. // }
  140. // }
  141. //}), new Action<int, string>((errorCode, errorDesc) =>
  142. //{ ////通信错误
  143. // if (errorAction != null)
  144. // {
  145. // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_BidMarketEntrustOrder });
  146. // }
  147. //}));
  148. }
  149. /// <summary>
  150. /// 混合市场委托订单
  151. /// </summary>
  152. /// <param name="entrustOrder"></param>
  153. /// <param name="successAction"></param>
  154. /// <param name="errorAction"></param>
  155. public void MixMarketEntrustOrder(Data.Model.NewEntrustOrder entrustOrder, Action<Data.Model.Account.OrderDetail> successAction, Action<Data.ErrorEntity> errorAction)
  156. {
  157. //var reqeust = _orderAdapter.ToMixMarketEntrustOrder(entrustOrder);
  158. //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_XMOrderReq };
  159. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  160. //{
  161. // var responeEntrity = _orderAdapter.ToMixMarketLimitOrder(revPackgage.Content);
  162. // if (responeEntrity.RetCode == 0)
  163. // {
  164. // //todo:生成委托单
  165. // successAction(responeEntrity.Entity);
  166. // }
  167. // else
  168. // {
  169. // if (errorAction != null)
  170. // {
  171. // //RequestFunc = 混合市场委托订单
  172. // errorAction(new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = Client_Resource.Resources_Service_MixMarketEntrustOrder });
  173. // }
  174. // }
  175. //}), new Action<int, string>((errorCode, errorDesc) =>
  176. //{ ////通信错误
  177. // if (errorAction != null)
  178. // {
  179. // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_MixMarketEntrustOrder });
  180. // }
  181. //}));
  182. }
  183. public void MixModifyEntrustOrder(NewEntrustOrder entrustOrder, Action<OrderDetail> successAction, Action<ErrorEntity> errorAction)
  184. {
  185. return;
  186. //var reqeust = _orderAdapter.ToMixModifyEntrustOrder(entrustOrder);
  187. //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_XMModifyOrderReq};
  188. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  189. //{
  190. // var responeEntrity = _orderAdapter.ToMixModifyRsp(revPackgage.Content);
  191. // if (responeEntrity.RetCode == 0)
  192. // {
  193. // //todo:生成委托单
  194. // successAction(responeEntrity.Entity);
  195. // }
  196. // else
  197. // {
  198. // if (errorAction != null)
  199. // {
  200. // //RequestFunc = 混合市场委托订单
  201. // errorAction(new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = Client_Resource.Resources_Service_MixMarketEntrustOrder });
  202. // }
  203. // }
  204. //}), new Action<int, string>((errorCode, errorDesc) =>
  205. //{ ////通信错误
  206. // if (errorAction != null)
  207. // {
  208. // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_MixMarketEntrustOrder });
  209. // }
  210. //}));
  211. }
  212. #endregion
  213. #region 单据查询
  214. /// <summary>
  215. /// 查询持仓单明细
  216. /// </summary>
  217. /// <param name="statement"></param>
  218. /// <param name="queryCommonParams"></param>
  219. /// <param name="successAction"></param>
  220. /// <param name="errorAction"></param>
  221. public void QueryHoldingPosistion(string statement, List<QueryCommonParam> queryCommonParams,
  222. Action<List<HoldingSummary>> successAction, Action<ErrorEntity> errorAction)
  223. {
  224. QueryCommonHelper.QueryCommon(statement, queryCommonParams, new Action<List<HoldingSummary>>((holdDetails) =>
  225. {
  226. if (successAction != null)
  227. {
  228. //更新缓存数据 - dyp
  229. UserManager.UpdateCacheOrder(holdDetails);
  230. // HoldingSummary to Dictionary<ulong, List<TradePositionModel>> 生产List<TradePositionModel>,按照不同的资金账号存储
  231. CacheManager.HoldingSummaries.Clear();
  232. foreach (HoldingSummary t in holdDetails)
  233. {
  234. // to TradePositionModel
  235. bool isBuy = t.Direction == Direction.Bid;
  236. TradePositionModel tradePosition = new TradePositionModel()// 初始化数据
  237. {
  238. AgreeUnit = (uint)t.AgreeUnit,
  239. BuyCurHolderAmount = 0,
  240. BuyCurPositionQty = 0,
  241. BuyFrozenQty = 0,
  242. BuyOtherFrozenQty = 0,
  243. GoodsId = t.GoodsId,
  244. SellCurHolderAmount = 0,
  245. SellCurPositionQty = 0,
  246. SellFrozenQty = 0,
  247. SellOtherFrozenQty = 0
  248. };
  249. convertTo(isBuy, t, tradePosition);
  250. // 不知道怎么通过资金账号分持仓单,就当做单资金账号先,后面再改
  251. if (CacheManager.HoldingSummaries.ContainsKey(UserManager.CurrentTradeAccount.FundsAccountId))
  252. // 如果已经有了,那就add进去
  253. {
  254. List<TradePositionModel> itemOrder =
  255. CacheManager.HoldingSummaries[UserManager.CurrentTradeAccount.FundsAccountId];// 如果已经存在一个买卖方向的汇总,那就需要合并另一个方向的信息
  256. TradePositionModel temp = itemOrder.Find(i => i.GoodsId == tradePosition.GoodsId);
  257. if (temp == null)//
  258. {
  259. CacheManager.HoldingSummaries[UserManager.CurrentTradeAccount.FundsAccountId].Add(tradePosition);
  260. }
  261. else// 这里,买卖需要合并,是不是很坑爹
  262. {
  263. convertTo(isBuy, t, temp);
  264. }
  265. }
  266. else// 如果没有,就new List
  267. {
  268. List<TradePositionModel> temps = new List<TradePositionModel> {tradePosition};
  269. CacheManager.HoldingSummaries.Add(UserManager.CurrentTradeAccount.FundsAccountId, temps);
  270. }
  271. }
  272. successAction(holdDetails);
  273. }
  274. }), (error) =>
  275. {
  276. if (errorAction != null)
  277. {
  278. //RequestFunc = 查询持仓单明细
  279. error.RequestFunc = Client_Resource.Resources_Service_QueryHoldingDetails;
  280. errorAction(error);
  281. }
  282. });
  283. }
  284. /// <summary>
  285. /// 汇总的买卖方向部分信息,保存在一条单据里面。
  286. /// </summary>
  287. /// <param name="isBuy"></param>
  288. /// <param name="s"></param>
  289. /// <param name="t"></param>
  290. private void convertTo(bool isBuy, HoldingSummary s, TradePositionModel t)
  291. {
  292. /*{
  293. AgreeUnit = (uint) t.AgreeUnit,
  294. BuyCurHolderAmount = (double) (isBuy ? t.CurHolderAmount : 0),
  295. BuyCurPositionQty = (uint) (isBuy ? t.AvailQty : 0),
  296. BuyFrozenQty = (uint) (isBuy ? t.FrozenQty : 0),
  297. BuyOtherFrozenQty = (uint) (isBuy ? t.OtherFrozenQty : 0),
  298. GoodsId = t.GoodsId,
  299. SellCurHolderAmount = (double) (!isBuy ? t.CurHolderAmount : 0),
  300. SellCurPositionQty = (uint)(!isBuy ? t.AvailQty : 0),
  301. SellFrozenQty = (uint) (!isBuy ? t.FrozenQty : 0),
  302. SellOtherFrozenQty = (uint) (!isBuy ? t.OtherFrozenQty : 0)
  303. };*/
  304. if (isBuy) // 买,
  305. {
  306. t.BuyCurHolderAmount = (double)s.CurHolderAmount;
  307. t.BuyCurPositionQty = (uint)s.AvailQty;
  308. t.BuyFrozenQty = (uint) s.FrozenQty;
  309. t.BuyOtherFrozenQty = (uint)s.OtherFrozenQty;
  310. }
  311. else // 卖
  312. {
  313. t.SellCurHolderAmount = (double)s.CurHolderAmount;
  314. t.SellCurPositionQty = (uint)s.AvailQty;
  315. t.SellFrozenQty = (uint)s.FrozenQty;
  316. t.SellOtherFrozenQty = (uint)s.OtherFrozenQty;
  317. }
  318. }
  319. /// <summary>
  320. /// 查询持仓汇总
  321. /// </summary>
  322. /// <param name="statement"></param>
  323. /// <param name="queryCommonParams"></param>
  324. /// <param name="successAction"></param>
  325. /// <param name="errorAction"></param>
  326. public void QueryHoldingSummarys(string statement, List<QueryCommonParam> queryCommonParams,
  327. Action<List<HoldingSummary>> successAction, Action<ErrorEntity> errorAction)
  328. {
  329. QueryCommonHelper.QueryCommon(statement, queryCommonParams, new Action<List<HoldingSummary>>((holdSummarys) =>
  330. {
  331. if (successAction != null)
  332. {
  333. //更新持仓缓存-dyp
  334. UserManager.UpdateCacheOrder(holdSummarys);
  335. successAction(holdSummarys);
  336. }
  337. }), (error) =>
  338. {
  339. if (errorAction != null)
  340. {
  341. //RequestFunc = 查询持仓单明细
  342. error.RequestFunc = "查询持仓明细";
  343. errorAction(error);
  344. }
  345. });
  346. }
  347. ///// <summary>
  348. ///// 生成头寸
  349. ///// </summary>
  350. ///// <param name="marketHoldDetails"></param>
  351. //private void CreatePosition(Dictionary<eTradeMode, List<HoldingOrder>> marketHoldDetails)
  352. //{
  353. // var marketPosition = new Dictionary<eTradeMode, List<HoldingSummary>>();
  354. // foreach (var keyValue in marketHoldDetails.Keys)
  355. // {
  356. // var dicPosition = new Dictionary<string, HoldingSummary>();
  357. // foreach (var holdingOrder in marketHoldDetails[keyValue])
  358. // {
  359. // var goodsFlag = string.Format("{0}_{1}", holdingOrder.GoodsCode, holdingOrder.Direction); ////头寸标识
  360. // if (!dicPosition.ContainsKey(goodsFlag))
  361. // {
  362. // dicPosition[goodsFlag] = new HoldingSummary();
  363. // dicPosition[goodsFlag].Holders = new List<HoldingOrder>();
  364. // dicPosition[goodsFlag].GoodsName = holdingOrder.GoodsName;
  365. // dicPosition[goodsFlag].GoodsCode = holdingOrder.GoodsCode;
  366. // dicPosition[goodsFlag].GoodsId = holdingOrder.GoodsId;
  367. // dicPosition[goodsFlag].Direction = holdingOrder.Direction;
  368. // dicPosition[goodsFlag].QuoteGoods = holdingOrder.QuoteGoods;
  369. // dicPosition[goodsFlag].DecimalPlace = holdingOrder.DecimalPlace;
  370. // dicPosition[goodsFlag].TradeMode = holdingOrder.MarketType;
  371. // }
  372. // if (holdingOrder.PositionFzQty != 0)
  373. // dicPosition[goodsFlag].PositionFzQty = holdingOrder.PositionFzQty;
  374. // dicPosition[goodsFlag].TnFreezeqty = holdingOrder.tnFreezeqty;
  375. // dicPosition[goodsFlag].currentAgreeunit = holdingOrder.currentAgreeunit;
  376. // dicPosition[goodsFlag].MarketType = holdingOrder.MarketType;
  377. // dicPosition[goodsFlag].HoldAmount += holdingOrder.HoldAmount;
  378. // dicPosition[goodsFlag].OpenAmount += holdingOrder.OpenAmount;
  379. // dicPosition[goodsFlag].TnAvailQty += holdingOrder.IsCanClose ? holdingOrder.Lot - holdingOrder.LockQty : 0; ////达到T+N的持仓数量
  380. // dicPosition[goodsFlag].Lot += holdingOrder.Lot;
  381. // dicPosition[goodsFlag].LockQty += holdingOrder.LockQty;
  382. // dicPosition[goodsFlag].PLFloat += holdingOrder.PLFloat;
  383. // dicPosition[goodsFlag].Holders.Add(holdingOrder);
  384. // }
  385. // //:todo:计算均价
  386. // foreach (var key in dicPosition.Keys)
  387. // {
  388. // //var quoteGoods =
  389. // // CacheManager.CacheGoodsBaseInfos.FirstOrDefault(
  390. // // (goods) => goods.GoodsId == dicPosition[key].GoodsId);
  391. // //if (quoteGoods != null && dicPosition[key].Lot != 0 && quoteGoods.GoodsParameters.AgreeUnit != 0)
  392. // //{
  393. // dicPosition[key].HoldingAVGPrice = dicPosition[key].HoldAmount / dicPosition[key].Lot /
  394. // dicPosition[key].currentAgreeunit;
  395. // //}
  396. // }
  397. // marketPosition[keyValue] = dicPosition.Values.ToList();
  398. // }
  399. // UserManager.UpdateMarketHoldOrders(marketPosition);
  400. //}
  401. ///// <summary>
  402. ///// 生成头寸
  403. ///// </summary>
  404. //private void CreatePosition(List<HoldingOrder> holdingOrders)
  405. //{
  406. // var dicPosition = new Dictionary<string, HoldingSummary>();
  407. // foreach (var holdingOrder in holdingOrders)
  408. // {
  409. // var goodsFlag = string.Format("{0}_{1}", holdingOrder.GoodsCode, holdingOrder.Direction); ////头寸标识
  410. // if (!dicPosition.ContainsKey(goodsFlag))
  411. // {
  412. // dicPosition[goodsFlag] = new HoldingSummary();
  413. // dicPosition[goodsFlag].GoodsName = holdingOrder.GoodsName;
  414. // dicPosition[goodsFlag].GoodsCode = holdingOrder.GoodsCode;
  415. // dicPosition[goodsFlag].GoodsId = holdingOrder.GoodsId;
  416. // dicPosition[goodsFlag].Direction = holdingOrder.Direction;
  417. // dicPosition[goodsFlag].QuoteGoods = holdingOrder.QuoteGoods;
  418. // }
  419. // dicPosition[goodsFlag].HoldAmount += holdingOrder.HoldAmount;
  420. // dicPosition[goodsFlag].OpenAmount += holdingOrder.OpenAmount;
  421. // dicPosition[goodsFlag].Lot += holdingOrder.Lot;
  422. // dicPosition[goodsFlag].PLFloat += holdingOrder.PLFloat;
  423. // }
  424. // //:todo:计算均价
  425. // foreach (var key in dicPosition.Keys)
  426. // {
  427. // var quoteGoods =
  428. // CacheManager.CacheGoodsBaseInfos.FirstOrDefault(
  429. // (goods) => goods.GoodsId == dicPosition[key].GoodsId);
  430. // if (quoteGoods != null && dicPosition[key].Lot != 0 && quoteGoods.GoodsParameters.AgreeUnit != 0)
  431. // {
  432. // dicPosition[key].HoldingAVGPrice = dicPosition[key].HoldAmount / dicPosition[key].Lot /
  433. // quoteGoods.GoodsParameters.AgreeUnit;
  434. // }
  435. // }
  436. // UserManager.UpdateCacheOrder(dicPosition.Values.ToList());
  437. //}
  438. /// <summary>
  439. /// 查询委托单
  440. /// </summary>
  441. /// <param name="statement"></param>
  442. /// <param name="queryCommonParams"></param>
  443. /// <param name="successAction"></param>
  444. /// <param name="errorAction"></param>
  445. public void QueryEntrustOrder(string statement, List<QueryCommonParam> queryCommonParams, Action<List<OrderDetail>> successAction, Action<ErrorEntity> errorAction)
  446. {
  447. QueryCommonHelper.QueryCommon(statement, queryCommonParams, new Action<List<OrderDetail>>((orderDetails) =>
  448. {
  449. orderDetails = orderDetails.OrderByDescending((order) => order.EntrustTime).ToList();
  450. UserManager.UpdateCacheOrder(orderDetails);
  451. if (successAction != null)
  452. {
  453. successAction(orderDetails);
  454. }
  455. }), (error) =>
  456. {
  457. if (errorAction != null)
  458. {
  459. //RequestFunc = 查询委托单
  460. error.RequestFunc = Client_Resource.Resources_Service_QueryEntrustOrder;
  461. errorAction(error);
  462. }
  463. });
  464. }
  465. /// <summary>
  466. /// 根据持仓汇总查询持仓明细
  467. /// </summary>
  468. /// <param name="statement"></param>
  469. /// <param name="queryCommonParams"></param>
  470. /// <param name="successAction"></param>
  471. /// <param name="errorAction"></param>
  472. public void QueryHoldLstBySummary(string statement, List<QueryCommonParam> queryCommonParams, Action<List<HoldingOrder20>> successAction, Action<ErrorEntity> errorAction)
  473. {
  474. QueryCommonHelper.QueryCommon(statement, queryCommonParams, new Action<List<HoldingOrder20>>((holderDetails) =>
  475. {
  476. holderDetails = holderDetails.OrderByDescending((order) => order.TradeTime).ToList();
  477. if (successAction != null)
  478. {
  479. successAction(holderDetails);
  480. }
  481. }), (error) =>
  482. {
  483. if (errorAction != null)
  484. {
  485. error.RequestFunc = Client_Resource.Resources_Service_QueryHoldingDetails;
  486. errorAction(error);
  487. }
  488. });
  489. }
  490. /// <summary>
  491. /// 查询成交单
  492. /// </summary>
  493. /// <param name="statement"></param>
  494. /// <param name="queryCommonParams"></param>
  495. /// <param name="successAction"></param>
  496. /// <param name="errorAction"></param>
  497. public void QueryComplateOrders(string statement, List<QueryCommonParam> queryCommonParams, Action<List<CompleteOrder>> successAction, Action<ErrorEntity> errorAction)
  498. {
  499. QueryCommonHelper.QueryCommon(statement, queryCommonParams, new Action<List<CompleteOrder>>((ComplateOrders) =>
  500. {
  501. ComplateOrders = ComplateOrders.OrderByDescending((order) => order.CompleteDate).ToList();
  502. UserManager.UpdateCacheOrder(ComplateOrders);
  503. if (successAction != null)
  504. {
  505. successAction(ComplateOrders);
  506. }
  507. }), (error) =>
  508. {
  509. if (errorAction != null)
  510. {
  511. //RequestFunc = 查询成交单
  512. error.RequestFunc = Client_Resource.Resources_Service_QueryComplateOrders;
  513. errorAction(error);
  514. }
  515. });
  516. }
  517. #endregion
  518. /// <summary>
  519. /// 查询用户日志
  520. /// </summary>
  521. /// <param name="statement"></param>
  522. /// <param name="queryCommonParams"></param>
  523. /// <param name="successAction"></param>
  524. /// <param name="errorAction"></param>
  525. public void QueryUserLogs(string statement, List<QueryCommonParam> queryCommonParams, Action<List<UserLog>> successAction, Action<ErrorEntity> errorAction)
  526. {
  527. QueryCommonHelper.QueryCommon(statement, queryCommonParams, new Action<List<UserLog>>((userLogs) =>
  528. {
  529. if (successAction != null)
  530. {
  531. successAction(userLogs);
  532. }
  533. }), (error) =>
  534. {
  535. if (errorAction != null)
  536. {
  537. //RequestFunc = 查询用户日志
  538. error.RequestFunc = Client_Resource.Resources_Service_QueryUserLogs;
  539. errorAction(error);
  540. }
  541. });
  542. }
  543. /// <summary>
  544. /// 查询平仓单查询
  545. /// </summary>
  546. /// <param name="statement"></param>
  547. /// <param name="queryCommonParams"></param>
  548. /// <param name="successAction"></param>
  549. /// <param name="errorAction"></param>
  550. public void QueryCloseOrders(string statement, List<QueryCommonParam> queryCommonParams, Action<List<CloseOrder>> successAction, Action<ErrorEntity> errorAction)
  551. {
  552. QueryCommonHelper.QueryCommon(statement, queryCommonParams, new Action<List<CloseOrder>>((CloseOrders) =>
  553. {
  554. CloseOrders = CloseOrders.OrderByDescending((order) => order.CloseDate).ToList();
  555. UserManager.UpdateCacheOrder(CloseOrders);
  556. if (successAction != null)
  557. {
  558. successAction(CloseOrders);
  559. }
  560. }), (error) =>
  561. {
  562. if (errorAction != null)
  563. {
  564. //RequestFunc = 查询平仓单查询
  565. error.RequestFunc = Client_Resource.Resources_Service_QueryCloseOrders;
  566. errorAction(error);
  567. }
  568. });
  569. }
  570. /// <summary>
  571. /// 查询平仓明细-》查询成交单明细【不区分市场和方向】
  572. /// </summary>
  573. /// <param name="marketType"></param>
  574. /// <param name="queryCommonParams"></param>
  575. /// <param name="successAction"></param>
  576. /// <param name="errorAction"></param>
  577. public void QueryMarketCloseOrders(eTradeMode marketType, List<QueryCommonParam> queryCommonParams, Action<eTradeMode, List<CloseOrder>> successAction, Action<ErrorEntity> errorAction)
  578. {
  579. var searchId = QueryStatement.SearchAllTransactionDetailOrder;//查询成交单明细【不区分市场和方向】
  580. //switch (marketType)
  581. //{
  582. // case eTradeMode.TRADEMODE_MARKETMAKE:
  583. // searchId = QueryStatement.SearchOTCCloseOrder;
  584. // break;
  585. // case eTradeMode.TRADEMODE_BIDDING:
  586. // searchId = QueryStatement.QueryAllBidCloseOrder;
  587. // break;
  588. // #region 保证金和全额合并
  589. // //case eTradeMode.TRADEMODE_FullPay:
  590. // // searchId = QueryStatement.SearchBidSumCloseOrder;
  591. // // break;
  592. // #endregion
  593. // case eTradeMode.TRADEMODE_SALE:
  594. // searchId = QueryStatement.SearchSaleCloseOrder;
  595. // break;
  596. // case eTradeMode.TRADEMODE_BIDDINGMARKETMAKE:
  597. // searchId = QueryStatement.SearchOTCBidCloseOrder;
  598. // break;
  599. //}
  600. //by zp
  601. //searchId = QueryStatement.ClientInforInnerTradeDetail;
  602. QueryCommonHelper.QueryCommon(searchId, queryCommonParams, new Action<List<CloseOrder>>((CloseOrders) =>
  603. {
  604. CloseOrders = CloseOrders.OrderByDescending((order) => order.CloseDate).ToList();
  605. // UserManager.UpdateCacheOrder(CloseOrders);
  606. UserManager.UpdateMarketOrders<CloseOrder>(marketType, CloseOrders);
  607. if (successAction != null)
  608. {
  609. successAction(marketType, CloseOrders);
  610. }
  611. }), (error) =>
  612. {
  613. if (errorAction != null)
  614. {
  615. //RequestFunc = 查询平仓明细
  616. error.RequestFunc = Client_Resource.Resources_Service_QueryMarketCloseOrders;
  617. errorAction(error);
  618. }
  619. });
  620. }
  621. /// <summary>
  622. /// 查询建仓明细
  623. /// </summary>
  624. /// <param name="marketType"></param>
  625. /// <param name="queryCommonParams"></param>
  626. /// <param name="successAction"></param>
  627. /// <param name="errorAction"></param>
  628. public void QueryMarketOpenOrders(eTradeMode marketType, List<QueryCommonParam> queryCommonParams, Action<eTradeMode, List<CompleteOrder>> successAction, Action<ErrorEntity> errorAction)
  629. {
  630. var searchId = string.Empty;
  631. switch (marketType)
  632. {
  633. case eTradeMode.TRADEMODE_MARKETMAKE:
  634. searchId = QueryStatement.SearchOTCOpenOrder;
  635. break;
  636. case eTradeMode.TRADEMODE_BIDDING:
  637. searchId = QueryStatement.QueryAllBidOpenOrder;
  638. break;
  639. #region 保证金和全额合并
  640. //case eTradeMode.TRADEMODE_FullPay:
  641. // searchId = QueryStatement.SearchBidSumOpenOrder;
  642. // break;
  643. #endregion
  644. case eTradeMode.TRADEMODE_SALE:
  645. searchId = QueryStatement.SearchSaleOpenOrder;
  646. break;
  647. case eTradeMode.TRADEMODE_BIDDINGMARKETMAKE:
  648. searchId = QueryStatement.SearchOTCBidOpenOrder;
  649. break;
  650. }
  651. QueryCommonHelper.QueryCommon(searchId, queryCommonParams, new Action<List<CompleteOrder>>((ComplateOrders) =>
  652. {
  653. ComplateOrders = ComplateOrders.OrderByDescending((order) => order.CompleteDate).ToList();
  654. UserManager.UpdateMarketOrders<CompleteOrder>(marketType, ComplateOrders);
  655. if (successAction != null)
  656. {
  657. successAction(marketType, ComplateOrders);
  658. }
  659. }), (error) =>
  660. {
  661. if (errorAction != null)
  662. {
  663. //RequestFunc = 查询建仓明细
  664. error.RequestFunc = Client_Resource.Resources_Service_QueryMarketOpenOrders;
  665. errorAction(error);
  666. }
  667. });
  668. }
  669. /// <summary>
  670. /// 按市场类型查询预埋单
  671. /// </summary>
  672. /// <param name="marketType"></param>
  673. /// <param name="queryCommonParams"></param>
  674. /// <param name="successAction"></param>
  675. /// <param name="errorAction"></param>
  676. public void QueryPrePostOrders(eTradeMode marketType, List<QueryCommonParam> queryCommonParams, Action<eTradeMode, List<PrePostDetail>> successAction, Action<ErrorEntity> errorAction)
  677. {
  678. var searchId = QueryStatement.SearchAllPrePostDetail;//查询所有预埋单-不区分市场
  679. //switch (marketType)
  680. //{
  681. // case eTradeMode.TRADEMODE_MARKETMAKE:
  682. // searchId = QueryStatement.QueryMarketPrePostDetail;
  683. // break;
  684. // //竞价
  685. // case eTradeMode.TRADEMODE_BIDDING:
  686. // searchId = QueryStatement.SearchBidPrePostOrder;
  687. // break;
  688. // //case eTradeMode.TRADEMODE_SALE:
  689. // // searchId = QueryStatement.SearchSaleOrderDetail;
  690. // // break;
  691. // //混合
  692. // case eTradeMode.TRADEMODE_BIDDINGMARKETMAKE:
  693. // searchId = QueryStatement.SearchPrePostOrder;
  694. // break;
  695. //}
  696. QueryCommonHelper.QueryCommon(searchId, queryCommonParams, new Action<List<PrePostDetail>>((PrePostOrders) =>
  697. {
  698. PrePostOrders = PrePostOrders.OrderByDescending((order) => order.ClientOrderTime).ToList();
  699. UserManager.UpdateMarketOrders<PrePostDetail>(marketType, PrePostOrders);
  700. if (successAction != null)
  701. {
  702. successAction(marketType, PrePostOrders);
  703. }
  704. }), (error) =>
  705. {
  706. if (errorAction != null)
  707. {
  708. //RequestFunc = 查询预埋单
  709. error.RequestFunc = Client_Resource.Resources_Service_QueryPrePostOrders;
  710. errorAction(error);
  711. }
  712. });
  713. }
  714. /// <summary>
  715. /// 查询委托单
  716. /// </summary>
  717. /// <param name="marketType"></param>
  718. /// <param name="queryCommonParams"></param>
  719. /// <param name="successAction"></param>
  720. /// <param name="errorAction"></param>
  721. public void QueryMarketOrderDetails(eTradeMode marketType, List<QueryCommonParam> queryCommonParams, Action<eTradeMode, List<OrderDetail>> successAction, Action<ErrorEntity> errorAction)
  722. {
  723. var searchId = QueryStatement.QueryAllMarketOrderDetail;//查询委托单[不区分市场]
  724. //switch (marketType)
  725. //{
  726. // case eTradeMode.TRADEMODE_MARKETMAKE:
  727. // searchId = QueryStatement.SearchOTCOrderDetail;
  728. // break;
  729. // case eTradeMode.TRADEMODE_BIDDING:
  730. // searchId = QueryStatement.QueryAllBidOrderDetail;
  731. // break;
  732. // //竞价保证金与全额合并
  733. // //case eTradeMode.TRADEMODE_FullPay:
  734. // // searchId = QueryStatement.SearchBidSumOrderDetail;
  735. // // break;
  736. // case eTradeMode.TRADEMODE_SALE:
  737. // searchId = QueryStatement.SearchSaleOrderDetail;
  738. // break;
  739. // case eTradeMode.TRADEMODE_BIDDINGMARKETMAKE:
  740. // searchId = QueryStatement.SearchOTCBidOrderDetail;
  741. // break;
  742. //}
  743. QueryCommonHelper.QueryCommon(searchId, queryCommonParams, new Action<List<OrderDetail>>((orderDetails) =>
  744. {
  745. orderDetails = orderDetails.OrderByDescending((order) => order.EntrustTime).ToList();
  746. UserManager.UpdateMarketOrders<OrderDetail>(marketType, orderDetails);
  747. if (successAction != null)
  748. {
  749. successAction(marketType, orderDetails);
  750. }
  751. }), (error) =>
  752. {
  753. if (errorAction != null)
  754. {
  755. //RequestFunc = 查询委托单
  756. error.RequestFunc = Client_Resource.Resources_Service_QueryMarketOrderDetails;
  757. errorAction(error);
  758. }
  759. });
  760. }
  761. /// <summary>
  762. /// 查询单据数量
  763. /// </summary>
  764. /// <param name="searchId"></param>
  765. /// <param name="queryCommonParams"></param>
  766. /// <param name="successAction"></param>
  767. /// <param name="errorAction"></param>
  768. public void QueryMarketOrderCount(string searchId, List<QueryCommonParam> queryCommonParams, Action<List<MarketOrderCount>> successAction, Action<ErrorEntity> errorAction)
  769. {
  770. QueryCommonHelper.QueryCommon(searchId, queryCommonParams, new Action<List<MarketOrderCount>>((orderDetails) =>
  771. {
  772. if (successAction != null)
  773. {
  774. successAction(orderDetails);
  775. }
  776. }), (error) =>
  777. {
  778. if (errorAction != null)
  779. {
  780. //RequestFunc = 查询单据数量({0})
  781. error.RequestFunc = string.Format(Client_Resource.Resources_Service_QueryMarketOrderCount, searchId);
  782. errorAction(error);
  783. }
  784. });
  785. }
  786. /// <summary>
  787. /// 查询会员监控数据
  788. /// </summary>
  789. /// <param name="accountId"></param>
  790. /// <param name="successAction"></param>
  791. /// <param name="errorAction"></param>
  792. public void QueryMemberMonitor(uint accountId, Action<List<MemberAccountInfo>> successAction, Action<ErrorEntity> errorAction)
  793. {
  794. return;
  795. //var request = _orderAdapter.ToRequestTaRiskRate(accountId);
  796. //var packgage = new TCPPackage() { Content = request, FunCode = FuncCode.FID_QueryMemberMonitorReq };
  797. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  798. //{
  799. // var responeEntity = _orderAdapter.ToLocalTaRiskRateInfo(revPackgage.Content);
  800. // ////更新GoodsName
  801. // UpdateGoodsName(responeEntity.Entity);
  802. // if (responeEntity.RetCode == 0)
  803. // {
  804. // successAction(responeEntity.Entity);
  805. // }
  806. // else
  807. // {
  808. // if (errorAction != null)
  809. // {
  810. // errorAction(new ErrorEntity()
  811. // {
  812. // RequestFunc = Client_Resource.Resources_Service_QueryMemberMonitor,
  813. // ReturnCode = responeEntity.RetCode,
  814. // ReturnDesc = responeEntity.RetMessage
  815. // });
  816. // }
  817. // }
  818. //}), new Action<int, string>((errorCode, errorDesc) =>
  819. //{
  820. // ////通信错误
  821. // if (errorAction != null)
  822. // {
  823. // //RequestFunc = 查询会员监控数据
  824. // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_QueryMemberMonitor });
  825. // }
  826. //}));
  827. }
  828. /// <summary>
  829. /// 更新GoodsName
  830. /// </summary>
  831. /// <param name="infos"></param>
  832. private void UpdateGoodsName(List<MemberAccountInfo> infos)
  833. {
  834. if (infos == null || !infos.Any()) return;
  835. foreach (var info in infos)
  836. {
  837. if (info == null || info.MemberPositions == null || !info.MemberPositions.Any()) continue;
  838. foreach (var memberPosition in info.MemberPositions)
  839. {
  840. if (memberPosition == null) continue;
  841. var goods = CacheManager.CacheGoodsBaseInfos.FirstOrDefault(z => z.GoodsId == memberPosition.GoodsId);
  842. if (goods == null) continue;
  843. memberPosition.GoodsName = goods.Name;
  844. }
  845. }
  846. }
  847. public void QueryTaAmountLog(bool isHistory,List < QueryCommonParam> queryCommonParams, Action<List<AccountAmountLog>> successAction, Action<ErrorEntity> errorAction)
  848. {
  849. string statement = isHistory ? QueryStatement.QueryHisClientAmountLog : QueryStatement.QueryClientAmountLog;
  850. QueryCommonHelper.QueryCommon(statement, queryCommonParams, new Action<List<AccountAmountLog>>((amountLogs) =>
  851. {
  852. if (successAction != null)
  853. {
  854. successAction(amountLogs);
  855. }
  856. }), (error) =>
  857. {
  858. if (errorAction != null)
  859. {
  860. //RequestFunc = 查询单据数量({0})
  861. error.RequestFunc = Client_Resource.Content_AmountLog;
  862. errorAction(error);
  863. }
  864. });
  865. }
  866. public void QueryDealCloseSetting(ulong accountId, Action<List<DealCloseModel>> successAction, Action<ErrorEntity> errorAction)
  867. {
  868. var queryCommonParams = new List<QueryCommonParam>();
  869. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountId + string.Empty });
  870. QueryCommonHelper.QueryCommon(QueryStatement.QueryDealCloseSetting, queryCommonParams, new Action<List<DealCloseModel>>((dealCloseModels) =>
  871. {
  872. if (successAction != null)
  873. {
  874. successAction(dealCloseModels);
  875. }
  876. }), (error) =>
  877. {
  878. if (errorAction != null)
  879. {
  880. //RequestFunc = 查询单据数量({0})
  881. error.RequestFunc = Client_Resource.Content_QueryDealClosed;
  882. errorAction(error);
  883. }
  884. });
  885. }
  886. public void DealCloseComfirm(DealCloseOrder dealClose, Action<DealCloseOrder> successAction, Action<ErrorEntity> errorAction)
  887. {
  888. return;
  889. //var reqeust = _orderAdapter.ToRequestDealClose(dealClose);
  890. //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_DealCloseSettingReq };
  891. //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  892. //{
  893. // var responeEntrity = _orderAdapter.ToLocalDealCloseInfo(revPackgage.Content);
  894. // if (responeEntrity.RetCode == 0)
  895. // {
  896. // //todo:生成委托单
  897. // successAction(responeEntrity.Entity);
  898. // }
  899. // else
  900. // {
  901. // if (errorAction != null)
  902. // {
  903. // //RequestFunc = 查询单据数量({0})
  904. // var error = new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage };
  905. // error.RequestFunc = Client_Resource.Content_DealClosedComfrim;
  906. // errorAction(error);
  907. // }
  908. // }
  909. //}),(errorCode,errorDesc) =>
  910. //{
  911. // if (errorAction != null)
  912. // {
  913. // //RequestFunc = 查询单据数量({0})
  914. // var error= new ErrorEntity(){ReturnCode = errorCode,ReturnDesc = errorDesc};
  915. // error.RequestFunc = Client_Resource.Content_DealClosedComfrim;
  916. // errorAction(error);
  917. // }
  918. //});
  919. }
  920. public void QueryMarketTypeStatus(Action<List<MarketTypeProperty>> successAction, Action<ErrorEntity> errorAction)
  921. {
  922. List<QueryCommonParam> queryCommonParams = new List<QueryCommonParam>();
  923. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "0000", ParamValue = "0000" });
  924. QueryCommonHelper.QueryCommon(QueryStatement.SearchClientMarketTypeStatus, queryCommonParams, new Action<List<MarketTypeProperty>>((MarketType) =>
  925. {
  926. if (successAction != null)
  927. {
  928. successAction(MarketType);
  929. }
  930. }), (error) =>
  931. {
  932. if (errorAction != null)
  933. {
  934. //RequestFunc = 查询单据数量({0})
  935. // error.RequestFunc = Client_Resource.Content_AmountLog;
  936. errorAction(error);
  937. }
  938. });
  939. }
  940. /// <summary>
  941. /// 查询历史持仓单
  942. /// </summary>
  943. // public const string QueryHistoryHolding = "QueryHistoryHolding";
  944. /// <summary>
  945. /// 查询历史委托单
  946. /// </summary>
  947. // public const string QueryHistoryEntrustOrder = "QueryHistoryEntrustOrder";
  948. /// <summary>
  949. /// 查询历史成交明细
  950. /// </summary>
  951. /// public const string QueryHistoryComplete = "QueryHistoryComplete";
  952. /// <summary>
  953. /// 查询历史交割单
  954. /// </summary>
  955. /// public const string QueryHistoryDeliveryOrder = "QueryHistoryDeliveryOrder";
  956. public void QueryHistoryOrderBase(ulong accountId, HistoryOrder history, DateTime strarTime, DateTime endTime, Action<List<OrderBase>> successAction, Action<ErrorEntity> errorAction)
  957. {
  958. var queryCommonParams = new List<QueryCommonParam>();
  959. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountId + "" });
  960. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "startDate", ParamValue = strarTime.ToString("yyyy-MM-dd") });
  961. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "endDate", ParamValue = endTime.Date.ToString("yyyy-MM-dd HH:mm:ss") });
  962. string format = QueryStatement.QueryHistoryEntrustOrder;
  963. switch (history)
  964. {
  965. ////委托单
  966. case HistoryOrder.EntrsuctOrder:
  967. format = QueryStatement.QueryHistoryEntrustOrder;
  968. QueryCommonHelper.QueryCommon(format, queryCommonParams, new Action<List<OrderDetail>>((orders) =>
  969. {
  970. var orderList = new List<OrderBase>();
  971. if (orders.Any())
  972. {
  973. foreach (var order in orders)
  974. {
  975. orderList.Add(order);
  976. }
  977. }
  978. if (successAction != null)
  979. {
  980. successAction(orderList);
  981. }
  982. }), errorAction);
  983. break;
  984. case HistoryOrder.HoldingOrder: ///持仓单
  985. format = QueryStatement.QueryHistoryHolding;
  986. QueryCommonHelper.QueryCommon(format, queryCommonParams, new Action<List<HoldingOrder>>((holds) =>
  987. {
  988. var orderList = new List<OrderBase>();
  989. if (holds.Any())
  990. {
  991. foreach (var holdingOrder in holds)
  992. {
  993. orderList.Add(holdingOrder);
  994. }
  995. }
  996. if (successAction != null)
  997. {
  998. successAction(orderList);
  999. }
  1000. }), errorAction);
  1001. break;
  1002. case HistoryOrder.CompleteOrder: ////成交明细
  1003. format = QueryStatement.QueryHistoryComplete;
  1004. QueryCommonHelper.QueryCommon(format, queryCommonParams, new Action<List<CloseOrder>>((closes) =>
  1005. {
  1006. var orderList = new List<OrderBase>();
  1007. if (closes.Any())
  1008. {
  1009. foreach (var close in closes)
  1010. {
  1011. orderList.Add(close);
  1012. }
  1013. }
  1014. if (successAction != null)
  1015. {
  1016. successAction(orderList);
  1017. }
  1018. }), errorAction);
  1019. break;
  1020. case HistoryOrder.DeliveryOrder: ////交割明细
  1021. format = QueryStatement.QueryHistoryDeliveryOrder;
  1022. QueryCommonHelper.QueryCommon(format, queryCommonParams, new Action<List<DeliveryComplete>>((deliveries) =>
  1023. {
  1024. var orderList = new List<OrderBase>();
  1025. if (deliveries.Any())
  1026. {
  1027. foreach (var delivery in deliveries)
  1028. {
  1029. orderList.Add(delivery);
  1030. }
  1031. }
  1032. if (successAction != null)
  1033. {
  1034. successAction(orderList);
  1035. }
  1036. }), errorAction);
  1037. break;
  1038. default:
  1039. break;
  1040. }
  1041. }
  1042. public void QueryAccountArea(uint AreaId, Action<List<AreaModel>> successAction, Action<ErrorEntity> errorAction)
  1043. {
  1044. var queryCommonParams = new List<QueryCommonParam>();
  1045. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "areaId", ParamValue = AreaId + string.Empty });
  1046. QueryCommonHelper.QueryCommon(QueryStatement.SearchAccountAreaInfo, queryCommonParams, new Action<List<AreaModel>>((areaModels) =>
  1047. {
  1048. if (successAction != null)
  1049. {
  1050. successAction(areaModels);
  1051. }
  1052. }), (error) =>
  1053. {
  1054. if (errorAction != null)
  1055. {
  1056. //RequestFunc = 查询单据数量({0})
  1057. // error.RequestFunc = Client_Resource.Content_AmountLog;
  1058. errorAction(error);
  1059. }
  1060. });
  1061. }
  1062. /// <summary>
  1063. /// 资管下单委托
  1064. /// </summary>
  1065. /// <param name="entrustOrder">委托内容</param>
  1066. /// <param name="successAction">成功回应</param>
  1067. /// <param name="errorAction">失败回应</param>
  1068. public void ChannelEntrustOrder(NewEntrustOrder entrustOrder, Action<OrderDetail> successAction, Action<ErrorEntity> errorAction)
  1069. {
  1070. var userId = UserManager.CurrentTradeAccount.CustomerId;
  1071. var clientId = UserManager.CurrentTradeAccount.ClientId;
  1072. var reqeust = _orderAdapter.ToChannnelEntrustOrder(entrustOrder, userId, clientId);
  1073. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ChannelOrderReq };
  1074. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  1075. {
  1076. var responeEntrity = _orderAdapter.ToMakeLimitOrder(revPackgage.Content);
  1077. if (responeEntrity.RetCode == 0)
  1078. {
  1079. //todo:生成委托单
  1080. successAction(responeEntrity.Entity);
  1081. }
  1082. else
  1083. {
  1084. if (errorAction != null)
  1085. {
  1086. //RequestFunc = 市场委托订单
  1087. errorAction(new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = Client_Resource.Resources_Service_MakeMarketEntrustOrder });
  1088. }
  1089. }
  1090. }), new Action<int, string>((errorCode, errorDesc) =>
  1091. { ////通信错误
  1092. if (errorAction != null)
  1093. {
  1094. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_MakeMarketEntrustOrder });
  1095. }
  1096. }));
  1097. }
  1098. /// <summary>
  1099. /// 资管止盈止损下单
  1100. /// </summary>
  1101. /// <param name="entrustOrder">The entrust order.</param>
  1102. /// <param name="successAction">The success action.</param>
  1103. /// <param name="errorAction">The error action.</param>
  1104. /// <exception cref="System.NotImplementedException"></exception>
  1105. public void ChannelSPSLOrder(NewEntrustOrder entrustOrder, Action<OrderDetail> successAction, Action<ErrorEntity> errorAction)
  1106. {
  1107. var userId = UserManager.CurrentTradeAccount.CustomerId;
  1108. var reqeust = _orderAdapter.ToChannnelSPSLOrderReq(entrustOrder, userId);
  1109. var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ChannelSPSLOrderReq };
  1110. LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action<TCPPackage>((revPackgage) =>
  1111. {
  1112. var responeEntrity = _orderAdapter.ToLocalChannnelSPSLRsp(revPackgage.Content);
  1113. if (responeEntrity.RetCode == 0)
  1114. {
  1115. //todo:生成委托单
  1116. successAction(responeEntrity.Entity);
  1117. }
  1118. else
  1119. {
  1120. if (errorAction != null)
  1121. {
  1122. //RequestFunc = 市场委托订单
  1123. errorAction(new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = Client_Resource.Resources_Service_MakeMarketEntrustOrder });
  1124. }
  1125. }
  1126. }), new Action<int, string>((errorCode, errorDesc) =>
  1127. { ////通信错误
  1128. if (errorAction != null)
  1129. {
  1130. errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_MakeMarketEntrustOrder });
  1131. }
  1132. }));
  1133. }
  1134. }
  1135. }