Merge branch 'master' of https://gitea.mjm-staging.developers-homelab.net/BIMS/BIMS
This commit is contained in:
commit
b97f7ce6de
95
Backend/Controllers/NiagaraDataSynchronizeController.cs
Normal file
95
Backend/Controllers/NiagaraDataSynchronizeController.cs
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
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;
|
||||||
|
|
||||||
|
namespace Backend.Controllers
|
||||||
|
{
|
||||||
|
public class NiagaraDataSynchronizeController : MybaseController<NiagaraDataSynchronizeController>
|
||||||
|
{
|
||||||
|
private readonly IBackendRepository backendRepository;
|
||||||
|
//private readonly IDeviceImportRepository deviceImportRepository;
|
||||||
|
private readonly INiagaraDataSynchronizeRepository niagaraDataSynchronizeRepository;
|
||||||
|
public NiagaraDataSynchronizeController(IBackendRepository backendRepository, INiagaraDataSynchronizeRepository niagaraDataSynchronizeRepository)
|
||||||
|
{
|
||||||
|
this.backendRepository = backendRepository;
|
||||||
|
//this.deviceImportRepository = deviceImportRepository;
|
||||||
|
this.niagaraDataSynchronizeRepository = niagaraDataSynchronizeRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
{
|
||||||
|
List<Device_value> ds;
|
||||||
|
string url_slot = "slot:/Arena/H|";
|
||||||
|
string top100 = " top 100 ";
|
||||||
|
webRequestService svc = new webRequestService();
|
||||||
|
string bql = url_slot + "bql:select " + top100 + " * from control:ControlPoint ";
|
||||||
|
ds = svc.obixQuery("http://60.251.164.125:8080/obix/config/Arena/Program/ObixQuery/query/", bql);
|
||||||
|
|
||||||
|
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]
|
||||||
|
public async Task<ApiResult<bool>> CompareData(List<Device_value> ds, string building)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
ApiResult<bool> apiResult = new ApiResult<bool>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
await niagaraDataSynchronizeRepository.InsertNiagaraTagList(ds, building);
|
||||||
|
await niagaraDataSynchronizeRepository.InsertItemFromNiagara(ds, building);
|
||||||
|
await niagaraDataSynchronizeRepository.DeviceComparison();
|
||||||
|
await niagaraDataSynchronizeRepository.DeviceItemComparison();
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
97
Backend/N4.xml
Normal file
97
Backend/N4.xml
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<?xml-stylesheet type='text/xsl' href='/obix/xsl'?>
|
||||||
|
<obj display="Component" xmlns="http://obix.org/ns/schema/1.0" xsi:schemaLocation="http://obix.org/ns/schema/1.0 /obix/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<str name="res" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/V1/" href="res/" />
|
||||||
|
<str name="res1" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/V2/" href="res1/" />
|
||||||
|
<str name="res2" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/V3/" href="res2/" />
|
||||||
|
<str name="res3" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/A1/" href="res3/" />
|
||||||
|
<str name="res4" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/A2/" href="res4/" />
|
||||||
|
<str name="res5" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/A3/" href="res5/" />
|
||||||
|
<str name="res6" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/P/" href="res6/" />
|
||||||
|
<str name="res7" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/Q/" href="res7/" />
|
||||||
|
<str name="res8" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/KWH/" href="res8/" />
|
||||||
|
<str name="res9" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/KVARH/" href="res9/" />
|
||||||
|
<str name="res10" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/F/" href="res10/" />
|
||||||
|
<str name="res11" val="/TPE/B1/EE/E4/R2F/NA/TPE_B1_EE_E4_R2F_NA_WHT_N1/PF/" href="res11/" />
|
||||||
|
<str name="res12" val="/TPE/B1/LT/L1/U1F/NA/TPE_B1_LT_L1_U1F_NA_EHL_N1/SSC/" href="res12/" />
|
||||||
|
<str name="res13" val="/TPE/B1/LT/L1/U1F/NA/TPE_B1_LT_L1_U1F_NA_EHL_N1/ST/" href="res13/" />
|
||||||
|
<str name="res14" val="/TPE/B1/LT/L1/U1F/NA/TPE_B1_LT_L1_U1F_NA_EHL_N2/SSC/" href="res14/" />
|
||||||
|
<str name="res15" val="/TPE/B1/LT/L1/U1F/NA/TPE_B1_LT_L1_U1F_NA_EHL_N2/ST/" href="res15/" />
|
||||||
|
<str name="res16" val="/TPE/B1/LT/L1/U1F/NA/TPE_B1_LT_L1_U1F_NA_EHL_N3/SSC/" href="res16/" />
|
||||||
|
<str name="res17" val="/TPE/B1/LT/L1/U1F/NA/TPE_B1_LT_L1_U1F_NA_EHL_N3/ST/" href="res17/" />
|
||||||
|
<str name="res18" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N1/SP_SSC/" href="res18/" />
|
||||||
|
<str name="res19" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N1/SP_MD/" href="res19/" />
|
||||||
|
<str name="res20" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N1/SP_Temp/" href="res20/" />
|
||||||
|
<str name="res21" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N1/SP_AF/" href="res21/" />
|
||||||
|
<str name="res22" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N1/SP_AD/" href="res22/" />
|
||||||
|
<str name="res23" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N1/Temp/" href="res23/" />
|
||||||
|
<str name="res24" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N1/AL/" href="res24/" />
|
||||||
|
<str name="res25" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N1/SSC/" href="res25/" />
|
||||||
|
<str name="res26" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N1/STA_MD/" href="res26/" />
|
||||||
|
<str name="res27" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N1/ST/" href="res27/" />
|
||||||
|
<str name="res28" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N2/SP_SSC/" href="res28/" />
|
||||||
|
<str name="res29" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N2/SP_MD/" href="res29/" />
|
||||||
|
<str name="res30" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N2/SP_Temp/" href="res30/" />
|
||||||
|
<str name="res31" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N2/SP_AF/" href="res31/" />
|
||||||
|
<str name="res32" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N2/SP_AD/" href="res32/" />
|
||||||
|
<str name="res33" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N2/Temp/" href="res33/" />
|
||||||
|
<str name="res34" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N2/AL/" href="res34/" />
|
||||||
|
<str name="res35" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N2/SSC/" href="res35/" />
|
||||||
|
<str name="res36" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N2/STA_MD/" href="res36/" />
|
||||||
|
<str name="res37" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N2/ST/" href="res37/" />
|
||||||
|
<str name="res38" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N3/SP_SSC/" href="res38/" />
|
||||||
|
<str name="res39" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N3/SP_MD/" href="res39/" />
|
||||||
|
<str name="res40" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N3/SP_Temp/" href="res40/" />
|
||||||
|
<str name="res41" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N3/SP_AF/" href="res41/" />
|
||||||
|
<str name="res42" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N3/SP_AD/" href="res42/" />
|
||||||
|
<str name="res43" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N3/Temp/" href="res43/" />
|
||||||
|
<str name="res44" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N3/AL/" href="res44/" />
|
||||||
|
<str name="res45" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N3/SSC/" href="res45/" />
|
||||||
|
<str name="res46" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N3/STA_MD/" href="res46/" />
|
||||||
|
<str name="res47" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N3/ST/" href="res47/" />
|
||||||
|
<str name="res48" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N4/SP_SSC/" href="res48/" />
|
||||||
|
<str name="res49" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N4/SP_MD/" href="res49/" />
|
||||||
|
<str name="res50" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N4/SP_Temp/" href="res50/" />
|
||||||
|
<str name="res51" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N4/SP_AF/" href="res51/" />
|
||||||
|
<str name="res52" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N4/SP_AD/" href="res52/" />
|
||||||
|
<str name="res53" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N4/Temp/" href="res53/" />
|
||||||
|
<str name="res54" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N4/AL/" href="res54/" />
|
||||||
|
<str name="res55" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N4/SSC/" href="res55/" />
|
||||||
|
<str name="res56" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N4/STA_MD/" href="res56/" />
|
||||||
|
<str name="res57" val="/TPE/B1/ME/M10/U1F/NA/TPE_B1_ME_M10_U1F_NA_FCU_N4/ST/" href="res57/" />
|
||||||
|
<str name="res58" val="/TPE/B1/ME/M12/R2F/NA/TPE_B1_ME_M12_R2F_NA_TH_N1/TEMP/" href="res58/" />
|
||||||
|
<str name="res59" val="/TPE/B1/ME/M12/R2F/NA/TPE_B1_ME_M12_R2F_NA_TH_N1/RH/" href="res59/" />
|
||||||
|
<str name="res60" val="/TPE/B1/ME/M12/R2F/NA/TPE_B1_ME_M12_R2F_NA_TH_N1/Or/" href="res60/" />
|
||||||
|
<str name="res61" val="/TPE/B1/ME/M12/R2F/NA/TPE_B1_ME_M12_R2F_NA_TH_N1/TRIP/" href="res61/" />
|
||||||
|
<str name="res62" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/ST/" href="res62/" />
|
||||||
|
<str name="res63" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/TRIP/" href="res63/" />
|
||||||
|
<str name="res64" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/FRC/" href="res64/" />
|
||||||
|
<str name="res65" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_RCS/" href="res65/" />
|
||||||
|
<str name="res66" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_RO/" href="res66/" />
|
||||||
|
<str name="res67" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_1F/" href="res67/" />
|
||||||
|
<str name="res68" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_2F/" href="res68/" />
|
||||||
|
<str name="res69" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_3F/" href="res69/" />
|
||||||
|
<str name="res70" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_4F/" href="res70/" />
|
||||||
|
<str name="res71" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_5F/" href="res71/" />
|
||||||
|
<str name="res72" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_6F/" href="res72/" />
|
||||||
|
<str name="res73" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_7F/" href="res73/" />
|
||||||
|
<str name="res74" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_8F/" href="res74/" />
|
||||||
|
<str name="res75" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_9F/" href="res75/" />
|
||||||
|
<str name="res76" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_10F/" href="res76/" />
|
||||||
|
<str name="res77" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_11F/" href="res77/" />
|
||||||
|
<str name="res78" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_12F/" href="res78/" />
|
||||||
|
<str name="res79" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/SP_FLS_13F/" href="res79/" />
|
||||||
|
<str name="res80" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/DuringFireemergencyreturnoperation/" href="res80/" />
|
||||||
|
<str name="res81" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/CompletionofreturnbyFireemergencyreturnoperation/" href="res81/" />
|
||||||
|
<str name="res82" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/DuringEarthquakeoperation/" href="res82/" />
|
||||||
|
<str name="res83" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/CompletionofEarthquakeoperation/" href="res83/" />
|
||||||
|
<str name="res84" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/NormalPowerSupply/" href="res84/" />
|
||||||
|
<str name="res85" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/Emergencypowersourcedetection/" href="res85/" />
|
||||||
|
<str name="res86" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/DuringEmergencypowercontroloperation/" href="res86/" />
|
||||||
|
<str name="res87" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/CompletionofreturnbyEmergencypowercontroloperation/" href="res87/" />
|
||||||
|
<str name="res88" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/UP/" href="res88/" />
|
||||||
|
<str name="res89" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/DOWN/" href="res89/" />
|
||||||
|
<str name="res90" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/DoorState/" href="res90/" />
|
||||||
|
<str name="res91" val="/TPE/B1/ELEV/EL/R2F/NA/TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1/MultiVibrator/" href="res91/" />
|
||||||
|
<str name="res92" val="/TPE/BooleanWritable/" href="res92/" />
|
||||||
|
</obj>
|
131
Backend/Services/Implement/webRequestService.cs
Normal file
131
Backend/Services/Implement/webRequestService.cs
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Xml;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Repository.Models;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using Repository.BackendRepository.Implement;
|
||||||
|
using Repository.BackendRepository;
|
||||||
|
|
||||||
|
namespace Backend.Services.Implement
|
||||||
|
{
|
||||||
|
public class webRequestService
|
||||||
|
{
|
||||||
|
public List<Device_value> obixQuery(string urlString, string bql)
|
||||||
|
{
|
||||||
|
List<Device_value> result = new List<Device_value>();
|
||||||
|
String username = "obixUser";
|
||||||
|
String password = "Admin123456";
|
||||||
|
String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
||||||
|
String API_Url = urlString;
|
||||||
|
|
||||||
|
XmlDocument xmlDoc = new XmlDocument();
|
||||||
|
//xmlDoc.LoadXml(responseString);
|
||||||
|
xmlDoc.Load("N4.xml");//N4v1021
|
||||||
|
|
||||||
|
//xmlDoc.Save("N4.xml");
|
||||||
|
|
||||||
|
string jsonText = JsonConvert.SerializeXmlNode(xmlDoc);
|
||||||
|
var data = Welcome.FromJson(jsonText);
|
||||||
|
|
||||||
|
foreach (var item in data.Obj.Str)
|
||||||
|
{
|
||||||
|
Device_value row = new Device_value();
|
||||||
|
row.value = item.Val;
|
||||||
|
string[] s1 = item.Val.Split(',');
|
||||||
|
|
||||||
|
string[] s2 = s1[0].Split('/');
|
||||||
|
foreach (var ss in s2)
|
||||||
|
{
|
||||||
|
if (ss.Contains('_'))
|
||||||
|
{
|
||||||
|
string[] s3 = ss.Split('_');
|
||||||
|
if (s3.Count() > 3)
|
||||||
|
{
|
||||||
|
row.tag_name = ss;
|
||||||
|
row.point_name = s2[s2.Length - 2];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.Add(row);
|
||||||
|
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//public void getObix()
|
||||||
|
//{
|
||||||
|
// //#region 取得obix 設定
|
||||||
|
// //var obixApiConfig = new ObixApiConfig();
|
||||||
|
|
||||||
|
// //var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
|
||||||
|
|
||||||
|
// //var variableObix = await backgroundServiceRepository.GetAllAsync<KeyValue>(sqlObix);
|
||||||
|
// //obixApiConfig.ApiBase = variableObix.Where(x => x.Name == "ApiBase").Select(x => x.Value).FirstOrDefault();
|
||||||
|
// //obixApiConfig.UserName = ed.AESDecrypt(variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault());
|
||||||
|
// //obixApiConfig.Password = ed.AESDecrypt(variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault());
|
||||||
|
|
||||||
|
// //String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(obixApiConfig.UserName + ":" + obixApiConfig.Password));
|
||||||
|
// //#endregion 取得obix 設定
|
||||||
|
|
||||||
|
|
||||||
|
// HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
|
||||||
|
// //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
|
||||||
|
// archiveMonthRequest.Method = "POST";
|
||||||
|
// archiveMonthRequest.Headers.Add("Authorization", "Basic " + encoded);
|
||||||
|
// archiveMonthRequest.PreAuthenticate = true;
|
||||||
|
|
||||||
|
// byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
|
||||||
|
// using (Stream reqStream = archiveMonthRequest.GetRequestStream())
|
||||||
|
// {
|
||||||
|
// reqStream.Write(byteArray, 0, byteArray.Length);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// HttpWebResponse archiveMonthResponse = (HttpWebResponse)archiveMonthRequest.GetResponse();
|
||||||
|
// var archiveMonthResponseContent = new StreamReader(archiveMonthResponse.GetResponseStream()).ReadToEnd();
|
||||||
|
|
||||||
|
// xmlDocument.LoadXml(archiveMonthResponseContent);
|
||||||
|
// string archiveMonthJson = JsonConvert.SerializeXmlNode(xmlDocument);
|
||||||
|
// JObject archiveMonthJsonResult = (JObject)JsonConvert.DeserializeObject(archiveMonthJson);
|
||||||
|
|
||||||
|
// if (archiveMonthJsonResult.ContainsKey("err")) //抓取錯誤
|
||||||
|
// {
|
||||||
|
// //logger.LogError("【ArchiveElectricMeterDayJob】【月歸檔】【取得資料失敗】");
|
||||||
|
// //logger.LogError("【ArchiveElectricMeterDayJob】【月歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveMonthJsonResult);
|
||||||
|
|
||||||
|
// Dictionary<string, object> archiveMonthRawData = new Dictionary<string, object>();
|
||||||
|
// archiveMonthRawData.Add("@device_number", deviceNumberPoint.DeviceNumber);
|
||||||
|
// archiveMonthRawData.Add("@point", deviceNumberPoint.Point);
|
||||||
|
// archiveMonthRawData.Add("@start_timestamp", startTimestamp.Replace("T", " ").Substring(0, 19));
|
||||||
|
// archiveMonthRawData.Add("@end_timestamp", endTimestamp.Replace("T", " ").Substring(0, 19));
|
||||||
|
// archiveMonthRawData.Add("@is_complete", 0);
|
||||||
|
// archiveMonthRawData.Add("@repeat_times", 0);
|
||||||
|
// archiveMonthRawData.Add("@fail_reason", archiveMonthJson);
|
||||||
|
|
||||||
|
// archiveMonthRawData.Add("@count_rawdata", 0);
|
||||||
|
// archiveMonthRawData.Add("@min_rawdata", 0);
|
||||||
|
// archiveMonthRawData.Add("@max_rawdata", 0);
|
||||||
|
// archiveMonthRawData.Add("@avg_rawdata", 0);
|
||||||
|
// archiveMonthRawData.Add("@sum_rawdata", 0);
|
||||||
|
// archiveMonthRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||||
|
|
||||||
|
// archiveMonthRawDatas.Add(archiveMonthRawData);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (archiveMonthJsonResult.ContainsKey("obj")) //表示可以讀取到內容
|
||||||
|
// {
|
||||||
|
// var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveMonthJsonResult);
|
||||||
|
// if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
|
||||||
|
// {
|
||||||
|
// archiveMonthRawDatas.AddRange(ArrangeRawDatas);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
@ -95,6 +95,7 @@ namespace Backend
|
|||||||
services.AddTransient<IUserInfoRepository, UserInfoRepository>();
|
services.AddTransient<IUserInfoRepository, UserInfoRepository>();
|
||||||
services.AddTransient<IDeviceManageRepository, DeviceManageRepository>();
|
services.AddTransient<IDeviceManageRepository, DeviceManageRepository>();
|
||||||
services.AddTransient<IDeviceImportRepository, DeviceImportRepository>();
|
services.AddTransient<IDeviceImportRepository, DeviceImportRepository>();
|
||||||
|
services.AddTransient<INiagaraDataSynchronizeRepository, NiagaraDataSynchronizeRepository>();
|
||||||
#endregion Repository ª`¤J
|
#endregion Repository ª`¤J
|
||||||
|
|
||||||
#region JWT ª`¤J
|
#region JWT ª`¤J
|
||||||
|
168
Backend/Views/NiagaraDataSynchronize/Index.cshtml
Normal file
168
Backend/Views/NiagaraDataSynchronize/Index.cshtml
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
@{
|
||||||
|
ViewData["MainNum"] = "2";
|
||||||
|
ViewData["SubNum"] = "3";
|
||||||
|
ViewData["Title"] = "Niagara資料同步";
|
||||||
|
}
|
||||||
|
|
||||||
|
<ol class="breadcrumb page-breadcrumb">
|
||||||
|
<li class="breadcrumb-item"><a href="javascript:void(0);">首頁</a></li>
|
||||||
|
<li class="breadcrumb-item">設備管理</li>
|
||||||
|
<li class="breadcrumb-item active">Niagara資料同步</li>
|
||||||
|
<li class="position-absolute pos-top pos-right d-none d-sm-block"><span class="js-get-date"></span></li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-12">
|
||||||
|
<div id="panel-5" class="panel">
|
||||||
|
<div class="panel-container show">
|
||||||
|
<div class="panel-content">
|
||||||
|
|
||||||
|
<div class="form-row align-items-center">
|
||||||
|
<div class="col-12 mb-3">
|
||||||
|
<div class="custom-control custom-radio custom-control-inline">
|
||||||
|
<input type="radio" id="Building_B" name="Building" value="B" class="custom-control-input">
|
||||||
|
<label class="custom-control-label" for="Building_B">三菱B1</label>
|
||||||
|
</div>
|
||||||
|
@*<div class="custom-control custom-radio custom-control-inline">
|
||||||
|
<input type="radio" id="Building_O" name="Building" value="O" class="custom-control-input">
|
||||||
|
<label class="custom-control-label" for="Building_O">辦公棟</label>
|
||||||
|
</div>*@
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-row align-items-center">
|
||||||
|
<button id="loadDataBtn" type="button" class="btn btn-primary" onclick="LoadData()">載入資料</button>
|
||||||
|
<button id="synchornizeDataBtn" type="button" class="btn btn-dark" onclick="SynchronizeData()">同步資料</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div class="form-row align-items-center">
|
||||||
|
<p id="loadDataText"></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-5">
|
||||||
|
<div class="card p-3 w-100">
|
||||||
|
<div class="card-header d-flex align-items-center flex-wrap">
|
||||||
|
<div class="card-title">
|
||||||
|
Niagara資料
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body row">
|
||||||
|
<div class="col-12">
|
||||||
|
<!-- datatable start -->
|
||||||
|
<table id="niagara_data_table" class="table table-bordered table-hover m-0 text-center">
|
||||||
|
<thead class="thead-themed">
|
||||||
|
<tr>
|
||||||
|
<th>value</th>
|
||||||
|
<th>tag_name</th>
|
||||||
|
<th>point_name</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
<script>
|
||||||
|
var buildingId, building;
|
||||||
|
var rawDataImportTable;
|
||||||
|
var ds;
|
||||||
|
|
||||||
|
var today = new Date();
|
||||||
|
var date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
ds = null;
|
||||||
|
building = "B1";
|
||||||
|
document.getElementById("Building_B").checked = true;
|
||||||
|
|
||||||
|
rawDataImportTable = $("#niagara_data_table").DataTable({
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"data": "value"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": "tag_name"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": "point_name"
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"ajax": {
|
||||||
|
"url": "/NiagaraDataSynchronize/RawDataList",
|
||||||
|
"type": "POST",
|
||||||
|
"dataSrc": function (rel) {
|
||||||
|
if (rel.code == "9999") {
|
||||||
|
toast_error(rel.msg);
|
||||||
|
document.getElementById('loadDataText').innerText = "載入資料出錯了!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var data = rel.data;
|
||||||
|
ds = data;
|
||||||
|
if (data == null || data.length == 0) {
|
||||||
|
this.data = [];
|
||||||
|
document.getElementById('loadDataText').innerText = "";
|
||||||
|
}
|
||||||
|
else if(data.length > 0) {
|
||||||
|
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
|
||||||
|
var dateTime = date + ' ' + time;
|
||||||
|
document.getElementById('loadDataText').innerText = "共 " + rel.data.length + " 筆資料 \n" + dateTime;
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//#region 載入Niagara資料
|
||||||
|
function LoadData() {
|
||||||
|
document.getElementById('loadDataText').innerText = "Loading...";
|
||||||
|
buildingId = document.querySelector('input[name="Building"]:checked').value;
|
||||||
|
if (buildingId == "B") {
|
||||||
|
building = "B1";
|
||||||
|
rawDataImportTable.ajax.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
function SynchronizeData() {
|
||||||
|
document.getElementById('loadDataText').innerText = "同步中...";
|
||||||
|
if (ds.length > 0) {
|
||||||
|
//比對資料,有差異的話,再同步到device等資料表
|
||||||
|
var url_synchronize_data = "/NiagaraDataSynchronize/CompareData/";
|
||||||
|
|
||||||
|
var send_data = {
|
||||||
|
ds: ds,
|
||||||
|
building: building
|
||||||
|
}
|
||||||
|
$.post(url_synchronize_data, send_data, function (rel) {
|
||||||
|
if (rel.code != "0000") {
|
||||||
|
toast_error(rel.msg);
|
||||||
|
document.getElementById('loadDataText').innerText = "比對資料出錯了!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
|
||||||
|
var dateTime = date + ' ' + time;
|
||||||
|
document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime;
|
||||||
|
}, 'json');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
document.getElementById('loadDataText').innerText = "查無資料 無法比對!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
}
|
@ -112,7 +112,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
@if (ViewBag.role.Contains("DeviceImportIndex") || ViewBag.role.Contains("DeviceManageIndex"))
|
@if (ViewBag.role.Contains("DeviceImportIndex") || ViewBag.role.Contains("DeviceManageIndex") || ViewBag.role.Contains("NiagaraDataSynchronizeIndex"))
|
||||||
{
|
{
|
||||||
<li class="@(ViewData["MainNum"] == "2" ? "active open" : "")">
|
<li class="@(ViewData["MainNum"] == "2" ? "active open" : "")">
|
||||||
<a href="#" title="設備管理" data-filter-tags="category">
|
<a href="#" title="設備管理" data-filter-tags="category">
|
||||||
@ -136,6 +136,14 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
|
@if (ViewBag.role.Contains("NiagaraDataSynchronizeIndex"))
|
||||||
|
{
|
||||||
|
<li class="@(ViewData["MainNum"] == "2" && ViewData["SubNum"] == "3" ? "active" : "")">
|
||||||
|
<a asp-controller="NiagaraDataSynchronize" asp-action="Index" title="Niagara資料同步" data-filter-tags="utilities disabled item">
|
||||||
|
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">Niagara資料同步</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<ApiResult<List<Variable>>> SubSysList(int main_system_id)
|
public async Task<ApiResult<List<Variable>>> SubSysList(int main_system_tag)
|
||||||
{
|
{
|
||||||
ApiResult<List<Variable>> apiResult = new ApiResult<List<Variable>>();
|
ApiResult<List<Variable>> apiResult = new ApiResult<List<Variable>>();
|
||||||
List<Variable> sub_system_list = new List<Variable>();
|
List<Variable> sub_system_list = new List<Variable>();
|
||||||
@ -71,10 +71,10 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
var sqlString = @$"SELECT v2.*
|
var sqlString = @$"SELECT v2.*
|
||||||
FROM variable v2
|
FROM variable v2
|
||||||
JOIN variable v1 ON v2.system_parent_id = v1.id AND v1.system_type = @graph_manage_layer1 AND v1.deleted = 0
|
JOIN variable v1 ON v2.system_parent_id = v1.id AND v1.system_type = @graph_manage_layer1 AND v1.deleted = 0
|
||||||
WHERE v2.system_type = @graph_manage_layer2 AND v2.deleted = 0 AND v1.id = @main_system_id
|
WHERE v2.system_type = @graph_manage_layer2 AND v2.deleted = 0 AND v1.system_value = @main_system_tag
|
||||||
ORDER BY v2.system_priority, v2.created_at desc";
|
ORDER BY v2.system_priority, v2.created_at desc";
|
||||||
|
|
||||||
var param = new { @graph_manage_layer1 = graph_manage_layer1, @graph_manage_layer2 = graph_manage_layer2 };
|
var param = new { @graph_manage_layer1 = graph_manage_layer1, @graph_manage_layer2 = graph_manage_layer2, @main_system_tag = main_system_tag };
|
||||||
sub_system_list = await backendRepository.GetAllAsync<Variable>(sqlString, param);
|
sub_system_list = await backendRepository.GetAllAsync<Variable>(sqlString, param);
|
||||||
|
|
||||||
apiResult.Code = "0000";
|
apiResult.Code = "0000";
|
||||||
@ -99,18 +99,19 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
{
|
{
|
||||||
var sqlString = @$"SELECT *
|
var sqlString = @$"SELECT *
|
||||||
FROM graph_manage gm
|
FROM graph_manage gm
|
||||||
JOIN variable v2 ON gm.sub_system_id = v2.id AND v2.system_type = @graph_manage_layer2 AND v2.deleted = 0
|
JOIN variable v1 ON v1.system_value = @main_system_tag and v1.system_type = @graph_manage_layer1 and v1.deleted = 0
|
||||||
WHERE v2.id in @sub_system_id AND gm.deleted = 0
|
JOIN variable v2 ON v1.id = v2.system_parent_id AND v2.system_type = @graph_manage_layer2 AND v2.deleted = 0
|
||||||
|
WHERE v2.system_value in @sub_system_tag AND gm.deleted = 0
|
||||||
ORDER BY gm.priority, gm.created_at desc";
|
ORDER BY gm.priority, gm.created_at desc";
|
||||||
|
|
||||||
|
|
||||||
var param = new { @graph_manage_layer1 = graph_manage_layer1, graph_manage_layer2 = graph_manage_layer2, @sub_system_id = gi.sub_system_id };
|
var param = new { @graph_manage_layer1 = graph_manage_layer1, graph_manage_layer2 = graph_manage_layer2, @sub_system_tag = gi.sub_system_tag, @main_system_tag = gi.main_system_tag };
|
||||||
|
|
||||||
graManList = await backendRepository.GetAllAsync<GraphList>(sqlString, param);
|
graManList = await backendRepository.GetAllAsync<GraphList>(sqlString, param);
|
||||||
|
|
||||||
if (gi.keyWord != null)
|
if (gi.keyWord != null)
|
||||||
{
|
{
|
||||||
var wParam = new { @graph_manage_layer1 = graph_manage_layer1, graph_manage_layer2 = graph_manage_layer2, @sub_system_id = gi.sub_system_id, @keyWord = gi.keyWord };
|
var wParam = new { @graph_manage_layer1 = graph_manage_layer1, graph_manage_layer2 = graph_manage_layer2, @sub_system_tag = gi.sub_system_tag, @main_system_tag = gi.main_system_tag, @keyWord = gi.keyWord };
|
||||||
graManList = await backendRepository.GetAllAsync<GraphList>(@$"SELECT *
|
graManList = await backendRepository.GetAllAsync<GraphList>(@$"SELECT *
|
||||||
FROM graph_manage gm
|
FROM graph_manage gm
|
||||||
JOIN variable v2 ON gm.sub_system_id = v2.id AND v2.system_type = @graph_manage_layer2 AND v2.deleted = 0
|
JOIN variable v2 ON gm.sub_system_id = v2.id AND v2.system_type = @graph_manage_layer2 AND v2.deleted = 0
|
||||||
@ -139,9 +140,9 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var sqlString = @$"UPDATE graph_manage SET deleted = 0 WHERE code = @code AND sub_system_id = @sub_system_id";
|
var sqlString = @$"UPDATE graph_manage SET deleted = 0 WHERE code = @code AND sub_system_tag = @sub_system_tag AND main_system_tag = @main_system_tag";
|
||||||
|
|
||||||
var param = new { @code = gi.code, @sub_system_id = gi.sub_system_id };
|
var param = new { @code = gi.code, @sub_system_tag = gi.sub_system_tag, @main_system_tag = gi.main_system_tag };
|
||||||
|
|
||||||
await backendRepository.ExecuteSql(sqlString, param);
|
await backendRepository.ExecuteSql(sqlString, param);
|
||||||
apiResult.Code = "0000";
|
apiResult.Code = "0000";
|
||||||
@ -164,8 +165,8 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var sWhere = @$"deleted = 0 AND code = @code AND sub_system_id = @sub_system_id";
|
var sWhere = @$"deleted = 0 AND code = @code AND sub_system_tag = @sub_system_tag AND main_system_tag = @main_system_tag";
|
||||||
var gm = await backendRepository.GetOneAsync<GraphInsInfo>("graph_manage", sWhere, new { @code = gii.code, @sub_system_id = gii.sub_system_id});
|
var gm = await backendRepository.GetOneAsync<GraphInsInfo>("graph_manage", sWhere, new { @code = gii.code, @sub_system_tag = gii.sub_system_tag, @main_system_tag = gii.main_system_tag});
|
||||||
|
|
||||||
if (gm == null)
|
if (gm == null)
|
||||||
{
|
{
|
||||||
@ -226,9 +227,11 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
graph_manage.Add("@name", gii.name);
|
graph_manage.Add("@name", gii.name);
|
||||||
|
graph_manage.Add("@main_system_tag", gii.main_system_tag);
|
||||||
|
graph_manage.Add("@sub_system_tag", gii.sub_system_tag);
|
||||||
//graph_manage.Add("@priority", gii.priority);
|
//graph_manage.Add("@priority", gii.priority);
|
||||||
|
|
||||||
await backendRepository.UpdateOneByCustomTable(graph_manage, "graph_manage", "code='" + gii.code + "'" + "sub_system_id ='" + gii.sub_system_id + "'");
|
await backendRepository.UpdateOneByCustomTable(graph_manage, "graph_manage", "code='" + gm.code + "'" + " and sub_system_tag ='" + gm.sub_system_tag + "' and main_system_tag = '" + gm.main_system_tag + "'");
|
||||||
apiResult.Code = "0000";
|
apiResult.Code = "0000";
|
||||||
apiResult.Data = "修改成功";
|
apiResult.Data = "修改成功";
|
||||||
}
|
}
|
||||||
@ -251,8 +254,8 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var sWhere = @$"deleted = 0 AND code = @code AND sub_system_id = @sub_system_id";
|
var sWhere = @$"deleted = 0 AND code = @code AND sub_system_tag = @sub_system_tag AND main_system_tag = @main_system_tag";
|
||||||
var gm = await backendRepository.GetOneAsync<GraphInsInfo>("graph_manage", sWhere, new { @code = gii.code, @sub_system_id = gii.sub_system_id });
|
var gm = await backendRepository.GetOneAsync<GraphInsInfo>("graph_manage", sWhere, new { @code = gii.code, @sub_system_tag = gii.sub_system_tag, @main_system_tag = gii.main_system_tag });
|
||||||
|
|
||||||
if (gm != null)
|
if (gm != null)
|
||||||
{
|
{
|
||||||
@ -305,6 +308,8 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
var newPriority = await backendRepository.GetCurrentPriority("graph_manage");
|
var newPriority = await backendRepository.GetCurrentPriority("graph_manage");
|
||||||
|
graph_manage.Add("@main_system_tag", gii.main_system_tag);
|
||||||
|
graph_manage.Add("@sub_system_tag", gii.sub_system_tag);
|
||||||
graph_manage.Add("@name", gii.name);
|
graph_manage.Add("@name", gii.name);
|
||||||
graph_manage.Add("@deleted", 0);
|
graph_manage.Add("@deleted", 0);
|
||||||
graph_manage.Add("@priority", newPriority + 1);
|
graph_manage.Add("@priority", newPriority + 1);
|
||||||
|
@ -15,6 +15,8 @@ using System.Linq;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System.IdentityModel.Tokens.Jwt;
|
||||||
|
using System.Net;
|
||||||
|
|
||||||
namespace FrontendWebApi.ApiControllers
|
namespace FrontendWebApi.ApiControllers
|
||||||
{
|
{
|
||||||
@ -44,7 +46,6 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
ctx.Response.Headers.Add("Access-Control-Allow-Headers", "*");
|
ctx.Response.Headers.Add("Access-Control-Allow-Headers", "*");
|
||||||
ctx.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
|
ctx.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
|
||||||
EDFunction edFunction = new EDFunction();
|
EDFunction edFunction = new EDFunction();
|
||||||
var a = User.Claims.Select(p => new { Type = p.Type, Value = p.Value }).ToList();
|
|
||||||
myUser = new JwtGet()
|
myUser = new JwtGet()
|
||||||
{
|
{
|
||||||
account = User.Claims.Where(a => a.Type == "account").Select(e => e.Value).FirstOrDefault(),
|
account = User.Claims.Where(a => a.Type == "account").Select(e => e.Value).FirstOrDefault(),
|
||||||
@ -59,6 +60,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
{
|
{
|
||||||
jwt_str = "Jwt Token不合法";
|
jwt_str = "Jwt Token不合法";
|
||||||
jwtlife = false;
|
jwtlife = false;
|
||||||
|
filterContext.Result = new JsonResult(new { HttpStatusCode.Unauthorized });
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
406
FrontendWebApi/ApiControllers/OperationController.cs
Normal file
406
FrontendWebApi/ApiControllers/OperationController.cs
Normal file
@ -0,0 +1,406 @@
|
|||||||
|
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.Interface;
|
||||||
|
using Repository.FrontendRepository.Interface;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FrontendWebApi.ApiControllers
|
||||||
|
{
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
[ApiController]
|
||||||
|
public class OperationController : MyBaseApiController<OperationController>
|
||||||
|
{
|
||||||
|
private readonly IBackendRepository backendRepository;
|
||||||
|
private string operationFileSaveAsPath = "";
|
||||||
|
|
||||||
|
public OperationController(IBackendRepository backendRepository)
|
||||||
|
{
|
||||||
|
this.backendRepository = backendRepository;
|
||||||
|
operationFileSaveAsPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "operation");
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<ApiResult<List<Variable>>> MaiSysList()
|
||||||
|
{
|
||||||
|
ApiResult<List<Variable>> apiResult = new ApiResult<List<Variable>>();
|
||||||
|
List<Variable> main_system_list = new List<Variable>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var sqlString = @$"SELECT *
|
||||||
|
FROM variable
|
||||||
|
WHERE system_type = @main_system_type AND deleted = 0
|
||||||
|
ORDER BY system_priority, created_at desc";
|
||||||
|
|
||||||
|
var param = new { @main_system_type = main_system_type };
|
||||||
|
main_system_list = await backendRepository.GetAllAsync<Variable>(sqlString, param);
|
||||||
|
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Data = main_system_list;
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
apiResult.Code = "9999";
|
||||||
|
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return apiResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<ApiResult<List<Variable>>> SubSysList(string main_system_tag)
|
||||||
|
{
|
||||||
|
ApiResult<List<Variable>> apiResult = new ApiResult<List<Variable>>();
|
||||||
|
List<Variable> sub_system_list = new List<Variable>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var sqlString = @$"SELECT v2.*
|
||||||
|
FROM variable v2
|
||||||
|
JOIN variable v1 ON v2.system_parent_id = v1.id AND v1.system_type = @main_system_type AND v1.deleted = 0
|
||||||
|
WHERE v2.system_type = @sub_system_type AND v2.deleted = 0 AND v1.system_type = @main_system_tag
|
||||||
|
ORDER BY v2.system_priority, v2.created_at desc";
|
||||||
|
|
||||||
|
var param = new { @main_system_type = main_system_type, @sub_system_type = sub_system_type, @main_system_tag = main_system_tag };
|
||||||
|
sub_system_list = await backendRepository.GetAllAsync<Variable>(sqlString, param);
|
||||||
|
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Data = sub_system_list;
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
apiResult.Code = "9999";
|
||||||
|
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return apiResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 廠商資料列表(搜寻)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ofl"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<ApiResult<List<Operation_Firm>>> OpeFirList(OperationFindList ofl)
|
||||||
|
{
|
||||||
|
ApiResult<List<Operation_Firm>> apiResult = new ApiResult<List<Operation_Firm>>();
|
||||||
|
List<Operation_Firm> opList = new List<Operation_Firm>();
|
||||||
|
string sWhere = "";
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (ofl.start_created_at != null || ofl.end_created_at != null)
|
||||||
|
{
|
||||||
|
sWhere += $@" and (of.created_at >= isnull(@start_created_at, of.created_at) AND of.created_at <= isnull(@end_created_at, of.created_at))";
|
||||||
|
}
|
||||||
|
else if (ofl.today)
|
||||||
|
{
|
||||||
|
sWhere += $@" and convert(of.created_at, DATE) = convert(NOW(), DATE)";
|
||||||
|
}
|
||||||
|
else if (ofl.yesterday)
|
||||||
|
{
|
||||||
|
sWhere += $@" and convert(of.created_at, DATE) = convert(ADDDATE(NOW(), -1), DATE)";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ofl.sub_system_tag != null || ofl.main_system_tag != null)
|
||||||
|
{
|
||||||
|
sWhere += $@" and (of.device_system_category_layer2 = isnull(@main_system_tag, device_system_category_layer2) AND of.device_system_category_layer3 = isnull(@sub_system_tag, device_system_category_layer3))";
|
||||||
|
}
|
||||||
|
|
||||||
|
var sqlString = @$"select of.*, v2.system_key
|
||||||
|
from operation_firm of
|
||||||
|
left join variable v1 on of.device_system_category_layer2 = v1.system_value and v1.system_type = @main_system_type and v1.delted = 0
|
||||||
|
left join variable v2 on v1.id = v2.system_parent_id and of.device_system_category_layer3 = v2.system_value and v2.system_type = @sub_system_type and v2.deleted = 0
|
||||||
|
where of.deleted = 0" + sWhere;
|
||||||
|
|
||||||
|
|
||||||
|
var param = new { @sub_system_type = sub_system_type, @start_created_at = ofl.start_created_at, @end_created_at = ofl.end_created_at, @today = ofl.today, @yesterday = ofl.yesterday, @sub_system_tag = ofl.sub_system_tag, @main_system_tag = ofl.main_system_tag };
|
||||||
|
opList = await backendRepository.GetAllAsync<Operation_Firm>(sqlString, param);
|
||||||
|
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Data = opList;
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
apiResult.Code = "9999";
|
||||||
|
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return apiResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 新增一笔廠商資料
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="of"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<ApiResult<string>> SaveOpeFirm(Operation_Firm of)
|
||||||
|
{
|
||||||
|
ApiResult<string> apiResult = new ApiResult<string>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (of.tax_id_number != null)
|
||||||
|
{
|
||||||
|
var sWhere = "deleted = 0 AND tax_id_number = @tax_id_number";
|
||||||
|
var ofo = await backendRepository.GetOneAsync<Operation_Firm>("operation_firm", sWhere, new { @tax_id_number = of.tax_id_number });
|
||||||
|
if (ofo != null)
|
||||||
|
{
|
||||||
|
apiResult.Code = "0002";
|
||||||
|
apiResult.Data = "已有相同的统一编号";
|
||||||
|
return apiResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary<string, object> operation_firm = new Dictionary<string, object>()
|
||||||
|
{
|
||||||
|
{ "@deleted", 0 },
|
||||||
|
{ "@device_system_category_layer2", of.device_system_category_layer2 },
|
||||||
|
{ "@device_system_category_layer3", of.device_system_category_layer3 },
|
||||||
|
{ "@name", of.name },
|
||||||
|
{ "@contact_person", of.contact_person },
|
||||||
|
{ "@phone", of.phone },
|
||||||
|
{ "@email", of.email },
|
||||||
|
{ "@tax_id_number", of.tax_id_number },
|
||||||
|
{ "@remark", of.remark },
|
||||||
|
{ "@created_by", myUser.userinfo_guid },
|
||||||
|
{ "@created_at", DateTime.Now }
|
||||||
|
};
|
||||||
|
|
||||||
|
await backendRepository.AddOneByCustomTable(operation_firm, "operation_firm");
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Data = "新增成功";
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
apiResult.Code = "9999";
|
||||||
|
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||||||
|
string json = System.Text.Json.JsonSerializer.Serialize(of);
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + json);
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return apiResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 编辑一笔廠商資料
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="of"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<ApiResult<string>> EdtOneOpeFirm(Operation_Firm of)
|
||||||
|
{
|
||||||
|
ApiResult<string> apiResult = new ApiResult<string>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var sWhere = @$"deleted = 0 and id = @id";
|
||||||
|
var gm = await backendRepository.GetOneAsync<Operation_Firm>("operation_firm", sWhere, new { @id = of.id });
|
||||||
|
|
||||||
|
if (gm == null)
|
||||||
|
{
|
||||||
|
apiResult.Code = "0001";
|
||||||
|
apiResult.Data = "無法找到厂商";
|
||||||
|
return apiResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (of.tax_id_number != null)
|
||||||
|
{
|
||||||
|
sWhere = "deleted = 0 AND tax_id_number = @tax_id_number and id != @id";
|
||||||
|
var ofo = await backendRepository.GetOneAsync<Operation_Firm>("operation_firm", sWhere, new { @tax_id_number = of.tax_id_number, @id = of.id });
|
||||||
|
if (ofo != null)
|
||||||
|
{
|
||||||
|
apiResult.Code = "0002";
|
||||||
|
apiResult.Data = "已有相同的统一编号";
|
||||||
|
return apiResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary<string, object> operation_firm = new Dictionary<string, object>()
|
||||||
|
{
|
||||||
|
{ "@deleted", of.deleted },
|
||||||
|
{ "@device_system_category_layer2", of.device_system_category_layer2 },
|
||||||
|
{ "@device_system_category_layer3", of.device_system_category_layer3 },
|
||||||
|
{ "@name", of.name },
|
||||||
|
{ "@contact_person", of.contact_person },
|
||||||
|
{ "@phone", of.phone },
|
||||||
|
{ "@email", of.email },
|
||||||
|
{ "@tax_id_number", of.tax_id_number },
|
||||||
|
{ "@remark", of.remark },
|
||||||
|
{ "updated_by", myUser.userinfo_guid },
|
||||||
|
{ "updated_at", DateTime.Now }
|
||||||
|
};
|
||||||
|
|
||||||
|
await backendRepository.UpdateOneByCustomTable(operation_firm, "operation_firm", "id = '" + of.id + "'");
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Data = "修改成功";
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
apiResult.Code = "9999";
|
||||||
|
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||||||
|
string json = System.Text.Json.JsonSerializer.Serialize(of);
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + json);
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return apiResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 汇出excel
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public FileResult ExportExcel()
|
||||||
|
{
|
||||||
|
var workbook = new XSSFWorkbook();
|
||||||
|
#region excel設定
|
||||||
|
IFont font12 = workbook.CreateFont();
|
||||||
|
font12.FontName = "新細明體";
|
||||||
|
font12.FontHeightInPoints = 12;
|
||||||
|
ICellStyle style12 = workbook.CreateCellStyle();
|
||||||
|
style12.SetFont(font12);
|
||||||
|
style12.Alignment = HorizontalAlignment.Center;
|
||||||
|
style12.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
IFont font12Times = workbook.CreateFont();
|
||||||
|
font12Times.FontName = "Times New Roman";
|
||||||
|
font12Times.FontHeightInPoints = 12;
|
||||||
|
IFont font18 = workbook.CreateFont();
|
||||||
|
font18.FontName = "新細明體";
|
||||||
|
font18.FontHeightInPoints = 18;
|
||||||
|
font18.IsBold = true;
|
||||||
|
ICellStyle styleTitle18 = workbook.CreateCellStyle();
|
||||||
|
styleTitle18.SetFont(font18);
|
||||||
|
styleTitle18.Alignment = HorizontalAlignment.Center;
|
||||||
|
styleTitle18.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
ICellStyle styleLeft12 = workbook.CreateCellStyle();
|
||||||
|
styleLeft12.SetFont(font12);
|
||||||
|
styleLeft12.Alignment = HorizontalAlignment.Left;
|
||||||
|
styleLeft12.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
ICellStyle styleLine12 = workbook.CreateCellStyle();
|
||||||
|
styleLine12.SetFont(font12);
|
||||||
|
styleLine12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
|
||||||
|
styleLine12.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
styleLine12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
styleLine12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
styleLine12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
styleLine12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
ICellStyle stylein12 = workbook.CreateCellStyle();
|
||||||
|
stylein12.SetFont(font12Times);
|
||||||
|
stylein12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;
|
||||||
|
stylein12.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
stylein12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
stylein12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
stylein12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
stylein12.WrapText = true;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
var sqlString = $@"select of.*, v2.system_key
|
||||||
|
from operation_firm of
|
||||||
|
left join variable v1 on of.device_system_category_layer2 = v1.system_value and v1.system_type = @main_system_type and v1.delted = 0
|
||||||
|
left join variable v2 on v1.id = v2.system_parent_id and of.device_system_category_layer3 = v2.system_value and v2.system_type = @sub_system_type and v2.deleted = 0
|
||||||
|
where of.deleted = 0";
|
||||||
|
var sheet = workbook.CreateSheet("廠商資料");
|
||||||
|
var operation_firm = backendRepository.GetAllAsync<Operation_Firm>(sqlString, null);
|
||||||
|
int RowPosition = 0;
|
||||||
|
IRow row = sheet.CreateRow(RowPosition);
|
||||||
|
sheet.SetColumnWidth(0, 4 * 160 * 12);
|
||||||
|
sheet.SetColumnWidth(1, 4 * 160 * 12);
|
||||||
|
sheet.SetColumnWidth(3, 4 * 160 * 12);
|
||||||
|
sheet.SetColumnWidth(4, 4 * 160 * 12);
|
||||||
|
sheet.SetColumnWidth(5, 4 * 160 * 12);
|
||||||
|
sheet.SetColumnWidth(6, 4 * 160 * 12);
|
||||||
|
sheet.SetColumnWidth(7, 4 * 160 * 12);
|
||||||
|
ICell cell = row.CreateCell(0);
|
||||||
|
cell.SetCellValue("廠商類別");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
cell = row.CreateCell(1);
|
||||||
|
cell.SetCellValue("廠商名稱");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
cell = row.CreateCell(2);
|
||||||
|
cell.SetCellValue("聯絡人");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
cell = row.CreateCell(3);
|
||||||
|
cell.SetCellValue("電話");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
cell = row.CreateCell(4);
|
||||||
|
cell.SetCellValue("郵箱");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
cell = row.CreateCell(5);
|
||||||
|
cell.SetCellValue("統一編號");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
cell = row.CreateCell(6);
|
||||||
|
cell.SetCellValue("備注");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
cell = row.CreateCell(2);
|
||||||
|
cell.SetCellValue("建立時間");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
|
||||||
|
foreach (var of in operation_firm.Result)
|
||||||
|
{
|
||||||
|
RowPosition += 1;
|
||||||
|
row = sheet.CreateRow(RowPosition);
|
||||||
|
for (var a = 0; a < 8; a++)
|
||||||
|
{
|
||||||
|
cell = row.CreateCell(a);
|
||||||
|
if (a == 0)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(of.system_key);
|
||||||
|
}
|
||||||
|
if (a == 1)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(of.name);
|
||||||
|
}
|
||||||
|
if (a == 2)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(of.contact_person);
|
||||||
|
}
|
||||||
|
if (a == 3)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(of.phone);
|
||||||
|
}
|
||||||
|
if (a == 4)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(of.email);
|
||||||
|
}
|
||||||
|
if (a == 5)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(of.tax_id_number);
|
||||||
|
}
|
||||||
|
if (a == 2)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(of.remark);
|
||||||
|
}
|
||||||
|
if (a == 7)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(of.Created_at);
|
||||||
|
}
|
||||||
|
|
||||||
|
cell.CellStyle = style12;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var ms = new NpoiMemoryStream
|
||||||
|
{
|
||||||
|
AllowClose = false
|
||||||
|
};
|
||||||
|
workbook.Write(ms);
|
||||||
|
ms.Flush();
|
||||||
|
ms.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
return File(ms, "application/vnd.ms-excel", "廠商資料.xlsx");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -35,8 +35,8 @@ namespace FrontendWebApi.Jwt
|
|||||||
//claims.Add(new Claim(JwtRegisteredClaimNames.NameId, login.CustomerNo.ToString()));
|
//claims.Add(new Claim(JwtRegisteredClaimNames.NameId, login.CustomerNo.ToString()));
|
||||||
//claims.Add(new Claim(JwtRegisteredClaimNames.Sub, login.Username)); // User.Identity.Name
|
//claims.Add(new Claim(JwtRegisteredClaimNames.Sub, login.Username)); // User.Identity.Name
|
||||||
//claims.Add(new Claim(JwtRegisteredClaimNames.Aud, "The Audience"));
|
//claims.Add(new Claim(JwtRegisteredClaimNames.Aud, "The Audience"));
|
||||||
//claims.Add(new Claim(JwtRegisteredClaimNames.Exp, DateTimeOffset.UtcNow.AddSeconds(expireSeconds).ToUnixTimeSeconds().ToString()));
|
claims.Add(new Claim(JwtRegisteredClaimNames.Exp, DateTimeOffset.UtcNow.AddSeconds(lifeseconds).ToUnixTimeSeconds().ToString()));
|
||||||
//claims.Add(new Claim(JwtRegisteredClaimNames.Nbf, DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString())); // 必須為數字
|
claims.Add(new Claim(JwtRegisteredClaimNames.Nbf, DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString())); // 必須為數字
|
||||||
//claims.Add(new Claim(JwtRegisteredClaimNames.Iat, DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString())); // 必須為數字
|
//claims.Add(new Claim(JwtRegisteredClaimNames.Iat, DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString())); // 必須為數字
|
||||||
//claims.Add(new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())); // JWT ID
|
//claims.Add(new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())); // JWT ID
|
||||||
|
|
||||||
@ -76,6 +76,17 @@ namespace FrontendWebApi.Jwt
|
|||||||
expires: expires,//過期時間
|
expires: expires,//過期時間
|
||||||
signingCredentials: signingCredentials
|
signingCredentials: signingCredentials
|
||||||
);
|
);
|
||||||
|
//var jst = new SecurityTokenDescriptor
|
||||||
|
//{
|
||||||
|
// Issuer = issuer,//Token釋出者
|
||||||
|
// //Claims = claims,//攜帶的負載
|
||||||
|
// //audience: _options.Value.Audience,//Token接受者
|
||||||
|
// NotBefore = now,//當前時間token生成時間
|
||||||
|
// Expires = expires,//過期時間
|
||||||
|
// SigningCredentials = signingCredentials,
|
||||||
|
// Subject = userClaimsIdentity
|
||||||
|
//};
|
||||||
|
|
||||||
var serializeToken = tokenHandler.WriteToken(jst);
|
var serializeToken = tokenHandler.WriteToken(jst);
|
||||||
|
|
||||||
var data = new TnToken();
|
var data = new TnToken();
|
||||||
|
@ -9,7 +9,8 @@ namespace FrontendWebApi.Models
|
|||||||
public class GraphList
|
public class GraphList
|
||||||
{
|
{
|
||||||
public string code { get; set; }
|
public string code { get; set; }
|
||||||
public int sub_system_id { get; set; }
|
public string main_system_tag { get; set; }
|
||||||
|
public int sub_system_tag { get; set; }
|
||||||
public string name { get; set; }
|
public string name { get; set; }
|
||||||
public string oriOrgName { get; set; }
|
public string oriOrgName { get; set; }
|
||||||
public string oriSavName { get; set; }
|
public string oriSavName { get; set; }
|
||||||
@ -20,7 +21,8 @@ namespace FrontendWebApi.Models
|
|||||||
public class GraphInsInfo
|
public class GraphInsInfo
|
||||||
{
|
{
|
||||||
public string code { get; set; }
|
public string code { get; set; }
|
||||||
public int sub_system_id { get; set; }
|
public string main_system_tag { get; set; }
|
||||||
|
public string sub_system_tag { get; set; }
|
||||||
public string name { get; set; }
|
public string name { get; set; }
|
||||||
public string oriOrgName { get; set; }
|
public string oriOrgName { get; set; }
|
||||||
public string oriSavName { get; set; }
|
public string oriSavName { get; set; }
|
||||||
@ -34,7 +36,8 @@ namespace FrontendWebApi.Models
|
|||||||
public class GraphInfo
|
public class GraphInfo
|
||||||
{
|
{
|
||||||
public string code { get; set; }
|
public string code { get; set; }
|
||||||
public List<int> sub_system_id { get; set; }
|
public string main_system_tag { get; set; }
|
||||||
|
public List<int> sub_system_tag { get; set; }
|
||||||
public string keyWord { get; set; }
|
public string keyWord { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,32 @@ namespace FrontendWebApi.Models
|
|||||||
Fix = 2, //維修
|
Fix = 2, //維修
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class Operation_Firm : Actor
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public byte deleted { get; set; }
|
||||||
|
public string device_system_category_layer2 { get; set; }//系統類別(第2層)
|
||||||
|
public string device_system_category_layer3 { get; set; }//系統類別(第3層)
|
||||||
|
public string name { get; set; }//名称
|
||||||
|
public string contact_person { get; set; }//联络人
|
||||||
|
public string phone { get; set; }//电话
|
||||||
|
public string email { get; set; }//Email
|
||||||
|
public string tax_id_number { get; set; }//统一编号
|
||||||
|
public string remark { get; set; }//备注
|
||||||
|
public string system_key { get; set; }//類別名稱
|
||||||
|
}
|
||||||
|
|
||||||
|
public class OperationFindList
|
||||||
|
{
|
||||||
|
public string serial_number { get; set; } //表单号
|
||||||
|
public DateTime? start_created_at { get; set; }//开始建立时间
|
||||||
|
public DateTime? end_created_at { get; set; }//结束建立时间
|
||||||
|
public bool today { get; set; }//今天建立时间
|
||||||
|
public bool yesterday { get; set; }//昨天建立时间
|
||||||
|
public string main_system_tag { get; set; }//大类tag
|
||||||
|
public string sub_system_tag { get; set; }//小类tag
|
||||||
|
}
|
||||||
|
|
||||||
public class Operation : Actor
|
public class Operation : Actor
|
||||||
{
|
{
|
||||||
public int Id { get; set; }//流水號
|
public int Id { get; set; }//流水號
|
||||||
|
@ -58,6 +58,7 @@ namespace FrontendWebApi
|
|||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
|
services.AddSingleton<JwtHelpers>();
|
||||||
services.AddControllersWithViews();
|
services.AddControllersWithViews();
|
||||||
//services.AddControllers();
|
//services.AddControllers();
|
||||||
|
|
||||||
@ -102,7 +103,7 @@ namespace FrontendWebApi
|
|||||||
// 當驗證失敗時,回應標頭會包含 WWW-Authenticate 標頭,這裡會顯示失敗的詳細錯誤原因
|
// 當驗證失敗時,回應標頭會包含 WWW-Authenticate 標頭,這裡會顯示失敗的詳細錯誤原因
|
||||||
options.IncludeErrorDetails = true; // 預設值為 true,有時會特別關閉
|
options.IncludeErrorDetails = true; // 預設值為 true,有時會特別關閉
|
||||||
|
|
||||||
options.TokenValidationParameters = new TokenValidationParameters()
|
options.TokenValidationParameters = new TokenValidationParameters
|
||||||
{
|
{
|
||||||
// 透過這項宣告,就可以從 "sub" 取值並設定給 User.Identity.Name
|
// 透過這項宣告,就可以從 "sub" 取值並設定給 User.Identity.Name
|
||||||
NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier",
|
NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier",
|
||||||
@ -140,7 +141,6 @@ namespace FrontendWebApi
|
|||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
|
||||||
{
|
{
|
||||||
|
|
||||||
loggerFactory.AddFile("Logs/log-{Date}.txt");
|
loggerFactory.AddFile("Logs/log-{Date}.txt");
|
||||||
|
|
||||||
if (env.IsDevelopment())
|
if (env.IsDevelopment())
|
||||||
|
@ -0,0 +1,507 @@
|
|||||||
|
using Dapper;
|
||||||
|
using Repository.BackendRepository.Interface;
|
||||||
|
using Repository.Helper;
|
||||||
|
using System;
|
||||||
|
using System.Text;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Transactions;
|
||||||
|
using Repository.Models;
|
||||||
|
|
||||||
|
|
||||||
|
namespace Repository.BackendRepository.Implement
|
||||||
|
{
|
||||||
|
public class NiagaraDataSynchronizeRepository : BackendRepository, INiagaraDataSynchronizeRepository
|
||||||
|
{
|
||||||
|
public NiagaraDataSynchronizeRepository(IDatabaseHelper databaseHelper) : base(databaseHelper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新import_niagara_tag資料表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ds"></param>
|
||||||
|
/// <param name="building"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task InsertNiagaraTagList(List<Device_value> ds, string building)
|
||||||
|
{
|
||||||
|
using (IDbConnection conn = GetDbConnection())
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string sql = @"CREATE TABLE IF NOT EXISTS `import_niagara_tag` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`db_tags` varchar(50) DEFAULT NULL,
|
||||||
|
`niagara_tags` varchar(50) DEFAULT NULL,
|
||||||
|
`device_area_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_building_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_system_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_name_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_floor_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_master_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_last_name_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_serial_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`atDateTime` datetime(1) DEFAULT NULL,
|
||||||
|
`is_used` smallint(1) DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;";
|
||||||
|
await conn.ExecuteAsync(sql);
|
||||||
|
sql = "delete from import_niagara_tag where device_building_tag = '" + building + "'";
|
||||||
|
await conn.ExecuteAsync(sql);
|
||||||
|
|
||||||
|
//N4資料groupBy後放入import_niagara_tag資料表
|
||||||
|
var ds2 = ds.GroupBy(x => new
|
||||||
|
{
|
||||||
|
tag_name2 = x.tag_name
|
||||||
|
}).Select(x => new Device_value
|
||||||
|
{
|
||||||
|
tag_name = x.Key.tag_name2
|
||||||
|
});
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
foreach (var row in ds2)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(row.tag_name)) continue;
|
||||||
|
string[] arrTag = row.tag_name.Split('_');
|
||||||
|
|
||||||
|
sb.Append($@" insert import_niagara_tag(niagara_tags, device_area_tag, device_building_tag, device_system_tag,
|
||||||
|
device_name_tag, device_floor_tag, device_master_tag, device_last_name_tag, device_serial_tag, atDateTime) values('" +
|
||||||
|
row.tag_name + "', '" +
|
||||||
|
arrTag[0] + "', '" +
|
||||||
|
arrTag[1] + "', '" +
|
||||||
|
arrTag[2] + "', '" +
|
||||||
|
arrTag[3] + "', '" +
|
||||||
|
arrTag[4] + "', '" +
|
||||||
|
arrTag[5] + "', '" +
|
||||||
|
arrTag[6] + "', '" +
|
||||||
|
arrTag[7] + "', " +
|
||||||
|
"now());");
|
||||||
|
}
|
||||||
|
if (sb.Length > 0)
|
||||||
|
{
|
||||||
|
await conn.ExecuteAsync(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
conn.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新import_niagara_tag資料表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ds"></param>
|
||||||
|
/// <param name="building"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task InsertItemFromNiagara(List<Device_value> ds, string building)
|
||||||
|
{
|
||||||
|
using (IDbConnection conn = GetDbConnection())
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
#region 刪除 import_niagara_item資料表中選取的棟別
|
||||||
|
string sql = @"CREATE TABLE IF NOT EXISTS `import_niagara_item` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`device_area_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_building_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_system_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_name_tag` varchar(50) DEFAULT NULL,
|
||||||
|
`device_point_name` varchar(50) DEFAULT NULL,
|
||||||
|
`check_status` varchar(50) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;";
|
||||||
|
await conn.ExecuteAsync(sql);
|
||||||
|
sql = "delete from import_niagara_item where device_building_tag = '" + building + "'";
|
||||||
|
await conn.ExecuteAsync(sql);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
List<Device_item8> dt_item = new List<Device_item8>();
|
||||||
|
|
||||||
|
foreach (var row in ds)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(row.tag_name)) continue;
|
||||||
|
string[] arrTag = row.tag_name.Split('_');
|
||||||
|
|
||||||
|
#region for item
|
||||||
|
Device_item8 row_item = new Device_item8();
|
||||||
|
row_item.tag_name = row.tag_name;
|
||||||
|
row_item.device_area_tag = arrTag[0];
|
||||||
|
row_item.device_building_tag = arrTag[1];
|
||||||
|
row_item.device_system_tag = arrTag[2];
|
||||||
|
row_item.device_name_tag = arrTag[3];
|
||||||
|
row_item.device_floor_tag = arrTag[4];
|
||||||
|
row_item.device_master_tag = arrTag[5];
|
||||||
|
row_item.device_last_name_tag = arrTag[6];
|
||||||
|
row_item.device_serial_tag = arrTag[7];
|
||||||
|
row_item.point_name = row.point_name;
|
||||||
|
dt_item.Add(row_item);
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
#region N4資料groupBy後放入import_niagara_item資料表
|
||||||
|
var ds2_item = dt_item.GroupBy(x => new
|
||||||
|
{
|
||||||
|
device_area_tag2 = x.device_area_tag,
|
||||||
|
device_building_tag2 = x.device_building_tag,
|
||||||
|
device_system_tag2 = x.device_system_tag,
|
||||||
|
device_name_tag2 = x.device_name_tag,
|
||||||
|
point_name2 = x.point_name
|
||||||
|
}).Select(x => new Device_item8
|
||||||
|
{
|
||||||
|
device_area_tag = x.Key.device_area_tag2,
|
||||||
|
device_building_tag = x.Key.device_building_tag2,
|
||||||
|
device_system_tag = x.Key.device_system_tag2,
|
||||||
|
device_name_tag = x.Key.device_name_tag2,
|
||||||
|
point_name = x.Key.point_name2
|
||||||
|
});
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
foreach (var row2 in ds2_item)
|
||||||
|
{
|
||||||
|
sb.Append($@" insert import_niagara_item(device_area_tag, device_building_tag, device_system_tag, device_name_tag, device_point_name)
|
||||||
|
values('" +
|
||||||
|
row2.device_area_tag + "', '" +
|
||||||
|
row2.device_building_tag + "', '" +
|
||||||
|
row2.device_system_tag + "', '" +
|
||||||
|
row2.device_name_tag + "', '" +
|
||||||
|
row2.point_name + "'" +
|
||||||
|
");");
|
||||||
|
}
|
||||||
|
if (sb.Length > 0)
|
||||||
|
{
|
||||||
|
await conn.ExecuteAsync(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
conn.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 比對 device
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task DeviceComparison()
|
||||||
|
{
|
||||||
|
using (IDbConnection conn = GetDbConnection())
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<NiagaraTags> result;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
StringBuilder sb2 = new StringBuilder();
|
||||||
|
sb.Append($@" SELECT m.*
|
||||||
|
FROM import_niagara_tag m
|
||||||
|
LEFT JOIN device d
|
||||||
|
ON m.niagara_tags = d.device_number
|
||||||
|
WHERE d.device_number IS NULL");
|
||||||
|
result = (await conn.QueryAsync<NiagaraTags>(sb.ToString())).ToList<NiagaraTags>();
|
||||||
|
|
||||||
|
sb.Clear();
|
||||||
|
//新增至device, is_link = 1
|
||||||
|
if (result.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var data in result)
|
||||||
|
{
|
||||||
|
sb.Append($@" insert device(device_guid, deleted, status, priority, is_link, device_area_tag,
|
||||||
|
device_building_tag, device_system_tag, device_name_tag, device_floor_tag, device_master,
|
||||||
|
device_last_name, device_serial_tag, device_number, device_system_category_layer3, created_at, updated_at)
|
||||||
|
values(uuid(), 0, 1, 0, 1, '" +
|
||||||
|
data.device_area_tag + "', '" +
|
||||||
|
data.device_building_tag + "', '" +
|
||||||
|
data.device_system_tag + "', '" +
|
||||||
|
data.device_name_tag + "', '" +
|
||||||
|
|
||||||
|
data.device_floor_tag + "', '" +
|
||||||
|
data.device_master_tag + "', '" +
|
||||||
|
data.device_last_name_tag + "', '" +
|
||||||
|
data.device_serial_tag + "', '" +
|
||||||
|
data.niagara_tags + "', '" +
|
||||||
|
data.device_system_tag + "', now(), now() );");
|
||||||
|
|
||||||
|
sb2.Append($@"INSERT device_kind (device_kind_guid, device_building_tag, device_system_tag, device_name_tag,
|
||||||
|
device_normal_flashing, device_close_flashing, device_error_flashing, device_error_independent,
|
||||||
|
created_by, created_at)
|
||||||
|
VALUES (uuid(), '" + data.device_building_tag + "', '" + data.device_system_tag + "', '" + data.device_name_tag +
|
||||||
|
"', 0, 0, 1, 0, 'B43E3CA7-96DD-4FC7-B6E6-974ACC3B0878', now());");
|
||||||
|
}
|
||||||
|
if (sb.Length > 0)
|
||||||
|
{
|
||||||
|
await conn.ExecuteAsync(sb.ToString());
|
||||||
|
await conn.ExecuteAsync(sb2.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
sb2.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//device有,niagara沒有,is_link 更新成 0
|
||||||
|
sb.Append($@" SET SQL_SAFE_UPDATES = 0;
|
||||||
|
UPDATE device d LEFT JOIN import_niagara_tag m ON d.device_number = m.niagara_tags
|
||||||
|
SET d.is_link = 0
|
||||||
|
WHERE m.niagara_tags IS NULL");
|
||||||
|
await conn.ExecuteAsync(sb.ToString());
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
conn.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 比對 device_item
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task DeviceItemComparison()
|
||||||
|
{
|
||||||
|
using (IDbConnection conn = GetDbConnection())
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<NiagaraTagsForItem> result;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.Append($@" SELECT m.*
|
||||||
|
FROM import_niagara_item m
|
||||||
|
LEFT JOIN device_item d
|
||||||
|
ON m.device_system_tag = d.device_system_tag and m.device_name_tag = d.device_name_tag and m.device_point_name = d.points
|
||||||
|
WHERE d.points IS NULL");
|
||||||
|
result = (await conn.QueryAsync<NiagaraTagsForItem>(sb.ToString())).ToList<NiagaraTagsForItem>();
|
||||||
|
|
||||||
|
sb.Clear();
|
||||||
|
//新增至device, is_link = 1
|
||||||
|
if (result.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var data in result)
|
||||||
|
{
|
||||||
|
var isControll = 0;
|
||||||
|
var isBool = 0;
|
||||||
|
if (data.device_point_name == "ER" || data.device_point_name == "AL" || data.device_point_name == "ST")
|
||||||
|
{
|
||||||
|
isControll = 1;
|
||||||
|
}
|
||||||
|
if (data.device_point_name == "ER" || data.device_point_name == "ST")
|
||||||
|
{
|
||||||
|
isBool = 1;
|
||||||
|
}
|
||||||
|
sb.Append($@"insert device_item(deleted, points, is_show, is_show_riserDiagram, is_controll, is_bool, is_link,
|
||||||
|
device_system_tag, device_name_tag, created_at, updated_at)
|
||||||
|
VALUES (0, '" +
|
||||||
|
data.device_point_name + "', 1, 0, " +
|
||||||
|
isControll + "," +
|
||||||
|
isBool + ", 1, '" +
|
||||||
|
data.device_system_tag + "', '" +
|
||||||
|
data.device_name_tag + "', " +
|
||||||
|
"now(), now());");
|
||||||
|
}
|
||||||
|
if (sb.Length > 0)
|
||||||
|
{
|
||||||
|
await conn.ExecuteAsync(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//device有,niagara沒有,is_link 更新成 0
|
||||||
|
sb.Append($@" SET SQL_SAFE_UPDATES = 0;
|
||||||
|
UPDATE device_item d LEFT JOIN import_niagara_item m
|
||||||
|
ON d.device_system_tag = m.device_system_tag and d.device_name_tag = m.device_name_tag and d.points = m.device_point_name
|
||||||
|
SET d.is_link = 0
|
||||||
|
WHERE m.device_point_name IS NULL");
|
||||||
|
await conn.ExecuteAsync(sb.ToString());
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
conn.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 新增資料至 buildingMenu
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task InsertBuildingMenu()
|
||||||
|
{
|
||||||
|
using (IDbConnection conn = GetDbConnection())
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<NiagaraTags> result;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
#region comparison building_menu and import_niagara_tag
|
||||||
|
sb.Append($@" select a.* from (
|
||||||
|
select device_building_tag, device_system_tag, device_name_tag
|
||||||
|
from import_niagara_tag
|
||||||
|
group by device_building_tag, device_system_tag, device_name_tag
|
||||||
|
) AS a
|
||||||
|
LEFT JOIN building_menu b
|
||||||
|
ON a.device_building_tag = b.device_building_tag and a.device_system_tag = b.device_system_tag and a.device_name_tag = b.sub_system_tag
|
||||||
|
WHERE b.device_building_tag IS NULL");
|
||||||
|
result = (await conn.QueryAsync<NiagaraTags>(sb.ToString())).ToList<NiagaraTags>();
|
||||||
|
#endregion
|
||||||
|
sb.Clear();
|
||||||
|
|
||||||
|
if (result.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var data in result)
|
||||||
|
{
|
||||||
|
#region insert building_menu
|
||||||
|
sb.Append(@"insert building_menu(building_tag, main_system_tag, sub_system_tag, device_building_tag, device_system_tag,
|
||||||
|
is_link, created_by, created_at, updated_by, updated_at)
|
||||||
|
VALUES ('" + data.device_building_tag + "', '" +
|
||||||
|
data.device_system_tag + "', '" +
|
||||||
|
data.device_name_tag + "', '" +
|
||||||
|
data.device_building_tag + "', '" +
|
||||||
|
data.device_system_tag + "', " +
|
||||||
|
"1, 'B43E3CA7-96DD-4FC7-B6E6-974ACC3B0878', now(), 'B43E3CA7-96DD-4FC7-B6E6-974ACC3B0878', now() );");
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
if (sb.Length > 0)
|
||||||
|
{
|
||||||
|
await conn.ExecuteAsync(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//building_menu有,import_niagara_tag沒有,is_link 更新成 0
|
||||||
|
sb.Append($@" SET SQL_SAFE_UPDATES = 0;
|
||||||
|
UPDATE building_menu b LEFT JOIN (
|
||||||
|
select device_building_tag, device_system_tag, device_name_tag
|
||||||
|
from import_niagara_tag
|
||||||
|
group by device_building_tag, device_system_tag, device_name_tag
|
||||||
|
) AS a ON b.device_building_tag = a.device_building_tag
|
||||||
|
and a.device_system_tag = b.device_system_tag and a.device_name_tag = b.sub_system_tag
|
||||||
|
SET b.is_link = 0
|
||||||
|
WHERE b.device_building_tag IS NULL");
|
||||||
|
await conn.ExecuteAsync(sb.ToString());
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
conn.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 新增資料至 subSystemFloor
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task InsertSubSystemFloor()
|
||||||
|
{
|
||||||
|
using (IDbConnection conn = GetDbConnection())
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<NiagaraTags> result;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
#region comparison sub_system_floor and import_niagara_tag
|
||||||
|
sb.Append($@" select a.* from (
|
||||||
|
select device_building_tag, device_system_tag, device_name_tag, device_floor_tag
|
||||||
|
from import_niagara_tag
|
||||||
|
group by device_building_tag, device_system_tag, device_name_tag, device_floor_tag
|
||||||
|
) AS a
|
||||||
|
LEFT JOIN sub_system_floor b
|
||||||
|
ON a.device_building_tag = b.building_tag and a.device_system_tag = b.main_system_tag and a.device_name_tag = b.sub_system_tag and a.device_floor_tag = b.floor_tag
|
||||||
|
WHERE b.building_tag IS NULL");
|
||||||
|
result = (await conn.QueryAsync<NiagaraTags>(sb.ToString())).ToList<NiagaraTags>();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
sb.Clear();
|
||||||
|
if (result.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var data in result)
|
||||||
|
{
|
||||||
|
#region insert building_menu
|
||||||
|
sb.Append(@"insert sub_system_floor(building_tag, main_system_tag, sub_system_tag, floor_tag,
|
||||||
|
is_link, created_by, created_at, updated_by, updated_at)
|
||||||
|
VALUES ('" +
|
||||||
|
data.device_building_tag + "', '" +
|
||||||
|
data.device_system_tag + "', '" +
|
||||||
|
data.device_name_tag + "', '" +
|
||||||
|
data.device_floor_tag + "', " +
|
||||||
|
"1, 'B43E3CA7-96DD-4FC7-B6E6-974ACC3B0878', now(), 'B43E3CA7-96DD-4FC7-B6E6-974ACC3B0878', now());");
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
if (sb.Length > 0)
|
||||||
|
{
|
||||||
|
await conn.ExecuteAsync(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//building_menu有,import_niagara_tag沒有,is_link 更新成 0
|
||||||
|
sb.Append($@" SET SQL_SAFE_UPDATES = 0;
|
||||||
|
UPDATE sub_system_floor b LEFT JOIN (
|
||||||
|
select device_building_tag, device_system_tag, device_name_tag, device_floor_tag
|
||||||
|
from import_niagara_tag
|
||||||
|
group by device_building_tag, device_system_tag, device_name_tag, device_floor_tag
|
||||||
|
) AS a ON b.building_tag = a.device_building_tag
|
||||||
|
and b.main_system_tag = a.device_system_tag and b.sub_system_tag = a.device_name_tag and b.floor_tag = a.device_floor_tag
|
||||||
|
SET b.is_link = 0
|
||||||
|
WHERE b.building_tag IS NULL");
|
||||||
|
await conn.ExecuteAsync(sb.ToString());
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
conn.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Repository.Models;
|
||||||
|
|
||||||
|
namespace Repository.BackendRepository.Interface
|
||||||
|
{
|
||||||
|
public interface INiagaraDataSynchronizeRepository : IBackendRepository
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 同步N4至資料表 import_niagara_tag
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ds"></param>
|
||||||
|
/// <param name="building"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task InsertNiagaraTagList(List<Device_value> ds, string building);
|
||||||
|
/// <summary>
|
||||||
|
/// 同步N4至資料表 import_niagara_item
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ds"></param>
|
||||||
|
/// <param name="building"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task InsertItemFromNiagara(List<Device_value> ds, string building);
|
||||||
|
/// <summary>
|
||||||
|
/// 比對 device
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task DeviceComparison();
|
||||||
|
/// <summary>
|
||||||
|
/// 比對 device_item
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task DeviceItemComparison();
|
||||||
|
/// <summary>
|
||||||
|
/// 新增資料至 buildingMenu
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task InsertBuildingMenu();
|
||||||
|
/// <summary>
|
||||||
|
/// 新增資料至 subSystemFloor
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task InsertSubSystemFloor();
|
||||||
|
}
|
||||||
|
}
|
@ -37,4 +37,60 @@ namespace Repository.Models
|
|||||||
public string FileName { get; set; }
|
public string FileName { get; set; }
|
||||||
public string File { get; set; }
|
public string File { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 取得niagara資料
|
||||||
|
/// </summary>
|
||||||
|
public class Device_value
|
||||||
|
{
|
||||||
|
public string name { get; set; }
|
||||||
|
public string value { get; set; }
|
||||||
|
public string tag_name { get; set; }
|
||||||
|
public string point_name { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Device_item8
|
||||||
|
{
|
||||||
|
public string name { get; set; }
|
||||||
|
public string value { get; set; }
|
||||||
|
public string tag_name { get; set; }
|
||||||
|
public string device_area_tag { get; set; }
|
||||||
|
public string device_building_tag { get; set; }
|
||||||
|
public string device_system_tag { get; set; }
|
||||||
|
public string device_name_tag { get; set; }
|
||||||
|
public string device_floor_tag { get; set; }
|
||||||
|
public string device_master_tag { get; set; }
|
||||||
|
public string device_last_name_tag { get; set; }
|
||||||
|
public string device_serial_tag { get; set; }
|
||||||
|
public string point_name { get; set; }
|
||||||
|
|
||||||
|
//public string result_value { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NiagaraTags
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string db_tags { get; set; }
|
||||||
|
public string niagara_tags { get; set; }
|
||||||
|
public string device_area_tag { get; set; }
|
||||||
|
public string device_building_tag { get; set; }
|
||||||
|
public string device_system_tag { get; set; }
|
||||||
|
public string device_name_tag { get; set; }
|
||||||
|
public string device_floor_tag { get; set; }
|
||||||
|
public string device_master_tag { get; set; }
|
||||||
|
public string device_last_name_tag { get; set; }
|
||||||
|
public string device_serial_tag { get; set; }
|
||||||
|
public string atDateTime { get; set; }
|
||||||
|
public int is_used { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NiagaraTagsForItem
|
||||||
|
{
|
||||||
|
public string device_area_tag { get; set; }
|
||||||
|
public string device_building_tag { get; set; }
|
||||||
|
public string device_system_tag { get; set; }
|
||||||
|
public string device_name_tag { get; set; }
|
||||||
|
public string device_point_name { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
81
Repository/Models/quickType.cs
Normal file
81
Repository/Models/quickType.cs
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Converters;
|
||||||
|
|
||||||
|
namespace Repository.Models
|
||||||
|
{
|
||||||
|
public partial class Welcome
|
||||||
|
{
|
||||||
|
[JsonProperty("?xml")]
|
||||||
|
public Xml Xml { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("?xml-stylesheet")]
|
||||||
|
public string XmlStylesheet { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("obj")]
|
||||||
|
public Obj Obj { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public partial class Obj
|
||||||
|
{
|
||||||
|
[JsonProperty("@display")]
|
||||||
|
public string Display { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("@xmlns")]
|
||||||
|
public Uri Xmlns { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("@xsi:schemaLocation")]
|
||||||
|
public Uri XsiSchemaLocation { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("@xmlns:xsi")]
|
||||||
|
public Uri XmlnsXsi { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("str")]
|
||||||
|
public Str[] Str { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public partial class Str
|
||||||
|
{
|
||||||
|
[JsonProperty("@name")]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("@val")]
|
||||||
|
public string Val { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("@href")]
|
||||||
|
public string Href { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public partial class Xml
|
||||||
|
{
|
||||||
|
[JsonProperty("@version")]
|
||||||
|
public string Version { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("@encoding")]
|
||||||
|
public string Encoding { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public partial class Welcome
|
||||||
|
{
|
||||||
|
public static Welcome FromJson(string json) => JsonConvert.DeserializeObject<Welcome>(json, Models.Converter.Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Serialize
|
||||||
|
{
|
||||||
|
public static string ToJson(this Welcome self) => JsonConvert.SerializeObject(self, Models.Converter.Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static class Converter
|
||||||
|
{
|
||||||
|
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
|
||||||
|
{
|
||||||
|
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
|
||||||
|
DateParseHandling = DateParseHandling.None,
|
||||||
|
Converters =
|
||||||
|
{
|
||||||
|
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user