/// <summary>
 /// 更新实体信息
 /// </summary>
 /// <param name="sourcelist">数据源列表</param>
 /// <param name="info">实体信息</param>
 /// <param name="statype">统计类型</param>
 /// <param name="dt">数据日期</param>
 /// <param name="ishas">记录是否已存在</param>
 private void UpdateInfo(IEnumerable<DS_DataSource> sourcelist, RP_EnEx info, int statype, DateTime dt, bool ishas)
 {
     //北京段只包含出口收费站
     List<int> outBJStation = StationConfiguration.GetOutBJStaion();
     if (ishas)//已存在,则更新
     {
         info.UpdDate = DateTime.Now;
         info.State = "1";
     }
     else//不存在,添加
     {
         info.Id = Guid.NewGuid();
         info.CrtDate = DateTime.Now;
         info.State = "0";
     }
     //给实体字段赋值
     //0:小型客车,1:其他客车,2:货车,3:绿通
     info.EnSmaCar = sourcelist.Where(s => s.CalcuType == 0).Sum(s => s.OutNum.Value);
     info.EnOthCar = sourcelist.Where(s => s.CalcuType == 1).Sum(s => s.OutNum.Value);
     info.EnTruk = sourcelist.Where(s => s.CalcuType == 2).Sum(s => s.OutNum.Value);
     //泗村店,入境“绿色通道”数据项填写“0”
     info.EnGre = 0;
     info.StaType = statype;
     info.CalcuTime = dt;
     //泗村店不统计出镜,,北京段出境绿通为0,不包含马驹桥东入口
     if (statype == (int)StationConfiguration.StationType.BeiJingDuan)
     {
         info.ExSmaCar = sourcelist.Where(s => outBJStation.Contains(s.StaID.Value) && s.CalcuType == 0).Sum(s => s.InNum.Value);
         info.ExOthCar = sourcelist.Where(s => outBJStation.Contains(s.StaID.Value) && s.CalcuType == 1).Sum(s => s.InNum.Value);
         info.ExTruk = sourcelist.Where(s => outBJStation.Contains(s.StaID.Value) && s.CalcuType == 2).Sum(s => s.InNum.Value);
         info.ExGre = 0;
         info.EnGre = sourcelist.Where(s => s.CalcuType == 3).Sum(s => s.OutNum.Value);
     }
 }
        /// <summary>
        /// 更新或获取报表5,6数据
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="HourPer"></param>
        public void Update(DateTime dt, int HourPer)
        {
            try
            {
                string startTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                SystemLog.GetInstance().Log.Info(string.Format("{0}:开始获取5,6报表数据", startTime));
                using (DataSubmittedEntities db = new DataSubmittedEntities())
                {
                    DateTime pDt = DateTime.Parse(dt.ToShortDateString());
                    //北京段包含出入口收费站
                    List<int> BJStation = StationConfiguration.GetBJStaion();

                    //获取数据//p.VehType == 0 表示合计数据,
                    IEnumerable<DS_DataSource> pCollection = db.DS_DataSource.Where(p =>
                        DbFunctions.TruncateTime(p.CalcuTime) == DbFunctions.TruncateTime(dt)
                        && p.VehType == 0);
                    //判断北京段数据是否已存在,StaType:1表示北京段,33表示泗村店
                    RP_EnEx pBJEnExInfo = null;
                    RP_EnEx pSCDEnExInfo = null;
                    bool pIsHas = false;
                    //北京段数据
                    List<RP_EnEx> pBJList = db.RP_EnEx.Where(p => p.CalcuTime == pDt && p.StaType == (int)StationConfiguration.StationType.BeiJingDuan).ToList();
                    if (pBJList.Count > 0)
                    {
                        pBJEnExInfo = pBJList.FirstOrDefault();
                        //每种状态需要重新赋值,防止公用同一个变量,值不明确
                        pIsHas = true;
                    }
                    else
                    {
                        pBJEnExInfo = new RP_EnEx();
                        pIsHas = false;
                    }
                    //更新北京段实体信息
                    UpdateInfo(pCollection.Where(s => BJStation.Contains(s.StaID.Value)), pBJEnExInfo, (int)StationConfiguration.StationType.BeiJingDuan, pDt, pIsHas);

                    //泗村店数据
                    List<RP_EnEx> pSCDList = db.RP_EnEx.Where(p => p.CalcuTime == pDt && p.StaType == (int)StationConfiguration.StationID.SCD).ToList();
                    if (pSCDList.Count > 0)
                    {
                        pSCDEnExInfo = pSCDList.FirstOrDefault();
                        pIsHas = true;
                    }
                    else
                    {
                        pSCDEnExInfo = new RP_EnEx();
                        pIsHas = false;
                    }
                    //更新泗村店实体信息
                    UpdateInfo(pCollection.Where(s => s.StaID.Value == (int)StationConfiguration.StationID.SCD), pSCDEnExInfo, (int)StationConfiguration.StationID.SCD, pDt, pIsHas);

                    //更新或添加到数据库
                    using (TransactionScope trans = new TransactionScope())
                    {
                        //如果不存在,则添加,否则则更新
                        if (pBJList.Count <= 0)
                            db.RP_EnEx.Add(pBJEnExInfo);
                        if (pSCDList.Count <= 0)
                            db.RP_EnEx.Add(pSCDEnExInfo);
                        db.SaveChanges();
                        trans.Complete();
                    }
                }
                string endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                SystemLog.GetInstance().Log.Info(string.Format("{0}:结束获取5,6报表数据", endTime));
                SystemLog.GetInstance().Log.Info(string.Format("统计5,6报表数据耗时{0}秒", (DateTime.Parse(endTime) - DateTime.Parse(startTime)).TotalSeconds));
                //显示执行该方法的线程ID
                //SystemLog.GetInstance().Log.Info(string.Format("调用5,6Update的线程ID为:{0}", Thread.CurrentThread.ManagedThreadId));
                Thread.Sleep(1000);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 补数据
        /// </summary>
        /// <param name="para"></param>
        private void RepairData(QueryParameters para)
        {
            using (DataSubmittedEntities db = new DataSubmittedEntities())
            {
                using (TransactionScope transaction = new TransactionScope())
                {
                    DateTime dtQuery=new DateTime();
                      //判断传入的时间段是否正确
                    if (para.StartTime != null && DateTime.TryParse(para.StartTime.Value.ToString(), out dtQuery))
                    {
                        DateTime dtime = para.StartTime.Value;

                        //时间小于当前时间
                        if (DateTime.Now > dtime)
                        {
                            bool flag = db.RP_EnEx.Where(a => a.CalcuTime == dtime & a.StaType == para.StationType).Select(a => a.CalcuTime).ToList().Contains(dtime);
                            if (!flag)//补数据
                            {
                                RP_EnEx hday = new RP_EnEx();
                                hday.CalcuTime = dtime;

                                if (SessionManage.GetLoginUser() != null)
                                {
                                    hday.CrtBy = SessionManage.GetLoginUser().UserName;
                                }
                                hday.CrtDate = DateTime.Now;
                                hday.Id = Guid.NewGuid();
                                hday.EnGre = 0;
                                hday.EnOthCar = 0;
                                hday.EnSmaCar = 0;
                                hday.EnTruk = 0;
                                hday.State = "0";
                                hday.StaType = para.StationType;
                                db.RP_EnEx.Add(hday);
                            }
                            else//将数据中有空值的改成0
                            {
                                var hday = db.RP_EnEx.Where(a => a.CalcuTime == dtime & a.StaType == para.StationType).ToList()[0];
                                if (hday.EnGre == null)
                                    hday.EnGre = 0;
                                if (hday.EnOthCar == null)
                                    hday.EnOthCar = 0;
                                if (hday.EnSmaCar == null)
                                    hday.EnSmaCar = 0;
                                if (hday.EnTruk == null)
                                    hday.EnTruk = 0;
                            }
                        }
                        try
                        {
                            db.SaveChanges();
                            transaction.Complete();
                        }
                        catch (Exception ex)
                        {
                            SystemLog.GetInstance().Error(TipInfo.AddFaile, ex);
                        }
                    }
                }
            }
        }