OrderProtoBufAdapter.cs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. //----------------------------------------------------------------
  6. //Module Name: $safeprojectname$
  7. //Purpose:
  8. //CopyRight: Muchinfo
  9. //History:
  10. //----------------------------------------------------------------
  11. //DateTime 2016/1/19 19:33:11
  12. //Author
  13. //Description Create
  14. //----------------------------------------------------------------
  15. using Muchinfo.MTPClient.Adapter.Abstract;
  16. using Muchinfo.MTPClient.Adapter.Utilities;
  17. using Muchinfo.MTPClient.Data;
  18. using Muchinfo.MTPClient.Data.Enums;
  19. using Muchinfo.MTPClient.Data.Model;
  20. using Muchinfo.MTPClient.Data.Model.Account;
  21. using tas;
  22. namespace Muchinfo.MTPClient.Adapter.ProtoBuf
  23. {
  24. public class OrderProtoBufAdapter : OrderAdapter
  25. {
  26. #region 即期委托请求参数
  27. //ClientSerialNo string optional 客户端流水号
  28. //ClientOrderTime string optional 客户端委托时间
  29. //ClientFlag string optional 终端标识
  30. //AccountID uint32 optional 交易账号
  31. //GoodsID uint32 optional 商品ID
  32. //MarketID uint32 optional 市场ID
  33. //ValidType int32 optional 校验类型
  34. //OperateType uint32 optional 操作类型:
  35. //OrderSrc uint32 optional 单据来源
  36. //OperatorID uint32 optional 操作员账号ID
  37. //OrderPrice double optional 委托价格
  38. //OrderQty double optional 委托数量
  39. //BuyOrSell uint32 optional 买卖方向
  40. //BuildType uint32 optional 下单类型
  41. //CurtQuotePrice double optional 保留,计算冻结金额使用
  42. //SpPrice double optional 止盈价格
  43. //SlPrice double optional 止损价格
  44. //PriceMode uint32 optional 取价方式
  45. //TimevalidType uint32 optional 时间有效类型
  46. //VolumeType uint32 optional 成交量类型
  47. #endregion
  48. /// <summary>
  49. /// 即期委托请求转换
  50. /// </summary>
  51. /// <param name="entrustOrder">下单内容对象</param>
  52. /// <returns></returns>
  53. public override byte[] ToMakeMarketEntrustOrder(Data.Model.NewEntrustOrder entrustOrder, uint userID)
  54. {
  55. var marketOrder = new OrderReq()
  56. {
  57. ClientSerialNo = Guid.NewGuid().ToString(),
  58. ClientOrderTime = entrustOrder.EntrurstTime.ToString("yyyy-MM-dd HH:mm:ss"),
  59. ClientType = (uint)eClientType.CLIENTTYPE_PC_TRADE_CLIENT, //NEW uint32 optional 终端类型
  60. LoginID = entrustOrder.LoginID, //NEW uint32 optional 登陆账号
  61. AccountID = entrustOrder.AccountId, //交易账号==? 资金账号吗
  62. GoodsID = entrustOrder.GoodsId,
  63. MarketID = entrustOrder.MarketId,//市场ID NEW
  64. ValidType = (int)entrustOrder.ValidType,
  65. OperateType = (uint)eOrderOperateType.ORDEROPERATETYPE_NORMAL,
  66. OrderSrc = (uint)eOrderSrc.ORDERSRC_CLIENT,
  67. OperatorID = entrustOrder.OperaterId,
  68. OrderPrice = Convert.ToDouble(entrustOrder.EntrustPrice),
  69. MarketMaxSub = (double)entrustOrder.AllowTradeSub, //NEW double optional 市价允许最大偏差(做市)?==允许成交偏差范围
  70. OrderQty = Convert.ToUInt64(entrustOrder.EntrustQuantity),
  71. BuyOrSell = (uint)entrustOrder.BuyOrSell,
  72. BuildType = (uint)entrustOrder.BuildType,
  73. CurtQuotePrice = Convert.ToDouble(entrustOrder.CurtQuotePrice),
  74. SlPrice = Convert.ToDouble(entrustOrder.SLPrice),
  75. SpPrice = Convert.ToDouble(entrustOrder.SPPrice),
  76. PriceMode = (uint)entrustOrder.PriceMode,
  77. TimevalidType = (int)eValidType.VALIDTYPE_DR, //NEW uint32 optional 时间有效类型 默认当日有效
  78. TriggerType = entrustOrder.TriggerType, //NEW uint32 optional 预埋单触发类型
  79. TriggerPrice = (double)entrustOrder.TriggerPrice, //NEW double optional 预埋单触发价格
  80. };
  81. if (entrustOrder.OrderFormType == eOrderFormType.Listting)
  82. {
  83. marketOrder.ListingSelectType = (uint)entrustOrder.ListingSelectType; //NEW uint32 optional 挂牌点选类型
  84. marketOrder.DelistingType = (uint)entrustOrder.DelistingType; ; //NEW uint32 optional 摘牌类型
  85. if (entrustOrder.ListingSelectType == eListingSelectType.LISTINGSELECTTYPE_DELISTING && entrustOrder.DelistingType == eDelistingType.DELISTINGTYPE_SELECTED)
  86. {
  87. marketOrder.RelatedID = (ulong)entrustOrder.RelationTicket; //NEW uint64 optional 关联单号?==关联委托单号
  88. }
  89. }
  90. marketOrder.Header = new MessageHead() { AccountID = entrustOrder.AccountId, MarketID = entrustOrder.MarketId, UserID = userID, GoodsID = entrustOrder.GoodsId, UUID = Guid.NewGuid().ToString() };
  91. return ProtoBufHelper.EntitySerialize(marketOrder, false);
  92. }
  93. public override byte[] ToCancelOrder(NewEntrustOrder entrustOrder, uint userID)
  94. {
  95. var cancelOrder = new CancelOrderReq()
  96. {
  97. ClientSerialNo = Guid.NewGuid().ToString(),
  98. ClientOrderTime = entrustOrder.EntrurstTime.ToString("yyyy-MM-dd HH:mm:ss"),
  99. ClientType = 2, //NEW uint32 optional 终端类型
  100. OperateType = 1,
  101. OldOrderId = entrustOrder.RelationTicket,
  102. AccountID = entrustOrder.AccountId,
  103. OrderSrc = 1,
  104. OperatorID = entrustOrder.AccountId
  105. };
  106. cancelOrder.Header = new MessageHead() { AccountID = entrustOrder.AccountId, MarketID = entrustOrder.MarketId, UserID = userID, GoodsID = entrustOrder.GoodsId, UUID = Guid.NewGuid().ToString() };
  107. return ProtoBufHelper.EntitySerialize(cancelOrder, false);
  108. }
  109. public override ResponeEntity<OrderDetail> ToResponseCancelOrder(object responseData)
  110. {
  111. var buffer = responseData as byte[];
  112. if (buffer == null)
  113. {
  114. throw new Exception(System.Reflection.MethodBase.GetCurrentMethod().Name + "进行反序列化对象内容为空!");
  115. }
  116. var mmOrderRsp = ProtoBufHelper.EntityDeSerialize<CancelOrderRsp>(buffer);
  117. return new ResponeEntity<OrderDetail>()
  118. {
  119. RetCode = mmOrderRsp.RetCode,
  120. RetMessage = mmOrderRsp.RetDesc,
  121. };
  122. }
  123. ///// <summary>
  124. ///// 竞价交易委托转换
  125. ///// </summary>
  126. ///// <param name="entrustOrder"></param>
  127. ///// <returns></returns>
  128. //public override byte[] ToBidMarketEntrustOrder(NewEntrustOrder entrustOrder)
  129. //{
  130. // var marketOrder = new BMOrderReq()
  131. // {
  132. // OrderPrice = Convert.ToDouble(entrustOrder.EntrustPrice), //// 委托价格
  133. // OrderQty = Convert.ToDouble(entrustOrder.EntrustQuantity), //// 委托数量
  134. // BuyOrSell = (uint) entrustOrder.BuyOrSell, //// 买卖方向
  135. // CurrentPrice = Convert.ToDouble(entrustOrder.CurtQuotePrice),
  136. // MarketID = uint.MaxValue, //不使用
  137. // //// OpenType ////下单类型:建仓,平仓,
  138. // BuildType = (uint)entrustOrder.BuildType,
  139. // ////CurrentPrice ////当前成交价格
  140. // OpenMode = (uint) entrustOrder.OrderMode, //// 建仓模式(FAK,FOK)
  141. // //CloseMode = (uint) entrustOrder.TradeCloseMode, //// 平仓模式(平今,平历史)
  142. // PriceMode =(uint) entrustOrder.PriceMode,
  143. // RelateOrderID = entrustOrder.RelationTicket,
  144. // TriggerPrice =Convert.ToDouble(entrustOrder.TriggerPrice),
  145. // TriggerType = entrustOrder.TriggerType,
  146. // OrderFlag = entrustOrder.OrderFlag
  147. // };
  148. // marketOrder.OrderHead = ToOrderHead(entrustOrder);
  149. // marketOrder.Header = new MessageHead() { AccountId = entrustOrder.AccountId, GoodsId = entrustOrder.GoodsId, UUID = Guid.NewGuid().ToByteArray() };
  150. // return ProtoBufHelper.EntitySerialize(marketOrder, false);
  151. //}
  152. #region OrderRsp委托单请求应答
  153. //OrderID int64 optional 一级生成的订单号
  154. //ExchOrderID int64 optional 交易所订单号
  155. //OrderTime string optional 接收委托交易的时间
  156. //OrderReq OrderReq optional 委托请求带回
  157. #endregion
  158. /// <summary>
  159. /// 反序列化OTC委托返回
  160. /// </summary>
  161. /// <param name="responeData">数据</param>
  162. /// <returns>单据类型</returns>
  163. public override ResponeEntity<OrderDetail> ToMakeLimitOrder(object responeData)
  164. {
  165. var buffer = responeData as byte[];
  166. if (buffer == null)
  167. {
  168. throw new Exception(System.Reflection.MethodBase.GetCurrentMethod().Name + "进行反序列化对象内容为空!");
  169. }
  170. var mmOrderRsp = ProtoBufHelper.EntityDeSerialize<OrderRsp>(buffer);
  171. return new ResponeEntity<OrderDetail>()
  172. {
  173. RetCode = mmOrderRsp.RetCode,
  174. RetMessage = mmOrderRsp.RetDesc,
  175. Entity = new OrderDetail()
  176. {
  177. OrderID = long.Parse(mmOrderRsp.OrderID.ToString()),
  178. //EntrustOrderType = (eOrderType)mmOrderRsp,
  179. ////todo:生成委托
  180. }
  181. };
  182. }
  183. public override ResponeEntity<OrderDetail> ToMixModifyRsp(object responeData)
  184. {
  185. return null;
  186. //var buffer = responeData as byte[];
  187. //if (buffer == null)
  188. //{
  189. // throw new Exception(System.Reflection.MethodBase.GetCurrentMethod().Name + "进行反序列化对象内容为空!");
  190. //}
  191. //var mmodifyRsp = ProtoBufHelper.EntityDeSerialize<XMModifyOrderRsp>(buffer);
  192. //return new ResponeEntity<OrderDetail>()
  193. //{
  194. // RetCode = mmodifyRsp.RetCode,
  195. // RetMessage = mmodifyRsp.RetDesc,
  196. // Entity = new OrderDetail()
  197. // {
  198. // //OrderID = mmodifyRsp.OrderID,
  199. // ////todo:生成委托
  200. // }
  201. //};
  202. }
  203. /// <summary>
  204. /// /// 反序列化竞价委托返回
  205. /// </summary>
  206. /// <param name="responeData"></param>
  207. /// <returns></returns>
  208. //public override ResponeEntity<OrderDetail> ToBidMarketLimitOrder(object responeData)
  209. //{
  210. // var buffer = responeData as byte[];
  211. // if (buffer == null)
  212. // {
  213. // throw new Exception(System.Reflection.MethodBase.GetCurrentMethod().Name + "进行反序列化对象内容为空!");
  214. // }
  215. // var bidOrderRsp = ProtoBufHelper.EntityDeSerialize<BMOrderRsp>(buffer);
  216. // return new ResponeEntity<OrderDetail>()
  217. // {
  218. // RetCode = bidOrderRsp.RetCode,
  219. // RetMessage = bidOrderRsp.RetDesc,
  220. // Entity = new OrderDetail()
  221. // {
  222. // OrderID = bidOrderRsp.OrderID,
  223. // EntrustOrderType = (eOrderType) bidOrderRsp.OrderType,
  224. // ////todo:生成委托
  225. // },
  226. // };
  227. //}
  228. //public override byte[] ToMixMarketEntrustOrder(NewEntrustOrder entrustOrder)
  229. //{
  230. // var marketOrder = new XMOrderReq()
  231. // {
  232. // SlPrice = Convert.ToDouble(entrustOrder.SLPrice),
  233. // SpPrice = Convert.ToDouble(entrustOrder.SPPrice),
  234. // OrderPrice = Convert.ToDouble(entrustOrder.EntrustPrice), //// 委托价格
  235. // OrderQty = Convert.ToDouble(entrustOrder.EntrustQuantity), //// 委托数量
  236. // BuyOrSell = (uint)entrustOrder.BuyOrSell, //// 买卖方向
  237. // CurrentPrice = Convert.ToDouble(entrustOrder.CurtQuotePrice),
  238. // MarketID = uint.MaxValue, //不使用
  239. // //// OpenType ////下单类型:建仓,平仓,
  240. // BuildType = (uint)entrustOrder.BuildType,
  241. // ////CurrentPrice ////当前成交价格
  242. // OpenMode = (uint)entrustOrder.OrderMode, //// 建仓模式(FAK,FOK)
  243. // //CloseMode = (uint) entrustOrder.TradeCloseMode, //// 平仓模式(平今,平历史)
  244. // PriceMode = (uint)entrustOrder.PriceMode,
  245. // RelateOrderID = entrustOrder.RelationTicket,
  246. // TriggerPrice = Convert.ToDouble(entrustOrder.TriggerPrice),
  247. // TriggerType=entrustOrder.TriggerType,
  248. // OrderFlag=entrustOrder.OrderFlag
  249. // };
  250. // marketOrder.OrderHead = ToOrderHead(entrustOrder);
  251. // marketOrder.Header = new MessageHead() { AccountId = entrustOrder.AccountId, GoodsId = entrustOrder.GoodsId, UUID = Guid.NewGuid().ToByteArray() };
  252. // return ProtoBufHelper.EntitySerialize(marketOrder, false);
  253. //}
  254. public override byte[] ToMixModifyEntrustOrder(NewEntrustOrder entrustOrder)
  255. {
  256. return null;
  257. // var marketOrder = new XMModifyOrderReq()
  258. // {
  259. // SLPrice = Convert.ToDouble(entrustOrder.SLPrice),
  260. // TPPrice = Convert.ToDouble(entrustOrder.SPPrice),
  261. // //OrderID = entrustOrder.RelationTicket,
  262. // AccountID = (long)entrustOrder.AccountId, //// 委托数量
  263. // BuyOrSell = (uint)entrustOrder.BuyOrSell, //// 买卖方向
  264. // };
  265. //// marketOrder.Header = ToOrderHead(entrustOrder);
  266. // marketOrder.Header = new MessageHead() { AccountID = entrustOrder.AccountId, GoodsID = entrustOrder.GoodsId, UUID = Guid.NewGuid().ToString() };
  267. // return ProtoBufHelper.EntitySerialize(marketOrder, false);
  268. }
  269. //public override ResponeEntity<OrderDetail> ToMixMarketLimitOrder(object responeData)
  270. //{
  271. // var buffer = responeData as byte[];
  272. // if (buffer == null)
  273. // {
  274. // throw new Exception(System.Reflection.MethodBase.GetCurrentMethod().Name + "进行反序列化对象内容为空!");
  275. // }
  276. // var bidOrderRsp = ProtoBufHelper.EntityDeSerialize<XMOrderRsp>(buffer);
  277. // return new ResponeEntity<OrderDetail>()
  278. // {
  279. // RetCode = bidOrderRsp.RetCode,
  280. // RetMessage = bidOrderRsp.RetDesc,
  281. // Entity = new OrderDetail()
  282. // {
  283. // OrderID = bidOrderRsp.OrderID,
  284. // EntrustOrderType = (eOrderType)bidOrderRsp.OrderType,
  285. // ////todo:生成委托
  286. // },
  287. // };
  288. //}
  289. public override byte[] ToRequestTaRiskRate(uint accountId)
  290. {
  291. return null;
  292. //var taRiskRate = new QueryMemberMonitorReq()
  293. //{
  294. // AccountId=accountId
  295. //};
  296. //return ProtoBufHelper.EntitySerialize(taRiskRate);
  297. }
  298. public override ResponeEntity<List<MemberAccountInfo>> ToLocalTaRiskRateInfo(object obj)
  299. {
  300. return null;
  301. //var buffer = obj as byte[];
  302. //if (buffer == null)
  303. //{
  304. // throw new Exception(System.Reflection.MethodBase.GetCurrentMethod().Name + "进行反序列化对象内容为空!");
  305. //}
  306. //var rspData = ProtoBufHelper.EntityDeSerialize<TaRiskRateInfoReport>(buffer);
  307. //var resultEntity = new ResponeEntity<List<MemberAccountInfo>>()
  308. //{
  309. // RetCode = rspData.RetCode,
  310. // Entity = new List<MemberAccountInfo>(),
  311. //};
  312. //if (rspData.TaRiskRateInfo == null || !rspData.TaRiskRateInfo.Any())
  313. //{
  314. // //todo:查询内容空
  315. // return resultEntity;
  316. //}
  317. //foreach (var taRiskRate in rspData.TaRiskRateInfo)
  318. //{
  319. // var memberAccountEntity= new MemberAccountInfo();
  320. // memberAccountEntity.UsedMargin = taRiskRate.UsedMargin == int.MinValue ? 0 : Convert.ToDecimal(taRiskRate.UsedMargin);
  321. // memberAccountEntity.FloatPL = taRiskRate.FloatPL == int.MinValue ? 0 : Convert.ToDecimal(taRiskRate.FloatPL);
  322. // memberAccountEntity.NetWorth = taRiskRate.NetWorth == int.MinValue ? 0 : Convert.ToDecimal(taRiskRate.NetWorth);
  323. // memberAccountEntity.Rate = taRiskRate.Rate == int.MinValue ? 0 : Convert.ToDecimal(taRiskRate.Rate);
  324. // memberAccountEntity.CustomerPosFloatPL = taRiskRate.CustomerPosFloatPL == int.MinValue ? 0 : Convert.ToDecimal(taRiskRate.CustomerPosFloatPL);
  325. // memberAccountEntity.SelfPosFloatPL = taRiskRate.SelfPosFloatPL == int.MinValue ? 0 : taRiskRate.SelfPosFloatPL;
  326. // memberAccountEntity.CutPosFloatPL = taRiskRate.CutPosFloatPL == int.MinValue ? 0 : taRiskRate.CutPosFloatPL;
  327. // memberAccountEntity.AvailMargin = taRiskRate.AvailMargin == int.MinValue ? 0 : Convert.ToDecimal(taRiskRate.AvailMargin);
  328. // memberAccountEntity.MemberPositions = GetMemberPositions(rspData);
  329. // memberAccountEntity.Balance = taRiskRate.Balance == int.MinValue ? 0 : Convert.ToDecimal(taRiskRate.Balance);
  330. // memberAccountEntity.AccountStatus = (eAccountStatus) taRiskRate.MemberStatus;//账户状态
  331. // resultEntity.Entity.Add(memberAccountEntity);
  332. //}
  333. //return resultEntity;
  334. }
  335. /// <summary>
  336. /// 自营盘 被动接收 转单头寸
  337. /// </summary>
  338. /// <param name="rspData"></param>
  339. /// <returns></returns>
  340. //private List<MemberPosition> GetMemberPositions(TaRiskRateInfoReport rspData)
  341. //{
  342. // var memberPositions = new List<MemberPosition>();
  343. // //以商品的GoodsID作为键
  344. // Dictionary<int, MemberPosition> memberPositionDic = new Dictionary<int, MemberPosition>();
  345. // if (rspData.TaRiskRateInfo == null || !rspData.TaRiskRateInfo.Any())
  346. // {
  347. // return memberPositions;
  348. // }
  349. // else
  350. // {
  351. // foreach (var taRiskRate in rspData.TaRiskRateInfo)
  352. // {
  353. // //自营盘 会员
  354. // if (taRiskRate.ProprietaryGoodsRisk != null && taRiskRate.ProprietaryGoodsRisk.Any())
  355. // {
  356. // foreach (var proprietaryGoodsRisk in taRiskRate.ProprietaryGoodsRisk)
  357. // {
  358. // if (!memberPositionDic.ContainsKey(proprietaryGoodsRisk.GoodsID))
  359. // {
  360. // memberPositionDic[proprietaryGoodsRisk.GoodsID] = new MemberPosition();
  361. // memberPositionDic[proprietaryGoodsRisk.GoodsID].GoodsCode =proprietaryGoodsRisk.GoodsCode;
  362. // memberPositionDic[proprietaryGoodsRisk.GoodsID].GoodsId = (uint)proprietaryGoodsRisk.GoodsID;
  363. // }
  364. // if ((Direction) proprietaryGoodsRisk.BuyOrSell == Direction.Bid)
  365. // {
  366. // memberPositionDic[proprietaryGoodsRisk.GoodsID].MemberBuyHolderQty += proprietaryGoodsRisk.QTY == int.MinValue ? 0 : Convert.ToDecimal(proprietaryGoodsRisk.QTY);
  367. // memberPositionDic[proprietaryGoodsRisk.GoodsID].MemberBuyFloatPL += proprietaryGoodsRisk.FloatPL == int.MinValue ? 0 : Convert.ToDecimal(proprietaryGoodsRisk.FloatPL);
  368. // }
  369. // else
  370. // {
  371. // memberPositionDic[proprietaryGoodsRisk.GoodsID].MemberSellHolderQty += proprietaryGoodsRisk.QTY == int.MinValue ? 0 : Convert.ToDecimal(proprietaryGoodsRisk.QTY);
  372. // memberPositionDic[proprietaryGoodsRisk.GoodsID].MemberSellFloatPL += proprietaryGoodsRisk.FloatPL == int.MinValue ? 0 : Convert.ToDecimal(proprietaryGoodsRisk.FloatPL);
  373. // }
  374. // }
  375. // }
  376. // //被动接收 投资者转的单
  377. // if (taRiskRate.PassiveGoodsRisk != null && taRiskRate.PassiveGoodsRisk.Any())
  378. // {
  379. // foreach (var passiveGoodsRisk in taRiskRate.PassiveGoodsRisk)
  380. // {
  381. // if (!memberPositionDic.ContainsKey(passiveGoodsRisk.GoodsID))
  382. // {
  383. // memberPositionDic[passiveGoodsRisk.GoodsID] = new MemberPosition();
  384. // memberPositionDic[passiveGoodsRisk.GoodsID].GoodsCode = passiveGoodsRisk.GoodsCode;
  385. // memberPositionDic[passiveGoodsRisk.GoodsID].GoodsId = (uint)passiveGoodsRisk.GoodsID;
  386. // }
  387. // if ((Direction)passiveGoodsRisk.BuyOrSell == Direction.Bid) ////风控已把方向转在会员
  388. // {
  389. // memberPositionDic[passiveGoodsRisk.GoodsID].SellHolderQty = passiveGoodsRisk.QTY == int.MinValue ? 0 : Convert.ToDecimal(passiveGoodsRisk.QTY);
  390. // memberPositionDic[passiveGoodsRisk.GoodsID].SellFloatPL = passiveGoodsRisk.FloatPL == int.MinValue ? 0 : Convert.ToDecimal(passiveGoodsRisk.FloatPL);
  391. // }
  392. // else
  393. // {
  394. // memberPositionDic[passiveGoodsRisk.GoodsID].BuyHolderQty = passiveGoodsRisk.QTY == int.MinValue ? 0 : Convert.ToDecimal(passiveGoodsRisk.QTY);
  395. // memberPositionDic[passiveGoodsRisk.GoodsID].BuyFloatPL = passiveGoodsRisk.FloatPL == int.MinValue ? 0 : Convert.ToDecimal(passiveGoodsRisk.FloatPL);
  396. // }
  397. // }
  398. // }
  399. // //转单头寸
  400. // if (taRiskRate.CutGoodsRisk != null && taRiskRate.CutGoodsRisk.Any())
  401. // {
  402. // foreach (var cutGoodsRisk in taRiskRate.CutGoodsRisk)
  403. // {
  404. // if (!memberPositionDic.ContainsKey(cutGoodsRisk.GoodsID))
  405. // {
  406. // memberPositionDic[cutGoodsRisk.GoodsID] = new MemberPosition();
  407. // memberPositionDic[cutGoodsRisk.GoodsID].GoodsCode = cutGoodsRisk.GoodsCode;
  408. // memberPositionDic[cutGoodsRisk.GoodsID].GoodsId = (uint) cutGoodsRisk.GoodsID;
  409. // }
  410. // if ((Direction) cutGoodsRisk.BuyOrSell == Direction.Bid)
  411. // {
  412. // memberPositionDic[cutGoodsRisk.GoodsID].MemberBuyHolderQty += cutGoodsRisk.QTY ==
  413. // int.MinValue
  414. // ? 0
  415. // : Convert.ToDecimal(cutGoodsRisk.QTY);
  416. // memberPositionDic[cutGoodsRisk.GoodsID].MemberBuyFloatPL += cutGoodsRisk.FloatPL ==
  417. // int.MinValue
  418. // ? 0
  419. // : Convert.ToDecimal(cutGoodsRisk.FloatPL);
  420. // }
  421. // else
  422. // {
  423. // memberPositionDic[cutGoodsRisk.GoodsID].MemberSellHolderQty += cutGoodsRisk.QTY ==
  424. // int.MinValue
  425. // ? 0
  426. // : Convert.ToDecimal(cutGoodsRisk.QTY);
  427. // memberPositionDic[cutGoodsRisk.GoodsID].MemberSellFloatPL += cutGoodsRisk.FloatPL ==
  428. // int.MinValue
  429. // ? 0
  430. // : Convert.ToDecimal(cutGoodsRisk.FloatPL);
  431. // }
  432. // }
  433. // }
  434. // }
  435. // }
  436. // return memberPositionDic.Values.ToList();
  437. //}
  438. public override byte[] ToRequestDealClose(DealCloseOrder closeOrder)
  439. {
  440. return null;
  441. //var taRiskRate = new DealCloseSettingReq()
  442. //{
  443. // AccountId = (uint)closeOrder.AccountId,
  444. // autoId = closeOrder.autoId,
  445. // BuyOrSell = (uint)closeOrder.Direction,
  446. // status = (uint)closeOrder.Status
  447. //};
  448. //return ProtoBufHelper.EntitySerialize(taRiskRate);
  449. }
  450. public override ResponeEntity<DealCloseOrder> ToLocalDealCloseInfo(object obj)
  451. {
  452. return null;
  453. //var buffer = obj as byte[];
  454. //if (buffer == null)
  455. //{
  456. // throw new Exception(System.Reflection.MethodBase.GetCurrentMethod().Name + "进行反序列化对象内容为空!");
  457. //}
  458. //var rspData = ProtoBufHelper.EntityDeSerialize<DealCloseSettingRsp>(buffer);
  459. //return new ResponeEntity<DealCloseOrder>()
  460. //{
  461. // RetCode = rspData.RetCode,
  462. // RetMessage = rspData.RetDesc,
  463. // Entity = new DealCloseOrder()
  464. // {
  465. // autoId = rspData.AccountId,
  466. // },
  467. //};
  468. }
  469. /// <summary>
  470. /// 通道交易下单转换
  471. /// </summary>
  472. /// <param name="entrustOrder"></param>
  473. /// <param name="userID"></param>
  474. /// <returns></returns>
  475. public override byte[] ToChannnelEntrustOrder(NewEntrustOrder entrustOrder, uint userID, ulong clientId)
  476. {
  477. var marketOrder = new ChannelOrderReq()
  478. {
  479. ClientOrderTime = entrustOrder.EntrurstTime.ToString("yyyy-MM-dd HH:mm:ss"), // 客户端委托时间string
  480. ClientType = (uint)eClientType.CLIENTTYPE_PC_TRADE_CLIENT, // 终端类型uint32
  481. AccountID = entrustOrder.AccountId, // 交易账号uint64
  482. GoodsID = entrustOrder.GoodsId, // 商品ID uint32
  483. MarketID = entrustOrder.MarketId, // 市场IDuint32
  484. ValidType = (int)entrustOrder.ValidType, // 有效类型-1当日有效int32
  485. ChannelOperateType = (uint)eChannelOperateType.CHANNELOPERATETYPE_ORDER, // 操作类型:uint32
  486. ChannelOrderSrc = 1, // 单据来源委托来源-1:客户端uint32
  487. HedgeFlag = 0, // 投机套保标志-0:无uint32
  488. OrderPrice = Convert.ToDouble(entrustOrder.EntrustPrice), // 委托价格double
  489. BuyOrSell = (uint)entrustOrder.BuyOrSell, // 买卖方向(买卖-0:买uint32
  490. CloseType = 0, // 平仓方式(平仓方式-0:无uint32
  491. PriceMode = (uint)entrustOrder.PriceMode, // 取价方式-1:市价uint32
  492. TimeValidType = (uint)entrustOrder.ValidType, // 时间有效类型uint32
  493. RelatedID = 0, // 关联单号uint64
  494. ChannelBuildType = (uint)entrustOrder.BuildType,
  495. ClientSerialNo = Guid.NewGuid().ToString(),
  496. LoginID = entrustOrder.LoginID, //NEW uint32 optional 登陆账号
  497. OperatorID = entrustOrder.OperaterId,
  498. OrderQty = Convert.ToUInt64(entrustOrder.EntrustQuantity),
  499. Header = new MessageHead()
  500. {
  501. AccountID = entrustOrder.AccountId,
  502. MarketID = entrustOrder.MarketId,
  503. UserID = userID,
  504. GoodsID = entrustOrder.GoodsId,
  505. UUID = Guid.NewGuid().ToString(),
  506. AccountID2 = clientId,
  507. },
  508. //IP = entrustOrder.Ip,
  509. };
  510. // 资管添加
  511. //if (entrustOrder.SLPoint != 0)
  512. //{
  513. // marketOrder.SLPoint = (uint) entrustOrder.SLPoint;
  514. //}
  515. //if (entrustOrder.SPPoint != 0)
  516. //{
  517. // marketOrder.SPPoint = (uint) entrustOrder.SPPoint;
  518. //}
  519. // 企业风管添加
  520. if (entrustOrder.HedgeFlag == 4)
  521. {
  522. marketOrder.HedgeFlag = entrustOrder.HedgeFlag;
  523. marketOrder.SpotContractID = entrustOrder.SpotContractID;
  524. marketOrder.SaleUserID = entrustOrder.SaleUserID;
  525. marketOrder.BizSubjectID = entrustOrder.BizSubjectID;
  526. }
  527. return ProtoBufHelper.EntitySerialize(marketOrder, false);
  528. }
  529. /// <summary>
  530. /// 通道SPSL下单转换
  531. /// </summary>
  532. /// <param name="entrustOrder">The entrust order.</param>
  533. /// <param name="userID">The user identifier.</param>
  534. /// <returns>System.Byte[][].</returns>
  535. /// <exception cref="System.NotImplementedException"></exception>
  536. public override byte[] ToChannnelSPSLOrderReq(NewEntrustOrder entrustOrder, uint userID)
  537. {
  538. var req = new ChannelSPSLOrderReq()
  539. {
  540. Header = new MessageHead()
  541. {
  542. AccountID = entrustOrder.AccountId,
  543. MarketID = entrustOrder.MarketId,
  544. UserID = userID,
  545. GoodsID = entrustOrder.GoodsId,
  546. UUID = Guid.NewGuid().ToString()
  547. },
  548. ClientType = (uint)eClientType.CLIENTTYPE_PC_TRADE_CLIENT, // 终端类型uint32
  549. LoginID = entrustOrder.LoginID, //NEW uint32 optional 登陆账号
  550. AccountID = entrustOrder.AccountId, // 交易账号uint64
  551. GoodsID = entrustOrder.GoodsId, // 商品ID uint32
  552. MarketID = entrustOrder.MarketId, // 市场IDuint32
  553. ValidType = (int)entrustOrder.ValidType, // 有效类型-1当日有效int32
  554. OperateType = (uint)entrustOrder.SPSLOrderType, //1 - 止盈 2 - 止损 3 - 撤单
  555. OrderSrc = 1, //1:客户端
  556. OrderQty = Convert.ToUInt64(entrustOrder.EntrustQuantity),
  557. BuyOrSell = (uint)entrustOrder.BuyOrSell, // 买卖方向(买卖-0:买uint32
  558. RelatedID = entrustOrder.SPSLOrderType == SPSLOrderType.Cancel? entrustOrder.RelationTicket:0, // 关联单号uint64
  559. SpPrice = entrustOrder.SPSLOrderType == SPSLOrderType.SPOrder || entrustOrder.SPSLOrderType == SPSLOrderType.SPSL ? (double)entrustOrder.SPPrice : 0.0,
  560. SlPrice = entrustOrder.SPSLOrderType == SPSLOrderType.SLOrder || entrustOrder.SPSLOrderType == SPSLOrderType.SPSL ? (double)entrustOrder.SLPrice : 0.0,
  561. PriceType = entrustOrder.ChannelPriceMode == ChannelPriceMode.LimitPrice ? 0 : (uint)entrustOrder.ChannelPriceMode, //1 - 最新价 2 - 对手价 3 - 市价
  562. TriggerType = 1, //1 - 触发价 2 - 追踪价差
  563. };
  564. return ProtoBufHelper.EntitySerialize(req, false);
  565. }
  566. /// <summary>
  567. /// 通道SPSL下单响应转换
  568. /// </summary>
  569. /// <param name="data">The data.</param>
  570. /// <returns>System.Int64.</returns>
  571. /// <exception cref="System.Exception"></exception>
  572. /// <exception cref="System.NotImplementedException"></exception>
  573. public override ResponeEntity<OrderDetail> ToLocalChannnelSPSLRsp(object data)
  574. {
  575. var byteArr = data as byte[];
  576. if (data == null)
  577. {
  578. throw new Exception(System.Reflection.MethodBase.GetCurrentMethod().Name + "进行反序列化对象内容为空!");
  579. }
  580. var itemResponeList = ProtoBufHelper.EntityDeSerialize<ChannelSPSLOrderRsp>(byteArr);
  581. var resultEntity = new ResponeEntity<OrderDetail>()
  582. {
  583. RetCode = itemResponeList.RetCode,
  584. RetMessage = itemResponeList.RetDesc,
  585. Entity = new OrderDetail() { OrderID = (long)itemResponeList.OrderID}
  586. };
  587. return resultEntity;
  588. }
  589. }
  590. }