GoodsService.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. //----------------------------------------------------------------
  2. //Module Name: GoodsService
  3. //Purpose:
  4. //CopyRight: Muchinfo
  5. //History:
  6. //----------------------------------------------------------------
  7. //DateTime Author Description
  8. //----------------------------------------------------------------
  9. //2014-03-22 deng.yinping Create
  10. //----------------------------------------------------------------
  11. using Muchinfo.MTPClient.Data;
  12. using Muchinfo.MTPClient.Data.DTO;
  13. using Muchinfo.MTPClient.Data.Enums;
  14. using Muchinfo.MTPClient.Data.Model;
  15. using Muchinfo.MTPClient.Data.Model.GoodRules;
  16. using Muchinfo.MTPClient.Infrastructure.Cache;
  17. using Muchinfo.MTPClient.Infrastructure.Utilities;
  18. using Muchinfo.MTPClient.IService;
  19. using Muchinfo.MTPClient.Resources;
  20. using Muchinfo.MTPClient.Service.Utilities;
  21. using Muchinfo.PC.Common.Extensions;
  22. using System;
  23. using System.Collections.Generic;
  24. using System.Collections.ObjectModel;
  25. using System.Linq;
  26. namespace Muchinfo.MTPClient.Service
  27. {
  28. public class GoodsService : IGoodsService
  29. {
  30. #region IGoodsService
  31. /// <summary>
  32. /// 获取交易所列表
  33. /// </summary>
  34. /// <returns>Dictionary{System.StringSystem.String}.</returns>
  35. /// <exception cref="System.NotImplementedException"></exception>
  36. public Dictionary<int, string> GetExchanges()
  37. {
  38. //todo:
  39. throw new NotImplementedException();
  40. }
  41. /// <summary>
  42. /// 生成交易所商品树
  43. /// </summary>
  44. /// <returns>ObservableCollection{TreeViewEntity}.</returns>
  45. /// <exception cref="System.NotImplementedException"></exception>
  46. public ObservableCollection<TreeViewEntity> GetExchangeTree()
  47. {
  48. //todo:
  49. throw new NotImplementedException();
  50. }
  51. /// <summary>
  52. /// 获取商品信息By商品代码
  53. /// </summary>
  54. /// <param name="goodsCodeList">The goods code list.</param>
  55. /// <returns>ObservableCollection{QuoteGoods}.</returns>
  56. public ObservableCollection<QuoteGoods> GetQuoteGoodsByCodes(List<string> goodsCodeList)
  57. {
  58. var cacheGoodsList = CacheManager.CacheGoodsBaseInfos;
  59. if (cacheGoodsList == null || !cacheGoodsList.Any()) return null;
  60. var result = new List<QuoteGoods>();
  61. //循环取以保持顺序
  62. foreach (var goodsCode in goodsCodeList)
  63. {
  64. var goods = cacheGoodsList.FirstOrDefault(z => z.GoodsCode == goodsCode);
  65. if (goods == null) continue;
  66. result.Add(goods);
  67. }
  68. return ConvertToQuoteGoodses(result);
  69. }
  70. /// <summary>
  71. /// 获取命令行商品
  72. /// </summary>
  73. /// <param name="commandType">Type of the command.</param>
  74. /// <param name="additionalInfo">The additional info.</param>
  75. /// <returns>IEnumerable{QuoteGoods}.</returns>
  76. public ObservableCollection<QuoteGoods> GetGoodsInfoList(MenuCommandType commandType, string additionalInfo)
  77. {
  78. var favoriteService = new FavoriteService();
  79. switch (commandType)
  80. {
  81. case MenuCommandType.SelectedGoodses:
  82. uint id;
  83. if (uint.TryParse(additionalInfo, out id))
  84. {
  85. return favoriteService.GetMyFavoriteGoodses(id);
  86. }
  87. return null;
  88. case MenuCommandType.CustomQuote:
  89. case MenuCommandType.BidQuote:
  90. return GetGoodsInfoList(additionalInfo);
  91. default:
  92. return null;
  93. }
  94. }
  95. ///// <summary>
  96. ///// 更新商品盘面信息
  97. ///// </summary>
  98. ///// <param name="goodsList">The goods list.</param>
  99. //public void UpdateFromDayQuote(List<QuoteGoods> goodsList)
  100. //{
  101. // if (goodsList == null || !goodsList.Any()) return;
  102. // var symbols = goodsList.Select((goods) => goods.Symbol).ToList();
  103. // if (!symbols.Any()) return;
  104. // var link = LinkManager.Instance.QuoteTcpLinkProxy;
  105. // link.QueryDayQuote(goodsList);
  106. //}
  107. public ObservableCollection<QuoteGoods> GetAllGoods()
  108. {
  109. var cacheGoodsList = CacheManager.CacheGoodsBaseInfos;
  110. if (cacheGoodsList == null) return null;
  111. var result = cacheGoodsList as IList<QuoteGoods>;
  112. if (!result.Any()) return null;
  113. return result.ToObservableCollection();
  114. }
  115. /// <summary>
  116. /// 更新的昨日结算价
  117. /// </summary>
  118. /// <param name="goodses">商品</param>
  119. /// <param name="account">账号</param>
  120. /// <exception cref="System.NotImplementedException"></exception>
  121. public void UpdateLastReckonPrice(List<QuoteGoods> goodses, MTPClient.Data.Model.Account.TradeAccount account)
  122. {
  123. //todo:
  124. throw new NotImplementedException();
  125. }
  126. /// <summary>
  127. /// 更新的交收价
  128. /// </summary>
  129. /// <param name="goodses">商品</param>
  130. /// <param name="account">账号</param>
  131. /// <exception cref="System.NotImplementedException"></exception>
  132. public void UpdateDeliveryPrice(List<QuoteGoods> goodses, MTPClient.Data.Model.Account.TradeAccount account)
  133. {
  134. //todo:
  135. throw new NotImplementedException();
  136. }
  137. /// <summary>
  138. /// Queries the parameter rule.
  139. /// </summary>
  140. /// <param name="contRightCode">The cont right code.</param>
  141. /// <param name="goodsCode">The goods code.</param>
  142. /// <param name="isBidMarket">if set to <c>true</c> [is bid market].</param>
  143. /// <param name="loginCode">The login code.</param>
  144. /// <returns>List{ParameterRule}.</returns>
  145. /// <exception cref="System.NotImplementedException"></exception>
  146. public List<ParameterRule> QueryParameterRule(int contRightCode, string goodsCode, bool isBidMarket, string loginCode)
  147. {
  148. //todo:
  149. throw new NotImplementedException();
  150. }
  151. /// <summary>
  152. /// 商品开市
  153. /// </summary>
  154. /// <param name="goodsCodes">商品代码</param>
  155. /// <exception cref="System.NotImplementedException"></exception>
  156. public void MarketOpenUpdateDayQuote(string[] goodsCodes)
  157. {
  158. //todo:
  159. throw new NotImplementedException();
  160. }
  161. #endregion
  162. #region Private Methods
  163. /// <summary>
  164. /// 获取交易所,市场商品
  165. /// </summary>
  166. /// <param name="marketIdString">The market identifier string.</param>
  167. /// <returns>ObservableCollection{QuoteGoods}.</returns>
  168. private ObservableCollection<QuoteGoods> GetGoodsInfoList(string marketIdString)
  169. {
  170. if (string.IsNullOrWhiteSpace(marketIdString)) return null;
  171. int marketId = 0;
  172. int.TryParse(marketIdString, out marketId);
  173. var cacheGoodsList = CacheManager.CacheGoodsBaseInfos;
  174. if (cacheGoodsList == null) return null;
  175. var filterList = cacheGoodsList.Where(z => z.GoodsParameters.SortId == marketId);
  176. return ConvertToQuoteGoodses(filterList);
  177. }
  178. /// <summary>
  179. /// Converts to quote goodses.
  180. /// </summary>
  181. /// <param name="goodsList">The goods list.</param>
  182. /// <returns>ObservableCollection{QuoteGoods}.</returns>
  183. private ObservableCollection<QuoteGoods> ConvertToQuoteGoodses(IEnumerable<QuoteGoods> goodsList)
  184. {
  185. var dataModels = goodsList as IList<QuoteGoods> ?? goodsList.ToList();
  186. if (!dataModels.Any()) return null;
  187. var result = new ObservableCollection<QuoteGoods>();
  188. var showIndex = 1;
  189. foreach (var dataModel in dataModels)
  190. {
  191. dataModel.ShowIndex = showIndex++;
  192. result.Add(dataModel);
  193. }
  194. return result;
  195. }
  196. #endregion
  197. /// <summary>
  198. /// 根据symbol获取商品
  199. /// </summary>
  200. /// <param name="symbol">The symbol.</param>
  201. /// <returns>QuoteGoods.</returns>
  202. public QuoteGoods GetQuoteGoodsBySymbol(string symbol)
  203. {
  204. if (string.IsNullOrWhiteSpace(symbol)) return null;
  205. return CacheManager.CacheGoodsBaseInfos.FirstOrDefault(z => z.Symbol == symbol);
  206. }
  207. /// <summary>
  208. /// 获取商品DTO对象集合
  209. /// </summary>
  210. /// <param name="commandType">Type of the command.</param>
  211. /// <param name="goodsGroup">The goods group.</param>
  212. /// <returns>IEnumerable{QuoteGoods}.</returns>
  213. public ObservableCollection<QuoteGoodsDTO> GetQuoteGoodsDTOList(MenuCommandType commandType, MarketsInfoModel goodsGroup)
  214. {
  215. if (goodsGroup == null) return null;
  216. var cacheGoodsList = CacheManager.CacheGoodsBaseInfos;
  217. if (cacheGoodsList == null) return null;
  218. var filterList = new List<QuoteGoods>();
  219. if (goodsGroup.TradeMode == eTradeMode.AllGoods || goodsGroup.TradeMode == eTradeMode.QuotePAndX)
  220. {
  221. filterList = SortByAllGoodses();
  222. }
  223. else
  224. {
  225. //filterList = cacheGoodsList.Where(z => z != null && z.MarketID == goodsGroup.MarketID).OrderBy(p => p.GoodsCode).ToList();
  226. //MTP2.0 资管使用外部交易所做为分组标签
  227. filterList = GetGoodsListByExExchangeId(goodsGroup.MarketID);
  228. }
  229. var quoteGoodses = filterList as IList<QuoteGoods> ?? filterList.ToList();
  230. if (!quoteGoodses.Any()) return null;
  231. var showIndex = 1;
  232. var result = new ObservableCollection<QuoteGoodsDTO>();
  233. foreach (var quoteGoods in quoteGoodses)
  234. {
  235. if (quoteGoods == null) continue;
  236. quoteGoods.ShowIndex = showIndex++;
  237. ////取交易参数中的最小建仓数量
  238. var minLot = GetGoodsParamerRule((int)quoteGoods.GoodsId, goodsGroup.TradeMode,
  239. GoodsTradeConts.MINOPENTRADEQTY);
  240. var dto = new QuoteGoodsDTO(quoteGoods);
  241. if (minLot != null)
  242. {
  243. dto.MinOpenNumber = minLot.FeeValue;
  244. dto.Lot = ApplicationParameter.DefaultOrderLot; ////默认下单数量
  245. }
  246. else
  247. {
  248. dto.MinOpenNumber = 1;
  249. dto.Lot = 1;
  250. }
  251. if (ApplicationParameter.DefaultOrderLot == 0)
  252. {
  253. if (minLot != null)
  254. dto.Lot = minLot.FeeValue; ;
  255. }
  256. else
  257. {
  258. dto.Lot = ApplicationParameter.DefaultOrderLot; ////默认下单数量
  259. }
  260. dto.AgreeUnitDisplay = quoteGoods.AgreeUnit + quoteGoods.GoodsUnit; ///合约单位
  261. result.Add(dto);
  262. }
  263. ////P+X标签显示方式
  264. if (goodsGroup.IsDeliveryMode)
  265. {
  266. return ToPAndXList(result);
  267. }
  268. return result;
  269. }
  270. /// <summary>
  271. /// 根据外部交易所ID获取商品列表
  272. /// </summary>
  273. /// <param name="exExchangeId">The ex exchange identifier.</param>
  274. /// <returns>List{QuoteGoods}.</returns>
  275. public List<QuoteGoods> GetGoodsListByExExchangeId(uint exExchangeId)
  276. {
  277. //MTP2.0 资管使用外部交易所做为分组标签
  278. var cacheGoodsList = CacheManager.CacheGoodsBaseInfos;
  279. if (cacheGoodsList == null) return null;
  280. var cacheGoodsGroupsList = CacheManager.CacheGoodsGroups;
  281. if (cacheGoodsGroupsList != null)
  282. {
  283. var tmp = cacheGoodsGroupsList.Where(z => z.ExChangeId == exExchangeId);
  284. if (tmp != null)
  285. {
  286. var groupIds = tmp.Select(z => z.GoodsGroupid).ToList();
  287. return cacheGoodsList.Where(z => groupIds.Contains(z.GroupID)).OrderBy(p => p.GoodsCode).ToList();
  288. }
  289. }
  290. return null;
  291. }
  292. /// <summary>
  293. /// 所有商品的排序
  294. /// </summary>
  295. /// <returns></returns>
  296. private List<QuoteGoods> SortByAllGoodses()
  297. {
  298. var cacheGoodsList = CacheManager.CacheGoodsBaseInfos;
  299. // var filterList = cacheGoodsList.Where(z => z != null && z.GoodsParameters.TradeMode != eTradeMode.TRADEMODE_SALE).ToList();
  300. List<QuoteGoods> allGoodses=new List<QuoteGoods>();
  301. if (CacheManager.CacheAvailableMarketList != null)
  302. {
  303. foreach (var marketId in CacheManager.CacheAvailableMarketList)
  304. {
  305. var goodsList = cacheGoodsList.Where(z => z != null && z.MarketID == marketId).ToList();
  306. allGoodses.AddRange(goodsList);
  307. }
  308. }
  309. allGoodses = allGoodses.OrderBy(p => p.GoodsCode).ToList();
  310. return allGoodses;
  311. }
  312. /// <summary>
  313. /// P+X标签显示方式
  314. /// </summary>
  315. /// <param name="origianlList">The origianl list.</param>
  316. /// <returns>ObservableCollection{QuoteGoodsDTO}.</returns>
  317. private ObservableCollection<QuoteGoodsDTO> ToPAndXList(ObservableCollection<QuoteGoodsDTO> origianlList)
  318. {
  319. ////P与X的关系为1:N, P为关联商品,X为交易商品,以P为主显示可以避免P出现多次。
  320. var list = new ObservableCollection<QuoteGoodsDTO>();
  321. var index = 1;
  322. var pIdList = CacheManager.AllDeliveryRelationList.Where(z => z.RelationMode == eDeliveryContractLink.PAndX).Select(z => z.RelationGoodsId).Distinct();
  323. foreach (var pId in pIdList)
  324. {
  325. if (pId <= 0) continue;
  326. var pGoods = origianlList.FirstOrDefault(z => z.GoodsId == pId);
  327. if (pGoods == null) continue;
  328. pGoods.ShowIndex = index++;
  329. pGoods.IsMain = true;
  330. list.Add(pGoods);
  331. var xIdList = CacheManager.AllDeliveryRelationList.Where(z => z.RelationMode == eDeliveryContractLink.PAndX && z.RelationGoodsId == pId).Select(z => z.GoodsId).Distinct();
  332. foreach (var xId in xIdList)
  333. {
  334. if (xId <= 0) continue;
  335. var xGoods = origianlList.FirstOrDefault(z => z.GoodsId == xId);
  336. if (xGoods == null) continue;
  337. xGoods.ShowIndex = null;
  338. xGoods.IsMain = false;
  339. list.Add(xGoods);
  340. }
  341. }
  342. return list;
  343. }
  344. public Data.Model.GoodRules.GoodsFeeType GetGoodsParamerRule(int goodsId, eTradeMode tradeMode, GoodsTradeConts ruletype)
  345. {
  346. int ruleId = 1;
  347. switch (ruletype)
  348. {
  349. #region 单笔最小建仓数量
  350. case GoodsTradeConts.MINOPENTRADEQTY:
  351. ruleId = (int)eTradeRule.TRADERULE_SINGLEMINOPENQTY;
  352. break;
  353. #endregion
  354. #region 单笔最大建仓数量
  355. case GoodsTradeConts.MAXOPENTRADEQTY: ///单笔最大建仓数量
  356. ruleId = (int)eTradeRule.TRADERULE_SINGLEMAXOPENQTY;
  357. break;
  358. #endregion
  359. #region 允许最大偏移点差
  360. case GoodsTradeConts.AllowPips: ///允许最大偏移点差
  361. ruleId = (int)eTradeRule.TRADERULE_MAXOFFSETRANGE;
  362. break;
  363. #endregion
  364. #region 单笔最小交割数量
  365. case GoodsTradeConts.MinDeliveryQty:
  366. ruleId = (int)eTradeRule.TRADERULE_SINGLEMINDELIVERYQTY;
  367. break;
  368. #endregion
  369. #region 单笔最大交割数量
  370. case GoodsTradeConts.MaxDeliveryQty:
  371. ruleId = (int)eTradeRule.TRADERULE_SINGLEMAXDELIVERYQTY;
  372. break;
  373. #endregion
  374. #region 最大买持仓量
  375. case GoodsTradeConts.MaxTotalBuyHolderQty:
  376. ruleId = (int)eTradeRule.TRADERULE_MAXBUYHOLDERQTY;
  377. break;
  378. #endregion
  379. #region 最大卖持仓量
  380. case GoodsTradeConts.MaxTotalSellHolderQty:
  381. ruleId = (int)eTradeRule.TRADERULE_MAXSELLHOLDERQTY;
  382. break;
  383. #endregion
  384. #region 手续费交易规则
  385. case GoodsTradeConts.TradeChargeRule:
  386. ruleId = (int)eTradeRule.TRADERULE_TRADECHARGERULE;
  387. break;
  388. #endregion
  389. }
  390. return CacheManager.GetTradeRule(goodsId, ruleId);
  391. }
  392. //public eTradeFee GetTradeFee(eTradeMode tradeMode)
  393. //{
  394. // eTradeFee tradeFeeType = 0;
  395. // switch (tradeMode)
  396. // {
  397. // case eTradeMode.TRADEMODE_MARKETMAKE:
  398. // tradeFeeType = eTradeFee.TRADECOST_MOPENTRADEMARGIN;
  399. // break;
  400. // case eTradeMode.TRADEMODE_BIDDING:
  401. // tradeFeeType = eTradeFee.TRADECOST_BOPENTRADEMARGIN;
  402. // break;
  403. // case eTradeMode.TRADEMODE_BIDDINGMARKETMAKE:
  404. // tradeFeeType = eTradeFee.TRADECOST_XOPENTRADEMARGIN;
  405. // break;
  406. // }
  407. // return tradeFeeType;
  408. //}
  409. /// <summary>
  410. /// 获取指定【交易模式】和【交易费用类型】的费用
  411. /// </summary>
  412. /// <param name="tradeMode"></param>
  413. /// <param name="feeType"></param>
  414. /// <returns></returns>
  415. public eTradeFee GetTradeFee(eTradeMode tradeMode, eTradeFeeType feeType)
  416. {
  417. eTradeFee tradeFeeType = 0;
  418. switch (feeType)
  419. {
  420. //#region 建仓保证金
  421. ////建仓保证金
  422. //case eTradeFeeType.TRADECOST_OPENTRADEMARGIN:
  423. // switch (tradeMode)
  424. // {
  425. // case eTradeMode.TRADEMODE_MARKETMAKE:
  426. // tradeFeeType = eTradeFee.TRADECOST_MOPENTRADEMARGIN;
  427. // break;
  428. // case eTradeMode.TRADEMODE_BIDDING:
  429. // tradeFeeType = eTradeFee.TRADECOST_BOPENTRADEMARGIN;
  430. // break;
  431. // case eTradeMode.TRADEMODE_BIDDINGMARKETMAKE:
  432. // tradeFeeType = eTradeFee.TRADECOST_XOPENTRADEMARGIN;
  433. // break;
  434. // case eTradeMode.TRADEMODE_SALE:
  435. // tradeFeeType = eTradeFee.TRADECOST_IOPENTRADEMARGIN;
  436. // break;
  437. // }
  438. // break;
  439. //#endregion
  440. //#region 买建仓手续费
  441. ////买建仓手续费
  442. //case eTradeFeeType.TRADECOST_BUYOPENTRADECHARGE:
  443. // switch (tradeMode)
  444. // {
  445. // case eTradeMode.TRADEMODE_MARKETMAKE:
  446. // tradeFeeType = eTradeFee.TRADECOST_MBUYOPENTRADECHARGE;
  447. // break;
  448. // case eTradeMode.TRADEMODE_BIDDING:
  449. // tradeFeeType = eTradeFee.TRADECOST_BBUYOPENTRADECHARGE;
  450. // break;
  451. // case eTradeMode.TRADEMODE_BIDDINGMARKETMAKE:
  452. // tradeFeeType = eTradeFee.TRADECOST_XBUYOPENTRADECHARGE;
  453. // break;
  454. // case eTradeMode.TRADEMODE_SALE:
  455. // tradeFeeType = eTradeFee.TRADECOST_ISSUESUBSCRIBECHARGESET;
  456. // break;
  457. // }
  458. // break;
  459. //#endregion
  460. //#region 卖建仓手续费
  461. ////卖建仓手续费
  462. //case eTradeFeeType.TRADECOST_SELLOPENTRADECHARGE:
  463. // switch (tradeMode)
  464. // {
  465. // case eTradeMode.TRADEMODE_MARKETMAKE:
  466. // tradeFeeType = eTradeFee.TRADECOST_MSELLOPENTRADECHARGE;
  467. // break;
  468. // case eTradeMode.TRADEMODE_BIDDING:
  469. // tradeFeeType = eTradeFee.TRADECOST_BSELLOPENTRADECHARGE;
  470. // break;
  471. // case eTradeMode.TRADEMODE_BIDDINGMARKETMAKE:
  472. // tradeFeeType = eTradeFee.TRADECOST_XSELLOPENTRADECHARGE;
  473. // break;
  474. // case eTradeMode.TRADEMODE_SALE:
  475. // tradeFeeType = eTradeFee.TRADECOST_ISSUESUBSCRIBECHARGESET;
  476. // break;
  477. // }
  478. // break;
  479. //#endregion
  480. }
  481. return tradeFeeType;
  482. }
  483. /// <summary>
  484. /// 转换商品类型
  485. /// </summary>
  486. /// <param name="goodses">交易商品</param>
  487. /// <returns></returns>
  488. public ObservableCollection<QuoteGoodsDTO> ConvertGoodsDtos(List<QuoteGoods> goodses)
  489. {
  490. var result = new ObservableCollection<QuoteGoodsDTO>();
  491. var quoteGoodses = goodses as IList<QuoteGoods> ?? goodses.ToList();
  492. if (!quoteGoodses.Any()) return result;
  493. var showIndex = 1;
  494. foreach (var quoteGoods in quoteGoodses)
  495. {
  496. if (quoteGoods == null) continue;
  497. quoteGoods.ShowIndex = showIndex++;
  498. ////取交易参数中的最小建仓数量
  499. var minLot = GetGoodsParamerRule((int)quoteGoods.GoodsId, quoteGoods.TradeMode,GoodsTradeConts.MINOPENTRADEQTY);
  500. var dto = new QuoteGoodsDTO(quoteGoods);
  501. if (minLot != null)
  502. {
  503. dto.MinOpenNumber = minLot.FeeValue;
  504. }
  505. else if (ApplicationParameter.DefaultOrderLot > 0)
  506. {
  507. dto.MinOpenNumber = ApplicationParameter.DefaultOrderLot;
  508. }
  509. else
  510. {
  511. dto.MinOpenNumber = 1;
  512. }
  513. dto.Lot = dto.MinOpenNumber;
  514. dto.DeliveryGoodsName = quoteGoods.DeliveryGoodsName; ////交割商品
  515. dto.AgreeUnitDisplay = quoteGoods.AgreeUnitDisplay; ///合约单位
  516. result.Add(dto);
  517. }
  518. return result;
  519. }
  520. public void QueryMarketReckonInfo(int MarkerTypeID, Action<List<MarketReckon>> successAction, Action<ErrorEntity> errorAction)
  521. {
  522. List<QueryCommonParam> queryCommonParams = new List<QueryCommonParam>();
  523. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "markettypeid", ParamValue = MarkerTypeID + string.Empty });
  524. QueryCommonHelper.QueryCommon(QueryStatement.QueryMarketReckon, queryCommonParams, new Action<List<MarketReckon>>((marketReckons) =>
  525. {
  526. if (successAction != null)
  527. {
  528. successAction(marketReckons);
  529. }
  530. }), (error) =>
  531. {
  532. if (errorAction != null)
  533. {
  534. //RequestFunc = string.Format("查询结算信息({0})"
  535. error.RequestFunc = string.Format(Client_Resource.Resources_Service_QueryMarketReckonInfo, MarkerTypeID);
  536. errorAction(error);
  537. }
  538. });
  539. }
  540. /// <summary>
  541. /// 委托预埋单数量查询
  542. /// </summary>
  543. /// <param name="AccountId"></param>
  544. /// <param name="successAction"></param>
  545. /// <param name="errorAction"></param>
  546. public void QueryPrePostDetailQty(ulong AccountId, Action<List<PreOrderParameter>> successAction, Action<ErrorEntity> errorAction)
  547. {
  548. var queryCommonParams = new List<QueryCommonParam>();
  549. queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = AccountId + string.Empty });
  550. QueryCommonHelper.QueryCommon(QueryStatement.SearchPrePostDetailQty, queryCommonParams,
  551. new Action<List<PreOrderParameter>>((orderDetails) =>
  552. {
  553. if (successAction != null)
  554. {
  555. successAction(orderDetails);
  556. }
  557. }), (error) =>
  558. {
  559. if (errorAction != null)
  560. {
  561. //RequestFunc = 委托单参数查询
  562. error.RequestFunc = Client_Resource.Resources_Service_QueryPreOrderParameter;
  563. errorAction(error);
  564. }
  565. });
  566. }
  567. }
  568. }