using System;
using System.Collections.Generic;
using System.Xml;
using CB.Common;
using CB.Entity;
using CB.Entity.Frequency;
using CB.Interface.Infrastructure.Frequency;
using CB.LotteryCatchData.Entity;
using CB.LotteryCatchData.Interface;
namespace CB.LotteryCatchData.Opencai
{
///
/// 湖南幸运赛车数据抓取实现
///
public class KL8_BeiJing : CatchRepository, ICatchDataProvider
{
public override LotteryParamKeys GetLotteryParamKeys(string fileName)
{
return GetLotteryParamKeysDefault(fileName);
}
public override LotteryOpenCode GetLatestOpenCode()
{
return CB.Data.Frequency.KL8BeiJingService.GetLatestOpenCodeForCatch();
}
public override IList CatchData(LotteryConfigInfo config, LotteryParamKeys keys)
{
if (!this.IsCatchData(config, keys))
return null;
XmlDocument doc = new XmlDocument();
try
{
doc.Load(config.DataUrl);
var nodeList = doc.SelectNodes("xml/row");
if (null == nodeList || 0 >= nodeList.Count)
return null;
IList list = new List();
LotteryOpenCode entity = null;
string qi = "";
string[] data;
foreach (XmlNode node in nodeList)
{
qi = node.Attributes["expect"].Value.Trim();
if (0 <= keys.LocalTerm.CompareTo(qi))
continue;
data = node.Attributes["opencode"].Value.Trim().Split(new char[] { ',', '+' });
entity = new LotteryOpenCode()
{
Term = long.Parse(qi)
};
entity.OpenCode = new List();
entity.OpenCode.Add(TypeConverter.StrToInt(data[0]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[1]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[2]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[3]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[4]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[5]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[6]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[7]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[8]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[9]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[10]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[11]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[12]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[13]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[14]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[15]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[16]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[17]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[18]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[19]));
entity.OpenCode.Add(TypeConverter.StrToInt(data[20]));
entity.Addtime = DateTime.Now;
entity.OpenTime = GetRealOpenTime(config.StartTime, config.OpenPeriod, qi, TypeConverter.StrToDateTime(node.Attributes["opentime"].Value.Trim(), entity.Addtime), 8, 2);
list.Add(entity);
}
return list;
}
catch (Exception ex)
{
throw ex;
}
}
public override int SaveData(IList list, ref LotteryParamKeys keys)
{
if (null == list || 0 >= list.Count)
return -1;
int n = 0;
long term = Convert.ToInt64(keys.LocalTerm);
DateTime t = keys.LastOpenTime;
KL8Info_BeiJing entity = null;
foreach (var item in list)
{
entity = new KL8Info_BeiJing()
{
Term = item.Term,
OpenCode1 = item.OpenCode[0],
OpenCode2 = item.OpenCode[1],
OpenCode3 = item.OpenCode[2],
OpenCode4 = item.OpenCode[3],
OpenCode5 = item.OpenCode[4],
OpenCode6 = item.OpenCode[5],
OpenCode7 = item.OpenCode[6],
OpenCode8 = item.OpenCode[7],
OpenCode9 = item.OpenCode[8],
OpenCode10 = item.OpenCode[9],
OpenCode11 = item.OpenCode[10],
OpenCode12 = item.OpenCode[11],
OpenCode13 = item.OpenCode[12],
OpenCode14 = item.OpenCode[13],
OpenCode15 = item.OpenCode[14],
OpenCode16 = item.OpenCode[15],
OpenCode17 = item.OpenCode[16],
OpenCode18 = item.OpenCode[17],
OpenCode19 = item.OpenCode[18],
OpenCode20 = item.OpenCode[19],
OpenCode21 = item.OpenCode[20],
OpenTime = item.OpenTime,
Addtime = item.Addtime
};
if (CB.Data.Frequency.KL8BeiJingService.Save(entity))
{
n++;
if (term < item.Term)
term = item.Term;
if (t < item.OpenTime)
t = item.OpenTime;
}
}
if (0 < n)
{
keys.IsCatch = 1;
keys.LocalTerm = term.ToString();
keys.LastOpenTime = t;
}
return n;
}
protected override DateTime GetRealOpenTime(TimeSpan startTime, int openPeriod, string localTerm, DateTime openTime, int startIndex, int length)
{
return openTime;
}
}
}