[WebApi]緊急應變事件查詢頁面修改,只要發生過就會有紀錄
[BGService]新增緊急應變事件紀錄定期存DB排程
This commit is contained in:
parent
877055440c
commit
c147f79e96
@ -150,12 +150,19 @@ namespace BackendWorkerService
|
||||
#endregion
|
||||
|
||||
#region 定時檢查燈控排程
|
||||
services.AddSingleton< LightScheduleJob>();
|
||||
services.AddSingleton<LightScheduleJob>();
|
||||
services.AddSingleton(
|
||||
new JobSchedule(jobType: typeof(LightScheduleJob), cronExpression: configuration.GetValue<string>("BackgroundServiceCron:LightScheduleJob "))
|
||||
);
|
||||
#endregion
|
||||
|
||||
#region 定時記錄緊急應變告警排程
|
||||
services.AddSingleton<EmergencyRecordJob>();
|
||||
services.AddSingleton(
|
||||
new JobSchedule(jobType: typeof(EmergencyRecordJob), cronExpression: configuration.GetValue<string>("BackgroundServiceCron:EmergencyRecordJob "))
|
||||
);
|
||||
#endregion
|
||||
|
||||
}).ConfigureLogging((hostContext, logFactory) => {
|
||||
IConfiguration configuration = hostContext.Configuration;
|
||||
|
||||
|
156
BackendWorkerService/Quartz/Jobs/EmergencyRecordJob.cs
Normal file
156
BackendWorkerService/Quartz/Jobs/EmergencyRecordJob.cs
Normal file
@ -0,0 +1,156 @@
|
||||
using FrontendWebApi.Models;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Quartz;
|
||||
using Repository.BackendRepository.Interface;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace BackendWorkerService.Quartz.Jobs
|
||||
{
|
||||
[DisallowConcurrentExecution]
|
||||
|
||||
class EmergencyRecordJob : IJob
|
||||
{
|
||||
private readonly ILogger<EmergencyRecordJob> logger;
|
||||
private readonly IBackendRepository backendRepository;
|
||||
private readonly ILogger<Task_Detail> loggers;
|
||||
public EmergencyRecordJob(ILogger<EmergencyRecordJob> logger, IBackendRepository backendRepository, ILogger<Task_Detail> loggers)
|
||||
{
|
||||
this.logger = logger;
|
||||
this.backendRepository = backendRepository;
|
||||
this.loggers = loggers;
|
||||
}
|
||||
|
||||
public async Task Execute(IJobExecutionContext context)
|
||||
{
|
||||
Task_Detail task_Detail = new Task_Detail(loggers, backendRepository);
|
||||
try
|
||||
{
|
||||
if (await task_Detail.GetNeedWorkTask("EmergencyRecordJob", "EmergencyRecord"))
|
||||
{
|
||||
try
|
||||
{
|
||||
await task_Detail.InsertWorkTime("EmergencyRecordJob", "EmergencyRecord");
|
||||
|
||||
var sqlString = $@"SELECT system_value FROM variable WHERE system_type = 'obixConfig' AND system_key = 'ApiBase' AND deleted = 0";
|
||||
string baseApiUrl = await backendRepository.GetOneAsync<string>(sqlString);
|
||||
|
||||
|
||||
sqlString = $@"SELECT system_value FROM variable WHERE system_type = 'emergencyConfig' AND system_key = 'getNiagaraAlarmMoveDayNumStart' AND deleted = 0";
|
||||
int moveDayNum = int.Parse((await backendRepository.GetOneAsync<string>(sqlString)) ?? "-1");
|
||||
|
||||
string apiUrl = Path.Combine(baseApiUrl, "obix/config/Services/AlarmService/~alarmQuery/");
|
||||
|
||||
|
||||
var device_disaster = await backendRepository.GetAllAsync<DeviceDisaster>("device_disaster","");
|
||||
|
||||
using (HttpClient client = new HttpClient())
|
||||
{
|
||||
string username = "stanGG";
|
||||
string password = "St12345678";
|
||||
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
||||
|
||||
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
|
||||
// 建構 XML 數據
|
||||
string xmlData = @$"<obj href='obix:AlarmFilter'>
|
||||
<abstime name='start' val='{DateTime.Now.AddDays(moveDayNum).ToString("yyyy-MM-ddTHH:mm:ss.fff")}+08:00' />
|
||||
<abstime name='end' val='{DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fff")}+08:00'/>
|
||||
</obj>";
|
||||
HttpContent content = new StringContent(xmlData, Encoding.UTF8, "application/xml");
|
||||
|
||||
var response = await client.PostAsync(apiUrl, content);
|
||||
var resString = (await response.Content.ReadAsStringAsync()).ToString();
|
||||
|
||||
XDocument xmlDoc = XDocument.Parse(resString);
|
||||
|
||||
var list = xmlDoc.Descendants().Where(d => d.Name?.LocalName == "list").FirstOrDefault();
|
||||
var objs = list.Descendants().Where(d => d.Name?.LocalName == "obj" && (d.Attribute("is")?.Value?.Contains("obix:Alarm") ?? false)).ToList();
|
||||
var dictionaryList = new List<Dictionary<string, object>>();
|
||||
|
||||
|
||||
List<string> filterList = device_disaster.Select(x => x.device_number).ToList();
|
||||
|
||||
var filteredObjs = objs.Where(obj =>
|
||||
{
|
||||
var deviceNumber = obj.Descendants().Where(d => d.Name.LocalName == "str" && d.Attribute("name").Value == "sourceName")
|
||||
.Select(d => d.Attribute("val").Value)
|
||||
.Select(d => string.Join("_", d.Split("_").Take(5)))
|
||||
.FirstOrDefault();
|
||||
|
||||
return filterList.Contains(deviceNumber);
|
||||
}).ToList();
|
||||
|
||||
foreach (var obj in filteredObjs)
|
||||
{
|
||||
var newguid = Guid.NewGuid();
|
||||
var alarm_timestamp = obj.Descendants().Where(d => d.Name.LocalName == "abstime" && d.Attribute("name").Value == "timestamp")
|
||||
.Select(d =>
|
||||
{
|
||||
DateTime valid;
|
||||
if (DateTime.TryParse(d.Attribute("val").Value, out valid))
|
||||
{
|
||||
return DateTime.Parse(d.Attribute("val").Value).ToString("yyyy-MM-dd HH:mm:ss");
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}).FirstOrDefault();
|
||||
var device_number = obj.Descendants().Where(d => d.Name.LocalName == "str" && d.Attribute("name").Value == "sourceName")
|
||||
.Select(d => d.Attribute("val").Value)
|
||||
.Select(d => string.Join("_", d.Split("_").Take(5)))
|
||||
.FirstOrDefault();
|
||||
var filterDevice = device_disaster.Where(x => x.device_number == device_number).FirstOrDefault();
|
||||
|
||||
var dictionary = new Dictionary<string, object>()
|
||||
{
|
||||
{"@emergency_event_guid",newguid},
|
||||
{"@disaster",filterDevice.device_system_value},
|
||||
{"@building_tag", filterDevice.device_building_tag},
|
||||
{"@device_guid",filterDevice.device_guid },
|
||||
{"@type",0},
|
||||
{"@alarm_time",alarm_timestamp}
|
||||
};
|
||||
dictionaryList.Add(dictionary);
|
||||
|
||||
}
|
||||
|
||||
var mergeSql = @"
|
||||
INSERT INTO emergency_event
|
||||
(emergency_event_guid, disaster, device_guid, building_tag, type, alarm_time)
|
||||
VALUES
|
||||
(@emergency_event_guid, @disaster, @device_guid, @building_tag, @type, @alarm_time)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
disaster = VALUES(disaster),
|
||||
building_tag = VALUES(building_tag),
|
||||
type = VALUES(type)";
|
||||
|
||||
|
||||
await backendRepository.ExecuteSql(mergeSql, dictionaryList);
|
||||
|
||||
}
|
||||
|
||||
await task_Detail.InsertWorkTime_End("EmergencyRecordJob", "EmergencyRecord");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await task_Detail.WorkFail("EmergencyRecordJob", "EmergencyRecord", ex.Message.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
logger.LogError("【EmergencyRecordJob】【任務失敗】");
|
||||
logger.LogError("【EmergencyRecordJob】【任務失敗】[Exception]:{0}", exception.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -16,6 +16,7 @@
|
||||
"ArchiveElectricMeterHourJob": "0 0 2 * * ?",
|
||||
"ArchiveElectricMeterDayJob": "0/5 * * * * ?",
|
||||
"LightScheduleJob ": "0/5 * * * * ?",
|
||||
"EmergencyRecordJob ": "0/5 * * * * ?",
|
||||
"WeatherAPIJob": "0/5 * * * * ?"
|
||||
},
|
||||
"DBConfig": {
|
||||
|
@ -17,6 +17,7 @@
|
||||
"ArchiveElectricMeterHourJob": "0 0 2 * * ?",
|
||||
"ArchiveElectricMeterDayJob": "0/5 * * * * ?",
|
||||
"LightScheduleJob ": "0 0/1 * * * ?",
|
||||
"EmergencyRecordJob ": "0 0/1 * * * ?",
|
||||
"WeatherAPIJob": "0 0 2 * * ?"
|
||||
},
|
||||
"DBConfig": {
|
||||
|
@ -121,7 +121,7 @@ namespace FrontendWebApi.ApiControllers
|
||||
DateTime valid;
|
||||
if (DateTime.TryParse(d.Attribute("val").Value, out valid))
|
||||
{
|
||||
return DateTime.Parse(d.Attribute("val").Value).ToString("yyyy-MM-dd HH:mm:ss.fff");
|
||||
return DateTime.Parse(d.Attribute("val").Value).ToString("yyyy-MM-dd HH:mm:ss");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -6,6 +6,7 @@ using Newtonsoft.Json;
|
||||
using Repository.BackendRepository.Interface;
|
||||
using Repository.FrontendRepository.Interface;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlTypes;
|
||||
using System.Diagnostics;
|
||||
@ -256,6 +257,30 @@ namespace FrontendWebApi.ApiControllers
|
||||
}
|
||||
try
|
||||
{
|
||||
if (eventpost.emergency_event_guid != null)
|
||||
{
|
||||
var dictionary = new Dictionary<string, object>()
|
||||
{
|
||||
{"@finish_time",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}
|
||||
};
|
||||
await backendRepository.UpdateOneByCustomTable(dictionary, "emergency_event", $"emergency_event_guid = '{eventpost.emergency_event_guid}'");
|
||||
apiResult.Code = "0000";
|
||||
apiResult.Msg = "更新完成時間";
|
||||
}
|
||||
else
|
||||
{
|
||||
// 檢查是否有該紀錄
|
||||
var sql = "SELECT * FROM emergency_event WHERE alarm_time = @alarmTime AND device_guid = @deviceGuid";
|
||||
var count = await backendRepository.GetOneAsync<EmergencyRecordEvent>(sql, new { alarmTime = eventpost.alarm_time, deviceGuid = eventpost.device });
|
||||
if (count != null)
|
||||
{
|
||||
apiResult.Code = "0000";
|
||||
apiResult.Msg = "已有該筆紀錄";
|
||||
apiResult.Data = count.emergency_event_guid;
|
||||
|
||||
return Ok(apiResult);
|
||||
}
|
||||
|
||||
var newguid = Guid.NewGuid();
|
||||
var dictionary = new Dictionary<string, object>()
|
||||
{
|
||||
@ -263,12 +288,14 @@ namespace FrontendWebApi.ApiControllers
|
||||
{"@disaster",eventpost.disaster},
|
||||
{"@building_tag", eventpost.build},
|
||||
{"@device_guid",eventpost.device },
|
||||
{"@type",eventpost.type}
|
||||
{"@type",eventpost.type},
|
||||
{"@alarm_time",eventpost.alarm_time}
|
||||
};
|
||||
await backendRepository.AddOneByCustomTable(dictionary, "emergency_event");
|
||||
apiResult.Data = newguid.ToString();
|
||||
apiResult.Code = "0000";
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
apiResult.Code = "9999";
|
||||
|
@ -71,7 +71,7 @@ namespace FrontendWebApi.ApiControllers
|
||||
}
|
||||
|
||||
EmergencyRecordEvent = await backendRepository.GetAllAsync<EmergencyRecordEventTable>($@"
|
||||
select d.device_number device_name,v.system_key disaster_name,ee.*,b.full_name building_name from emergency_event ee
|
||||
select d.device_number device_name,v.system_key disaster_name,ee.*,b.full_name building_name,ee.alarm_time,ee.finish_time from emergency_event ee
|
||||
left join (select * from variable v where v.system_type = 'disaster') v on v.system_value = ee.disaster
|
||||
left join device d on d.device_guid = ee.device_guid
|
||||
left join building b on b.building_tag = ee.building_tag
|
||||
|
@ -113,10 +113,13 @@ namespace FrontendWebApi.Models
|
||||
|
||||
public class Eventpost
|
||||
{
|
||||
public string emergency_event_guid { get; set; }
|
||||
public int disaster { get; set; }
|
||||
public string build { get; set; }
|
||||
public byte type { get; set; }
|
||||
public string device { get; set; }
|
||||
public string alarm_time { get; set; } = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
}
|
||||
|
||||
public class EmergencySetting
|
||||
|
@ -19,11 +19,15 @@ namespace FrontendWebApi.Models
|
||||
|
||||
public class EmergencyRecordEvent : Actor
|
||||
{
|
||||
private string _alarm_time;
|
||||
private string _finish_time;
|
||||
public string emergency_event_guid { get; set; }
|
||||
public int disaster { get; set; }
|
||||
public string device_guid { get; set; }
|
||||
public string building_guid { get; set; }
|
||||
public byte type { get; set; }
|
||||
public string alarm_time { get { return Convert.ToDateTime(_alarm_time).ToString("yyyy-MM-dd HH:mm:ss"); } set { _alarm_time = value; } }
|
||||
public string finish_time { get { return Convert.ToDateTime(_finish_time).ToString("yyyy-MM-dd HH:mm:ss"); } set { _finish_time = value; } }
|
||||
|
||||
}
|
||||
public class EmergencyRecordEventTable : EmergencyRecordEvent
|
||||
|
@ -1,12 +1,12 @@
|
||||
@{
|
||||
ViewData["MainNum"] = "4";
|
||||
ViewData["SubNum"] = "1";
|
||||
ViewData["Title"] = "設備總覽";
|
||||
ViewData["Title"] = "事件清單";
|
||||
}
|
||||
|
||||
<ol class="breadcrumb page-breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="javascript:void(0);">首頁</a></li>
|
||||
<li class="breadcrumb-item active">設備總覽</li>
|
||||
<li class="breadcrumb-item active">事件清單</li>
|
||||
<li class="position-absolute pos-top pos-right d-none d-sm-block"><span class="js-get-date"></span></li>
|
||||
</ol>
|
||||
|
||||
@ -94,7 +94,10 @@
|
||||
@*<button type="button" class="close p-sm-2 p-md-4 text-dark fs-xxl position-absolute pos-right mr-sm-2 mt-sm-1 z-index-space" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="fal fa-times"></i></span>
|
||||
</button>*@
|
||||
<button type="button" class=" position-absolute pos-right mr-sm-3 mt-sm-3 z-index-space btn btn-danger waves-effect waves-themed" id="closemodal" onclick="Closemodal()">關閉流程</button>
|
||||
<div class="position-absolute pos-right mr-sm-3 mt-sm-3 z-index-space">
|
||||
@*<button type="button" class="btn btn-danger waves-effect waves-themed mr-2" id="Tcp" onclick="SendMessageAsync('D002')">取消上牆</button>*@
|
||||
<button type="button" class="btn btn-danger waves-effect waves-themed" id="closemodal" onclick="Closemodal()">關閉流程</button>
|
||||
</div>
|
||||
<div class="modal-body bg-white">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
@ -621,6 +624,7 @@
|
||||
'createdRow': function (row, data, dataIndex) {
|
||||
$(row).attr('data-guid', data.device_guid);
|
||||
$(row).attr('data-disaster', data.disaster);
|
||||
$(row).attr('data-time', data.alarm_timestamp);
|
||||
},
|
||||
"ajax": {
|
||||
"url": "/api/EmergencyDevice",
|
||||
@ -651,7 +655,7 @@
|
||||
|
||||
enable_alarm_timer = true;
|
||||
is_need_reload = false;
|
||||
|
||||
// 如果是告警頁面則會進行設備清單跟alarm設備的比對
|
||||
if (show_mode == 'alarm') {
|
||||
backfill_building_alarm_device_amount = [];
|
||||
backfill_layer2_alarm_device_amount = [];
|
||||
@ -748,9 +752,10 @@
|
||||
|
||||
selected_device_guid = $(this).parents('tr').attr('data-guid');
|
||||
selected_device_disaster = $(this).parents('tr').attr('data-disaster');
|
||||
selected_device_time = $(this).parents('tr').attr('data-time');
|
||||
|
||||
OnSimulationExercise(selected_device_guid, selected_device_disaster, 0);
|
||||
|
||||
OnSimulationExercise(selected_device_guid, selected_device_disaster, 0, selected_device_time);
|
||||
// SendMessageAsync("D001");
|
||||
});
|
||||
//#endregion
|
||||
|
||||
@ -1389,7 +1394,7 @@
|
||||
//#endregion
|
||||
|
||||
//#region 模擬演練 / SOP 開啟畫面
|
||||
function OnSimulationExercise(guid, disaster, type) {
|
||||
function OnSimulationExercise(guid, disaster, type ,time) {
|
||||
|
||||
if (type === 1 && SelectedFilter.disasters.length > 1) {
|
||||
toast_warning("防災類別只能單選,請修改防災類別");
|
||||
@ -1415,6 +1420,7 @@
|
||||
build: SelectedFilter.building_tag[0] ?? null,
|
||||
disaster: disaster,
|
||||
type: type,
|
||||
alarm_time: time,
|
||||
device: guid
|
||||
};
|
||||
$.post(url, send_data, function (rel) {
|
||||
@ -1433,6 +1439,49 @@
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//#region 更新事件完成時間
|
||||
function UpdateRecordFinishTime() {
|
||||
|
||||
var url = "/api/EmergencyDevice/SaveAndOpenSimulationExercise";
|
||||
var send_data = {
|
||||
emergency_event_guid: SimulationExerciseGuid
|
||||
};
|
||||
$.post(url, send_data, function (rel) {
|
||||
if (rel.code != "0000") {
|
||||
if (rel.code == "9999") {
|
||||
toast_error(rel.msg);
|
||||
}
|
||||
return;
|
||||
}
|
||||
else {
|
||||
|
||||
return;
|
||||
}
|
||||
}, 'json');
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//#region 發送電視牆訊號
|
||||
function SendMessageAsync(message) {
|
||||
|
||||
var url = "/api/Send";
|
||||
var send_data = {
|
||||
message: message
|
||||
};
|
||||
$.post(url, send_data, function (rel) {
|
||||
if (rel.code != "0000") {
|
||||
if (rel.code == "9999") {
|
||||
toast_error("電視牆送訊號" + message + "失敗");
|
||||
}
|
||||
return;
|
||||
}
|
||||
else {
|
||||
|
||||
return;
|
||||
}
|
||||
}, 'json');
|
||||
}
|
||||
//#endregion
|
||||
//#region 模擬演練 / SOP modal 取得組別
|
||||
function GetbuttonList(selected_disaster) {
|
||||
var url = "/api/EmergencyDevice/GetGroupingList";
|
||||
@ -1805,7 +1854,7 @@
|
||||
|
||||
if (tablist == undefined) {
|
||||
$('#button_' + EmerNowsetting).find('button').attr('disabled', true);
|
||||
CloseVerify = true;
|
||||
// CloseVerify = true;
|
||||
//$('#closemodal').attr('disabled', false);
|
||||
} else {
|
||||
$('#' + tablist).trigger('click');
|
||||
@ -1903,6 +1952,9 @@
|
||||
CloseVerify = true;
|
||||
$('#emergency-verify-modal').modal('hide');
|
||||
$('#SimulationExercisemodal').modal('hide');
|
||||
// SendMessageAsync("D002");
|
||||
UpdateRecordFinishTime()
|
||||
CloseVerify = false; // 每次關閉流程都要驗證一次
|
||||
} else {
|
||||
toast_warning('密碼驗證失敗,請重新驗證');
|
||||
}
|
||||
|
@ -359,56 +359,56 @@
|
||||
})
|
||||
|
||||
//#region 定時取得報警設備(3s)
|
||||
interval_id = setInterval(function () {
|
||||
if (!enable_alarm_timer) {
|
||||
return;
|
||||
}
|
||||
var url = "/api/Device/Getalarm";
|
||||
$.post(url, null, function (rel) {
|
||||
if (rel.code != "0000") {
|
||||
if (rel.code == "9999") {
|
||||
toast_error(rel.msg);
|
||||
}
|
||||
else {
|
||||
toast_warning(rel.msg);
|
||||
}
|
||||
return;
|
||||
}
|
||||
else {
|
||||
// interval_id = setInterval(function () {
|
||||
// if (!enable_alarm_timer) {
|
||||
// return;
|
||||
// }
|
||||
// var url = "/api/Device/Getalarm";
|
||||
// $.post(url, null, function (rel) {
|
||||
// if (rel.code != "0000") {
|
||||
// if (rel.code == "9999") {
|
||||
// toast_error(rel.msg);
|
||||
// }
|
||||
// else {
|
||||
// toast_warning(rel.msg);
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
// else {
|
||||
|
||||
var is_diff = false;
|
||||
if (Object.keys(temp_alarm_device).length == Object.keys(rel.data.alarmorion).length) {
|
||||
// var is_diff = false;
|
||||
// if (Object.keys(temp_alarm_device).length == Object.keys(rel.data.alarmorion).length) {
|
||||
|
||||
for (var i = 0; i < Object.keys(rel.data.alarmorion).length; i++) {
|
||||
// for (var i = 0; i < Object.keys(rel.data.alarmorion).length; i++) {
|
||||
|
||||
var index = temp_alarm_device.findIndex(x => x.alarm_timestamp == rel.data.alarmorion[i].alarm_timestamp
|
||||
&& x.device_number == rel.data.alarmorion[i].device_number)
|
||||
// var index = temp_alarm_device.findIndex(x => x.alarm_timestamp == rel.data.alarmorion[i].alarm_timestamp
|
||||
// && x.device_number == rel.data.alarmorion[i].device_number)
|
||||
|
||||
if (index > -1) {
|
||||
is_diff = false;
|
||||
} else {
|
||||
is_diff = true;
|
||||
}
|
||||
}
|
||||
// if (index > -1) {
|
||||
// is_diff = false;
|
||||
// } else {
|
||||
// is_diff = true;
|
||||
// }
|
||||
// }
|
||||
|
||||
} else {
|
||||
is_diff = true;
|
||||
}
|
||||
// } else {
|
||||
// is_diff = true;
|
||||
// }
|
||||
|
||||
temp_alarm_device = rel.data.alarmorion;
|
||||
// temp_alarm_device = rel.data.alarmorion;
|
||||
|
||||
if (show_mode == "alarm" && (is_need_reload || is_diff)) {
|
||||
enable_alarm_timer = false; //關閉查詢異常設備,避免重複呼叫
|
||||
// if (show_mode == "alarm" && (is_need_reload || is_diff)) {
|
||||
// enable_alarm_timer = false; 關閉查詢異常設備,避免重複呼叫
|
||||
|
||||
$("#building").find(".building_device_amount").html(0);
|
||||
rel.data.buildingAlarmDeviceAmount.forEach(function (item) {
|
||||
$(`#${item.building_tag}_device_amount`).html(item.device_amount);
|
||||
});
|
||||
ResetDeviceTable();
|
||||
}
|
||||
}
|
||||
}, 'json');
|
||||
}, 3000);
|
||||
// $("#building").find(".building_device_amount").html(0);
|
||||
// rel.data.buildingAlarmDeviceAmount.forEach(function (item) {
|
||||
// $(`#${item.building_tag}_device_amount`).html(item.device_amount);
|
||||
// });
|
||||
// ResetDeviceTable();
|
||||
// }
|
||||
// }
|
||||
// }, 'json');
|
||||
// }, 3000);
|
||||
//#endregion
|
||||
|
||||
//#region 模擬演練 / SOP modal 聯絡清單Table
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user