using System; using System.Collections.Generic; using CB.Common; using CB.Data; using CB.Entity; using CB.Interface; namespace CB.TrendMiss { /// /// 遗漏走势图计算 /// /// public abstract class MissRepository : IMissItem where TEntity : LotteryOpenCode { /// /// 遗漏项配置 /// protected TrendMissItemInfo _itemConfig; /// /// 遗漏数据 /// protected IList _missData; /// /// 是否已执行遗漏操作 /// protected bool Completed = false; /// /// 是否第一期数据 /// protected bool IsFirst = false; #region IMissItem接口 public abstract void Init(TrendMissItemInfo itemConfig, IList missData); public abstract bool SetItemValue(TEntity entity); public abstract bool SaveData(); public abstract IList GetMissDataList(); #endregion /// /// 默认初始化 /// /// /// protected virtual void DefaultInit(TrendMissItemInfo itemConfig, IList missData) { if (null == itemConfig) return; this._itemConfig = itemConfig; this.IsFirst = false; if (null == missData || 0 >= missData.Count) { this._missData = new List(); for (int i = 0; i <= this._itemConfig.ItemCount - 1; i++) { this._missData.Add(new TrendMissDataInfo() { ChartId = this._itemConfig.ChartId, ItemValue = this._itemConfig.ItemString[i], OrderBy = i }); } this.IsFirst = true; return; } this._missData = missData; } /// /// 计算遗漏数据 /// /// 期数 protected virtual void ComputMissData(long term) { for (int i = this._missData.Count - 1; i >= 0; i--) { this._missData[i].Term = term;//期数 this._missData[i].Cycle = this._itemConfig.Cycle / TypeConverter.StrToDouble(this._itemConfig.ItemCycle[i], 0);//循环周期 this._missData[i].TimesTheory = TypeConverter.StrToInt(this._itemConfig.ItemCycle[i]) * this._missData[i].RecordCount / this._itemConfig.Cycle;//理论次数 this._missData[i].Probability = 0 >= this._missData[i].RecordCount ? 0 : (double)this._missData[i].Times / this._missData[i].RecordCount;//出现概率 this._missData[i].AppearingProbability = 0 >= this._missData[i].AvgMiss ? 0 : (double)this._missData[i].LocalMiss / this._missData[i].AvgMiss;//欲出几率 this._missData[i].InvestmentValue = this._missData[i].LocalMiss * (TypeConverter.StrToDouble(this._itemConfig.ItemCycle[i], 0) / this._itemConfig.Cycle);//投资价值 this._missData[i].CoveringProbability = 0 >= (this._missData[i].LastMiss - this._missData[i].LocalMiss) ? 0 : (this._missData[i].LastMiss - this._missData[i].LocalMiss) * (TypeConverter.StrToDouble(this._itemConfig.ItemCycle[i], 0) / this._itemConfig.Cycle);//回补几率 this._missData[i].ContinuousProbability = 0 == this._missData[i].Times ? 0 : (double)this._missData[i].ContinuousTimes / this._missData[i].Times; //连出概率 this._missData[i].ContinuousLocalProbability = 0 == this._missData[i].Times ? 0 : (0 < this._missData[i].ContinuousTimes ? (double)this._missData[i].ContinuousTimes / this._missData[i].Times * this._missData[i].ContinuousLocalMiss : (double)this._missData[i].ContinuousTimes / this._missData[i].Times * (this._missData[i].Times - 1));//当前连出几率 } } /// /// 默认数据保存方式 /// /// protected virtual bool DefaultSaveData() { if (this.Completed) { this.Completed = TrendMissDataService.BatchSave(this._missData); } return this.Completed; } } }