/*********************************************************************** * Project: baifenBinfa.Net * * Web: https://baifenBinfa.com * * ProjectName: 百分兵法管理系统 * * Author: * * Email: * * CreateTime: 2020-08-31 0:46:50 * Description: 暂无 ***********************************************************************/ using System; using System.Collections.Generic; using System.Text; using CoreCms.Net.Configuration; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Extensions; namespace CoreCms.Net.Utility.Helper { /// /// 报表帮助类 /// public static class ReportsHelper { //根据时间,返回时间段 public static WebApiCallBack GetDate(string data, int section) { var jm = new WebApiCallBack(); var reportsBackForGetDate = new ReportsBackForGetDate(); if (!string.IsNullOrEmpty(data)) { var dts = data.Split("到"); if (dts.Length == 2) { reportsBackForGetDate.start = dts[0].Trim().ObjectToDate(); reportsBackForGetDate.start = new DateTime(reportsBackForGetDate.start.Year, reportsBackForGetDate.start.Month, reportsBackForGetDate.start.Day, 0, 0, 0); reportsBackForGetDate.end = dts[1].Trim().ObjectToDate(); reportsBackForGetDate.end = new DateTime(reportsBackForGetDate.end.Year, reportsBackForGetDate.end.Month, reportsBackForGetDate.end.Day, 23, 59, 59); reportsBackForGetDate.section = 1; jm.data = reportsBackForGetDate; } else { jm.msg = "时间段格式不正确"; return jm; } } else { jm.msg = GlobalErrorCodeVars.Code10000; return jm; } //切片维度,1是小时,2是天,3是周,4是月,5是季度,6是半年,7是年 if (section > 0) { reportsBackForGetDate.section = section; } //算统计需要的参数 return getTmp(reportsBackForGetDate); } //根据时间节点和时间粒度算x轴个数 public static WebApiCallBack getTmp(ReportsBackForGetDate dateArr) { var jm = new WebApiCallBack(); if (dateArr.end <= dateArr.start) { jm.msg = "开始时间必须小于结束时间"; return jm; } TimeSpan diffDt = dateArr.end - dateArr.start; //两个时间相减 。默认得到的是两个的时间差 switch (dateArr.section) { case 1: //小时 dateArr.section = 60 * 60; dateArr.num = Convert.ToInt32(diffDt.TotalHours); break; case 2: //天 dateArr.section = 60 * 60 * 24; dateArr.num = Convert.ToInt32(diffDt.TotalDays); break; default: jm.msg = "没有此时间粒度"; return jm; } //算x轴数据个数 jm.status = true; jm.data = dateArr; return jm; } public static WebApiCallBack GetXdata(ReportsBackForGetDate dateArr) { var jm = new WebApiCallBack(); //校验,x轴最多1000个 if (dateArr.num > 1000) { jm.msg = GlobalErrorCodeVars.Code13226; return jm; } var xType = ""; switch (dateArr.section) { case 3600: //小时 if (dateArr.num <= 24) { xType = "d日H时"; } else if (dateArr.num <= 720) { xType = "M月d日H时"; } else { xType = "M月d日H时"; } break; case 86400: //天 if (dateArr.num <= 31) { xType = "M月d号"; } else if (dateArr.num <= 365) { xType = "yyyy年M月dd日"; } else { xType = "yyyy年M月dd日"; } break; } if (xType == "") { jm.msg = GlobalErrorCodeVars.Code10000; return jm; } var arr = new List(); if (dateArr.section == 3600) { var dtStart = dateArr.start; for (int i = 0; i < dateArr.num; i++) { arr.Add(dtStart.AddHours(i).ToString(xType)); } } else { var dtStart = dateArr.start; for (int i = 0; i < dateArr.num; i++) { arr.Add(dtStart.AddDays(i).ToString(xType)); } } jm.status = true; jm.data = arr; jm.otherData = dateArr; return jm; } } }