548 lines
31 KiB
C#
548 lines
31 KiB
C#
|
using Backend.Models;
|
|||
|
using Microsoft.Extensions.Logging;
|
|||
|
using Newtonsoft.Json;
|
|||
|
using Newtonsoft.Json.Linq;
|
|||
|
using Quartz;
|
|||
|
using Repository.BackendRepository.Implement;
|
|||
|
using Repository.BackendRepository.Interface;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.IO;
|
|||
|
using System.Net;
|
|||
|
using System.Net.Http;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Xml;
|
|||
|
using System.Xml.Serialization;
|
|||
|
using System.Linq;
|
|||
|
using NCrontab;
|
|||
|
|
|||
|
namespace BackendWorkerService.Quartz.Jobs
|
|||
|
{
|
|||
|
[DisallowConcurrentExecution]
|
|||
|
class WeatherAPIJob : IJob
|
|||
|
{
|
|||
|
private readonly ILogger<WeatherAPIJob> logger;
|
|||
|
private readonly IBackgroundServiceRepository backgroundServiceRepository;
|
|||
|
private readonly IBackendRepository backendRepository;
|
|||
|
private readonly ILogger<Task_Detail> loggers;
|
|||
|
public WeatherAPIJob(ILogger<WeatherAPIJob> logger,
|
|||
|
IBackgroundServiceRepository backgroundServiceRepository, IBackendRepository backendRepository, ILogger<Task_Detail> loggers)
|
|||
|
{
|
|||
|
this.logger = logger;
|
|||
|
this.backgroundServiceRepository = backgroundServiceRepository;
|
|||
|
this.backendRepository = backendRepository;
|
|||
|
this.loggers = loggers;
|
|||
|
}
|
|||
|
public string Fetch_PostWithJSONFormat(string url, string paramter)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
string username = "stanGG";
|
|||
|
string password = "St12345678";
|
|||
|
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
|||
|
HttpWebRequest Postrequest = (HttpWebRequest)WebRequest.Create(url);
|
|||
|
Postrequest.Method = "POST";
|
|||
|
Postrequest.Headers.Add("Authorization", "Basic " + encoded);
|
|||
|
Postrequest.PreAuthenticate = true;
|
|||
|
|
|||
|
using (var streamWriter = new StreamWriter(Postrequest.GetRequestStream()))
|
|||
|
{
|
|||
|
if (paramter != "NULL")
|
|||
|
{
|
|||
|
string json = "<real val=\"" + paramter + "\"/>";
|
|||
|
streamWriter.Write(json);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
string json = "<real val= NULL />";
|
|||
|
streamWriter.Write(json);
|
|||
|
}
|
|||
|
}
|
|||
|
HttpWebResponse response = (HttpWebResponse)Postrequest.GetResponse();
|
|||
|
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
|
|||
|
XmlDocument xmlDoc = new XmlDocument();
|
|||
|
xmlDoc.LoadXml(responseString);
|
|||
|
string jsonText = JsonConvert.SerializeXmlNode(xmlDoc);
|
|||
|
//JObject resultVal = (JObject)JsonConvert.DeserializeObject(jsonText);
|
|||
|
|
|||
|
return jsonText;
|
|||
|
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
logger.LogError("【WeatherAPIJob】" + "Fetch_PostWithJSONFormat:" + ex.ToString());
|
|||
|
throw ex;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public async Task Execute(IJobExecutionContext context)
|
|||
|
{
|
|||
|
Task_Detail task_Detail = new Task_Detail(loggers, backendRepository);
|
|||
|
try
|
|||
|
{
|
|||
|
|
|||
|
//取得氣象預報
|
|||
|
if (await task_Detail.GetNeedWorkTask("WeatherAPI", "api_weateher"))
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
await task_Detail.InsertWorkTime("WeatherAPI", "api_weateher");
|
|||
|
var client = new HttpClient();
|
|||
|
var DataNO = "F-D0047-061";
|
|||
|
var UVUri = "https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-D0047-061?Authorization=CWB-EA24220B-DDCC-4188-84E5-AD37A0E03F80&format=JSON&locationName=%E4%BF%A1%E7%BE%A9%E5%8D%80&elementName=Wx,PoP12h,T,RH";
|
|||
|
HttpResponseMessage response = client.GetAsync(UVUri).Result;
|
|||
|
String jsonUVs = response.Content.ReadAsStringAsync().Result.ToString();
|
|||
|
|
|||
|
var observation = JsonConvert.DeserializeObject<Root>(jsonUVs);
|
|||
|
logger.LogInformation("【WeatherAPIJob】【取得成功氣象預報】");
|
|||
|
|
|||
|
if (observation.Success != "true")
|
|||
|
{
|
|||
|
logger.LogInformation("【WeatherAPIJob】【取得氣象預報資料不正確】");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
logger.LogInformation("【WeatherAPIJob】【開始存入氣象預報到資料庫】");
|
|||
|
List<Dictionary<string, object>> WeatherAPIdbS = new List<Dictionary<string, object>>();
|
|||
|
var Type_ALL = observation.Records.Locations[0].Location[0].WeatherElement;
|
|||
|
|
|||
|
foreach (var a in Type_ALL)
|
|||
|
{
|
|||
|
|
|||
|
foreach (var b in a.Time)
|
|||
|
{
|
|||
|
if (a.ElementName == "PoP12h" || a.ElementName == "Wx")
|
|||
|
{
|
|||
|
if (Convert.ToDateTime(b.StartTime) > DateTime.Now.AddDays(1))
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (Convert.ToDateTime(b.DataTime) > DateTime.Now.AddDays(1))
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
Dictionary<string, object> WeatherAPIdb = new Dictionary<string, object>()
|
|||
|
{
|
|||
|
{ "@weather_type", a.ElementName},
|
|||
|
{ "@data_no", DataNO},
|
|||
|
{ "@get_value", b.ElementValue[0].Value},
|
|||
|
{ "@measures", b.ElementValue[0].Measures},
|
|||
|
{ "@created_by", "system"},
|
|||
|
{ "@created_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},
|
|||
|
};
|
|||
|
if (a.ElementName == "PoP12h" || a.ElementName == "Wx")
|
|||
|
{
|
|||
|
WeatherAPIdb.Add("@start_time", b.StartTime);
|
|||
|
WeatherAPIdb.Add("@end_time", b.EndTime);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
WeatherAPIdb.Add("@start_time", b.DataTime);
|
|||
|
WeatherAPIdb.Add("@end_time", null);
|
|||
|
}
|
|||
|
WeatherAPIdbS.Add(WeatherAPIdb);
|
|||
|
|
|||
|
if (a.ElementName == "Wx")
|
|||
|
{
|
|||
|
Dictionary<string, object> TWeatherAPIdb = new Dictionary<string, object>()
|
|||
|
{
|
|||
|
{ "@weather_type", "WxV"},
|
|||
|
{ "@data_no", DataNO},
|
|||
|
{ "@get_value", b.ElementValue[1].Value},
|
|||
|
{ "@measures", b.ElementValue[1].Measures},
|
|||
|
{ "@start_time", b.StartTime},
|
|||
|
{ "@end_time", b.EndTime},
|
|||
|
{ "@created_by", "system"},
|
|||
|
{ "@created_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},
|
|||
|
};
|
|||
|
WeatherAPIdbS.Add(TWeatherAPIdb);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
await backendRepository.AddMutiByCustomTable(WeatherAPIdbS, "api_weateher");
|
|||
|
}
|
|||
|
|
|||
|
await task_Detail.InsertWorkTime_End("WeatherAPI", "api_weateher");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
await task_Detail.WorkFail("WeatherAPI", "api_weateher", ex.Message.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (await task_Detail.GetNeedWorkTask("WeatherAPI", "api_rain"))
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
await task_Detail.InsertWorkTime("WeatherAPI", "api_rain");
|
|||
|
WebClient mywebClient = new WebClient();
|
|||
|
mywebClient.DownloadFile("https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/W-C0033-003?Authorization=CWB-EA24220B-DDCC-4188-84E5-AD37A0E03F80&downloadType=WEB&format=CAP", @"root/PowerfulRain.xml");
|
|||
|
XmlDocument doc = new XmlDocument();
|
|||
|
doc.Load("root/PowerfulRain.xml");
|
|||
|
var json = JsonConvert.SerializeXmlNode(doc);
|
|||
|
var haveinfo = json.Split("info");
|
|||
|
if (haveinfo.Length > 2)
|
|||
|
{
|
|||
|
var observation = JsonConvert.DeserializeObject<RainAPIInfoList>(json);
|
|||
|
var area = observation.Alert.Info[0].Area.Where(a => a.Geocode.Value == "63").Select(a => a.AreaDesc).FirstOrDefault();
|
|||
|
var sql = $"select id from api_rain where msgType = '{observation.Alert.MsgType}' and onset = '{observation.Alert.Info[0].Onset.ToString("yyyy-MM-dd HH:mm:ss")}' and expires = '{observation.Alert.Info[0].Expires.ToString("yyyy-MM-dd HH:mm:ss")}'";
|
|||
|
var NeedCallApi = await backendRepository.GetOneAsync<int>(sql);
|
|||
|
|
|||
|
Dictionary<string, object> RainAPIdb = new Dictionary<string, object>()
|
|||
|
{
|
|||
|
{ "@msgType", observation.Alert.MsgType},
|
|||
|
{ "@headline", observation.Alert.Info[0].Headline},
|
|||
|
{ "@areaDesc", area},
|
|||
|
{ "@onset", observation.Alert.Info[0].Onset},
|
|||
|
{ "@expires", observation.Alert.Info[0].Expires},
|
|||
|
{ "@created_by", "system"},
|
|||
|
{ "@created_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},
|
|||
|
};
|
|||
|
var id = await backendRepository.AddOneByCustomTableReturnId(RainAPIdb, "api_rain");
|
|||
|
if (NeedCallApi != 0)
|
|||
|
{
|
|||
|
var val = RainValue(observation.Alert.MsgType, observation.Alert.Info[0].Headline);
|
|||
|
if (val < 5)
|
|||
|
{
|
|||
|
var ReStr = Fetch_PostWithJSONFormat("http://60.251.164.125:8080/obix/config/Arena/D2/CWB/L110/CAP/D2_CWB_L110_CAP_MET1/SeverityLEVL_RAIN/set", val.ToString());
|
|||
|
UpdatedNiagara("api_rain", ReStr, id);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
FolderFunction folderFunction = new FolderFunction();
|
|||
|
folderFunction.DeleteFile("root/PowerfulRain.xml");
|
|||
|
await task_Detail.InsertWorkTime_End("WeatherAPI", "api_rain");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var observation = JsonConvert.DeserializeObject<RainAPI>(json);
|
|||
|
var area = observation.Alert.Info.Area.Where(a => a.Geocode.Value == "63").Select(a => a.AreaDesc).FirstOrDefault();
|
|||
|
var sql = $"select id from api_rain where msgType = '{observation.Alert.MsgType}' and onset = '{observation.Alert.Info.Onset.ToString("yyyy-MM-dd HH:mm:ss")}' and expires = '{observation.Alert.Info.Expires.ToString("yyyy-MM-dd HH:mm:ss")}'";
|
|||
|
var NeedCallApi = await backendRepository.GetOneAsync<int>(sql);
|
|||
|
|
|||
|
Dictionary<string, object> RainAPIdb = new Dictionary<string, object>()
|
|||
|
{
|
|||
|
{ "@msgType", observation.Alert.MsgType},
|
|||
|
{ "@headline", observation.Alert.Info.Headline},
|
|||
|
{ "@areaDesc", area},
|
|||
|
{ "@onset", observation.Alert.Info.Onset},
|
|||
|
{ "@expires", observation.Alert.Info.Expires},
|
|||
|
{ "@created_by", "system"},
|
|||
|
{ "@created_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},
|
|||
|
};
|
|||
|
var id = await backendRepository.AddOneByCustomTableReturnId(RainAPIdb, "api_rain");
|
|||
|
if (NeedCallApi != 0)
|
|||
|
{
|
|||
|
var val = RainValue(observation.Alert.MsgType, observation.Alert.Info.Headline);
|
|||
|
if (val < 5)
|
|||
|
{
|
|||
|
var ReStr = Fetch_PostWithJSONFormat("http://60.251.164.125:8080/obix/config/Arena/D2/CWB/L110/CAP/D2_CWB_L110_CAP_MET1/SeverityLEVL_RAIN/set", val.ToString());
|
|||
|
UpdatedNiagara("api_rain", ReStr, id);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
FolderFunction folderFunction = new FolderFunction();
|
|||
|
folderFunction.DeleteFile("root/PowerfulRain.xml");
|
|||
|
await task_Detail.InsertWorkTime_End("WeatherAPI", "api_rain");
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
await task_Detail.WorkFail("WeatherAPI", "api_rain", ex.Message.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (await task_Detail.GetNeedWorkTask("WeatherAPI", "api_typhoon"))
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
await task_Detail.InsertWorkTime("WeatherAPI", "api_typhoon");
|
|||
|
WebClient mywebClient = new WebClient();
|
|||
|
mywebClient.DownloadFile("https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/W-C0034-001?Authorization=CWB-EA24220B-DDCC-4188-84E5-AD37A0E03F80&downloadType=WEB&format=CAP", @"root/Typhoon.xml");
|
|||
|
XmlDocument doc = new XmlDocument();
|
|||
|
doc.Load("root/Typhoon.xml");
|
|||
|
var json = JsonConvert.SerializeXmlNode(doc);
|
|||
|
var haveinfo = json.Split("info");
|
|||
|
|
|||
|
if (haveinfo.Length > 2)
|
|||
|
{
|
|||
|
var observation = JsonConvert.DeserializeObject<RainAPIInfoList>(json);
|
|||
|
var area = observation.Alert.Info[0].Area.Where(a => a.Geocode.Value == "63").Select(a => a.AreaDesc).FirstOrDefault();
|
|||
|
var sql = $"select id from api_typhoon where msgType = '{observation.Alert.MsgType}' and onset = '{observation.Alert.Info[0].Onset.ToString("yyyy-MM-dd HH:mm:ss")}' and expires = '{observation.Alert.Info[0].Expires.ToString("yyyy-MM-dd HH:mm:ss")}'";
|
|||
|
var NeedCallApi = await backendRepository.GetOneAsync<int>(sql);
|
|||
|
Dictionary<string, object> EarthquakeAPIdb = new Dictionary<string, object>()
|
|||
|
{
|
|||
|
{ "@msgType", observation.Alert.MsgType},
|
|||
|
{ "@headline", observation.Alert.Info[0].Headline},
|
|||
|
{ "@areaDesc", area},
|
|||
|
{ "@urgency",observation.Alert.Info[0].Urgency},
|
|||
|
{ "@severity",observation.Alert.Info[0].Severity},
|
|||
|
{ "@onset", observation.Alert.Info[0].Onset},
|
|||
|
{ "@expires", observation.Alert.Info[0].Expires},
|
|||
|
{ "@created_by", "system"},
|
|||
|
{ "@created_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},
|
|||
|
};
|
|||
|
var id = await backendRepository.AddOneByCustomTableReturnId(EarthquakeAPIdb, "api_typhoon");
|
|||
|
if (NeedCallApi != 0)
|
|||
|
{
|
|||
|
if (observation.Alert.Info[0].Urgency != null && observation.Alert.Info[0].Urgency != "Expected")
|
|||
|
{
|
|||
|
|
|||
|
var ReStr = Fetch_PostWithJSONFormat("http://60.251.164.125:8080/obix/config/Arena/D2/CWB/L110/CAP/D2_CWB_L110_CAP_MET2/SeverityLEVL_Typhoon/set", observation.Alert.Info[0].Urgency);
|
|||
|
UpdatedNiagara("api_typhoon", ReStr, id);
|
|||
|
}
|
|||
|
}
|
|||
|
FolderFunction folderFunction = new FolderFunction();
|
|||
|
folderFunction.DeleteFile("root/Typhoon.xml");
|
|||
|
await task_Detail.InsertWorkTime_End("WeatherAPI", "api_typhoon");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var observation = JsonConvert.DeserializeObject<RainAPI>(json);
|
|||
|
var area = observation.Alert.Info.Area.Where(a => a.Geocode.Value == "63").Select(a => a.AreaDesc).FirstOrDefault();
|
|||
|
var sql = $"select id from api_typhoon where msgType = '{observation.Alert.MsgType}' and onset = '{observation.Alert.Info.Onset.ToString("yyyy-MM-dd HH:mm:ss")}' and expires = '{observation.Alert.Info.Expires.ToString("yyyy-MM-dd HH:mm:ss")}'";
|
|||
|
var NeedCallApi = await backendRepository.GetOneAsync<int>(sql);
|
|||
|
Dictionary<string, object> EarthquakeAPIdb = new Dictionary<string, object>()
|
|||
|
{
|
|||
|
{ "@msgType", observation.Alert.MsgType},
|
|||
|
{ "@headline", observation.Alert.Info.Headline},
|
|||
|
{ "@areaDesc", area},
|
|||
|
{ "@urgency",observation.Alert.Info.Urgency},
|
|||
|
{ "@severity",observation.Alert.Info.Severity},
|
|||
|
{ "@onset", observation.Alert.Info.Onset},
|
|||
|
{ "@expires", observation.Alert.Info.Expires},
|
|||
|
{ "@created_by", "system"},
|
|||
|
{ "@created_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},
|
|||
|
};
|
|||
|
var id = await backendRepository.AddOneByCustomTableReturnId(EarthquakeAPIdb, "api_typhoon");
|
|||
|
if (NeedCallApi != 0)
|
|||
|
{
|
|||
|
if (observation.Alert.Info.Urgency != null && observation.Alert.Info.Urgency != "Expected")
|
|||
|
{
|
|||
|
|
|||
|
var ReStr = Fetch_PostWithJSONFormat("http://60.251.164.125:8080/obix/config/Arena/D2/CWB/L110/CAP/D2_CWB_L110_CAP_MET2/SeverityLEVL_Typhoon/set", observation.Alert.Info.Urgency);
|
|||
|
UpdatedNiagara("api_typhoon", ReStr, id);
|
|||
|
}
|
|||
|
}
|
|||
|
FolderFunction folderFunction = new FolderFunction();
|
|||
|
folderFunction.DeleteFile("root/Typhoon.xml");
|
|||
|
await task_Detail.InsertWorkTime_End("WeatherAPI", "api_typhoon");
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
await task_Detail.WorkFail("WeatherAPI", "api_typhoon", ex.Message.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
if (await task_Detail.GetNeedWorkTask("WeatherAPI", "api_earthquake"))
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
await task_Detail.InsertWorkTime("WeatherAPI", "api_earthquake");
|
|||
|
var client = new HttpClient();
|
|||
|
var UVUri = "https://opendata.cwb.gov.tw/api/v1/rest/datastore/E-A0015-001?Authorization=CWB-EA24220B-DDCC-4188-84E5-AD37A0E03F80&format=JSON&areaName=%E8%87%BA%E5%8C%97%E5%B8%82";
|
|||
|
HttpResponseMessage response = client.GetAsync(UVUri).Result;
|
|||
|
String jsonUVs = response.Content.ReadAsStringAsync().Result.ToString();
|
|||
|
var observation = JsonConvert.DeserializeObject<Root2>(jsonUVs);
|
|||
|
if (observation.Success != "true")
|
|||
|
{
|
|||
|
logger.LogInformation("【WeatherAPIJob】【取得地震觀測資料不正確】");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
logger.LogInformation("【WeatherAPIJob】【開始存入地震觀測到資料庫】");
|
|||
|
List<Dictionary<string, object>> EarthquakeAPIdbS = new List<Dictionary<string, object>>();
|
|||
|
var nowNo = await backendRepository.GetOneAsync<int>("select iif( Max(earthquakeNo) is null ,0,Max(earthquakeNo)) earthquakeNo from api_earthquake where newEarthquake = 1");
|
|||
|
foreach (var a in observation.Records.Earthquake)
|
|||
|
{
|
|||
|
if (a.EarthquakeNo <= nowNo)
|
|||
|
{
|
|||
|
Dictionary<string, object> EarthquakeAPIdb = new Dictionary<string, object>()
|
|||
|
{
|
|||
|
{ "@earthquakeNo", a.EarthquakeNo},
|
|||
|
{ "@newEarthquake", 0},
|
|||
|
{ "@originTime", a.EarthquakeInfo.OriginTime},
|
|||
|
{ "@magnitudeValue", a.EarthquakeInfo.Magnitude.MagnitudeValue},
|
|||
|
{ "@areaName", null},
|
|||
|
{ "@areaIntensity", null},
|
|||
|
{ "@created_by", "system"},
|
|||
|
{ "@created_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},
|
|||
|
};
|
|||
|
EarthquakeAPIdbS.Add(EarthquakeAPIdb);
|
|||
|
break;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (a.Intensity.ShakingArea.Count > 0)
|
|||
|
{
|
|||
|
Dictionary<string, object> EarthquakeAPIdb = new Dictionary<string, object>()
|
|||
|
{
|
|||
|
{ "@earthquakeNo", a.EarthquakeNo},
|
|||
|
{ "@newEarthquake", 1},
|
|||
|
{ "@originTime", a.EarthquakeInfo.OriginTime},
|
|||
|
{ "@magnitudeValue", a.EarthquakeInfo.Magnitude.MagnitudeValue},
|
|||
|
{ "@areaName", a.Intensity.ShakingArea[0].AreaName},
|
|||
|
{ "@areaIntensity", a.Intensity.ShakingArea[0].AreaIntensity.Value},
|
|||
|
{ "@created_by", "system"},
|
|||
|
{ "@created_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
var Nag = Fetch_PostWithJSONFormat("http://60.251.164.125:8080/obix/config/Arena/D2/CWB/L110/CAP/D2_CWB_L110_CAP_GEO/SeverityLEVL_LMI/set", a.Intensity.ShakingArea[0].AreaIntensity.Value.ToString());
|
|||
|
|
|||
|
if (Nag.Contains("err"))
|
|||
|
{
|
|||
|
EarthquakeAPIdb.Add("@niagara", Nag);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
EarthquakeAPIdb.Add("@niagara", "success");
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
EarthquakeAPIdbS.Add(EarthquakeAPIdb);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Dictionary<string, object> EarthquakeAPIdb = new Dictionary<string, object>()
|
|||
|
{
|
|||
|
{ "@earthquakeNo", a.EarthquakeNo},
|
|||
|
{ "@newEarthquake", 1},
|
|||
|
{ "@originTime", a.EarthquakeInfo.OriginTime},
|
|||
|
{ "@magnitudeValue", a.EarthquakeInfo.Magnitude.MagnitudeValue},
|
|||
|
{ "@areaName", null},
|
|||
|
{ "@areaIntensity", null},
|
|||
|
{ "@created_by", "system"},
|
|||
|
{ "@created_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},
|
|||
|
};
|
|||
|
|
|||
|
var Nag = Fetch_PostWithJSONFormat("http://60.251.164.125:8080/obix/config/Arena/D2/CWB/L110/CAP/D2_CWB_L110_CAP_GEO/SeverityLEVL_LMI/set", "NULL");
|
|||
|
if (Nag.Contains("err"))
|
|||
|
{
|
|||
|
EarthquakeAPIdb.Add("@niagara", Nag);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
EarthquakeAPIdb.Add("@niagara", "success");
|
|||
|
}
|
|||
|
EarthquakeAPIdbS.Add(EarthquakeAPIdb);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
await backendRepository.AddMutiByCustomTable(EarthquakeAPIdbS, "api_earthquake");
|
|||
|
}
|
|||
|
await task_Detail.InsertWorkTime_End("WeatherAPI", "api_earthquake");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
await task_Detail.WorkFail("WeatherAPI", "api_earthquake", ex.Message.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
if (await task_Detail.GetNeedWorkTask("WeatherAPI", "set_weather"))
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
await task_Detail.InsertWorkTime("WeatherAPI", "set_weather");
|
|||
|
var sql = @$"SELECT
|
|||
|
id,
|
|||
|
weather_type,
|
|||
|
get_value
|
|||
|
FROM api_weateher
|
|||
|
where id in (select MAX(id) from api_weateher where start_time < GETDATE() group by weather_type)
|
|||
|
order by start_time desc";
|
|||
|
var types = await backendRepository.GetAllAsync<ShowWeather>(sql);
|
|||
|
var T = types.Where(a => a.weather_type == "T").FirstOrDefault();
|
|||
|
var RbT = Fetch_PostWithJSONFormat("http://60.251.164.125:8080/obix/config/Arena/D2/CWB/L110/OPD/D2_CWB_L110_OPD_element/T/set", T.get_value);
|
|||
|
UpdatedNiagara("api_weateher", RbT, T.id);
|
|||
|
|
|||
|
var RH = types.Where(a => a.weather_type == "RH").FirstOrDefault();
|
|||
|
var RHT = Fetch_PostWithJSONFormat("http://60.251.164.125:8080/obix/config/Arena/D2/CWB/L110/OPD/D2_CWB_L110_OPD_element/RH/set", RH.get_value);
|
|||
|
UpdatedNiagara("api_weateher", RHT, RH.id);
|
|||
|
|
|||
|
var PoP12h = types.Where(a => a.weather_type == "PoP12h").FirstOrDefault();
|
|||
|
var PoP12hT = Fetch_PostWithJSONFormat("http://60.251.164.125:8080/obix/config/Arena/D2/CWB/L110/OPD/D2_CWB_L110_OPD_element/PoP6h/set", PoP12h.get_value);
|
|||
|
UpdatedNiagara("api_weateher", PoP12hT, PoP12h.id);
|
|||
|
|
|||
|
var Wx = types.Where(a => a.weather_type == "Wx").FirstOrDefault();
|
|||
|
var WxT = Fetch_PostWithJSONFormat("http://60.251.164.125:8080/obix/config/Arena/D2/CWB/L110/OPD/D2_CWB_L110_OPD_element/Wx/set", Wx.get_value);
|
|||
|
UpdatedNiagara("api_weateher", WxT, Wx.id);
|
|||
|
await task_Detail.InsertWorkTime_End("WeatherAPI", "set_weather");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
await task_Detail.WorkFail("WeatherAPI", "set_weather", ex.Message.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception exception)
|
|||
|
{
|
|||
|
logger.LogError("【WeatherAPIJob】【任務失敗】");
|
|||
|
logger.LogError("【WeatherAPIJob】【任務失敗】[Exception]:{0}", exception.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public int RainValue(string Ty, string Headline)
|
|||
|
{
|
|||
|
var rint = 5;
|
|||
|
if (Ty == "")
|
|||
|
{
|
|||
|
return 0;
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (Headline.Contains("大雨"))
|
|||
|
{
|
|||
|
rint = 1;
|
|||
|
}
|
|||
|
else if (Headline.Contains("豪雨"))
|
|||
|
{
|
|||
|
rint = 2;
|
|||
|
}
|
|||
|
else if (Headline.Contains("大豪雨"))
|
|||
|
{
|
|||
|
rint = 3;
|
|||
|
}
|
|||
|
else if (Headline.Contains("超大豪雨"))
|
|||
|
{
|
|||
|
rint = 4;
|
|||
|
}
|
|||
|
}
|
|||
|
return rint;
|
|||
|
}
|
|||
|
|
|||
|
public async void UpdatedNiagara(string DBTableName, string ResponseStr, int CheckNumId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var Su = "success";
|
|||
|
|
|||
|
if (ResponseStr.Contains("err"))
|
|||
|
{
|
|||
|
Su = ResponseStr;
|
|||
|
}
|
|||
|
Dictionary<string, object> RainAPIdb = new Dictionary<string, object>()
|
|||
|
{
|
|||
|
{ "@niagara", Su}
|
|||
|
};
|
|||
|
await backendRepository.UpdateOneByCustomTable(RainAPIdb, DBTableName, " id = " + CheckNumId);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
logger.LogError("【WeatherAPIJob】" + "UpdatedNiagara:" + ex.ToString());
|
|||
|
throw ex;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|