/// <summary> /// 预测数据 /// </summary> /// <param name="para"></param> /// <returns></returns> public CustomResult ForecastData(QueryParameters para) { CustomResult pReturnValue = new CustomResult(); //浮动范围 double pFloating = para.FloatingRange * 0.01; List<RP_Daily> pDailyList = new List<RP_Daily>(); //预测数据集合 List<IReportViewModel> pOutList = new List<IReportViewModel>(); List<IReportViewModel> pInList = new List<IReportViewModel>(); try { using (DataSubmittedEntities db = new DataSubmittedEntities()) { //判断报表浮动百分比配置是否存在 OT_HDayConfig pds = HolidayConfig.GetInstance().GetById(para.ReportType); if (pds == null) { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.ForecastFaileNoConfig; return pReturnValue; } //判断报表预测浮动百分比配置是否正确 if (Math.Abs(para.FloatingRange) > (double)pds.ForeFloat.Value) { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.ErrorInfo + "范围应在负" + pds.ForeFloat.Value + "%-正" + pds.ForeFloat.Value + "%之间"; return pReturnValue; } //获取参考日期符合的数据 List<RP_Daily> pRefDataDailyInfo = db.RP_Daily.Where(s => s.CalcuTime == para.StartTime && s.StaType == para.StationType).ToList(); //如果参考日期数据为0 则返回失败 if (pRefDataDailyInfo.Count == 0) { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.ForecastFaileFaileRefNoData; return pReturnValue; } foreach (RP_Daily info in pRefDataDailyInfo) { DataDailyInfoViewModel pOutInfo = new DataDailyInfoViewModel(); DataDailyInfoViewModel pInInfo = new DataDailyInfoViewModel(); pInInfo.VehNum = (float)Math.Round((double)(info.InNum + info.InNum * pFloating), 0); pOutInfo.VehNum = (float)Math.Round((double)(info.OutNum + info.OutNum * pFloating), 0); pInInfo.VehType = info.VehType.ToString(); pOutInfo.VehType = info.VehType.ToString(); pOutInfo.CarChag = Math.Round((decimal)(info.ChagFee + info.ChagFee * (decimal)pFloating) / 10000, 2); pOutList.Add(pOutInfo); pInList.Add(pInInfo); } string path = Export(para, pOutList, pInList); pReturnValue.ResultKey = (byte)EResult.Succeed; pReturnValue.ResultValue = path; } } catch (Exception e) { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.ForecastFail + e.Message.ToString(); SystemLog.GetInstance().Error(TipInfo.ForecastFail, e); return pReturnValue; } return pReturnValue; }
/// <summary> /// 查询 /// </summary> /// <param name="para"></param> /// <returns></returns> public IReportViewModel GetListByPra(QueryParameters para) { QueryDataDailyInfoViewModel pQueryDataList = new QueryDataDailyInfoViewModel(); using (DataSubmittedEntities db = new DataSubmittedEntities()) { //出口数据集合 List<DataDailyInfoViewModel> pOutlist = db.RP_Daily.Where(s => s.CalcuTime == para.StartTime && s.StaType == para.StationType).ToList().Select(s => new DataDailyInfoViewModel() { CarChag = s.ChagFee, VehNum = (float)s.OutNum,//出口 VehType = s.VehType.ToString() }).ToList(); //入口数据集合 List<DataDailyInfoViewModel> pInlist = db.RP_Daily.Where(s => s.CalcuTime == para.StartTime && s.StaType == para.StationType).ToList().Select(s => new DataDailyInfoViewModel() { CarChag = s.ChagFee, ExEn = "1", VehNum = (float)s.InNum,//入口 VehType = s.VehType.ToString() }).ToList(); //插入数据, if (db.RP_Daily.Count(s => s.CalcuTime == para.StartTime && s.StaType == para.StationType) < 4) { InsertNull(para.StartTime.Value, para.StationType.Value); } //list.AddRange(pOutlist); //list.AddRange(pInlist); //遍历出口和入口四种车型 List<DataDailyInfoViewModel> list = new List<DataDailyInfoViewModel>(); for (int i = 0; i < 4; i++) { string ptemp = i.ToString(); //0小型客车,1其他客车,2货车(不包含绿通),3绿通 //出口 DataDailyInfoViewModel outdailyinfo = new DataDailyInfoViewModel(); outdailyinfo.VehType = i.ToString(); outdailyinfo.ExEn = "0"; outdailyinfo.CarChag = Math.Round(pOutlist.Where(s => s.VehType == ptemp).Sum(s => s.CarChag.Value) / 10000, 2); outdailyinfo.VehNum = pOutlist.Where(s => s.VehType == ptemp).Sum(s => s.VehNum); //入口//入口无收费免征金额 DataDailyInfoViewModel indailyinfo = new DataDailyInfoViewModel(); indailyinfo.VehType = i.ToString(); indailyinfo.ExEn = "1"; indailyinfo.VehNum = pInlist.Where(s => s.VehType == ptemp).Sum(s => s.VehNum); //将出口和入口数据加到查询集合中 list.Add(outdailyinfo); list.Add(indailyinfo); } //按出口和车型升序排序, pQueryDataList.ReportData = list.OrderBy(s => s.ExEn).ThenBy(s => s.VehType).ToList(); foreach (DataDailyInfoViewModel info in pQueryDataList.ReportData) { if (info.VehType == "0") info.VehType = SystemConst.SmallCar; if (info.VehType == "1") info.VehType = SystemConst.OtherCar; if (info.VehType == "2") info.VehType = SystemConst.Truk; if (info.VehType == "3") info.VehType = SystemConst.Green; if (info.ExEn == "0") info.ExEn = SystemConst.Out; if (info.ExEn == "1") info.ExEn = SystemConst.In; } //判断当前统计站类型,数据是否完整 if (GetNoDataList(para).Count() > 0) pQueryDataList.IsFull = 0;//不完整 else pQueryDataList.IsFull = 1;//完整 } return pQueryDataList; }