private static bool RoadVerification(StandardCCTV standardData, string originalMile) { var strMile = originalMile.Replace("K", "").Replace("+", "."); var douOriginalMile = Convert.ToDouble(strMile); if (standardData.StartMile != string.Empty && standardData.EndMile != string.Empty) { var douStartMile = Convert.ToDouble(standardData.StartMile); var douEndMile = Convert.ToDouble(standardData.EndMile); if (douStartMile >= douEndMile) { if (douStartMile >= douOriginalMile && douOriginalMile >= douEndMile) { return(true); } } else { if (douEndMile >= douOriginalMile && douOriginalMile >= douStartMile) { return(true); } } } return(false); }
static void Main(string[] args) { WriteMsg("開始驗證"); using (Entities db = new Entities()) { using (HttpClient client = new HttpClient()) { client.Timeout = new TimeSpan(0, 0, 8); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); #region Test var content1 = client.GetAsync($"http://117.56.59.157:8085/THB/Internal/CCTVs/Live").Result.Content; var json1 = content1.ReadAsStringAsync().Result; List <dynamic> standardData1 = JsonConvert.DeserializeObject <List <dynamic> >(json1); var content2 = client.GetAsync($"http://117.56.59.157:8085/THB/Internal/CCTVs").Result.Content; var json2 = content2.ReadAsStringAsync().Result; List <dynamic> standardData2 = JsonConvert.DeserializeObject <List <dynamic> >(json2); #endregion var cameras = db.cameras.ToList(); var cameraMappings = db.cameraroadmapping.ToList(); StringBuilder correctMileSB = new StringBuilder("里程正確資料\r\n"); StringBuilder errorMileSB = new StringBuilder("里程錯誤資料\r\n"); StringBuilder errorRoadSB = new StringBuilder("路段錯誤資料\r\n"); StringBuilder misOutputSB = new StringBuilder("CameraID,X,Y,LinkID,RoadName"); int countOfCorrectRoad = 0; int errorRoadCount = 0; int countOfCorrectMile = 0; int countOfErrorMile = 0; foreach (var c in cameras) { var cm = cameraMappings.FirstOrDefault(x => x.CameraId == c.Id); if (cm != null) { if (c.DisplayName.Contains(cm.RoadName)) { countOfCorrectRoad++; StandardCCTV standardData = GetStandardData(client, cm); string locationMile = TransformLocationMile(c.DisplayName); if (locationMile != null) { var isCorrect = RoadVerification(standardData, locationMile); if (isCorrect) { countOfCorrectMile++; correctMileSB.Append($"{countOfCorrectMile}. 公總資料 經緯度:{c.WgsX},{c.WgsY}\t DisplyName:{c.DisplayName}\t\t 交通部API對應資料 RoadName:{standardData.RoadName}\t LinkID:{standardData.LinkID}\t StartMile:{standardData.StartMile}\t EndMile:{standardData.EndMile}\r\n"); } else { countOfErrorMile++; errorMileSB.Append($"{countOfErrorMile}. 公總資料 經緯度:{c.WgsX},{c.WgsY}\t DisplyName:{c.DisplayName}\t\t 交通部API對應資料 RoadName:{standardData.RoadName}\t LinkID:{standardData.LinkID}\t StartMile:{standardData.StartMile}\t EndMile:{standardData.EndMile}\r\n"); misOutputSB.Append($"\r\n{c.CameraId},{c.WgsX},{c.WgsY},{standardData.LinkID},{standardData.RoadName}"); } } } else { if (!c.DisplayName.Contains(cm.RoadName)) { errorRoadCount++; misOutputSB.Append($"\r\n{c.CameraId},{c.WgsX},{c.WgsY},{cm.LinkID},{cm.RoadName}"); errorRoadSB.Append($"{errorRoadCount}. 公總資料 經緯度:{c.WgsX},{c.WgsY}\t DisplyName:{c.DisplayName}\t\t 交通部API對應資料 RoadName:{cm.RoadName}\t LinkID:{cm.LinkID}\r\n"); } } } } //產生結果 using (var correctRoadWritter = new StreamWriter("CCTV_Standard_Same_Road.txt")) using (var errorRoadWritter = new StreamWriter("CCTV_Standard_Miss_Road.txt")) using (var mistakeOutputWritter = new StreamWriter("CCTV_Standard_ErrorData.csv")) { WriteMsg(correctRoadWritter, correctMileSB.ToString()); WriteMsg(correctRoadWritter, "\r\n\r\n\r\n"); WriteMsg(correctRoadWritter, errorMileSB.ToString()); WriteMsg(correctRoadWritter, $"總共{countOfCorrectRoad}個正確"); WriteMsg(correctRoadWritter, $"總共{countOfCorrectMile}個Mile正確"); WriteMsg(correctRoadWritter, $"總共{countOfErrorMile}個Mile錯誤"); WriteMsg(errorRoadWritter, errorRoadSB.ToString()); WriteMsg(errorRoadWritter, $"總共{errorRoadCount}個錯誤"); WriteMsg(correctRoadWritter, errorRoadWritter, "完成!!"); WriteMsg(mistakeOutputWritter, misOutputSB.ToString()); } } } WriteMsg("完成"); Console.ReadKey(); }