using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CB.Entity;
using CB.Data;
using CB.Entity.Frequency;
using CB.Interface;
using CB.Data.Frequency;
using CB.Interface.Infrastructure;
namespace CB.TrendChart.LotteryTrendChart
{
public class JLK3Trend
{
public static int Cid = 70;//Cid用于设置样式值
///
/// 生成走势图,生成当前term数据及以后数据
/// by JNswins 2015-06-10
///
/// 走势图ID
/// 走势图类型
/// 需要生成走势图期数
/// 彩种开奖数据额外查询条件
///
public static Tuple CreateTrendChart(int chartId, TrendChartType chartType, long term, LotterySearchField fields = null)
{
//获取走势图项及配置数据
var trendChartItem = TrendChartItemService.ToListByChartId(chartId, chartType);
if (null == trendChartItem || 0 >= trendChartItem.Count)
return new Tuple(false, string.Format("未找到【ChartId={0}】走势图的项配置数据", chartId));
int count = trendChartItem.Count;
IList> chartItem = new List>(count);
IList cssConfig = new List(count);
foreach (var item in trendChartItem)
{
//实例化项类型
chartItem.Add(TrendChartUtils.GetTrendChartInterface(item.ClassName));
//获取项CSS配置信息
cssConfig.Add(ChartCssConfigService.Get(item.FuntionType, item.ChartCssId));
}
//各项初始化
for (int i = 0; i < count; i++)
{
trendChartItem[i].Cid = Cid;
chartItem[i].Init(cssConfig[i], trendChartItem[i]);
}
//大于等于term开奖数据
IList ListToEnd =K3JiLinService.GetListToEnd(term, fields);
if (null == ListToEnd || 0 >= ListToEnd.Count)
return new Tuple(false, "未找到有效开奖数据");
int j = 0;
TrendChartData entity = null;
var ResultEntity = new TrendChartData
{
ChartId = chartId,
Term = term,
ChartType = chartType,
LocalMiss = new string[count],
LastMiss = new string[count],
AllMaxMiss = new string[count],
AllAvgMiss = new string[count],
AllTimes = new string[count]
};
foreach (var currentData in ListToEnd)
{
//根据参数term期数获取近两期开奖信息TOP 2 [Term]<=term ORDER BY [Term] DESC
IList list = K3JiLinService.ToListForTrend(currentData.Term, fields);
K3Info_JiLin info = null;
info = list[0];
if (2 == list.Count)
{
//取当前期数的上一期的走势图信息及遗漏数据
entity = ResultEntity;
if (0 == j)
entity =JLK3TrendChartDataService.GetTrendChartDataByTerm(chartId, chartType, list[1].Term);
}
bool yes = true;
var sp = new StringBuilder(20000);
sp.Append("");
for (int i = 0; i < count; i++)
{
//初始化遗漏数据(根据上期结果集计算_entity)
chartItem[i].MissDataInit(entity, i);
//计算项值及遗漏计算
yes = yes && chartItem[i].SetItemValue(info);
if (yes)
{
//结果集赋值
ResultEntity.LocalMiss[i] = chartItem[i].GetMissData(MissDataType.LocalMiss);
ResultEntity.LastMiss[i] = chartItem[i].GetMissData(MissDataType.LastMiss);
ResultEntity.AllMaxMiss[i] = chartItem[i].GetMissData(MissDataType.AllMaxMiss);
ResultEntity.AllAvgMiss[i] = chartItem[i].GetMissData(MissDataType.AllAvgMiss);
ResultEntity.AllTimes[i] = chartItem[i].GetMissData(MissDataType.AllTimes);
sp.Append(chartItem[i].GetFomartString("{1} | "));
}
}
sp.Append("
");
if (null != entity)
ResultEntity.RecordCount = entity.RecordCount + 1;
else
ResultEntity.RecordCount = 1;
ResultEntity.Term = currentData.Term;
ResultEntity.HtmlData = sp.ToString();
if (!yes)
{ return new Tuple(false, string.Format("无效开奖数据:数据生成截止期数为【term={0}】", ResultEntity.Term)); }
yes = yes && DatabaseProvider.GetDbProvider().Save(ResultEntity);
if (!yes)
{ return new Tuple(false, string.Format("数据保存出错:数据保存截止期数为【term={0}】", ResultEntity.Term)); }
j++;
}
return new Tuple(true, string.Format("正常生成完毕,截止期数为:Term={0}", ListToEnd[ListToEnd.Count - 1].Term));
}
}
}