642 lines
28 KiB
C#
642 lines
28 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.ComponentModel;
|
|
using System.Collections;
|
|
//using MapGoogle;
|
|
using System.IO;
|
|
using System.Threading;
|
|
//using Telerik.WinControls.UI;
|
|
using System.Windows.Forms;
|
|
using SafeMobileLib;
|
|
using System.Xml;
|
|
|
|
namespace ReportsLibrary
|
|
{
|
|
|
|
[DataObject]
|
|
public class ONOFFDataObj
|
|
{
|
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
public List<ONOFFData> GetALL()
|
|
{
|
|
return StaticMembers.ONOFFList;
|
|
}
|
|
}
|
|
|
|
[DataObject]
|
|
public class SpeedDataObj
|
|
{
|
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
public List<SpeedData> GetALL()
|
|
{
|
|
return StaticMembers.SpeedingList;
|
|
}
|
|
}
|
|
|
|
[DataObject]
|
|
public class LandDataObj
|
|
{
|
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
public List<LandData> GetALL()
|
|
{
|
|
return StaticMembers.LandList;
|
|
}
|
|
}
|
|
|
|
[DataObject]
|
|
public class EndOfDayDataObj
|
|
{
|
|
public static String ReverseGeoOSM = "127.0.0.1";
|
|
|
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
public List<EndOfDayData> GetALL()
|
|
{
|
|
CalcStops calcStop = new CalcStops(true);//mapControl
|
|
|
|
calcStop.get_position(StaticMembers.PositionList);
|
|
calcStop.calculate_zone();
|
|
calcStop.calc_zone_with_delta2();
|
|
try
|
|
{
|
|
calcStop.create_stop_list();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// throw new ArgumentException("Database connection failed");
|
|
SM.Debug("Error create stop list: " + ex.ToString());
|
|
}
|
|
|
|
if (StaticMembers.StartStop)
|
|
{
|
|
calcStop.StartStopCalc();
|
|
calcStop.StartStopCalcPosition();
|
|
}
|
|
|
|
// calcul distanta
|
|
|
|
ArrayList DriveList = new ArrayList();
|
|
Boolean first = true;
|
|
Double distance = .01f;
|
|
distance = 0;
|
|
//Double LatStart = 0, LngStart = 0, LatStop = 0, LngStop = 0;
|
|
Int32 timeStart = 0, timeStop = 0, oldStop = 0;
|
|
Int32 totaltime = 0, timeforStartCalc = 0;
|
|
SM.Debug("Stop Count:" + calcStop.StopsList.Count);
|
|
if (calcStop.StopsList.Count > 1)
|
|
{
|
|
Stops prevObj = null;
|
|
foreach (Stops obj in calcStop.StopsList)
|
|
{
|
|
if (prevObj != null)
|
|
{
|
|
if (!((prevObj.type == car_state_e.CAR_STOP) && (obj.type == car_state_e.CAR_START)))
|
|
{
|
|
if (first)
|
|
{
|
|
timeStart = prevObj.stop;
|
|
first = false;
|
|
}
|
|
else timeStart = oldStop;
|
|
timeStop = obj.start;
|
|
oldStop = obj.stop;
|
|
distance = calcStop.calcDistance(timeStart, timeStop);
|
|
DriveList.Add(distance);
|
|
}
|
|
else { first = true; }
|
|
}
|
|
prevObj = obj;
|
|
}
|
|
}
|
|
|
|
//loaddata
|
|
|
|
Int32 RowNumber = 0;
|
|
Int32 count3 = -1;
|
|
Double difidx = .01f;
|
|
Boolean lastStopIsStop = false;
|
|
Int32 lastStopTimeStop = 0;
|
|
Double total = 0;
|
|
String lastStopNameStop = "";
|
|
ArrayList numbers = new ArrayList();
|
|
ReverseGeocoding volltmpGo = new ReverseGeocoding(ReverseGeoOSM);
|
|
|
|
//calcul addressa Google
|
|
if (!StaticMembers.LATLNGforDinamicReports)
|
|
{
|
|
try
|
|
{
|
|
if ((StaticMembers.MapType == MapTYPE.ArcGis) || (StaticMembers.MapType == MapTYPE.Google))
|
|
{
|
|
foreach (Stops obj3 in calcStop.StopsList)
|
|
{
|
|
StaticMembers.AddrGISQueue.Enqueue(new AddrAndID(Convert.ToInt32(obj3.name), obj3.lat, obj3.lng));
|
|
if (StaticMembers.ShowCoordinates)
|
|
StaticMembers.IdReportHS.Add(obj3.name, "LAT:" + Math.Round(obj3.lat, 5).ToString() + " , LNG:" + Math.Round(obj3.lng, 5).ToString());
|
|
else
|
|
StaticMembers.IdReportHS.Add(obj3.name, obj3.address != "" ? obj3.address : volltmpGo.getAddressLATLNG(obj3.lat, obj3.lng));
|
|
}
|
|
bool retrynew = true;
|
|
int cntmax = 0;
|
|
|
|
foreach (String obj in StaticMembers.IdReportHS.Keys)
|
|
numbers.Add(obj);
|
|
|
|
while (retrynew)
|
|
{
|
|
cntmax++;
|
|
retrynew = false;
|
|
foreach (String obj in numbers)
|
|
{
|
|
if ((String)StaticMembers.IdReportHS[obj] == "no address")
|
|
{
|
|
SM.Debug("Sta 240 msecunda");
|
|
Thread.Sleep(240);
|
|
retrynew = true;
|
|
}
|
|
}
|
|
if (cntmax > 10) retrynew = false;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Erorr on compute adress for report:" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
//Load list for reports
|
|
var Ret = new List<EndOfDayData>();
|
|
Boolean jumpstop = true;
|
|
EndOfDayData tmpData = null;
|
|
|
|
foreach (Stops obj3 in calcStop.StopsList)
|
|
{
|
|
if (obj3.type == car_state_e.CAR_START)
|
|
{
|
|
try
|
|
{
|
|
tmpData = new EndOfDayData();
|
|
RowNumber++;
|
|
tmpData.Trip = Convert.ToString(RowNumber);
|
|
//tmpData.StartTime = (new ConvertDT().GetDTLocalFromSeconds(obj3.stop)).ToString();
|
|
if (StaticMembers.is24hours) tmpData.StartTime = ((obj3.stop).GetDTLocalFromSeconds()).ToString("MM/dd/yyyy HH:mm:ss");
|
|
else tmpData.StartTime = ((obj3.stop).GetDTLocalFromSeconds()).ToString("MM/dd/yyyy hh:mm:ss tt");
|
|
|
|
timeforStartCalc = obj3.stop;
|
|
if (!StaticMembers.LATLNGforDinamicReports)
|
|
{
|
|
if ((StaticMembers.MapType == MapTYPE.Google) || (StaticMembers.MapType == MapTYPE.ArcGis))
|
|
tmpData.StartAddress = StaticMembers.IdReportHS[obj3.name].ToString();
|
|
}
|
|
else
|
|
{
|
|
tmpData.StartAddress = "LAT:" + Math.Round(obj3.lat, 5).ToString() + " , LNG:" + Math.Round(obj3.lng, 5).ToString();
|
|
}
|
|
lastStopIsStop = false;
|
|
jumpstop = false;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Address null exceptie la getlist:" + ex.ToString());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!jumpstop)
|
|
{
|
|
try
|
|
{
|
|
if (lastStopIsStop)
|
|
{
|
|
tmpData = new EndOfDayData();
|
|
RowNumber++;
|
|
tmpData.Trip = Convert.ToString(RowNumber);
|
|
//tmpData.StartTime = (new ConvertDT().GetDTLocalFromSeconds(lastStopTimeStop)).ToString();
|
|
|
|
if (StaticMembers.is24hours) tmpData.StartTime = ((lastStopTimeStop).GetDTLocalFromSeconds()).ToString("MM/dd/yyyy HH:mm:ss");
|
|
else tmpData.StartTime = ((lastStopTimeStop).GetDTLocalFromSeconds()).ToString("MM/dd/yyyy hh:mm:ss tt");
|
|
|
|
timeforStartCalc = lastStopTimeStop;
|
|
tmpData.StartAddress = lastStopNameStop;
|
|
}
|
|
count3++;
|
|
if (tmpData != null)
|
|
{
|
|
totaltime += (obj3.start - timeforStartCalc);
|
|
tmpData.StopTime = ((obj3.start).GetDTLocalFromSeconds()).ToString();
|
|
if (!StaticMembers.LATLNGforDinamicReports)
|
|
{
|
|
if ((StaticMembers.MapType == MapTYPE.Google) || (StaticMembers.MapType == MapTYPE.ArcGis))
|
|
tmpData.StopAddress = StaticMembers.IdReportHS[obj3.name].ToString();
|
|
}
|
|
else tmpData.StopAddress = "LAT:" + Math.Round(obj3.lat, 5).ToString() + " , LNG:" + Math.Round(obj3.lng, 5).ToString();
|
|
difidx = (Double)DriveList[count3];
|
|
total += difidx;
|
|
if (StaticMembers.isInMile) tmpData.Distance = (Math.Round(((difidx * 0.621371192) * 1000)) / 1000).ToString();
|
|
else tmpData.Distance = difidx.ToString();
|
|
if (tmpData != null) Ret.Add(tmpData);
|
|
}
|
|
lastStopIsStop = true;
|
|
lastStopTimeStop = obj3.stop;
|
|
if (!StaticMembers.LATLNGforDinamicReports)
|
|
{
|
|
if ((StaticMembers.MapType == MapTYPE.Google) || (StaticMembers.MapType == MapTYPE.ArcGis))
|
|
lastStopNameStop = StaticMembers.IdReportHS[obj3.name].ToString();
|
|
}
|
|
else lastStopNameStop = "LAT:" + Math.Round(obj3.lat, 5).ToString() + " , LNG:" + Math.Round(obj3.lng, 5).ToString();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("eroare DriverList= " + ex.ToString());
|
|
}
|
|
}
|
|
jumpstop = false;
|
|
}
|
|
}
|
|
if (RowNumber > 0)
|
|
{
|
|
tmpData = new EndOfDayData();
|
|
tmpData.Trip = "";
|
|
tmpData.StartTime = "Total time:";
|
|
SM.Debug("Total time is:" + totaltime);
|
|
tmpData.StartAddress = String.Format("{0:00}", (int)(totaltime / 3600)) + ":" + String.Format("{0:00}", ((int)(((int)(totaltime % 3600)) / 60))) + ":" + String.Format("{0:00}", ((int)(totaltime % 60)));
|
|
tmpData.StopTime = "";
|
|
tmpData.StopAddress = "Total distance:";
|
|
if (StaticMembers.isInMile) tmpData.Distance = (Math.Round(((total * 0.621371192) * 1000)) / 1000).ToString();
|
|
else tmpData.Distance = total.ToString();
|
|
Ret.Add(tmpData);
|
|
}
|
|
|
|
|
|
//de la google address
|
|
if ((StaticMembers.MapType == MapTYPE.Google) || (StaticMembers.MapType == MapTYPE.ArcGis))
|
|
{
|
|
foreach (String obj in numbers)
|
|
StaticMembers.IdReportHS.Remove(obj);
|
|
numbers.Clear();
|
|
}
|
|
return Ret;
|
|
}
|
|
}
|
|
|
|
[DataObject]
|
|
public class StopDataObj
|
|
{
|
|
public static String ReverseGeoOSM = "127.0.0.1";
|
|
|
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
public List<StopData> GetALL()
|
|
{
|
|
if (!StaticMembers.IsHistroyNotStop) // aici prelucrez date cand e raport de stop sau IDLE
|
|
{
|
|
CalcStops calcStop = new CalcStops(true);//mapControl
|
|
calcStop.get_position(StaticMembers.PositionList);
|
|
try
|
|
{
|
|
if (!StaticMembers.IsIdle)
|
|
{
|
|
calcStop.calculate_zone();
|
|
calcStop.calc_zone_with_delta2();
|
|
calcStop.create_stop_list();
|
|
}
|
|
else
|
|
{
|
|
calcStop.create_stop_list_EON(StaticMembers.IDLETime);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Database connection failed:" + ex.ToString());
|
|
}
|
|
|
|
if (StaticMembers.StartStop)
|
|
{
|
|
calcStop.StartStopCalc();
|
|
calcStop.StartStopCalcPosition();
|
|
}
|
|
ArrayList numbers = new ArrayList();
|
|
ReverseGeocoding volltmpGo = new ReverseGeocoding(ReverseGeoOSM);
|
|
//calcul addressa Google
|
|
if (!StaticMembers.LATLNGforDinamicReports)
|
|
{
|
|
try
|
|
{
|
|
if ((StaticMembers.MapType == MapTYPE.ArcGis) || (StaticMembers.MapType == MapTYPE.Google))
|
|
{
|
|
foreach (Stops obj3 in calcStop.StopsList)
|
|
{
|
|
StaticMembers.AddrGISQueue.Enqueue(new AddrAndID(Convert.ToInt32(obj3.name), obj3.lat, obj3.lng));
|
|
if (StaticMembers.ShowCoordinates)
|
|
StaticMembers.IdReportHS.Add(obj3.name, "LAT:" + Math.Round(obj3.lat, 5).ToString() + " , LNG:" + Math.Round(obj3.lng, 5).ToString());
|
|
else
|
|
StaticMembers.IdReportHS.Add(obj3.name, obj3.address != "" ? obj3.address : volltmpGo.getAddressLATLNG(obj3.lat, obj3.lng));
|
|
}
|
|
if (!StaticMembers.ShowCoordinates)
|
|
{
|
|
bool retrynew = true;
|
|
int cntmax = 0;
|
|
foreach (String obj in StaticMembers.IdReportHS.Keys)
|
|
numbers.Add(obj);
|
|
|
|
while (retrynew)
|
|
{
|
|
cntmax++;
|
|
retrynew = false;
|
|
foreach (String obj in numbers)
|
|
{
|
|
if ((String)StaticMembers.IdReportHS[obj] == "no address")
|
|
{
|
|
SM.Debug("Sta 180 msec");
|
|
Thread.Sleep(180);
|
|
retrynew = true;
|
|
}
|
|
}
|
|
if (cntmax > 10) retrynew = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Erorr on compute adress for report:" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
int countStops = -1;
|
|
long stoptime, starttime;
|
|
StopData tmpData = null;
|
|
Int32 RowNumber = 0;
|
|
var Ret = new List<StopData>();
|
|
Int64 diffTime;
|
|
foreach (Stops obj3 in calcStop.StopsList)
|
|
{
|
|
countStops++;
|
|
if (obj3.type == car_state_e.CAR_STOP)
|
|
{
|
|
tmpData = new StopData();
|
|
try
|
|
{
|
|
RowNumber++;
|
|
tmpData.Data = ((obj3.start).GetDTLocalFromSeconds()).Date.ToShortDateString();
|
|
tmpData.Time = ((Int32)obj3.start).TimeOfDayHHMMLocal(!StaticMembers.is24hours);
|
|
if (!StaticMembers.LATLNGforDinamicReports)
|
|
{
|
|
if ((StaticMembers.MapType == MapTYPE.Google) || (StaticMembers.MapType == MapTYPE.ArcGis))
|
|
tmpData.Location = StaticMembers.IdReportHS[obj3.name].ToString();
|
|
}
|
|
else tmpData.Location = "LAT:" + Math.Round(obj3.lat, 5).ToString() + " , LNG:" + Math.Round(obj3.lng, 5).ToString();
|
|
stoptime = obj3.stop;
|
|
starttime = obj3.start;
|
|
if (countStops < (calcStop.StopsList.Count - 1))
|
|
{
|
|
if (((Stops)(calcStop.StopsList[countStops + 1])).type == car_state_e.CAR_START)
|
|
stoptime = ((Stops)(calcStop.StopsList[countStops + 1])).stop;
|
|
}
|
|
|
|
diffTime = stoptime - starttime;
|
|
Int32 Hour = (Int32)(diffTime / 3600);
|
|
Int32 Minute = (Int32)((diffTime - Hour * 3600) / 60);
|
|
String toReturn = "";
|
|
if (Hour >= 10)
|
|
toReturn = toReturn + Hour.ToString() + ":";
|
|
else
|
|
toReturn = toReturn + "0" + Hour.ToString() + ":";
|
|
|
|
if (Minute >= 10)
|
|
toReturn = toReturn + Minute.ToString();
|
|
else
|
|
toReturn = toReturn + "0" + Minute.ToString();
|
|
tmpData.Duration = toReturn;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("EX:" + ex.ToString());
|
|
}
|
|
Ret.Add(tmpData);
|
|
}
|
|
}
|
|
|
|
//de la google address
|
|
if ((StaticMembers.MapType == MapTYPE.Google) || (StaticMembers.MapType == MapTYPE.ArcGis))
|
|
{
|
|
foreach (String obj in numbers)
|
|
StaticMembers.IdReportHS.Remove(obj);
|
|
numbers.Clear();
|
|
}
|
|
return Ret;
|
|
}
|
|
else // aici prelucrez date cand e raport de history
|
|
{
|
|
return StaticMembers.HistDataReport;
|
|
}
|
|
}
|
|
}
|
|
|
|
[DataObject]
|
|
public class FleetDataObj
|
|
{
|
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
public List<FleetData> GetALL()
|
|
{
|
|
Double distance = .001f;
|
|
Double AllDistance = .001f;
|
|
var Ret = new List<FleetData>();
|
|
|
|
if (!StaticMembers.IsSMSLocationNotFleet)
|
|
{
|
|
foreach (FleetIdandPos veh in StaticMembers.FleetPosList)
|
|
{
|
|
CalcStops calcStop = new CalcStops(true);//mapControl
|
|
calcStop.get_position(veh.Position);
|
|
try
|
|
{
|
|
StaticMembers.NameReport = veh.Name;
|
|
calcStop.calculate_zone();
|
|
calcStop.calc_zone_with_delta2();
|
|
calcStop.create_stop_list();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Database connection failed" + ex.ToString());
|
|
}
|
|
|
|
if (StaticMembers.StartStop)
|
|
{
|
|
calcStop.StartStopCalc();
|
|
calcStop.StartStopCalcPosition();
|
|
}
|
|
|
|
//distance
|
|
|
|
AllDistance = 0;
|
|
Boolean first = true;
|
|
distance = 0;
|
|
Int32 timeStart = 0, timeStop = 0, oldStop = 0;
|
|
if (calcStop.StopsList.Count > 1)
|
|
{
|
|
Stops prevObj = null;
|
|
foreach (Stops obj in calcStop.StopsList)
|
|
{
|
|
if (prevObj != null)
|
|
{
|
|
if (!((prevObj.type == car_state_e.CAR_STOP) && (obj.type == car_state_e.CAR_START)))
|
|
{
|
|
AllDistance += distance;
|
|
|
|
if (first)
|
|
{
|
|
timeStart = prevObj.stop;
|
|
first = false;
|
|
}
|
|
else timeStart = oldStop;
|
|
timeStop = obj.start;
|
|
oldStop = obj.stop;
|
|
AllDistance += calcStop.calcDistance(timeStart, timeStop);
|
|
//DriveList.Add(distance);
|
|
}
|
|
else { first = true; }
|
|
}
|
|
prevObj = obj;
|
|
}
|
|
}
|
|
|
|
int startnr = 0;
|
|
Stops prevStopObj = null;
|
|
foreach (Stops obj in calcStop.StopsList)
|
|
{
|
|
if (obj.type == car_state_e.CAR_START)
|
|
startnr++;
|
|
|
|
if (prevStopObj != null)
|
|
if ((prevStopObj.type == car_state_e.CAR_STOP) && (obj.type == car_state_e.CAR_STOP))
|
|
startnr++;
|
|
prevStopObj = obj;
|
|
}
|
|
FleetData tmpData = new FleetData();
|
|
|
|
tmpData.Name = veh.Name;
|
|
if (StaticMembers.isInMile) tmpData.Distance = (Math.Round(((AllDistance * 0.621371192) * 1000)) / 1000).ToString();
|
|
else tmpData.Distance = AllDistance.ToString();
|
|
if ((calcStop.StopsList.Count == 0) || (calcStop.StopsList.Count == 1)) tmpData.Trips = "0";
|
|
else tmpData.Trips = startnr.ToString();
|
|
tmpData.Start = "";
|
|
tmpData.Stop = "";
|
|
if ((calcStop.StopsList.Count != 0) && (calcStop.StopsList.Count != 1))
|
|
{
|
|
if (StaticMembers.is24hours)
|
|
{
|
|
tmpData.Start = ((((Stops)(calcStop.StopsList[0])).stop).GetDTLocalFromSeconds()).ToString("MM/dd/yyyy HH:mm:ss");
|
|
tmpData.Stop = ((((Stops)(calcStop.StopsList[calcStop.StopsList.Count - 1])).start).GetDTLocalFromSeconds()).ToString("MM/dd/yyyy HH:mm:ss");
|
|
}
|
|
else
|
|
{
|
|
tmpData.Start = ((((Stops)(calcStop.StopsList[0])).stop).GetDTLocalFromSeconds()).ToString("MM/dd/yyyy hh:mm:ss tt");
|
|
tmpData.Stop = ((((Stops)(calcStop.StopsList[calcStop.StopsList.Count - 1])).start).GetDTLocalFromSeconds()).ToString("MM/dd/yyyy hh:mm:ss tt");
|
|
}
|
|
}
|
|
Ret.Add(tmpData);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (SMS_Location sms_obj in StaticMembers.SMSLocList)
|
|
{
|
|
FleetData tmpData = new FleetData();
|
|
tmpData.Name = sms_obj.Name;
|
|
tmpData.Start = sms_obj.Data;
|
|
tmpData.Stop = sms_obj.Address;
|
|
tmpData.Trips = sms_obj.Time;
|
|
tmpData.Distance = sms_obj.Text_mess;
|
|
Ret.Add(tmpData);
|
|
}
|
|
}
|
|
return Ret;
|
|
}
|
|
}
|
|
|
|
[DataObject]
|
|
public class ChartDataObj
|
|
{
|
|
public List<ChartData> GetSpeedingChart()
|
|
{
|
|
ChartData cd = new ChartData();
|
|
List<ChartData> ChartDataList = new List<ChartData>();
|
|
//process data to generate
|
|
if (StaticMembers.SpeedingList != null)
|
|
{
|
|
if (StaticMembers.ReportType == rep_type.SPEED)
|
|
{
|
|
int[,] array2D = new int[,] { { 20, 50 }, { 50, 70 }, { 70, 90 }, { 90, 400 } };
|
|
var list = new List<string>();
|
|
foreach (SpeedData sd in StaticMembers.SpeedingList)
|
|
list.Add(sd.Speed);
|
|
for (int i = 0; i < array2D.GetLength(0); i++)
|
|
{
|
|
var result = list.Select(int.Parse).Count(r => r >= array2D[i, 0] && r < array2D[i, 1]);
|
|
if (result > 0)
|
|
{
|
|
cd = new ChartData(string.Format("Between {0} and {1} {2}", array2D[i, 0], array2D[i, 1], (StaticMembers.isInMile) ? "mph" : "km/h"), result);
|
|
ChartDataList.Add(cd);
|
|
}
|
|
}
|
|
}
|
|
if (StaticMembers.ReportType == rep_type.JOB_TICKETING)
|
|
{
|
|
var query = StaticMembers.SpeedingList.GroupBy(n => n.Time,
|
|
(key, values) => new { Name = key, Count = values.Count() });
|
|
if (query.Count() > 1)
|
|
{
|
|
foreach (var result in query)
|
|
{
|
|
cd = new ChartData(result.Name.ToString(), result.Count);
|
|
ChartDataList.Add(cd);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return ChartDataList;
|
|
}
|
|
|
|
public List<ChartData> GetAllAlarmChart()
|
|
{
|
|
|
|
ChartData cd = new ChartData();
|
|
List<ChartData> ChartDataList = new List<ChartData>();
|
|
//process data to generate
|
|
if (StaticMembers.HistDataReport != null)
|
|
{
|
|
if (StaticMembers.ReportType == rep_type.ALLALARM)
|
|
{
|
|
var query = StaticMembers.HistDataReport.GroupBy(n => n.Time,
|
|
(key, values) => new { Name = key, Count = values.Count() });
|
|
foreach (var result in query)
|
|
{
|
|
cd = new ChartData(result.Name.ToString(), result.Count);
|
|
ChartDataList.Add(cd);
|
|
}
|
|
}
|
|
if (StaticMembers.ReportType == rep_type.HIST)
|
|
{
|
|
int[,] array2D = new int[,] { { 0, 40 }, { 40, 70 }, { 70, 90 }, { 90, 400 } };
|
|
var list = new List<string>();
|
|
foreach (StopData sd in StaticMembers.HistDataReport)
|
|
list.Add(sd.Duration);
|
|
for (int i = 0; i < array2D.GetLength(0); i++)
|
|
{
|
|
var result = list.Select(int.Parse).Count(r => r >= array2D[i, 0] && r < array2D[i, 1]);
|
|
if (result > 0)
|
|
{
|
|
cd = new ChartData(string.Format("Between {0} and {1} {2}", array2D[i, 0], array2D[i, 1], (StaticMembers.isInMile) ? "mph" : "km/h"), result);
|
|
ChartDataList.Add(cd);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return ChartDataList;
|
|
}
|
|
}
|
|
}
|