2022-11-02 17:26:18 +08:00
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
using Repository.BackendRepository.Interface;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System;
|
|
|
|
|
//using Backend.Models;
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using Backend.Services;
|
|
|
|
|
using Backend.Services.Implement;
|
|
|
|
|
using Repository.Models;
|
2022-12-31 16:49:47 +08:00
|
|
|
|
using System.Linq;
|
2023-01-13 17:28:23 +08:00
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using NPOI.SS.Formula.Functions;
|
2023-03-02 14:24:34 +08:00
|
|
|
|
using Repository.Helper;
|
2023-04-25 00:48:12 +08:00
|
|
|
|
using Microsoft.AspNetCore.Routing.Matching;
|
2022-11-02 17:26:18 +08:00
|
|
|
|
|
|
|
|
|
namespace Backend.Controllers
|
|
|
|
|
{
|
|
|
|
|
public class NiagaraDataSynchronizeController : MybaseController<NiagaraDataSynchronizeController>
|
|
|
|
|
{
|
|
|
|
|
private readonly IBackendRepository backendRepository;
|
|
|
|
|
//private readonly IDeviceImportRepository deviceImportRepository;
|
|
|
|
|
private readonly INiagaraDataSynchronizeRepository niagaraDataSynchronizeRepository;
|
2023-03-02 14:24:34 +08:00
|
|
|
|
private readonly IBackEndConfigHelper backEndConfig;
|
|
|
|
|
public NiagaraDataSynchronizeController(IBackendRepository backendRepository, INiagaraDataSynchronizeRepository niagaraDataSynchronizeRepository,IBackEndConfigHelper backEndConfig)
|
2022-11-02 17:26:18 +08:00
|
|
|
|
{
|
|
|
|
|
this.backendRepository = backendRepository;
|
|
|
|
|
//this.deviceImportRepository = deviceImportRepository;
|
|
|
|
|
this.niagaraDataSynchronizeRepository = niagaraDataSynchronizeRepository;
|
2023-03-02 14:24:34 +08:00
|
|
|
|
this.backEndConfig = backEndConfig;
|
2022-11-02 17:26:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IActionResult Index()
|
|
|
|
|
{
|
|
|
|
|
return View();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// N4匯入列表
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpPost]
|
|
|
|
|
public Task<ApiResult<List<Device_value>>> RawDataList()
|
|
|
|
|
{
|
|
|
|
|
ApiResult<List<Device_value>> apiResult = new ApiResult<List<Device_value>>();
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
2023-04-24 18:29:45 +08:00
|
|
|
|
var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
|
|
|
|
|
var variableObix = backendRepository.GetAllAsync<Backend.Models.KeyValue>(sqlObix).Result;
|
|
|
|
|
var obixApiConfig = new Backend.Models.ObixApiConfig();
|
|
|
|
|
EDFunction ed = new EDFunction();
|
|
|
|
|
obixApiConfig.ApiBase = variableObix.Where(x => x.Name == "ApiBase").Select(x => x.Value).FirstOrDefault() + "obix/config/Program/ObixQuery/query/";
|
2023-05-10 15:14:46 +08:00
|
|
|
|
//obixApiConfig.UrlSlot =variableObix.Where(x => x.Name == "url_slot").Select(x => x.Value).FirstOrDefault();
|
2023-04-26 01:16:05 +08:00
|
|
|
|
obixApiConfig.TagQuantity = variableObix.Where(x => x.Name == "tag_quantity").Select(x => x.Value).FirstOrDefault();
|
2023-04-26 17:43:55 +08:00
|
|
|
|
obixApiConfig.UserName = variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault();
|
|
|
|
|
obixApiConfig.Password = variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault();
|
2023-04-24 18:29:45 +08:00
|
|
|
|
|
2023-05-10 15:14:46 +08:00
|
|
|
|
var ds = new List<Device_value>();
|
2022-12-22 10:11:31 +08:00
|
|
|
|
|
2022-11-30 18:22:40 +08:00
|
|
|
|
string top100 = "";//" top 100 ";
|
2022-11-02 17:26:18 +08:00
|
|
|
|
webRequestService svc = new webRequestService();
|
2023-05-10 15:14:46 +08:00
|
|
|
|
var urlSlots = backendRepository.GetAllAsync<string>("select obixSlot from building where deleted = 0").Result;
|
|
|
|
|
foreach(var us in urlSlots)
|
|
|
|
|
{
|
|
|
|
|
string bql = us + "bql:select " + top100 + " * from baja:Folder ";
|
|
|
|
|
//ds = svc.obixQuery("http://192.168.0.136:8080/obix/config/Arena/Program/ObixQuery/query/", bql);
|
|
|
|
|
//ds = svc.obixQuery("http://localhost:8080/obix/config/Program/ObixQuery/query/", bql);
|
|
|
|
|
ds.AddRange(svc.obixQuery(obixApiConfig.ApiBase, bql, obixApiConfig.TagQuantity, obixApiConfig.UserName, obixApiConfig.Password));//三菱
|
|
|
|
|
}
|
2022-11-02 17:26:18 +08:00
|
|
|
|
|
|
|
|
|
apiResult.Code = "0000";
|
|
|
|
|
apiResult.Data = ds;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception exception)
|
|
|
|
|
{
|
|
|
|
|
apiResult.Code = "9999";
|
|
|
|
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//return apiResult;
|
|
|
|
|
return Task.FromResult(apiResult);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 比對N4與資料表,有差異在同步至資料表中
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpPost]
|
2022-12-31 16:49:47 +08:00
|
|
|
|
public async Task<ApiResult<bool>> CompareData([FromBody] List<Device_value> ds)
|
2022-11-02 17:26:18 +08:00
|
|
|
|
{
|
|
|
|
|
bool result = false;
|
2022-12-31 16:49:47 +08:00
|
|
|
|
|
2022-11-02 17:26:18 +08:00
|
|
|
|
ApiResult<bool> apiResult = new ApiResult<bool>();
|
2023-04-11 10:28:33 +08:00
|
|
|
|
string tag_quantity = backEndConfig.Getobixtag_quantity();
|
|
|
|
|
|
2022-11-02 17:26:18 +08:00
|
|
|
|
try
|
2023-03-28 13:48:30 +08:00
|
|
|
|
{
|
2023-04-21 02:06:32 +08:00
|
|
|
|
string ss = ds.Where(x => x.tag_name != "").FirstOrDefault().tag_name;
|
2023-05-10 15:14:46 +08:00
|
|
|
|
var data = ds.Where(x => x.tag_name != "");
|
|
|
|
|
List<string> building = null;
|
2023-04-25 00:48:12 +08:00
|
|
|
|
if (tag_quantity == "5")
|
|
|
|
|
{
|
2023-05-10 15:14:46 +08:00
|
|
|
|
//building.Add(ss.Split("_")[0]);
|
|
|
|
|
building = data.GroupBy(x => x.tag_name.Split("_")[0]).Select(x => x.Key).ToList();
|
2023-04-25 00:48:12 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2023-05-10 15:14:46 +08:00
|
|
|
|
//building.Add(ss.Split("_")[1]);
|
|
|
|
|
building = data.GroupBy(x => x.tag_name.Split("_")[1]).Select(x => x.Key).ToList();
|
2023-04-25 00:48:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-03-28 13:48:30 +08:00
|
|
|
|
string LightSwitchLevel = await niagaraDataSynchronizeRepository.getLightSwitchLevel(); //獲取照明開關 是否在 device or device_node
|
2023-04-25 22:22:20 +08:00
|
|
|
|
await niagaraDataSynchronizeRepository.InsertNiagaraTagList(ds, building, tag_quantity); // 匯入 MySQL table: import_niagara_tag
|
2023-03-28 13:48:30 +08:00
|
|
|
|
await niagaraDataSynchronizeRepository.DeviceComparison(LightSwitchLevel);
|
2023-02-08 15:17:03 +08:00
|
|
|
|
await niagaraDataSynchronizeRepository.CheckDiffFullNameAndCover();
|
2023-02-07 11:55:52 +08:00
|
|
|
|
await niagaraDataSynchronizeRepository.CheckFullNameEmptyReplaceByDeviceName();
|
2022-11-02 17:26:18 +08:00
|
|
|
|
await niagaraDataSynchronizeRepository.InsertBuildingMenu();
|
|
|
|
|
await niagaraDataSynchronizeRepository.InsertSubSystemFloor();
|
|
|
|
|
result = true;
|
|
|
|
|
|
|
|
|
|
apiResult.Code = "0000";
|
|
|
|
|
apiResult.Data = result;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception exception)
|
|
|
|
|
{
|
|
|
|
|
apiResult.Code = "9999";
|
|
|
|
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return apiResult;
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 17:28:23 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// N4匯入列表(device_item)
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpPost]
|
2023-04-21 17:40:18 +08:00
|
|
|
|
public Task<ApiResult<List<ImpNiaItem>>> RawDataDevItemList([FromBody] Device_value building)
|
2023-01-13 17:28:23 +08:00
|
|
|
|
{
|
|
|
|
|
ApiResult<List<ImpNiaItem>> apiResult = new ApiResult<List<ImpNiaItem>>();
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
2023-05-10 15:14:46 +08:00
|
|
|
|
var ds = new List<ImpNiaItem>();
|
2023-01-13 17:28:23 +08:00
|
|
|
|
|
|
|
|
|
webRequestService svc = new webRequestService();
|
|
|
|
|
|
2023-04-24 18:29:45 +08:00
|
|
|
|
var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
|
|
|
|
|
var variableObix = backendRepository.GetAllAsync<Backend.Models.KeyValue>(sqlObix).Result;
|
|
|
|
|
var obixApiConfig = new Backend.Models.ObixApiConfig();
|
|
|
|
|
EDFunction ed = new EDFunction();
|
|
|
|
|
obixApiConfig.ApiBase = variableObix.Where(x => x.Name == "ApiBase").Select(x => x.Value).FirstOrDefault();
|
2023-04-26 01:16:05 +08:00
|
|
|
|
obixApiConfig.UserName = variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault();
|
|
|
|
|
obixApiConfig.Password = variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault();
|
2023-05-10 15:14:46 +08:00
|
|
|
|
//obixApiConfig.UrlSlot = variableObix.Where(x => x.Name == "url_slot").Select(x => x.Value).FirstOrDefault();
|
|
|
|
|
|
|
|
|
|
var urlSlots = backendRepository.GetAllAsync<string>("select obixSlot from building where deleted = 0").Result;
|
|
|
|
|
foreach(var us in urlSlots)
|
|
|
|
|
{
|
|
|
|
|
var data = svc.obixHisQuery(obixApiConfig.ApiBase + "obix/config/Program/ObixQuery/query/", obixApiConfig.ApiBase + "obix/histories", us,
|
|
|
|
|
obixApiConfig.UserName, obixApiConfig.Password);
|
|
|
|
|
ds.AddRange(data);
|
|
|
|
|
}
|
2023-04-21 17:40:18 +08:00
|
|
|
|
|
2023-05-10 15:14:46 +08:00
|
|
|
|
var buildings = backendRepository.GetAllAsync<string>("select building_tag from building where deleted = 0").Result;
|
2023-01-13 17:28:23 +08:00
|
|
|
|
apiResult.Code = "0000";
|
2023-05-10 15:14:46 +08:00
|
|
|
|
apiResult.Data = ds.Where(x => buildings.Contains(x.device_building_tag)).ToList();
|
2023-01-13 17:28:23 +08:00
|
|
|
|
}
|
|
|
|
|
catch (Exception exception)
|
|
|
|
|
{
|
|
|
|
|
apiResult.Code = "9999";
|
|
|
|
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//return apiResult;
|
|
|
|
|
return Task.FromResult(apiResult);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 比對N4與資料表,有差異在同步至資料表中(device_item)
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpPost]
|
|
|
|
|
public async Task<ApiResult<bool>> DevIteComData([FromBody] List<ImpNiaItem> ds)
|
|
|
|
|
{
|
|
|
|
|
bool result = false;
|
|
|
|
|
|
|
|
|
|
ApiResult<bool> apiResult = new ApiResult<bool>();
|
|
|
|
|
try
|
|
|
|
|
{
|
2023-04-21 02:06:32 +08:00
|
|
|
|
if (ds.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
//string ss = ds.Where(x => x.tag_name != "").FirstOrDefault().tag_name;
|
|
|
|
|
//var building = ss.Split("_")[0];
|
|
|
|
|
|
2023-05-10 15:14:46 +08:00
|
|
|
|
var building = ds.GroupBy(x => x.device_building_tag).Select(x => x.Key).ToList();
|
2023-04-21 02:06:32 +08:00
|
|
|
|
await niagaraDataSynchronizeRepository.InsertItemFromNiagara(ds, building); // insert 暫存table import_niagara_item
|
|
|
|
|
await niagaraDataSynchronizeRepository.DeviceItemComparison(); //insert device_item
|
|
|
|
|
await niagaraDataSynchronizeRepository.CheckItemDiffFullNameAndCover(); // update device_item.fullname
|
|
|
|
|
await niagaraDataSynchronizeRepository.ItemCheckFullNameEmptyReplaceByDeviceName(); // 檢查device_item內FullName為空的值,以points取代
|
|
|
|
|
await niagaraDataSynchronizeRepository.CheckItemIsShowHistory();
|
|
|
|
|
result = true;
|
|
|
|
|
|
|
|
|
|
apiResult.Code = "0000";
|
|
|
|
|
apiResult.Data = result;
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 17:28:23 +08:00
|
|
|
|
}
|
|
|
|
|
catch (Exception exception)
|
|
|
|
|
{
|
|
|
|
|
apiResult.Code = "9999";
|
|
|
|
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return apiResult;
|
|
|
|
|
}
|
2022-11-02 17:26:18 +08:00
|
|
|
|
}
|
|
|
|
|
}
|