public static void InsertTripRaw(DataTable gpsRawTable, InsertConfig.GpsCorrection correction) { var tripsTable = DataTableUtil.GetTripsRawTable(); DataRow row = tripsTable.NewRow(); row.SetField(TripsRawDao.ColumnDriverId, gpsRawTable.Rows[0].Field <int>(AndroidGpsRawDao.ColumnDriverId)); row.SetField(TripsRawDao.ColumnCarId, gpsRawTable.Rows[0].Field <int>(AndroidGpsRawDao.ColumnCarId)); row.SetField(TripsRawDao.ColumnSensorId, gpsRawTable.Rows[0].Field <int>(AndroidGpsRawDao.ColumnSensorId)); row.SetField(TripsRawDao.ColumnStartTime, gpsRawTable.Rows[0].Field <DateTime>(AndroidGpsRawDao.ColumnJst)); row.SetField(TripsRawDao.ColumnStartLatitude, gpsRawTable.Rows[0].Field <double>(AndroidGpsRawDao.ColumnLatitude)); row.SetField(TripsRawDao.ColumnStartLongitude, gpsRawTable.Rows[0].Field <double>(AndroidGpsRawDao.ColumnLongitude)); row.SetField(TripsRawDao.ColumnEndTime, gpsRawTable.Rows[gpsRawTable.Rows.Count - 1].Field <DateTime>(AndroidGpsRawDao.ColumnJst)); row.SetField(TripsRawDao.ColumnEndLatitude, gpsRawTable.Rows[gpsRawTable.Rows.Count - 1].Field <double>(AndroidGpsRawDao.ColumnLatitude)); row.SetField(TripsRawDao.ColumnEndLongitude, gpsRawTable.Rows[gpsRawTable.Rows.Count - 1].Field <double>(AndroidGpsRawDao.ColumnLongitude)); tripsTable.Rows.Add(row); // GPSファイルごとの処理なので主キー違反があっても挿入されないだけ if (correction == InsertConfig.GpsCorrection.SpeedLPFMapMatching) { TripsRawSpeedLPF005MMDao.Insert(tripsTable); } else if (correction == InsertConfig.GpsCorrection.MapMatching) { TripsRawMMDao.Insert(tripsTable); } else { TripsRawDao.Insert(tripsTable); } }
public static void InsertTrip(InsertDatum datum, InsertConfig.GpsCorrection correction, bool isCheckedSightseeingInsert) { LogWritter.WriteLog(LogWritter.LogMode.Trip, $"TRIP挿入開始, DRIVER_ID: {datum.DriverId}, CAR_ID: {datum.CarId}, SENSOR_ID: {datum.SensorId}"); var tripsRawTable = new DataTable(); if (correction == InsertConfig.GpsCorrection.SpeedLPFMapMatching) { tripsRawTable = TripsRawSpeedLPF005MMDao.Get(datum); TripsSpeedLPF005MMDao.DeleteTrips(); //途中中断された際に作成したトリップを削除 } else if (correction == InsertConfig.GpsCorrection.MapMatching) { tripsRawTable = TripsRawMMDao.Get(datum); TripsMMDao.DeleteTrips(); //途中中断された際に作成したトリップを削除 } else if (correction == InsertConfig.GpsCorrection.Normal) { tripsRawTable = TripsRawDao.Get(datum); TripsDao.DeleteTrips(); //途中中断された際に作成したトリップを削除 } else if (correction == InsertConfig.GpsCorrection.DopplerSpeed) { tripsRawTable = TripsRawDopplerDao.Get(datum); TripsDopplerDao.DeleteTrips(); //途中中断された際に作成したトリップを削除 } else if (correction == InsertConfig.GpsCorrection.DopplerNotMM) { tripsRawTable = TripsRawDopplerNotMMDao.Get(datum); TripsDopplerNotMMDao.DeleteTrips(); } LogWritter.WriteLog(LogWritter.LogMode.Trip, $"挿入対象のRAWデータ: {tripsRawTable.Rows.Count}"); for (int i = 0; i < tripsRawTable.Rows.Count; i++) { DataTable tripsTable = DataTableUtil.GetTripsTable(); // 観光オプションによるインサート処理はあらかじめ切り分ける。 if (isCheckedSightseeingInsert) { InsertSightSeeingTrip(tripsRawTable, tripsTable, datum, i, correction); } // 自宅出発 else if (IsHome(tripsRawTable.Rows[i].Field <double>(TripsRawDao.ColumnStartLatitude), tripsRawTable.Rows[i].Field <double>(TripsRawDao.ColumnStartLongitude), tripsRawTable.Rows[i].Field <DateTime>(TripsRawDao.ColumnStartTime), datum)) { InsertOutwardTrip(tripsRawTable, tripsTable, datum, i, correction); } // YNU出発 else if (IsYnu(tripsRawTable.Rows[i].Field <double>(TripsRawDao.ColumnStartLatitude), tripsRawTable.Rows[i].Field <double>(TripsRawDao.ColumnStartLongitude))) { InsertHomewardTrip(tripsRawTable, tripsTable, datum, i, correction); } // 1トリップごとなので主キー違反があっても挿入されないだけ if (correction == InsertConfig.GpsCorrection.SpeedLPFMapMatching) { TripsSpeedLPF005MMDao.Insert(tripsTable); } else if (correction == InsertConfig.GpsCorrection.MapMatching) { TripsMMDao.Insert(tripsTable); } else if (correction == InsertConfig.GpsCorrection.Normal) { TripsDao.Insert(tripsTable); } else if (correction == InsertConfig.GpsCorrection.DopplerSpeed) { if (tripsTable.Rows.Count != 0) { var gpsCorrectedTable = CorrectedGPSDopplerDao.GetNormalized( tripsTable.Rows[0].Field <DateTime>(TripsDopplerDao.ColumnStartTime), tripsTable.Rows[0].Field <DateTime>(TripsDopplerDao.ColumnEndTime), datum); if (gpsCorrectedTable.Rows.Count != 0) { TripsDopplerDao.Insert(tripsTable); } } } else if (correction == InsertConfig.GpsCorrection.DopplerNotMM) { if (tripsTable.Rows.Count != 0) { var gpsCorrectedTable = CorrectedGpsDopplerNotMMDao.GetNormalized( tripsTable.Rows[0].Field <DateTime>(TripsDopplerDao.ColumnStartTime), tripsTable.Rows[0].Field <DateTime>(TripsDopplerDao.ColumnEndTime), datum); if (gpsCorrectedTable.Rows.Count != 0) { TripsDopplerNotMMDao.Insert(tripsTable); } } } } }
public static void InsertTrip(InsertDatum datum, InsertConfig.GpsCorrection correction) { LogWritter.WriteLog(LogWritter.LogMode.Trip, $"TRIP挿入開始, DRIVER_ID: {datum.DriverId}, CAR_ID: {datum.CarId}, SENSOR_ID: {datum.SensorId}"); var tripsRawTable = new DataTable(); if (correction == InsertConfig.GpsCorrection.SpeedLPFMapMatching) { tripsRawTable = TripsRawSpeedLPF005MMDao.Get(datum); TripsSpeedLPF005MMDao.DeleteTrips(); //途中中断された際に作成したトリップを削除 } else if (correction == InsertConfig.GpsCorrection.MapMatching) { tripsRawTable = TripsRawMMDao.Get(datum); TripsMMDao.DeleteTrips(); //途中中断された際に作成したトリップを削除 } else { tripsRawTable = TripsRawDao.Get(datum); TripsDao.DeleteTrips(); //途中中断された際に作成したトリップを削除 } LogWritter.WriteLog(LogWritter.LogMode.Trip, $"挿入対象のRAWデータ: {tripsRawTable.Rows.Count}"); for (int i = 0; i < tripsRawTable.Rows.Count; i++) { DataTable tripsTable = DataTableUtil.GetTripsTable(); // 自宅出発 if (IsHome(tripsRawTable.Rows[i].Field <double>(TripsRawDao.ColumnStartLatitude), tripsRawTable.Rows[i].Field <double>(TripsRawDao.ColumnStartLongitude), tripsRawTable.Rows[i].Field <DateTime>(TripsRawDao.ColumnStartTime), datum)) { InsertOutwardTrip(tripsRawTable, tripsTable, datum, i, correction); } // YNU出発 else if (IsYnu(tripsRawTable.Rows[i].Field <double>(TripsRawDao.ColumnStartLatitude), tripsRawTable.Rows[i].Field <double>(TripsRawDao.ColumnStartLongitude))) { InsertHomewardTrip(tripsRawTable, tripsTable, datum, i, correction); } //自宅・YNU以外出発 else if (IsOther(tripsRawTable.Rows[i].Field <double>(TripsRawDao.ColumnStartLatitude), tripsRawTable.Rows[i].Field <double>(TripsRawDao.ColumnStartLongitude))) { InsertOtherTrip(tripsRawTable, tripsTable, datum, i, correction); } // 1トリップごとなので主キー違反があっても挿入されないだけ if (correction == InsertConfig.GpsCorrection.SpeedLPFMapMatching) { TripsSpeedLPF005MMDao.Insert(tripsTable); } else if (correction == InsertConfig.GpsCorrection.MapMatching) { TripsMMDao.Insert(tripsTable); } else { TripsDao.Insert(tripsTable); } } }