TradeAccount.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. 
  2. using GalaSoft.MvvmLight;
  3. using Muchinfo.MTPClient.Data.Enums;
  4. using Muchinfo.MTPClient.Data.Helper;
  5. using Muchinfo.MTPClient.Resources;
  6. using System.Collections.Generic;
  7. using System.Collections.ObjectModel;
  8. using System.Linq;
  9. namespace Muchinfo.MTPClient.Data.Model.Account
  10. {
  11. /// <summary>
  12. /// 交易帐户类
  13. /// </summary>
  14. public class TradeAccount : ObservableObject
  15. {
  16. #region Fields
  17. private const decimal c_DefautAgreeAmount = 1000000m;
  18. private decimal _balance;
  19. private ObservableCollection<FundsAccount> _fundsAccounts;
  20. private List<MemberPosition> _memberPositions; //会员头寸
  21. //资金账号密码
  22. private string _tradePassword;
  23. #endregion Fields
  24. #region Properties
  25. #region Public Properties
  26. /// <summary>
  27. /// 余额
  28. /// </summary>
  29. public decimal Balance
  30. {
  31. get { return _balance; }
  32. set { Set(() => Balance, ref _balance, value); }
  33. }
  34. /// <summary>
  35. /// md5方式加密后的加密密码
  36. /// </summary>
  37. public string _md5Password;
  38. public string Md5Password
  39. {
  40. get { return _md5Password; }
  41. set
  42. {
  43. Set(() => Md5Password, ref _md5Password, value);
  44. }
  45. }
  46. /// <summary>
  47. /// 风险率
  48. /// </summary>
  49. public string FundsUsageRate
  50. {
  51. get
  52. {
  53. if (this.AccountType != eUserType.USERTYPE_INVESTOR)
  54. {
  55. if (MemberAccountInfo != null)
  56. {
  57. return MemberAccountInfo.Rate.ToString("p2");
  58. }
  59. }
  60. else
  61. {
  62. if (FundsAccounts != null && FundsAccounts.Any() && FundsAccounts[0].CurrentNetWorth > 0)
  63. {
  64. ////暂时使用第一个账户信息
  65. return FundsAccounts[0].RiskRatioDisplay;
  66. }
  67. }
  68. return "0%";
  69. }
  70. }
  71. /// <summary>
  72. /// 交易账号
  73. /// </summary>
  74. public ObservableCollection<FundsAccount> FundsAccounts
  75. {
  76. get
  77. {
  78. return _fundsAccounts;
  79. }
  80. set
  81. {
  82. if (_fundsAccounts != null && _fundsAccounts.Any())
  83. {
  84. _fundsAccounts[0].PropertyChanged -= TradeAccount_PropertyChanged;
  85. }
  86. Set(() => FundsAccounts, ref _fundsAccounts, value);
  87. if (_fundsAccounts != null && _fundsAccounts.Any())
  88. {
  89. _fundsAccounts[0].PropertyChanged += TradeAccount_PropertyChanged;
  90. }
  91. }
  92. }
  93. void TradeAccount_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
  94. {
  95. //throw new System.NotImplementedException();
  96. if (e.PropertyName == "CurrentNetWorth")
  97. {
  98. RaisePropertyChanged(() => FundsUsageRate);
  99. RaisePropertyChanged(() => UsableFunds);
  100. }
  101. }
  102. /// <summary>
  103. /// 会员头寸
  104. /// </summary>
  105. public List<MemberPosition> MemberPositions
  106. {
  107. get
  108. {
  109. return _memberPositions;
  110. }
  111. set
  112. {
  113. Set(() => MemberPositions, ref _memberPositions, value);
  114. RaisePropertyChanged(() => FundsUsageRate);
  115. }
  116. }
  117. /// <summary>
  118. /// 会员账号风险率配置
  119. /// </summary>
  120. public List<RiskRateParam> RiskRateParams { get; set; }
  121. /// <summary>
  122. /// 会员账号风险率配置参数
  123. /// </summary>
  124. public RiskRateParam AccountRiskRate
  125. {
  126. get
  127. {
  128. if (RiskRateParams != null && RiskRateParams.Any())
  129. {
  130. return RiskRateParams[0];
  131. }
  132. return new RiskRateParam();
  133. }
  134. }
  135. /// <summary>
  136. /// 资金账号密码
  137. /// </summary>
  138. public string TradePassword
  139. {
  140. get { return _tradePassword; }
  141. set { _tradePassword = value; }
  142. }
  143. /// <summary>
  144. /// 获取可用资金
  145. /// </summary>
  146. public decimal UsableFunds
  147. {
  148. get
  149. {
  150. if (FundsAccounts != null && FundsAccounts.Any())
  151. { //暂时使用第一个账户信息
  152. return FundsAccounts[0].AvailMargin;
  153. }
  154. return 0m;
  155. }
  156. }
  157. /// <summary>
  158. /// 允许最大持仓金额
  159. /// </summary>
  160. public decimal MaxAgreeAmount
  161. {
  162. get
  163. {
  164. if (FundsAccounts != null && FundsAccounts.Any())
  165. {
  166. ////暂时使用第一个账户信息
  167. return FundsAccounts[0].MaxAgreeAmount;
  168. ////.UsedMargin / FundsAccounts[0].CurrentNetWorth * 100;
  169. }
  170. return c_DefautAgreeAmount;
  171. }
  172. }
  173. private MemberAccountInfo _memberAccountInfo;
  174. /// <summary>
  175. /// 会员账户信息
  176. /// </summary>
  177. public MemberAccountInfo MemberAccountInfo
  178. {
  179. get { return _memberAccountInfo; }
  180. set { Set(() => MemberAccountInfo, ref _memberAccountInfo, value); }
  181. }
  182. /// <summary>
  183. /// 交易所代码
  184. /// </summary>
  185. public uint ExchAreaId { get; set; }
  186. /// <summary>
  187. /// 账户是否已锁定
  188. /// </summary>
  189. public bool AccountIsLock { get; set; }
  190. /// <summary>
  191. /// 内部资金账号
  192. /// </summary>
  193. public string TaAccountCode { get; set; }
  194. /// <summary>
  195. /// 证件类型
  196. /// </summary>
  197. public eCardType CardType { get; set; }
  198. /// <summary>
  199. /// 证件号码
  200. /// </summary>
  201. public string CardNum { get; set; }
  202. /// <summary>
  203. /// 会员证件类型
  204. /// </summary>
  205. public eCardType MemberCardType { get; set; }
  206. /// <summary>
  207. /// 会员证件号码
  208. /// </summary>
  209. public string MemberCardNum { get; set; }
  210. /// <summary>
  211. ///
  212. /// </summary>
  213. public SexType Sex { get; set; }
  214. #endregion Public Properties
  215. #endregion Properties
  216. #region 业务服务属性
  217. /// <summary>
  218. /// 机构名称
  219. /// </summary>
  220. public string AreaName { get; set; }
  221. /// <summary>
  222. /// 会员名称
  223. /// </summary>
  224. public string MemberName { get; set; }
  225. /// <summary>
  226. /// 用户名
  227. /// </summary>
  228. public string CustomerName { get; set; }
  229. /// <summary>
  230. /// 用户状态
  231. /// </summary>
  232. public eAccountStatus AccountStatus { get; set; }
  233. /// <summary>
  234. /// 显示用户状态
  235. /// </summary>
  236. public string AccountStatusDisplay
  237. {
  238. get
  239. {
  240. return AccountStatus.Discription();
  241. }
  242. }
  243. /// <summary>
  244. /// 是否显示上面的资金信息
  245. /// </summary>
  246. public bool IsShowHeaderFundInfo
  247. {
  248. get
  249. {
  250. if (AccountType != eUserType.USERTYPE_INVESTOR)
  251. return false;
  252. if (FundsAccounts != null && FundsAccounts.Count == 1)
  253. return true;
  254. else
  255. return false;
  256. }
  257. }
  258. public bool IsShowHeaderFundInfoEx
  259. {
  260. get
  261. {
  262. if (AccountType == eUserType.USERTYPE_INVESTOR)
  263. return false;
  264. if (FundsAccounts != null && FundsAccounts.Count == 1)
  265. return true;
  266. else
  267. return false;
  268. }
  269. }
  270. /// <summary>
  271. /// 账户类型
  272. /// </summary>
  273. public eUserType AccountType { get; set; }
  274. /// <summary>
  275. /// 所属机构代码
  276. /// </summary>
  277. public string AreaCode { get; set; }
  278. /// <summary>
  279. /// 机构ID
  280. /// </summary>
  281. public uint AreaId { get; set; }
  282. /// <summary>
  283. /// 所属经纪人id
  284. /// </summary>
  285. public uint BrokerAccountId { get; set; }
  286. /// <summary>
  287. /// 风险率类型ID
  288. /// </summary>
  289. public uint RiskRatioId { get; set; }
  290. /// <summary>
  291. /// 风险率计算方法
  292. /// </summary>
  293. public eRiskRateMode RiskRatioCalcMode { get; set; }
  294. /// <summary>
  295. /// 类型名称
  296. /// </summary>
  297. public string RiskRatioName { get; set; }
  298. /// <summary>
  299. /// 服务端系统时间
  300. /// </summary>
  301. public ulong SystemTime { get; set; }
  302. /// <summary>
  303. /// 内容权限组编号
  304. /// </summary>
  305. public int ContRightCode { get; set; }
  306. /// <summary>
  307. /// 用户编号
  308. /// </summary>
  309. public uint CustomerId { get; set; }
  310. /// <summary>
  311. /// 用户ID
  312. /// </summary>
  313. public ulong AccountId { get; set; }
  314. /// <summary>
  315. /// 资金账号ID
  316. /// add by dk
  317. /// </summary>
  318. public ulong FundsAccountId { get; set; }
  319. /// <summary>
  320. /// 当前账号下有权限的资金账户ID列表
  321. /// </summary>
  322. public List<ulong> FundsAccountIds { get; set; }
  323. /// <summary>
  324. /// 会员机构ID
  325. /// </summary>
  326. public uint MemberAreaId { get; set; }
  327. /// <summary>
  328. /// 功能权限组编号
  329. /// </summary>
  330. public int FuncRightCode { get; set; }
  331. /// <summary>
  332. /// 登录账号
  333. /// </summary>
  334. public ulong LoginID { get; set; }
  335. /// <summary>
  336. /// 登录密码修改状态
  337. /// </summary>
  338. public int LoginPasswordModType { get; set; }
  339. /// <summary>
  340. /// 所属会员代码
  341. /// </summary>
  342. public string MemberCode { get; set; }
  343. /// <summary>
  344. /// 对手资金账号
  345. /// </summary>
  346. public string OtherTradeCode { get; set; }
  347. /// <summary>
  348. /// 风险率类型编号
  349. /// </summary>
  350. public uint RiskRateId { get; set; }
  351. /// <summary>
  352. /// 账户
  353. /// </summary>
  354. public string AccountCode { get; set; }
  355. /// <summary>
  356. /// 连接令牌
  357. /// </summary>
  358. public string Token { get; set; }
  359. /// <summary>
  360. /// 通信公钥
  361. /// </summary>
  362. public string PublicKey { get; set; }
  363. /// <summary>
  364. /// 是否已修改密码
  365. /// </summary>
  366. /// <value>The has updated password.</value>
  367. public uint HasUpdatedPwd { get; set; }
  368. /// <summary>
  369. /// 当前密码输入错误次数
  370. /// </summary>
  371. /// <value>The password wrong count.</value>
  372. public uint PwdWrongCnt { get; set; }
  373. /// <summary>
  374. /// 登陆账号锁定密码输入错误次数
  375. /// </summary>
  376. /// <value>The password wrong lock count.</value>
  377. public uint PwdWrongLockCnt { get; set; }
  378. /// <summary>
  379. /// 登陆账号锁定时长(小时)
  380. /// </summary>
  381. /// <value>The login lock hour number.</value>
  382. public uint LoginLockHourNum { get; set; }
  383. /// <summary>
  384. /// 终端系统信息
  385. /// </summary>
  386. public byte[] ClientSystemInfo { get; set; }
  387. /// <summary>
  388. /// 终端ID(登陆服务分配,用于通道交易关联链路)
  389. /// </summary>
  390. public ulong ClientId { get; set; }
  391. #endregion
  392. #region 用户设置
  393. ///// <summary>
  394. ///// 登录系统时间
  395. ///// </summary>
  396. //public DateTime LoginTime { get; set; }
  397. ///// <summary>
  398. ///// 登录系统时间
  399. ///// </summary>
  400. //public bool IsRememberSave { get; set; }
  401. /// <summary>
  402. /// 内容权限类型
  403. /// </summary>
  404. public string ContentRightType { get; set; }
  405. #endregion
  406. #region Methods
  407. #region Public Methods
  408. /// <summary>
  409. /// Returns a <see cref="System.String" /> that represents this instance.
  410. /// </summary>
  411. /// <returns>A <see cref="System.String" /> that represents this instance.</returns>
  412. public override string ToString()
  413. {
  414. return Client_Resource.Domain_AccountH + AccountCode + Client_Resource.Domain_AvailableFunds + UsableFunds + Client_Resource.Domain_FundUseRate + FundsUsageRate;
  415. }
  416. #endregion Public Methods
  417. /// <summary>
  418. /// 更新的风险率
  419. /// </summary>
  420. public void UpdataFundsUsageRate()
  421. {
  422. RaisePropertyChanged(() => FundsUsageRate);
  423. }
  424. private string _accountTitle;
  425. /// <summary>
  426. /// 账号标题
  427. /// </summary>
  428. public string AccountTitle
  429. {
  430. get
  431. {
  432. return this.ToString();
  433. }
  434. }
  435. /// <summary>
  436. /// 当前资金账号信息--用于计算风险率
  437. /// </summary>
  438. /// <value>The current funds account.</value>
  439. public FundsAccount CurrentFundsAccount
  440. {
  441. get {
  442. if (FundsAccounts != null)
  443. {
  444. return FundsAccounts.FirstOrDefault(z => z.AccountId == FundsAccountId);
  445. }
  446. return null;
  447. }
  448. }
  449. #endregion Methods
  450. }
  451. }