/// <summary> /// 预测导出使用 /// </summary> /// <param name="readworkbook"></param> /// <param name="para"></param> /// <param name="list1"></param> /// <param name="list2"></param> /// <returns></returns> public IWorkbook GenerateSheet(IWorkbook readworkbook, QueryParameters para, List <IReportViewModel> list1, List <IReportViewModel> list2) { //获取工作簿 if (readworkbook != null) { ISheet sheet = readworkbook.GetSheetAt(0); //设置日期 SetReportDate(sheet, 1, 6, DateTime.Parse(DateTime.Now.ToShortDateString()), para.ReportType); using (DataSubmittedEntities db = new DataSubmittedEntities()) { if (list1 != null && list1.Count > 0) { RoadRunSitViewModel pInfo = list1.First() as RoadRunSitViewModel; for (int i = 0; i < list1.Count; i++) { RoadRunSitViewModel model = (RoadRunSitViewModel)list1[i]; SetValue(sheet, i + 3, 0, model.CalculTime); //数据日期 SetValue(sheet, i + 3, 1, model.LineSum.ToString("F2")); //总交通量(万辆) SetValue(sheet, i + 3, 2, (double.Parse(model.SumGrow)).ToString("F2")); //同比增幅(%) SetValue(sheet, i + 3, 3, model.LineEnSum.ToString("F2")); //进京交通量(万辆) SetValue(sheet, i + 3, 4, model.LineExSum.ToString("F2")); //出京交通量(万辆) SetValue(sheet, i + 3, 5, model.ExEnPer.ToString("F2")); //出进京比 SetValue(sheet, i + 3, 6, model.SmaCarFeeNum.ToString("F2")); //小型客车交通量(万辆) SetValue(sheet, i + 3, 7, (double.Parse(model.SmaCarCompGrow)).ToString("F2")); //同比增幅(%) SetValue(sheet, i + 3, 8, model.SmaCarFee.ToString("F2")); //小型客车免收通行费(万元) SetValue(sheet, i + 3, 9, model.ChagSumNum.ToString("F2")); //收费车辆(万辆) } } } } return(readworkbook); }
/// <summary> /// 获取和构造数据 /// </summary> /// <param name="para"></param> /// <returns></returns> private List <RoadRunSitViewModel> GetData(QueryParameters para) { RepairData(para);//补数据 List <RoadRunSitViewModel> list; using (DataSubmittedEntities db = new DataSubmittedEntities()) { list = StrWhere(db, para).OrderBy(a => a.CalculTime).Select(a => new RoadRunSitViewModel { CalculTime = ((DateTime)a.CalculTime).Month + "月" + ((DateTime)a.CalculTime).Day + "日", ChagSumNum = Math.Round((double)a.ChagSumNum / 10000, 2), ExEnPer = Math.Round((double)a.ExEnPer, 2), LineEnSum = Math.Round((double)a.LineEnSum / 10000, 2), LineExSum = Math.Round((double)a.LineExSum / 10000, 2), LineSum = Math.Round((double)a.LineSum / 10000, 2), SmaCarCompGrow = a.SmaCarCompGrow.Value == null ? "0.00" : Math.Round(a.SmaCarCompGrow.Value, 2).ToString(), SmaCarFee = Math.Round((decimal)a.SmaCarFee, 2), SmaCarFeeNum = Math.Round((double)a.SmaCarFeeNum / 10000, 2), SumGrow = a.SumGrow.Value == null ? "0.00" : Math.Round(a.SumGrow.Value, 2).ToString(), }).ToList(); //查询后无数据则按照查询时间构造数据 if (list == null || list.Count == 0) { RoadRunSitViewModel model = new RoadRunSitViewModel(); model.CalculTime = ((DateTime)para.StartTime).ToString("M月d日"); model.ChagSumNum = 0.00; model.ExEnPer = 0.00; model.LineEnSum = 0.00; model.LineExSum = 0.00; model.LineSum = 0.00; model.SmaCarCompGrow = "0.00"; model.SmaCarFee = (decimal)0.00; model.SmaCarFeeNum = 0.00; model.SumGrow = "0.00"; list.Add(model); } listExport.Clear(); listExport.AddRange(list); } return(list); }
/// <summary> /// 预测 /// </summary> /// <param name="para"></param> /// <returns></returns> public CustomResult ForecastData(QueryParameters para) { if (listExport != null) { listExport.Clear(); } CustomResult pReturnValue = new CustomResult(); //浮动范围 double pFloating = 1 + para.FloatingRange * 0.01; List <RoadRunSitViewModel> pForeList = new List <RoadRunSitViewModel>(); //预测数据集合 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_AADTSta> pRefInfoList = db.RP_AADTSta.Where(s => s.CalculTime == para.StartTime).ToList(); //如果参考日期数据为0 则返回失败 if (pRefInfoList == null || pRefInfoList.Count == 0) { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.ForecastFaileFaileRefNoData; return(pReturnValue); } //预测数据 RoadRunSitViewModel info = new RoadRunSitViewModel(); //预测数据集合 List <IReportViewModel> plist = new List <IReportViewModel>(); //参考数据 foreach (RP_AADTSta pRefInfo in pRefInfoList) { //出京总交通量(路线) info.LineExSum = Math.Round(pRefInfo.LineExSum == null ? 0 : pRefInfo.LineExSum.Value * pFloating, 2); //进京总交通量(路线) info.LineEnSum = Math.Round(pRefInfo.LineEnSum == null ? 0 : pRefInfo.LineEnSum.Value * pFloating, 2); //总交通量(路线) info.LineSum = info.LineExSum + info.LineEnSum; //小型客车免费通行交通量(合计) info.SmaCarFeeNum = Math.Round(pRefInfo.ExSmaCarFee == null ? 0 : pRefInfo.ExSmaCarFee.Value + pRefInfo.EnSmaCarFee == null ? 0 : pRefInfo.EnSmaCarFee.Value, 2); //小型客车免费金额 info.SmaCarFee = Math.Round(pRefInfo.SmaCarFee == null ? 0 : pRefInfo.SmaCarFee.Value * (decimal)pFloating, 2); //收费车辆(合计) info.ChagSumNum = Math.Round(pRefInfo.ChagSumNum == null ? 0 : pRefInfo.ChagSumNum.Value * pFloating, 2); //数据日期 info.CalculTime = (pRefInfo.CalculTime).Month + "月" + (pRefInfo.CalculTime).Day + "日"; //出进京比“出进京比”=出京交通量/进京交通量,保留两位小数。 if (info.LineEnSum != 0) { info.ExEnPer = Math.Round(info.LineExSum / info.LineEnSum, 2); } //“同比增幅”=(本年数据-去年数据)/去年数据*100%,保留两位小数。 //小型客车交通量同比增幅 info.SmaCarCompGrow = pRefInfo.SmaCarCompGrow == null ? "0.00" : Math.Round(pRefInfo.SmaCarCompGrow.Value, 2).ToString(); //总交通量同比增幅 info.SumGrow = pRefInfo.SumGrow == null ? "0.00" : Math.Round(pRefInfo.SumGrow.Value, 2).ToString(); plist.Add(info); } string path = Export(para, plist); 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); }