public DrogueRunPositionModel GetDrogueRunPositionModelExistDB(DrogueRunPositionModel droguePositionModel) { DrogueRunPositionModel DrogueRunPositionModel = (from c in db.DrogueRunPositions where c.DrogueRunID == droguePositionModel.DrogueRunID && c.Ordinal == droguePositionModel.Ordinal && c.StepDateTime_Local == droguePositionModel.StepDateTime_Local select new DrogueRunPositionModel { Error = "", DrogueRunPositionID = c.DrogueRunPositionID, DBCommand = (DBCommandEnum)c.DBCommand, DrogueRunID = c.DrogueRunID, Ordinal = c.Ordinal, StepLat = c.StepLat, StepLng = c.StepLng, StepDateTime_Local = c.StepDateTime_Local, CalculatedSpeed_m_s = c.CalculatedSpeed_m_s, CalculatedDirection_deg = c.CalculatedDirection_deg, LastUpdateDate_UTC = c.LastUpdateDate_UTC, LastUpdateContactTVItemID = c.LastUpdateContactTVItemID, }).FirstOrDefault <DrogueRunPositionModel>(); if (DrogueRunPositionModel == null) { return(ReturnError(string.Format(ServiceRes.CouldNotFind_With_Equal_, ServiceRes.DrogueRunPosition, ServiceRes.DrogueRunID + "," + ServiceRes.Ordinal + "," + ServiceRes.StepDateTime_Local, droguePositionModel.DrogueRunID + "," + droguePositionModel.Ordinal + "," + droguePositionModel.StepDateTime_Local))); } return(DrogueRunPositionModel); }
// Post public DrogueRunPositionModel PostAddDrogueRunPositionDB(DrogueRunPositionModel droguePositionModel) { string retStr = DrogueRunPositionModelOK(droguePositionModel); if (!string.IsNullOrWhiteSpace(retStr)) { return(ReturnError(retStr)); } ContactOK contactOK = IsContactOK(); if (!string.IsNullOrEmpty(contactOK.Error)) { return(ReturnError(contactOK.Error)); } bool DrogueRunExist = DrogueRunExistWithDrogueRunIDDB(droguePositionModel.DrogueRunID); if (!DrogueRunExist) { return(ReturnError(string.Format(ServiceRes._DoesNotExist, ServiceRes.DrogueRun + "[" + droguePositionModel.DrogueRunID + "]"))); } DrogueRunPositionModel DrogueRunPositionModelExist = GetDrogueRunPositionModelExistDB(droguePositionModel); if (string.IsNullOrWhiteSpace(DrogueRunPositionModelExist.Error)) { return(ReturnError(string.Format(ServiceRes._AlreadyExists, ServiceRes.DrogueRunPosition))); } DrogueRunPosition droguePositionNew = new DrogueRunPosition(); retStr = FillDrogueRunPosition(droguePositionNew, droguePositionModel, contactOK); if (!string.IsNullOrWhiteSpace(retStr)) { return(ReturnError(retStr)); } using (TransactionScope ts = new TransactionScope()) { db.DrogueRunPositions.Add(droguePositionNew); retStr = DoAddChanges(); if (!string.IsNullOrWhiteSpace(retStr)) { return(ReturnError(retStr)); } LogModel logModel = _LogService.PostAddLogForObj("DrogueRunPositions", droguePositionNew.DrogueRunPositionID, LogCommandEnum.Add, droguePositionNew); if (!string.IsNullOrWhiteSpace(logModel.Error)) { return(ReturnError(logModel.Error)); } ts.Complete(); } return(GetDrogueRunPositionModelWithDrogueRunPositionIDDB(droguePositionNew.DrogueRunPositionID)); }
// Check public string DrogueRunPositionModelOK(DrogueRunPositionModel drogueRunPositionModel) { string retStr = FieldCheckNotZeroInt(drogueRunPositionModel.DrogueRunID, ServiceRes.DrogueRunID); if (!string.IsNullOrWhiteSpace(retStr)) { return(retStr); } retStr = FieldCheckNotNullAndWithinRangeInt(drogueRunPositionModel.Ordinal, ServiceRes.Ordinal, 0, 20000); if (!string.IsNullOrWhiteSpace(retStr)) { return(retStr); } retStr = FieldCheckNotNullAndWithinRangeDouble(drogueRunPositionModel.StepLat, ServiceRes.StepLat, -90.0D, 90.0D); if (!string.IsNullOrWhiteSpace(retStr)) { return(retStr); } retStr = FieldCheckNotNullAndWithinRangeDouble(drogueRunPositionModel.StepLng, ServiceRes.StepLng, -180.0D, 180.0D); if (!string.IsNullOrWhiteSpace(retStr)) { return(retStr); } retStr = FieldCheckNotNullDateTime(drogueRunPositionModel.StepDateTime_Local, ServiceRes.StepDateTime_Local); if (!string.IsNullOrWhiteSpace(retStr)) { return(retStr); } retStr = FieldCheckNotNullAndWithinRangeDouble(drogueRunPositionModel.CalculatedSpeed_m_s, ServiceRes.CalculatedSpeed_m_s, 0.0D, 100.0D); if (!string.IsNullOrWhiteSpace(retStr)) { return(retStr); } retStr = FieldCheckNotNullAndWithinRangeDouble(drogueRunPositionModel.CalculatedDirection_deg, ServiceRes.CalculatedDirection_deg, 0.0D, 360.0D); if (!string.IsNullOrWhiteSpace(retStr)) { return(retStr); } retStr = _BaseEnumService.DBCommandOK(drogueRunPositionModel.DBCommand); if (!string.IsNullOrWhiteSpace(retStr)) { return(retStr); } return(""); }
public DrogueRunPositionModel PostUpdateDrogueRunPositionDB(DrogueRunPositionModel droguePositionModel) { string retStr = DrogueRunPositionModelOK(droguePositionModel); if (!string.IsNullOrEmpty(retStr)) { return(ReturnError(retStr)); } ContactOK contactOK = IsContactOK(); if (!string.IsNullOrEmpty(contactOK.Error)) { return(ReturnError(contactOK.Error)); } DrogueRunPosition droguePositionToUpdate = GetDrogueRunPositionWithDrogueRunPositionIDDB(droguePositionModel.DrogueRunPositionID); if (droguePositionToUpdate == null) { return(ReturnError(string.Format(ServiceRes.CouldNotFind_ToUpdate, ServiceRes.DrogueRunPosition))); } retStr = FillDrogueRunPosition(droguePositionToUpdate, droguePositionModel, contactOK); if (!string.IsNullOrWhiteSpace(retStr)) { return(ReturnError(retStr)); } using (TransactionScope ts = new TransactionScope()) { retStr = DoUpdateChanges(); if (!string.IsNullOrWhiteSpace(retStr)) { return(ReturnError(retStr)); } LogModel logModel = _LogService.PostAddLogForObj("DrogueRunPositions", droguePositionToUpdate.DrogueRunPositionID, LogCommandEnum.Change, droguePositionToUpdate); if (!string.IsNullOrWhiteSpace(logModel.Error)) { return(ReturnError(logModel.Error)); } ts.Complete(); } return(GetDrogueRunPositionModelWithDrogueRunPositionIDDB(droguePositionToUpdate.DrogueRunPositionID)); }
// Fill public string FillDrogueRunPosition(DrogueRunPosition drogueRunPositionNew, DrogueRunPositionModel drogueRunPositionModel, ContactOK contactOK) { drogueRunPositionNew.DBCommand = (int)drogueRunPositionModel.DBCommand; drogueRunPositionNew.DrogueRunID = drogueRunPositionModel.DrogueRunID; drogueRunPositionNew.Ordinal = drogueRunPositionModel.Ordinal; drogueRunPositionNew.StepLat = drogueRunPositionModel.StepLat; drogueRunPositionNew.StepLng = drogueRunPositionModel.StepLng; drogueRunPositionNew.StepDateTime_Local = drogueRunPositionModel.StepDateTime_Local; drogueRunPositionNew.CalculatedSpeed_m_s = drogueRunPositionModel.CalculatedSpeed_m_s; drogueRunPositionNew.CalculatedDirection_deg = drogueRunPositionModel.CalculatedDirection_deg; drogueRunPositionNew.LastUpdateDate_UTC = DateTime.UtcNow; if (contactOK == null) { drogueRunPositionNew.LastUpdateContactTVItemID = 2; } else { drogueRunPositionNew.LastUpdateContactTVItemID = contactOK.ContactTVItemID; } return(""); }
// Post public DrogueRunModel PostAddOrModifyDB(FormCollection fc) { int tempInt = 0; int DrogueRunID = 0; int SubsectorTVItemID = 0; int DrogueNumber = 0; int TakeValueEveryXMinutes = 0; int TakeValueEveryXSeconds = 0; bool IsRisingTide = true; DrogueTypeEnum DrogueType = DrogueTypeEnum.Error; DateTime RunStartDateTime = DateTime.Now; string DroguePoints = ""; ContactOK contactOK = IsContactOK(); if (!string.IsNullOrWhiteSpace(contactOK.Error)) { return(ReturnError(contactOK.Error)); } int.TryParse(fc["DrogueRunID"], out DrogueRunID); // could be 0 if 0 then we need to add the new DrogueRun DrogueRunModel drogueRunModelToChange = new DrogueRunModel(); if (DrogueRunID != 0) { drogueRunModelToChange = GetDrogueRunModelWithDrogueRunIDDB(DrogueRunID); if (!string.IsNullOrWhiteSpace(drogueRunModelToChange.Error)) { return(drogueRunModelToChange); } } int.TryParse(fc["SubsectorTVItemID"], out SubsectorTVItemID); if (SubsectorTVItemID == 0) { return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.SubsectorTVItemID))); } int.TryParse(fc["TakeValueEveryXMinutes"], out TakeValueEveryXMinutes); TakeValueEveryXSeconds = TakeValueEveryXMinutes * 60; int.TryParse(fc["DrogueNumber"], out DrogueNumber); if (DrogueNumber == 0) { return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.DrogueNumber))); } if (string.IsNullOrWhiteSpace(fc["DrogueType"])) { return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.DrogueType))); } else { int.TryParse(fc["DrogueType"], out tempInt); DrogueType = (DrogueTypeEnum)tempInt; } if (string.IsNullOrWhiteSpace(fc["IsRisingTide"])) { IsRisingTide = false; } DroguePoints = fc["DroguePoints"]; DrogueRunModel drogueRunModelRet = new DrogueRunModel(); using (TransactionScope ts = new TransactionScope()) { if (DrogueRunID == 0) { DrogueRunModel drogueRunModelNew = new DrogueRunModel() { DBCommand = DBCommandEnum.Original, DrogueNumber = DrogueNumber, DrogueType = DrogueType, RunStartDateTime = RunStartDateTime, SubsectorTVItemID = SubsectorTVItemID, IsRisingTide = IsRisingTide, }; drogueRunModelRet = PostAddDrogueRunDB(drogueRunModelNew); } else { drogueRunModelToChange.DrogueNumber = DrogueNumber; drogueRunModelToChange.DrogueType = DrogueType; drogueRunModelToChange.RunStartDateTime = RunStartDateTime; drogueRunModelToChange.IsRisingTide = IsRisingTide; drogueRunModelRet = PostUpdateDrogueRunDB(drogueRunModelToChange); } // ts.Complete(); //} if (string.IsNullOrWhiteSpace(drogueRunModelRet.Error)) { int Ordinal = 0; List <DrogueRunPositionModel> drogueRunPositionModelList = new List <DrogueRunPositionModel>(); List <string> lineList = DroguePoints.Split("\r\n".ToCharArray(), StringSplitOptions.None).ToList(); DateTime OldStepDate = new DateTime(); foreach (string s in lineList) { if (s.Trim().Length == 0) { continue; } List <string> lineValList = s.Split(" ".ToCharArray(), StringSplitOptions.None).ToList(); if (lineValList.Count != 4) { return(ReturnError(ServiceRes.DroguePointsNotWellFormed)); } if (!float.TryParse(lineValList[0], out float Lat)) { return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Lat))); } if (!float.TryParse(lineValList[1], out float Lng)) { return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Lng))); } if (!int.TryParse(lineValList[2].Substring(0, 4), out int Year)) { return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Year))); } string MonthText = lineValList[2].Substring(5, 2); if (MonthText.StartsWith("0")) { MonthText = MonthText.Substring(1); } if (!int.TryParse(MonthText, out int Month)) { return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Month))); } string DayText = lineValList[2].Substring(8, 2); if (DayText.StartsWith("0")) { DayText = DayText.Substring(1); } if (!int.TryParse(DayText, out int Day)) { return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Day))); } string HourText = lineValList[3].Substring(0, 2); if (HourText.StartsWith("0")) { HourText = HourText.Substring(1); } if (!int.TryParse(HourText, out int Hour)) { return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Hour))); } string MinuteText = lineValList[3].Substring(3, 2); if (MinuteText.StartsWith("0")) { MinuteText = MinuteText.Substring(1); } if (!int.TryParse(MinuteText, out int Minute)) { return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Minute))); } if (!int.TryParse(lineValList[3].Substring(6, 2), out int Second)) { return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Second))); } DateTime StepDate = new DateTime(Year, Month, Day, Hour, Minute, Second); if (StepDate <= OldStepDate) { return(ReturnError(string.Format(ServiceRes.DatesAreNotAllInChronologicalOrder_And_, StepDate, OldStepDate))); } TimeSpan timeSpan = new TimeSpan(StepDate.Ticks - OldStepDate.Ticks); if (timeSpan.TotalSeconds > TakeValueEveryXSeconds || TakeValueEveryXMinutes == 0) { DrogueRunPositionModel drogueRunPositionModel = new DrogueRunPositionModel() { DBCommand = DBCommandEnum.Original, StepLat = Lat, StepLng = Lng, StepDateTime_Local = StepDate, Ordinal = Ordinal, DrogueRunID = drogueRunModelRet.DrogueRunID, CalculatedSpeed_m_s = 0.0f, CalculatedDirection_deg = 0.0f, }; drogueRunPositionModelList.Add(drogueRunPositionModel); Ordinal += 1; OldStepDate = StepDate; } } for (int i = 0, count = drogueRunPositionModelList.Count - 1; i < count; i++) { double dist = _MapInfoService.CalculateDistance((double)drogueRunPositionModelList[i].StepLat * d2r, (double)drogueRunPositionModelList[i].StepLng * d2r, (double)drogueRunPositionModelList[i + 1].StepLat * d2r, (double)drogueRunPositionModelList[i + 1].StepLng * d2r, base.R); TimeSpan timeSpan = new TimeSpan(drogueRunPositionModelList[i + 1].StepDateTime_Local.Ticks - drogueRunPositionModelList[i].StepDateTime_Local.Ticks); float Speed = Math.Abs((float)(dist / timeSpan.TotalSeconds)); drogueRunPositionModelList[i].CalculatedSpeed_m_s = Speed; double StepLat = drogueRunPositionModelList[i + 1].StepLat - drogueRunPositionModelList[i].StepLat; double StepLng = drogueRunPositionModelList[i + 1].StepLng - drogueRunPositionModelList[i].StepLng; double angle = Math.Atan2(StepLat, StepLng) * 180 / Math.PI; if (StepLat >= 0.0D && StepLng >= 0.0D) { angle = 90 - angle; } else if (StepLat <= 0.0D && StepLng >= 0.0D) { angle = 90 + Math.Abs(angle); } else if (StepLat <= 0.0D && StepLng <= 0.0D) { angle = 90 + Math.Abs(angle); } else if (StepLat >= 0.0D && StepLng <= 0.0D) { angle = 360 - Math.Abs(angle) + 90; } else { angle = 0.0f; } if (drogueRunPositionModelList[i].StepLat == drogueRunPositionModelList[i + 1].StepLat && drogueRunPositionModelList[i].StepLng == drogueRunPositionModelList[i + 1].StepLng) { Speed = 0.0f; angle = 0.0f; } drogueRunPositionModelList[i].CalculatedDirection_deg = (float)angle; } if (drogueRunPositionModelList.Count > 1) { drogueRunPositionModelList[drogueRunPositionModelList.Count - 1].CalculatedSpeed_m_s = drogueRunPositionModelList[drogueRunPositionModelList.Count - 2].CalculatedSpeed_m_s; drogueRunPositionModelList[drogueRunPositionModelList.Count - 1].CalculatedDirection_deg = drogueRunPositionModelList[drogueRunPositionModelList.Count - 2].CalculatedDirection_deg; } List <DrogueRunPositionModel> drogueRunPositionModelListInDB = _DrogueRunPositionService.GetDrogueRunPositionModelListWithDrogueRunIDDB(drogueRunModelRet.DrogueRunID).OrderBy(c => c.Ordinal).ToList(); if (drogueRunPositionModelList.Count == drogueRunPositionModelListInDB.Count) { for (int i = 0, count = drogueRunPositionModelList.Count; i < count; i++) { drogueRunPositionModelList[i].DrogueRunPositionID = drogueRunPositionModelListInDB[i].DrogueRunPositionID; DrogueRunPositionModel drogueRunPositionModel = _DrogueRunPositionService.PostUpdateDrogueRunPositionDB(drogueRunPositionModelList[i]); if (!string.IsNullOrWhiteSpace(drogueRunPositionModel.Error)) { return(ReturnError(drogueRunPositionModel.Error)); } } } else if (drogueRunPositionModelList.Count > drogueRunPositionModelListInDB.Count) { for (int i = 0, count = drogueRunPositionModelListInDB.Count; i < count; i++) { drogueRunPositionModelList[i].DrogueRunPositionID = drogueRunPositionModelListInDB[i].DrogueRunPositionID; DrogueRunPositionModel drogueRunPositionModel = _DrogueRunPositionService.PostUpdateDrogueRunPositionDB(drogueRunPositionModelList[i]); if (!string.IsNullOrWhiteSpace(drogueRunPositionModel.Error)) { return(ReturnError(drogueRunPositionModel.Error)); } } for (int i = drogueRunPositionModelListInDB.Count, count = drogueRunPositionModelList.Count; i < count; i++) { DrogueRunPositionModel drogueRunPositionModel = _DrogueRunPositionService.PostAddDrogueRunPositionDB(drogueRunPositionModelList[i]); if (!string.IsNullOrWhiteSpace(drogueRunPositionModel.Error)) { return(ReturnError(drogueRunPositionModel.Error)); } } } else { for (int i = 0, count = drogueRunPositionModelList.Count; i < count; i++) { drogueRunPositionModelList[i].DrogueRunPositionID = drogueRunPositionModelListInDB[i].DrogueRunPositionID; DrogueRunPositionModel drogueRunPositionModel = _DrogueRunPositionService.PostUpdateDrogueRunPositionDB(drogueRunPositionModelList[i]); if (!string.IsNullOrWhiteSpace(drogueRunPositionModel.Error)) { return(ReturnError(drogueRunPositionModel.Error)); } } for (int i = drogueRunPositionModelList.Count, count = drogueRunPositionModelListInDB.Count; i < count; i++) { DrogueRunPositionModel drogueRunPositionModel = _DrogueRunPositionService.PostDeleteDrogueRunPositionDB(drogueRunPositionModelListInDB[i].DrogueRunPositionID); if (!string.IsNullOrWhiteSpace(drogueRunPositionModel.Error)) { return(ReturnError(drogueRunPositionModel.Error)); } } } if (drogueRunPositionModelList.Count > 0) { drogueRunModelRet.RunStartDateTime = drogueRunPositionModelList[0].StepDateTime_Local; drogueRunModelRet = PostUpdateDrogueRunDB(drogueRunModelRet); } ts.Complete(); } } return(drogueRunModelRet); }