using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using CP.Cache;
using CP.Common;
using CP.Model;

namespace CP.Business
{
    public class Fchljp62
    {
        /// <summary>
        /// 缓存
        /// </summary>
        static WMCache cache = WMCache.GetCacheService();

        /// <summary>
        /// cache中所有的61开奖信息
        /// </summary>
        /// <returns></returns>
        public static List<Fchljp62Info> GetFchljp62List()
        {
            string key = string.Format(CacheKeys.FCHLJP62_DATALIST);
            List<Fchljp62Info> list = cache.GetObject<List<Fchljp62Info>>(key) as List<Fchljp62Info>;
            if (list == null)
            {
                list = Fchljp62Data.GetFchljp62List();
                cache.AddObject(key, list, (int)CacheTime.Data);
            }
            return list;
        }

        /// <summary>
        /// 取出开奖数据中最后一期的开奖数据
        /// </summary>
        /// <returns></returns>
        public static Fchljp62Info GetEndFchljp62Info(ref List<Fchljp62Info> list)
        {
            Fchljp62Info info = new Fchljp62Info();
            if (list != null && list.Count > 0)
                return list[list.Count - 1];
            return info;
        }

        /// <summary>
        /// 数据筛选
        /// </summary>
        /// <param name="pagesize"></param>
        /// <param name="year"></param>
        /// <param name="sqi"></param>
        /// <param name="eqi"></param>
        /// <param name="week"></param>
        /// <param name="ds"></param>
        /// <returns></returns>
        public static List<Fchljp62Info> GetFchljp62List(ref List<Fchljp62Info> list, int pagesize, int year, int sqi, int eqi, int week = 0, int ds = 0)
        {
            List<Fchljp62Info> rlist = new List<Fchljp62Info>();
            int size = list.Count;
            if (pagesize > 0)
            {
                for (int i = (size - pagesize); i < size; i++)
                {
                    rlist.Add(list[i]);
                }
                return rlist;
            }
            if (year > 0)
            {
                rlist.Clear();
                for (int i = 0; i < size; i++)
                {
                    if (TypeConverter.StrToInt(list[i].qi.ToString().Substring(0, 4), 0) == year)
                        rlist.Add(list[i]);
                }
                return rlist;
            }
            if (week > 0)
            {
                rlist.Clear();
                List<Fchljp62Info> temp = new List<Fchljp62Info>();
                for (int i = 0; i < size; i++)
                {
                    if (list[i].week == week)
                        temp.Add(list[i]);
                }
                for (int i = (temp.Count - 120); i < temp.Count; i++)
                {
                    rlist.Add(temp[i]);
                }
                return rlist;
            }

            if (ds > 0)
            {
                rlist.Clear();
                List<Fchljp62Info> temp = new List<Fchljp62Info>();
                for (int i = 0; i < size; i++)
                {
                    if (ds == 1)
                    {
                        if (list[i].qi % 2 != 0)
                            temp.Add(list[i]);
                    }
                    else if (ds == 2)
                    {
                        if (list[i].qi % 2 == 0)
                            temp.Add(list[i]);
                    }
                }
                for (int i = (temp.Count - 120); i < temp.Count; i++)
                {
                    rlist.Add(temp[i]);
                }
                return rlist;
            }
            if (sqi > 0 && eqi > 0)
            {
                rlist.Clear();
                int srank = GetFchljp62Info(ref list,sqi).rank;
                int erank = GetFchljp62Info(ref list,eqi).rank;
                if (erank != 0 && srank != 0 && erank > srank)
                {
                    for (int i = srank - 1; i < erank && i < size; i++)
                    {
                        rlist.Add(list[i]);
                    }
                }
                return rlist;
            }

            if (pagesize == 0 && year == 0 && sqi == 0 && eqi == 0 && week == 0 && ds == 0)
                return list;

            return rlist;
        }

        /// <summary>
        /// 遗漏上用到的黑龙江6+1数据..
        /// </summary>
        /// <param name="eqi"></param>
        /// <returns></returns>
        public static List<Fchljp62Info> GetMissFchljp62List(ref List<Fchljp62Info> list, int eqi)
        {
            List<Fchljp62Info> rlist = new List<Fchljp62Info>();

            if (eqi > 0)
            {
                int size = list.Count;
                int erank = GetFchljp62Info(ref list,eqi).rank;
                if (erank > 0)
                {
                    for (int i = 0; i < erank && i < size; i++)
                    {
                        rlist.Add(list[i]);
                    }
                }
                else
                {
                    for (int i = 0; i < size; i++)
                    {
                        rlist.Add(list[i]);
                    }
                }
            }
            else
            {
                rlist = list;
            }

            return rlist;
        }

