MissRepository.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using System;
  2. using System.Collections.Generic;
  3. using CB.Common;
  4. using CB.Data;
  5. using CB.Entity;
  6. using CB.Interface;
  7. namespace CB.TrendMiss
  8. {
  9. /// <summary>
  10. /// 遗漏走势图计算
  11. /// </summary>
  12. /// <typeparam name="TEntity"></typeparam>
  13. public abstract class MissRepository<TEntity> : IMissItem<TEntity> where TEntity : LotteryOpenCode
  14. {
  15. /// <summary>
  16. /// 遗漏项配置
  17. /// </summary>
  18. protected TrendMissItemInfo _itemConfig;
  19. /// <summary>
  20. /// 遗漏数据
  21. /// </summary>
  22. protected IList<TrendMissDataInfo> _missData;
  23. /// <summary>
  24. /// 是否已执行遗漏操作
  25. /// </summary>
  26. protected bool Completed = false;
  27. /// <summary>
  28. /// 是否第一期数据
  29. /// </summary>
  30. protected bool IsFirst = false;
  31. #region IMissItem接口
  32. public abstract void Init(TrendMissItemInfo itemConfig, IList<TrendMissDataInfo> missData);
  33. public abstract bool SetItemValue(TEntity entity);
  34. public abstract bool SaveData();
  35. public abstract IList<TrendMissDataInfo> GetMissDataList();
  36. #endregion
  37. /// <summary>
  38. /// 默认初始化
  39. /// </summary>
  40. /// <param name="itemConfig"></param>
  41. /// <param name="missData"></param>
  42. protected virtual void DefaultInit(TrendMissItemInfo itemConfig, IList<TrendMissDataInfo> missData)
  43. {
  44. if (null == itemConfig)
  45. return;
  46. this._itemConfig = itemConfig;
  47. this.IsFirst = false;
  48. if (null == missData || 0 >= missData.Count)
  49. {
  50. this._missData = new List<TrendMissDataInfo>();
  51. for (int i = 0; i <= this._itemConfig.ItemCount - 1; i++)
  52. {
  53. this._missData.Add(new TrendMissDataInfo()
  54. {
  55. ChartId = this._itemConfig.ChartId,
  56. ItemValue = this._itemConfig.ItemString[i],
  57. OrderBy = i
  58. });
  59. }
  60. this.IsFirst = true;
  61. return;
  62. }
  63. this._missData = missData;
  64. }
  65. /// <summary>
  66. /// 计算遗漏数据
  67. /// </summary>
  68. /// <param name="term">期数</param>
  69. protected virtual void ComputMissData(long term)
  70. {
  71. for (int i = this._missData.Count - 1; i >= 0; i--)
  72. {
  73. this._missData[i].Term = term;//期数
  74. this._missData[i].Cycle = this._itemConfig.Cycle / TypeConverter.StrToDouble(this._itemConfig.ItemCycle[i], 0);//循环周期
  75. this._missData[i].TimesTheory = TypeConverter.StrToInt(this._itemConfig.ItemCycle[i]) * this._missData[i].RecordCount / this._itemConfig.Cycle;//理论次数
  76. this._missData[i].Probability = 0 >= this._missData[i].RecordCount ? 0 : (double)this._missData[i].Times / this._missData[i].RecordCount;//出现概率
  77. this._missData[i].AppearingProbability = 0 >= this._missData[i].AvgMiss ? 0 : (double)this._missData[i].LocalMiss / this._missData[i].AvgMiss;//欲出几率
  78. this._missData[i].InvestmentValue =
  79. this._missData[i].LocalMiss * (TypeConverter.StrToDouble(this._itemConfig.ItemCycle[i], 0) / this._itemConfig.Cycle);//投资价值
  80. this._missData[i].CoveringProbability = 0 >= (this._missData[i].LastMiss - this._missData[i].LocalMiss) ? 0 :
  81. (this._missData[i].LastMiss - this._missData[i].LocalMiss) * (TypeConverter.StrToDouble(this._itemConfig.ItemCycle[i], 0) / this._itemConfig.Cycle);//回补几率
  82. this._missData[i].ContinuousProbability = 0 == this._missData[i].Times ? 0 : (double)this._missData[i].ContinuousTimes / this._missData[i].Times; //连出概率
  83. this._missData[i].ContinuousLocalProbability = 0 == this._missData[i].Times ? 0
  84. : (0 < this._missData[i].ContinuousTimes ? (double)this._missData[i].ContinuousTimes / this._missData[i].Times * this._missData[i].ContinuousLocalMiss
  85. : (double)this._missData[i].ContinuousTimes / this._missData[i].Times * (this._missData[i].Times - 1));//当前连出几率
  86. }
  87. }
  88. /// <summary>
  89. /// 默认数据保存方式
  90. /// </summary>
  91. /// <returns></returns>
  92. protected virtual bool DefaultSaveData()
  93. {
  94. if (this.Completed)
  95. {
  96. this.Completed = TrendMissDataService.BatchSave(this._missData);
  97. }
  98. return this.Completed;
  99. }
  100. }
  101. }