using FrontendWebApi.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using Repository.BackendRepository.Implement;
using Repository.BackendRepository.Interface;
using Repository.FrontendRepository.Interface;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Ubiety.Dns.Core;
namespace FrontendWebApi.ApiControllers
{
///
/// 告警紀錄
///
public class WarningValueController : MyBaseApiController
{
private readonly IFrontendRepository frontendRepository;
public WarningValueController
(
IFrontendRepository frontendRepository
)
{
this.frontendRepository = frontendRepository;
}
///
/// 取得警戒值
///
///
///
[HttpPost]
[Route("api/WarningValue/GetWarningValue")]
public async Task>>> GetWarningValue()
{
ApiResult> apiResult = new ApiResult>(jwt_str);
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
try
{
List typeNames = Enum.GetNames(typeof(WarningValueType)).ToList();
apiResult.Data = new List();
var sqlString = $@"SELECT system_value FROM variable WHERE system_type = 'obixConfig' AND system_key = 'ApiBase' AND deleted = 0";
string baseApiUrl = await frontendRepository.GetOneAsync(sqlString);
if (string.IsNullOrEmpty(baseApiUrl))
{
apiResult.Code = "9998";
apiResult.Msg = "未找到 obixConfig baseAPI,請聯絡管理者。";
return BadRequest(apiResult);
}
foreach (var typeName in typeNames) {
WarningValueOutput result = new WarningValueOutput();
result.type = Enum.Parse(typeName);
sqlString = @$"SELECT system_value FROM variable WHERE system_type = 'warningValueApi' AND system_key = @type AND deleted = 0";
string apiUrl = await frontendRepository.GetOneAsync(sqlString, new { type = $"get{typeName}" });
if (string.IsNullOrEmpty(apiUrl))
{
apiResult.Code = "9998";
apiResult.Msg = "未找到天氣警戒值 obix API,請聯絡管理者。";
return BadRequest(apiResult);
}
using (HttpClient client = new HttpClient())
{
apiUrl = Path.Combine(baseApiUrl, "obix/config/", apiUrl);
var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
var variableObix = frontendRepository.GetAllAsync(sqlObix).Result;
string username = variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault();
string password = variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault();
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
var response = await client.GetAsync(apiUrl);
var resString = (await response.Content.ReadAsStringAsync()).ToString();
XDocument xmlDoc = XDocument.Parse(resString);
if (xmlDoc?.Root?.Name?.LocalName == "str" || xmlDoc?.Root?.Name?.LocalName == "bool")
{
result.targetValue = xmlDoc.Root.Attribute("val").Value;
}
}
apiResult.Data.Add(result);
}
apiResult.Msg = "讀取成功";
apiResult.Code = "0000";
}
catch (Exception exception)
{
apiResult.Code = "9999";
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
return Ok(apiResult);
}
return Ok(apiResult);
}
///
/// 設定警戒值
///
///
///
[HttpPost]
[Route("api/WarningValue/SetWarningValue")]
public async Task>> SetWarningValue(List wvs)
{
ApiResult apiResult = new ApiResult(jwt_str);
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
try
{
var sqlString = $@"SELECT system_value FROM variable WHERE system_type = 'obixConfig' AND system_key = 'ApiBase' AND deleted = 0";
string baseApiUrl = await frontendRepository.GetOneAsync(sqlString);
if (string.IsNullOrEmpty(baseApiUrl))
{
apiResult.Code = "9998";
apiResult.Msg = "未找到 obixConfig baseAPI,請聯絡管理者。";
return BadRequest(apiResult);
}
foreach (var wv in wvs) {
string typeName = wv.type.ToString();
sqlString = @$"SELECT system_value FROM variable WHERE system_type = 'warningValueApi' AND system_key = @type AND deleted = 0";
string apiUrl = await frontendRepository.GetOneAsync(sqlString, new { type = $"set{typeName}" });
if (string.IsNullOrEmpty(wv.targetValue)) {
apiResult.Code = "9998";
apiResult.Msg = "請輸入欲設定警戒值";
return BadRequest(apiResult);
}
if (string.IsNullOrEmpty(apiUrl))
{
apiResult.Code = "9998";
apiResult.Msg = "未找到天氣警戒值 obix API,請聯絡管理者。";
return BadRequest(apiResult);
}
using (HttpClient client = new HttpClient())
{
apiUrl = Path.Combine(baseApiUrl, "obix/config/", apiUrl);
var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
var variableObix = frontendRepository.GetAllAsync(sqlObix).Result;
string username = variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault();
string password = variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault();
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
// 建構 XML 數據
string xmlData = @$"";
HttpContent content = new StringContent(xmlData, Encoding.UTF8, "application/xml");
var response = await client.PostAsync(apiUrl, content);
var resString = (await response.Content.ReadAsStringAsync()).ToString();
apiResult.Data = resString;
}
}
apiResult.Msg = "設定成功";
apiResult.Code = "0000";
}
catch (Exception exception)
{
apiResult.Code = "9999";
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
return Ok(apiResult);
}
return Ok(apiResult);
}
}
}