        /// <summary>
        /// 根据期数获取上一期的数据...
        /// </summary>
        /// <param name="qi"></param>
        /// <returns></returns>
        public static Fchljp62Info GetFchljp62Info(ref List<Fchljp62Info> list, int qi)
        {
            Fchljp62Info info = new Fchljp62Info();
            int size = list.Count;
            for (int i = 0; i < size; i++)
            {
                if (list[i].qi == qi)
                {
                    info = list[i];
                    break;
                }
            }
            return info;
        }

        /// <summary>
        /// 根据排名取上一期的数据
        /// </summary>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastQiFchljp62Info(ref List<Fchljp62Info> list, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();
            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (list[i].rank == rank - 1)
                {
                    info = list[i];
                    return info;
                }
            }
            return info;
        }

        /// <summary>
        /// 根据排名取下一期的数据
        /// </summary>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetNextQiFchljp62Info(ref List<Fchljp62Info> list, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();
            int size = list.Count;
            for (int i = rank - 1; i < list.Count; i++)
            {
                if (list[i].rank == rank + 1)
                {
                    info = list[i];
                    return info;
                }
            }
            return info;
        }

        #region 条件查询上一次出来时的数据

        /// <summary>
        /// 某个位号码上一次的数据..
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastFchljp62Info(ref List<Fchljp62Info> list, int val, int rank, int type)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (type == 0 && list[i].n1 == val)
                {
                    info = list[i];
                    return info;
                }

                if (type == 1 && list[i].n2 == val)
                {
                    info = list[i];
                    return info;
                }
                if (type == 2 && list[i].n3 == val)
                {
                    info = list[i];
                    return info;
                }
                if (type == 3 && list[i].n4 == val)
                {
                    info = list[i];
                    return info;
                }
                if (type == 4 && list[i].n5 == val)
                {
                    info = list[i];
                    return info;
                }
                if (type == 5 && list[i].n6 == val)
                {
                    info = list[i];
                    return info;
                }
                if (type == 6 && list[i].n7 == val)
                {
                    info = list[i];
                    return info;
                }

                List<int> kjh = new List<int>() { list[i].n1, list[i].n2, list[i].n3, list[i].n4, list[i].n5, list[i].n6, list[i].n7 };

                //组选分布时
                if (type == 7 && kjh.Contains(val))
                {
                    info = list[i];
                    return info;
                }


            }
            return info;
        }

        /// <summary>
        /// 上一次和值奇偶形态的数据
        /// val==0偶
        /// val=1奇
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHzJoFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                //偶
                if (val == 0 && list[i].hz % 2 == 0)
                {
                    info = list[i];
                    return info;
                }
                //奇
                if (val == 1 && list[i].hz % 2 != 0)
                {
                    info = list[i];
                    return info;
                }
            }
            return info;
        }

        /// <summary>
        /// 上一次和值大小的数据
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHzDxFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (ZstUtils.GetQxcHzDx(list[i].hz) == val)
                    return list[i];
            }
            return info;
        }

        /// <summary>
        /// 上一次和尾的数据
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHwFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (ZstUtils.GetHw(list[i].hz) == val)
                {
                    info = list[i];
                    return info;
                }
            }
            return info;
        }

        /// <summary>
        /// 和尾大小
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHwDxFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                int hw = ZstUtils.GetHw(list[i].hz);
                if (ZstUtils.GetDx(hw) == val)
                {
                    info = list[i];
                    return info;
                }
            }

            return info;
        }

        /// <summary>
        /// 和尾奇偶
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHwJoFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                int hw = ZstUtils.GetHw(list[i].hz);
                if (ZstUtils.GetJo(hw) == val)
                {
                    info = list[i];
                    return info;
                }
            }

            return info;
        }

        /// <summary>
        /// 和尾质合
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHwZhFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                int hw = ZstUtils.GetHw(list[i].hz);
                if (ZstUtils.GetZh(hw) == val)
                {
                    info = list[i];
                    return info;
                }
            }

            return info;
        }

        /// <summary>
        /// 和值质合
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHzZhFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (ZstUtils.GetZh(list[i].hz) == val)
                {
                    info = list[i];
                    return info;
                }
            }

            return info;
        }

        /// <summary>
        /// 上一次和尾012路的情况
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHw012Fchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                int hw = ZstUtils.GetHw(list[i].hz);
                if (ZstUtils.Get012(hw) == val)
                {
                    info = list[i];
                    return info;
                }
            }

            return info;
        }

        /// <summary>
        /// 上一次和值012路的情况
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHz012Fchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (ZstUtils.Get012(list[i].hz) == val)
                {
                    info = list[i];
                    return info;
                }
            }

            return info;
        }

        /// <summary>
        /// 上一次跨度=n的数据
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastKdFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (list[i].kd == val)
                {
                    info = list[i];
                    return info;
                }
            }
            return info;
        }

        /// <summary>
        /// 跨度大小
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastKdDxFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (ZstUtils.GetDx(list[i].kd) == val)
                {
                    info = list[i];
                    return info;
                }
            }

            return info;
        }

        /// <summary>
        /// 跨度奇偶
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastKdJoFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (ZstUtils.GetJo(list[i].kd) == val)
                {
                    info = list[i];
                    return info;
                }
            }

            return info;
        }

        /// <summary>
        /// 跨度质合
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastKdZhFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (ZstUtils.GetZh(list[i].kd) == val)
                {
                    info = list[i];
                    return info;
                }
            }

            return info;
        }

        /// <summary>
        /// 上一次跨度012路的情况
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastKd012Fchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (ZstUtils.Get012(list[i].kd) == val)
                {
                    info = list[i];
                    return info;
                }
            }

            return info;
        }

        /// <summary>
        /// 上一次跨度振幅的数据
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastKdZfFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (i > 0)
                {
                    if (Math.Abs(list[i].kd - list[i - 1].kd) == val)
                    {
                        info = list[i];
                        return info;
                    }
                }
            }

            return info;
        }

        /// <summary>
        /// 上一次和值的数据
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHzFchljp62Info(ref List<Fchljp62Info> list, int val, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (val < 21 && list[i].hz < 21)
                {
                    info = list[i];
                    return info;
                }
                if (val > 38 && list[i].hz > 38)
                {
                    info = list[i];
                    return info;
                }
                if (list[i].hz == val)
                {
                    info = list[i];
                    return info;
                }
            }
            return info;

        }

        /// <summary>
        /// 上一次某位号码重号的数据
        /// </summary>
        /// <returns></returns>
        public static Fchljp62Info GetLastNChFchljp62Info(ref List<Fchljp62Info> list, int rank, int type)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (type == 0)
                {
                    if (i > 0)
                    {
                        if ((list[i].n1 - list[i - 1].n1) == 0)
                            return list[i];
                    }
                }
                if (type == 1)
                {
                    if (i > 0)
                    {
                        if ((list[i].n2 - list[i - 1].n2) == 0)
                            return list[i];
                    }

                }
                if (type == 2)
                {
                    if (i > 0)
                    {
                        if ((list[i].n3 - list[i - 1].n3) == 0)
                            return list[i];
                    }
                }
                if (type == 3)
                {
                    if (i > 0)
                    {
                        if ((list[i].n4 - list[i - 1].n4) == 0)
                            return list[i];
                    }
                }
                if (type == 4)
                {
                    if (i > 0)
                    {
                        if ((list[i].n5 - list[i - 1].n5) == 0)
                            return list[i];
                    }
                }
                if (type == 5)
                {
                    if (i > 0)
                    {
                        if ((list[i].n6 - list[i - 1].n6) == 0)
                            return list[i];
                    }
                }
                if (type == 6)
                {
                    if (i > 0)
                    {
                        if ((list[i].n7 - list[i - 1].n7) == 0)
                            return list[i];
                    }
                }
            }

            return info;
        }

        /// <summary>
        /// 非重号的数据
        /// </summary>
        /// <param name="rank"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastNNotChFchljp62Info(ref List<Fchljp62Info> list, int rank, int type)
        {
            Fchljp62Info info = new Fchljp62Info();

            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (type == 0)
                {
                    if (i > 0)
                    {
                        if ((list[i].n1 - list[i - 1].n1) != 0)
                            return list[i];
                    }
                }
                if (type == 1)
                {
                    if (i > 0)
                    {
                        if ((list[i].n2 - list[i - 1].n2) != 0)
                            return list[i];
                    }

                }
                if (type == 2)
                {
                    if (i > 0)
                    {
                        if ((list[i].n3 - list[i - 1].n3) != 0)
                            return list[i];
                    }
                }
                if (type == 3)
                {
                    if (i > 0)
                    {
                        if ((list[i].n4 - list[i - 1].n4) != 0)
                            return list[i];
                    }
                }
                if (type == 4)
                {
                    if (i > 0)
                    {
                        if ((list[i].n5 - list[i - 1].n5) != 0)
                            return list[i];
                    }
                }
                if (type == 5)
                {
                    if (i > 0)
                    {
                        if ((list[i].n6 - list[i - 1].n6) != 0)
                            return list[i];
                    }
                }
                if (type == 6)
                {
                    if (i > 0)
                    {
                        if ((list[i].n7 - list[i - 1].n7) != 0)
                            return list[i];
                    }
                }
            }

            return info;
        }

        #region 上一次某个号码的大小情况
        /// <summary>
        /// 上一次某个号码大小的情况
        /// </summary>
        /// <param name="dx"></param>
        /// <param name="rank"></param>
        /// <param name="site"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastNdxInfo(ref List<Fchljp62Info> list, int dx, int rank, int site)
        {
            Fchljp62Info info = new Fchljp62Info();
            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (site == 0)
                {
                    if (ZstUtils.GetDx(list[i].n1) == dx)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 1)
                {
                    if (ZstUtils.GetDx(list[i].n2) == dx)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 2)
                {
                    if (ZstUtils.GetDx(list[i].n3) == dx)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 3)
                {
                    if (ZstUtils.GetDx(list[i].n4) == dx)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 5)
                {
                    if (ZstUtils.GetDx(list[i].n6) == dx)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 6)
                {
                    if (ZstUtils.GetDx(list[i].n7) == dx)
                    {
                        info = list[i];
                        return info;
                    }
                }
            }
            return info;

        }
        #endregion

        #region 奇偶形态的上一次数据

        /// <summary>
        /// 开奖号某位上的上一次奇偶数据..
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <param name="site"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastNjoInfo(ref List<Fchljp62Info> list, int jo, int rank, int site)
        {
            Fchljp62Info info = new Fchljp62Info();
            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (site == 0)
                {
                    if (ZstUtils.GetJo(list[i].n1) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 1)
                {
                    if (ZstUtils.GetJo(list[i].n2) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 2)
                {
                    if (ZstUtils.GetJo(list[i].n3) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 3)
                {
                    if (ZstUtils.GetJo(list[i].n4) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 4)
                {
                    if (ZstUtils.GetJo(list[i].n5) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 5)
                {
                    if (ZstUtils.GetJo(list[i].n6) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 6)
                {
                    if (ZstUtils.GetJo(list[i].n7) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }

            }
            return info;

        }
        #endregion

        #region 质号形态的上一次数据

        /// <summary>
        /// 开奖号某位上的上一次质合数据..
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <param name="site"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastNzhInfo(ref List<Fchljp62Info> list, int jo, int rank, int site)
        {
            Fchljp62Info info = new Fchljp62Info();
            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (site == 0)
                {
                    if (ZstUtils.GetZh(list[i].n1) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 1)
                {
                    if (ZstUtils.GetZh(list[i].n2) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 2)
                {
                    if (ZstUtils.GetZh(list[i].n3) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 3)
                {
                    if (ZstUtils.GetZh(list[i].n4) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 4)
                {
                    if (ZstUtils.GetZh(list[i].n5) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 5)
                {
                    if (ZstUtils.GetZh(list[i].n6) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 6)
                {
                    if (ZstUtils.GetZh(list[i].n7) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
            }
            return info;

        }

        #endregion

        #region 012路形态的上一次数据

        /// <summary>
        /// 开奖号某位上的上一次012路数据..
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <param name="site"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastN012Info(ref List<Fchljp62Info> list, int jo, int rank, int site)
        {
            Fchljp62Info info = new Fchljp62Info();
            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (site == 0)
                {
                    if (ZstUtils.Get012(list[i].n1) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 1)
                {
                    if (ZstUtils.Get012(list[i].n2) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 2)
                {
                    if (ZstUtils.Get012(list[i].n3) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 3)
                {
                    if (ZstUtils.Get012(list[i].n4) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 4)
                {
                    if (ZstUtils.Get012(list[i].n5) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 5)
                {
                    if (ZstUtils.Get012(list[i].n6) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
                if (site == 6)
                {
                    if (ZstUtils.Get012(list[i].n7) == jo)
                    {
                        info = list[i];
                        return info;
                    }
                }
            }
            return info;

        }

        #endregion

        #region 上一次某个号码振幅的数据
        /// <summary>
        /// 上一次某个号码振幅的数据
        /// </summary>
        /// <param name="zf"></param>
        /// <param name="rank"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastNZfInfo(ref List<Fchljp62Info> list, int zf, int rank, int type)
        {
            Fchljp62Info info = new Fchljp62Info();
            int size = list.Count;
            for (int i = rank - 2; i >= 0; i--)
            {
                if (i > 0)
                {
                    if (type == 0)
                    {
                        if (Math.Abs(list[i].n1 - list[i - 1].n1) == zf)
                        {
                            info = list[i];
                            return info;
                        }
                    }
                    if (type == 1)
                    {
                        if (Math.Abs(list[i].n2 - list[i - 1].n2) == zf)
                        {
                            info = list[i];
                            return info;
                        }
                    }
                    if (type == 2)
                    {
                        if (Math.Abs(list[i].n3 - list[i - 1].n3) == zf)
                        {
                            info = list[i];
                            return info;
                        }
                    }
                    if (type == 3)
                    {
                        if (Math.Abs(list[i].n4 - list[i - 1].n4) == zf)
                        {
                            info = list[i];
                            return info;
                        }
                    }
                    if (type == 4)
                    {
                        if (Math.Abs(list[i].n5 - list[i - 1].n5) == zf)
                        {
                            info = list[i];
                            return info;
                        }
                    }
                    if (type == 5)
                    {
                        if (Math.Abs(list[i].n6 - list[i - 1].n6) == zf)
                        {
                            info = list[i];
                            return info;
                        }
                    }
                    if (type == 6)
                    {
                        if (Math.Abs(list[i].n7 - list[i - 1].n7) == zf)
                        {
                            info = list[i];
                            return info;
                        }
                    }

                }
            }
            return info;
        }
        #endregion

        #endregion

        #region 冷热号
        /// <summary>
        /// 百十个位上的某个号码最近size期是否有出现过.
        /// 出现过为热,否则为冷号
        /// </summary>
        /// <param name="val"></param>
        /// <param name="site"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public static bool GetFchljp62HmLrInfo(ref List<Fchljp62Info> list, int val, int type, int size, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();
            info = GetLastFchljp62Info(ref list,val, rank, type);
            if ((rank - info.rank) <= size)
                return true;


            return false;
        }

        /// <summary>
        /// 上一次某位号码是冷/热号的情况..
        /// </summary>
        /// <param name="type"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetFchljp62LastHmHrInfo(ref List<Fchljp62Info> list, int type, int size, int rank, bool iscool)
        {
            Fchljp62Info info = new Fchljp62Info();

            if (list != null && list.Count > 0)
            {
                for (int i = rank - 2; i >= 0; i--)
                {
                    if (iscool)
                    {
                        if (type == 0)
                        {
                            if (!GetFchljp62HmLrInfo(ref list,list[i].n1, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 1)
                        {
                            if (!GetFchljp62HmLrInfo(ref list,list[i].n2, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 2)
                        {
                            if (!GetFchljp62HmLrInfo(ref list,list[i].n3, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 3)
                        {
                            if (!GetFchljp62HmLrInfo(ref list,list[i].n4, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 4)
                        {
                            if (!GetFchljp62HmLrInfo(ref list,list[i].n5, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 5)
                        {
                            if (!GetFchljp62HmLrInfo(ref list,list[i].n6, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 6)
                        {
                            if (!GetFchljp62HmLrInfo(ref list,list[i].n7, type, size, list[i].rank))
                                return list[i];
                        }

                    }
                    if (!iscool)
                    {
                        if (type == 0)
                        {
                            if (GetFchljp62HmLrInfo(ref list,list[i].n1, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 1)
                        {
                            if (GetFchljp62HmLrInfo(ref list,list[i].n2, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 2)
                        {
                            if (GetFchljp62HmLrInfo(ref list,list[i].n3, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 3)
                        {
                            if (GetFchljp62HmLrInfo(ref list,list[i].n4, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 4)
                        {
                            if (GetFchljp62HmLrInfo(ref list,list[i].n5, type, size, list[i].rank))
                                return list[i];
                        }
                        if (type == 5)
                        {
                            if (GetFchljp62HmLrInfo(ref list,list[i].n6, type, size, list[i].rank))
                                return list[i];
                        }

                        if (type == 6)
                        {
                            if (GetFchljp62HmLrInfo(ref list,list[i].n7, type, size, list[i].rank))
                                return list[i];
                        }
                    }

                }
            }
            return info;
        }

        #endregion

        #region 最近n期形态=x的数据列表

        /// <summary>
        /// 和尾
        /// </summary>
        /// <returns></returns>
        public static List<Fchljp62Info> GetFcQlcListByHw(ref List<Fchljp62Info> list, int val)
        {
            List<Fchljp62Info> rlist = new List<Fchljp62Info>();
            if (list != null && list.Count > 0)
            {
                int size = list.Count;
                for (int i = 0; i < size; i++)
                {
                    if (ZstUtils.GetHw(list[i].hz) == val)
                        rlist.Add(list[i]);
                }
            }
            return rlist;
        }

        /// <summary>
        /// 所有跨度..
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        public static List<Fchljp62Info> GetFcQlcListByKd(ref List<Fchljp62Info> list, int val)
        {
            List<Fchljp62Info> rlist = new List<Fchljp62Info>();
            if (list != null && list.Count > 0)
            {
                int size = list.Count;
                for (int i = 0; i < size; i++)
                {
                    if (list[i].kd == val)
                        rlist.Add(list[i]);
                }
            }
            return rlist;
        }

        /// <summary>
        /// 所有基本号中包括val的数据
        /// </summary>
        /// <param name="red"></param>
        /// <returns></returns>
        public static List<Fchljp62Info> GetFcQlcListByRed(ref List<Fchljp62Info> list, int red)
        {
            List<Fchljp62Info> rlist = new List<Fchljp62Info>();
            if (list != null && list.Count > 0)
            {
                int size = list.Count;
                for (int i = 0; i < size; i++)
                {
                    List<int> kjh = new List<int>() { list[i].n1, list[i].n2, list[i].n3, list[i].n4, list[i].n5, list[i].n6, list[i].n7 };
                    if (kjh.Contains(red))
                        rlist.Add(list[i]);
                }
            }
            return rlist;
        }


        #endregion


        #region 开奖公告相关方法

        /// <summary>
        /// 大乐透最近30期开奖数据,完整开奖信息,有缓存
        /// </summary>
        /// <returns></returns>
        public static List<Fchljp62LongInfo> GetFchljp62ListTop30()
        {
            string key = string.Format(CacheKeys.FCHLJP62_KJH_DATA);
            List<Fchljp62LongInfo> list = cache.GetObject<List<Fchljp62LongInfo>>(key) as List<Fchljp62LongInfo>;
            if (list == null)
            {
                list = Fchljp62Data.GetFchljp62Top30();
                cache.AddObject(key, list, (int)CacheTime.Kjh);
            }
            return list;
        }

        /// <summary>
        /// 获取最新一期开奖信息,完整开奖信息,有缓存
        /// </summary>
        /// <returns></returns>
        public static Fchljp62LongInfo GetFchljp62InfoTop1(ref List<Fchljp62LongInfo> list)
        {
            Fchljp62LongInfo info = new Fchljp62LongInfo();
            if (list.Count > 0)
            {
                info = list[0];
            }
            return info;
        }

        /// <summary>
        /// 根据期数返回某期完整开奖信息,无缓存
        /// </summary>
        /// <param name="qi"></param>
        /// <returns></returns>
        public static Fchljp62LongInfo GetFchljp62InfoByqi(int qi)
        {
            return Fchljp62Data.GetFchljp62InfoByQi(qi);
        }

        /// <summary>
        /// 返回某年对应的期数列表,有缓存
        /// </summary>
        /// <param name="year"></param>
        /// <returns></returns>
        public static List<int> GetFchljp62QiListByYear(int year)
        {
            string key = string.Format(CacheKeys.FCHLJP62_KJH_DATA + "/qilistbyyear/{0}", year);
            List<int> list = cache.GetObject<List<int>>(key) as List<int>;
            if (list == null)
            {
                list = Fchljp62Data.GetFchljp62QiListByYear(year);
                cache.AddObject(key, list, (int)CacheTime.System);
            }
            return list;
        }


        #endregion

        /// <summary>
        /// 上一次和值val的数据
        /// </summary>
        /// <param name="val"></param>
        /// <param name="rank"></param>
        /// <returns></returns>
        public static Fchljp62Info GetLastHzFchljp62Info(ref List<Fchljp62Info> list, int shz, int ehz, int rank)
        {
            Fchljp62Info info = new Fchljp62Info();
            if (list != null && list.Count > 0)
            {
                for (int i = rank - 2; i >= 0; i--)
                {
                    if (list[i].hz >= shz && list[i].hz <= ehz)
                    {
                        info = list[i];
                        return info;
                    }
                }
            }
            return info;
        }



    }
}