У меня есть веб-портал, анализирующий API, на веб-URL, где он проходит через JSON.
Эти данные настраиваются с использованием диаграмм, и в настоящее время мы используем flot.js
Код для hourlyData уже существует и подключается к диаграмме json.
Я пытаюсь воссоздать это для Ежемесячно и Ежегодно.
Текущий код для hourlyData выглядит следующим образом:
List<dynamic> hourlyData = new List<dynamic>();
DateTime hourIterator = StartDate.Value;
while (hourIterator.Hour <= ddvm.CurrentHour)
{
if (ddvm.HourlyPaymentTotal != null && ddvm.HourlyPaymentTotal.Count() > 0 )
{
HourlyPaymentTotalModel hour = ddvm.HourlyPaymentTotal.FirstOrDefault(hpt => hpt.DateTimeStamp == hourIterator);
if (hour == null) { hour = new HourlyPaymentTotalModel() { DateTimeStamp = hourIterator }; };
hourlyData.Add(new List<dynamic> {hourIterator.Hour,
hour.Amount,
new { tooltip = String.Format("{0} : {1}", hour.Count, hour.Amount.ToString("C")) } });
}
hourIterator = hourIterator.AddHours(1);
}
ddvm.GraphData.LineChart_HourlyTotal.Add(new
{
data = hourlyData,
color = "#A1345E",
label = "Total Amount Paid"
});
Как я могу воссоздать hourlyData в monthData и yeardData?
Изменить:
public class HourlyPaymentTotalModel : ViewModelBase
{
public int Hour
{
get { return DateTimeStamp.Hour; }
set { DateTimeStamp = new DateTime(1, 1, 1, value, 0, 0); }
}
public string FormattedHour
{
get { return DateTimeStamp.ToShortTimeString().Replace(":00 ", ""); }
set { DateTimeStamp = DateTime.Parse(value); }
}
public DateTime DateTimeStamp { get; set; }
public decimal Amount { get; set; }
public int Count { get; set; }
}
}
Это из решения API:
public IQueryable<PaymentSummary> GetHourlyPaymentTotals(DateTime startDate, DateTime endDate, string PaymentProcessor = null, string merchantID=null)
{
transactionRepository = GetTransactionRepository(PaymentProcessor);
IQueryable<IPayment> allPayments = transactionRepository.GetAllPayments(startDate, endDate, merchantID);
var retVal = from ap in allPayments
group ap by new
{
PaymentDateYear = ap.PaymentDate.Value.Year,
PaymentDateMonth = ap.PaymentDate.Value.Month,
PaymentDateDay = ap.PaymentDate.Value.Day,
PaymentDateHour = ap.PaymentDate.Value.Hour
}
into grp_ap
select (new
{
PaymentDateString = grp_ap.Key.PaymentDateMonth.ToString() + "/" + grp_ap.Key.PaymentDateDay.ToString() + "/" + grp_ap.Key.PaymentDateYear.ToString() + " " + grp_ap.Key.PaymentDateHour + ":00",
Amount = grp_ap.Sum(grp => grp.Amount),
Count = grp_ap.Count()
});
return (IQueryable<PaymentSummary>)retVal.ToList().Select(p => new PaymentSummary()
{
PaymentDate = (DateTime?)DateTime.Parse(p.PaymentDateString),
Amount = p.Amount,
Count = p.Count
}).ToList().AsQueryable();
}
Обновление: я создал больше моделей на основе решения, предложенного Майрадж Ахмад. Это использует модель dailyData.
Я все еще не уверен, почему <canvas>
показывает пробел в моих полях диаграммы.
Вероятно, это ошибка с данными или параметрами flot.js, сделанными для указанных диаграмм.
var area_chart_payment_by_day_options = {
series: {
lines: {
show: true,
fill: .5
},
points: { show: true }
},
grid: {
borderWidth: 0,
hoverable: true
},
tooltip: true,
tooltipOpts: {
content: "%x : $ %y"
},
xaxis: {
//mode: "categories",
tickDecimals: 0,
min:1,
max:31
},
yaxis: {
tickFormatter: function (y) { return "$ " + y + " "; },
tickDecimals:0
}
}
функция данных
$(function () {
var data = [];
@Html.Raw("data = " + Json.Encode(Model.GraphData.LineChart_DailyTotal) + ";"); //TODO: LineChart_Daily
$.plot($("#area_chart_payment_by_day"), area_chart_payment_by_day,
функция обновления
$.plot($("#area_chart_payment_by_day"), area_chart_payment_by_day, area_chart_payment_by_day_options);