2022-10-14 16:08:54 +08:00
using FrontendWebApi.Models ;
using Microsoft.AspNetCore.Mvc ;
2024-05-31 10:55:48 +08:00
using Microsoft.Extensions.Configuration ;
2022-10-14 16:08:54 +08:00
using Microsoft.Extensions.Logging ;
2023-10-27 18:14:07 +08:00
using Newtonsoft.Json ;
2022-10-14 16:08:54 +08:00
using Repository.BackendRepository.Interface ;
using Repository.FrontendRepository.Interface ;
using System ;
2024-06-12 16:29:20 +08:00
using System.Collections ;
2022-10-14 16:08:54 +08:00
using System.Collections.Generic ;
2024-05-31 10:55:48 +08:00
using System.Data.SqlTypes ;
2022-10-14 16:08:54 +08:00
using System.Diagnostics ;
using System.Linq ;
2024-05-31 10:55:48 +08:00
using System.Net.Sockets ;
using System.Text ;
2022-10-14 16:08:54 +08:00
using System.Threading.Tasks ;
namespace FrontendWebApi.ApiControllers
{
public class EmergencyDeviceController : MyBaseApiController < EmergencyDeviceController >
{
private readonly IBackendRepository backendRepository ;
private readonly IFrontendRepository frontendRepository ;
public EmergencyDeviceController
(
IBackendRepository backendRepository ,
IFrontendRepository frontendRepository
)
{
this . backendRepository = backendRepository ;
this . frontendRepository = frontendRepository ;
}
2024-05-31 10:55:48 +08:00
[HttpPost("api/Send")]
public async Task < ApiResult < List < Variable > > > SendMessageAsync ( string message )
{
ApiResult < List < Variable > > apiResult = new ApiResult < List < Variable > > ( ) ;
var sqlString = "SELECT * from variable WHERE system_type = 'TcpClient'" ;
var variables = await frontendRepository . GetAllAsync < Variable > ( sqlString ) ;
var serverAddress = variables . Where ( x = > x . System_key = = "Address" ) . First ( ) . system_value ;
var serverPort = int . Parse ( variables . Where ( x = > x . System_key = = "Port" ) . First ( ) . system_value ) ;
try
{
using ( var client = new TcpClient ( ) )
{
await client . ConnectAsync ( serverAddress , serverPort ) ;
using ( var stream = client . GetStream ( ) )
{
var data = Encoding . UTF8 . GetBytes ( message ) ;
await stream . WriteAsync ( data , 0 , data . Length ) ;
//data = new byte[256];
//var bytes = await stream.ReadAsync(data, 0, data.Length);
apiResult . Code = "0000" ;
apiResult . Msg = "傳送指令, " + message ;
return apiResult ;
}
}
}
catch ( SocketException ex )
{
apiResult . Code = "9999" ;
apiResult . Msg = ex . Message ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + ex . Message ) ;
return apiResult ;
}
catch ( Exception ex )
{
apiResult . Code = "9999" ;
apiResult . Msg = ex . Message ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + ex . Message ) ;
return apiResult ;
}
}
2022-10-14 16:08:54 +08:00
[HttpPost]
[Route("api/DisasterList")]
public async Task < ActionResult < ApiResult < List < KeyValue > > > > DisasterList ( )
{
ApiResult < List < KeyValue > > apiResult = new ApiResult < List < KeyValue > > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
List < KeyValue > Variable = new List < KeyValue > ( ) ;
try
{
var sqlString = @ $"select system_value as Value, system_key as Name from variable a where a.system_type = 'disaster' and a.deleted = 0" ;
Variable = await backendRepository . GetAllAsync < KeyValue > ( sqlString ) ;
apiResult . Code = "0000" ;
apiResult . Data = Variable ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
}
return Ok ( apiResult ) ;
}
[HttpPost]
[Route("api/BuildInfoList")]
public async Task < ActionResult < ApiResult < List < BuildingToF > > > > BuildInfoList ( )
{
ApiResult < List < BuildingToF > > apiResult = new ApiResult < List < BuildingToF > > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
List < building_floor > Building_floor = new List < building_floor > ( ) ;
List < BuildingToF > buildingToF = new List < BuildingToF > ( ) ;
try
{
2023-05-19 14:06:25 +08:00
var sqlString = @ $"select f.floor_guid ,f.full_name floorname,b.building_tag,b.full_name buildingname from floor f left join building b on b.building_tag = f.building_tag order by f.building_tag , f.priority" ;
2022-10-14 16:08:54 +08:00
Building_floor = await backendRepository . GetAllAsync < building_floor > ( sqlString ) ;
2023-05-19 14:22:05 +08:00
var builds = Building_floor . GroupBy ( a = > a . building_tag ) . ToList ( ) ;
2022-10-14 16:08:54 +08:00
foreach ( var floor in builds )
{
BuildingToF buildingToF1 = new BuildingToF ( )
{
2023-05-19 14:22:05 +08:00
building_tag = floor . Select ( a = > a . building_tag ) . FirstOrDefault ( ) ,
2022-10-14 16:08:54 +08:00
building_name = floor . Select ( a = > a . buildingname ) . FirstOrDefault ( ) ,
floors = new List < FloorForB > ( )
} ;
foreach ( var f in floor )
{
FloorForB floorForB = new FloorForB ( )
{
floor_guid = f . floor_guid ,
floor_name = f . floorname
} ;
buildingToF1 . floors . Add ( floorForB ) ;
}
buildingToF . Add ( buildingToF1 ) ;
}
apiResult . Code = "0000" ;
apiResult . Data = buildingToF ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
}
return Ok ( apiResult ) ;
}
[HttpPost]
[Route("api/EmergencyDevice")]
2023-06-07 17:28:35 +08:00
public async Task < ActionResult < ApiResult < List < deviceMenu > > > > EmergencyDevice ( selectdevice selectdevice )
2022-10-14 16:08:54 +08:00
{
ApiResult < List < deviceMenu > > apiResult = new ApiResult < List < deviceMenu > > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
List < deviceMenu > Variable = new List < deviceMenu > ( ) ;
try
{
2023-06-07 16:45:00 +08:00
string deviceQue = "" ;
string disasQue = "" ;
2023-10-30 15:01:59 +08:00
if ( selectdevice . selectbuilding = = null | | selectdevice . selectbuilding . Count = = 0 )
selectdevice . selectbuilding = new List < string > ( ) ;
2023-06-07 16:45:00 +08:00
if ( selectdevice . select_Floors ! = null & & selectdevice . select_Floors . Count > 0 )
deviceQue + = $" AND d.device_floor_tag in @floor " ;
if ( selectdevice . select_Layer3 ! = null & & selectdevice . select_Layer3 . Count > 0 )
deviceQue + = $" AND d.device_name_tag IN @layer3 " ;
2023-10-30 15:01:59 +08:00
if ( selectdevice . select_disasters = = null | | selectdevice . select_disasters . Count = = 0 )
selectdevice . select_disasters = new List < int > ( ) ;
2022-10-14 16:08:54 +08:00
2023-10-30 15:01:59 +08:00
deviceQue + = $" AND d.device_building_tag in @building_tag " ;
disasQue = " where dd.device_system_value IN @disasters " ;
2023-10-31 14:50:01 +08:00
var sqlString = @ $ "select
2022-10-14 16:08:54 +08:00
d . device_guid ,
d . device_number ,
d . full_name AS device_name ,
2023-09-21 10:01:12 +08:00
d . device_building_tag AS building_tag ,
2022-10-14 16:08:54 +08:00
b . full_name AS building_name ,
2023-10-31 14:50:01 +08:00
CONCAT ( b . ip_http , ' : //',b.ip_address , ':', b.ip_port,'/file/',b.niagara_root_name) AS ip_address,
2022-10-14 16:08:54 +08:00
v . layer2 ,
v . layer2_name ,
v . system_value AS layer3 ,
v . system_key AS layer3_name ,
dd . device_system_value AS disaster ,
ddd . system_key AS disaster_name ,
floor . full_name floorname ,
floor . floor_guid floorguid
from
2023-05-19 11:18:38 +08:00
( SELECT *
FROM device d
WHERE d . deleted = 0
2023-06-07 16:45:00 +08:00
{ deviceQue }
) d
2024-05-31 10:55:48 +08:00
left join floor on floor . full_name = d . device_floor_tag and floor . building_tag = d . device_building_tag and floor . deleted = 0
2022-10-14 16:08:54 +08:00
left join (
2023-05-19 11:18:38 +08:00
SELECT
v . * ,
v2 . system_key AS layer2_name ,
v2 . system_value AS layer2
FROM (
select *
from variable v
where v . system_type = ' device_system_category_layer3 ' ) v
LEFT JOIN variable v2 ON v2 . deleted = 0 AND v . system_parent_id = v2 . id
2023-09-21 10:01:12 +08:00
) v on v . system_value = d . device_name_tag
2022-10-14 16:08:54 +08:00
left join device_disaster dd on dd . device_guid = d . device_guid
left join ( select * from variable v where v . system_type = ' disaster ' ) ddd on ddd . system_value = dd . device_system_value
2023-05-19 11:18:38 +08:00
LEFT JOIN building b ON b . deleted = 0 AND d . device_building_tag = b . building_tag
2023-06-07 16:45:00 +08:00
{ disasQue }
2022-10-14 16:08:54 +08:00
ORDER BY d . device_number
";
2023-10-30 18:18:04 +08:00
Variable = await backendRepository . GetAllAsync < deviceMenu > ( sqlString , new
{
disasters = selectdevice . select_disasters ,
building_tag = selectdevice . selectbuilding ,
floor = selectdevice . select_Floors ,
2023-10-31 14:50:01 +08:00
layer3 = selectdevice . select_Layer3
2023-10-30 18:18:04 +08:00
} ) ;
2022-10-14 16:08:54 +08:00
apiResult . Code = "0000" ;
apiResult . Data = Variable ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
}
return Ok ( apiResult ) ;
}
[HttpPost]
[Route("api/EmergencyDevice/SaveAndOpenSimulationExercise")]
public async Task < ActionResult < ApiResult < string > > > SaveAndOpenSimulationExercise ( Eventpost eventpost )
{
ApiResult < string > apiResult = new ApiResult < string > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
try
{
2024-06-12 16:29:20 +08:00
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 > ( )
2022-10-14 16:08:54 +08:00
{
{ "@emergency_event_guid" , newguid } ,
{ "@disaster" , eventpost . disaster } ,
2023-05-19 14:22:05 +08:00
{ "@building_tag" , eventpost . build } ,
2022-10-14 16:08:54 +08:00
{ "@device_guid" , eventpost . device } ,
2024-06-12 16:29:20 +08:00
{ "@type" , eventpost . type } ,
{ "@alarm_time" , eventpost . alarm_time }
2022-10-14 16:08:54 +08:00
} ;
2024-06-12 16:29:20 +08:00
await backendRepository . AddOneByCustomTable ( dictionary , "emergency_event" ) ;
apiResult . Data = newguid . ToString ( ) ;
apiResult . Code = "0000" ;
}
2022-10-14 16:08:54 +08:00
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
}
return Ok ( apiResult ) ;
}
[HttpPost]
[Route("api/EmergencyDevice/GetBigsetting")]
public async Task < ActionResult < ApiResult < List < SaveGrouping > > > > GetBigsetting ( int disaster )
{
ApiResult < List < SaveGrouping > > apiResult = new ApiResult < List < SaveGrouping > > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
try
{
var sql = $ @ "
select
v . id id ,
v . system_key name ,
f . system_value verify
from variable v
join variable f on v . id = f . system_parent_id and f . system_type = ' Verify '
where v . system_type = ' DisasterSetting '
and v . system_parent_id = ' { disaster } '
and v . deleted = 0
order by v . system_priority ";
var list = await backendRepository . GetAllAsync < SaveGrouping > ( sql ) ;
apiResult . Data = list ;
apiResult . Code = "0000" ;
apiResult . Msg = "新增成功" ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
}
return Ok ( apiResult ) ;
}
[HttpPost]
[Route("api/EmergencyDevice/GetEmergencySetting")]
public async Task < ActionResult < ApiResult < List < EmergencySettingTable > > > > GetEmergencySetting ( int selectsetting )
{
List < EmergencySettingTable > Emergency_Setting_tables = new List < EmergencySettingTable > ( ) ;
ApiResult < List < EmergencySettingTable > > apiResult = new ApiResult < List < EmergencySettingTable > > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
try
{
Emergency_Setting_tables = await backendRepository . GetAllAsync < EmergencySettingTable > ( $ @ "
2023-05-22 11:57:41 +08:00
select v . system_key big_setting_name , es . * from emergency_setting es left join variable v on es . big_setting = v . id
2022-10-14 16:08:54 +08:00
where es . big_setting = { selectsetting } and es . deleted = 0 order by es . priority ");
apiResult . Code = "0000" ;
apiResult . Data = Emergency_Setting_tables ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
}
return Ok ( apiResult ) ;
}
[HttpPost]
[Route("api/EmergencyDevice/GetContentAndMakeItem")]
public async Task < ActionResult < ApiResult < EmergencyitemWithguid > > > GetContentAndMakeItem ( Emergencyitempost post )
{
ApiResult < EmergencyitemWithguid > apiResult = new ApiResult < EmergencyitemWithguid > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
try
{
var Emergency_Setting_tables = await backendRepository . GetOneAsync < EmergencyitemWithguid > ( $ @ "
2023-05-22 11:57:41 +08:00
select v . system_key big_setting_name , es . * from emergency_setting es left join variable v on es . big_setting = v . id
2022-10-14 16:08:54 +08:00
where es . emergency_guid = ' { post . emergency_guid } ' ");
if ( post . make_item = = 1 )
{
var haveguid = await backendRepository . GetOneAsync < string > ( $"select emergency_item_guid from emergency_item where event_guid = '{post.event_guid}' and big_setting = '{post.big_setting}' and step_setting = '{post.step_setting}'" ) ;
if ( haveguid = = null )
{
var newguid = Guid . NewGuid ( ) ;
var dictionary = new Dictionary < string , object > ( )
{
{ "@emergency_item_guid" , newguid } ,
{ "@event_guid" , post . event_guid } ,
{ "@big_setting" , post . big_setting } ,
{ "@step_setting" , post . step_setting } ,
{ "@created_by" , myUser . userinfo_guid }
} ;
await backendRepository . AddOneByCustomTable ( dictionary , "emergency_item" ) ;
Emergency_Setting_tables . emergency_item_guid = newguid . ToString ( ) ;
}
else
{
Emergency_Setting_tables . emergency_item_guid = haveguid ;
}
}
apiResult . Code = "0000" ;
apiResult . Data = Emergency_Setting_tables ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
}
return Ok ( apiResult ) ;
}
[HttpPost]
[Route("api/EmergencyDevice/NextStep")]
public async Task < ActionResult < ApiResult < string > > > NextStep ( Itempost item )
{
ApiResult < string > apiResult = new ApiResult < string > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
byte finish = 0 ;
if ( item . choose = = 0 )
{
finish = 1 ;
}
else
{
finish = 2 ;
}
try
{
var dictionary = new Dictionary < string , object > ( )
{
{ "@finished" , finish } ,
{ "@updated_by" , myUser . userinfo_guid } ,
{ "@updated_at" , DateTime . Now }
} ;
if ( item . choose = = 1 )
{
dictionary . Add ( "@reason" , item . reason ) ;
}
await backendRepository . UpdateOneByCustomTable ( dictionary , "emergency_item" , $"emergency_item_guid = '{item.eventguid}'" ) ;
apiResult . Code = "0000" ;
apiResult . Msg = "更新成功" ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
string json = System . Text . Json . JsonSerializer . Serialize ( item ) ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
}
return Ok ( apiResult ) ;
}
[HttpPost]
[Route("api/EmergencyDevice/GetGroupingList")]
public async Task < ActionResult < ApiResult < List < KeyValueID > > > > GetGroupingList ( int system_parent_id )
{
ApiResult < List < KeyValueID > > apiResult = new ApiResult < List < KeyValueID > > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
List < KeyValueID > keyvalue = new List < KeyValueID > ( ) ;
try
{
keyvalue = await backendRepository . GetAllAsync < KeyValueID > ( $"select id, system_key as name,system_value as value from variable where deleted = 0 and system_parent_id = {system_parent_id} and system_type = 'grouping' order by system_priority" ) ;
apiResult . Data = keyvalue ;
apiResult . Code = "0000" ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
}
return Ok ( apiResult ) ;
}
[HttpPost]
[Route("api/EmergencyDevice/Dohistorytotable")]
public async Task < ActionResult > Dohistorytotable ( string eventguid )
{
List < Eventitem > eventitems = new List < Eventitem > ( ) ;
ApiResult < List < Eventitem > > apiResult = new ApiResult < List < Eventitem > > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
try
{
eventitems = await backendRepository . GetAllAsync < Eventitem > ( $"select * from emergency_item where event_guid = @Guid" , new { Guid = $"{eventguid}" } ) ;
apiResult . Data = eventitems ;
apiResult . Code = "0000" ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
}
var result = Json ( new
{
data = apiResult
} ) ;
return result ;
}
[HttpPost]
[Route("api/EmergencyDevice/EmergencyContactTable")]
public async Task < ActionResult > EmergencyContactTable ( List < int > selectgroupidlist )
{
List < EmergencyContactTable > Emergency_member_tables = new List < EmergencyContactTable > ( ) ;
ApiResult < List < EmergencyContactTable > > apiResult = new ApiResult < List < EmergencyContactTable > > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
try
{
Emergency_member_tables = await backendRepository . GetAllAsync < EmergencyContactTable > ( $ @ "
2023-05-19 11:18:38 +08:00
select v . system_key groupingName , va . system_key departmentName , em . * from emergency_member em left join variable v on em . grouping = v . id
2022-10-14 16:08:54 +08:00
left join ( select * from variable vs where vs . system_type = ' department ' and vs . deleted = 0 ) va on va . system_value = em . department
where em . grouping in @groupinglist and em . deleted = 0 ", new { groupinglist = selectgroupidlist });
apiResult . Code = "0000" ;
apiResult . Data = Emergency_member_tables ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception . Message ) ;
}
var result = Json ( new
{
data = apiResult
} ) ;
return result ;
}
[HttpPost]
[Route("api/EmergencyDevice/GetDeviceGroup")]
public async Task < ActionResult < ApiResult < List < GetDeviceGroup > > > > GetDeviceGroup ( )
{
List < EmergencyDeviceGroup > getDeviceGroup = new List < EmergencyDeviceGroup > ( ) ;
ApiResult < List < GetDeviceGroup > > apiResult = new ApiResult < List < GetDeviceGroup > > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
List < GetDeviceGroup > finalDeviceGroup = new List < GetDeviceGroup > ( ) ;
try
{
getDeviceGroup = await backendRepository . GetAllAsync < EmergencyDeviceGroup > ( $ @ "
2023-10-27 18:14:07 +08:00
SELECT
dd . device_system_value ' device_disaster ' ,
d . device_building_tag ,
f . floor_guid ' device_floor_guid ' ,
d . device_area_tag ' device_area_tag ' ,
d . device_system_tag ' device_system_category_layer2 ' ,
d . device_name_tag ' device_system_category_layer3 ' ,
count ( * ) device_amount ,
vd . system_key ' disater_name ' ,
b . full_name ' building_name ' ,
f . full_name ' floor_name ' ,
v2 . system_key ' system_category_layer2 ' ,
v3 . system_key ' system_category_layer3 '
FROM
device_disaster dd
JOIN ( SELECT * FROM variable WHERE system_type = ' disaster ' ) vd ON dd . device_system_value = vd . system_value
JOIN floor f ON f . full_name = dd . device_floor_tag
AND f . building_tag = dd . device_building_tag
JOIN device d ON d . device_number = dd . device_number
JOIN building b ON b . building_tag = d . device_building_tag
JOIN ( SELECT * FROM variable v WHERE v . system_type = ' device_system_category_layer2 ' AND v . deleted = 0 ) v2 ON v2 . system_value = d . device_system_tag
JOIN ( SELECT * FROM variable v WHERE v . system_type = ' device_system_category_layer3 ' AND v . deleted = 0 ) v3 ON v3 . system_value = d . device_name_tag
WHERE
d . deleted = 0
AND f . deleted = 0
AND b . deleted = 0
GROUP BY
dd . device_system_value ,
d . device_building_tag ,
device_floor_guid ,
device_area_tag ,
device_system_category_layer2 ,
device_system_category_layer3 ,
d . device_name_tag ,
building_name ,
floor_name ,
disater_name ,
system_category_layer2 ,
system_category_layer3 ");
2022-10-14 16:08:54 +08:00
var dis = getDeviceGroup . GroupBy ( a = > a . device_disaster ) ;
//finalDeviceGroup.disaster = new List<KeyValue>();
foreach ( var diss in dis )
{
GetDeviceGroup getDeviceGroup1 = new GetDeviceGroup ( )
{
Value = diss . Key ,
Name = diss . Select ( a = > a . disater_name ) . FirstOrDefault ( ) . ToString ( ) ,
groupBuildings = new List < GroupBuildings > ( )
} ;
2023-05-19 14:22:05 +08:00
var buds = diss . GroupBy ( a = > a . device_building_tag ) ;
2022-10-14 16:08:54 +08:00
getDeviceGroup1 . groupBuildings = new List < GroupBuildings > ( ) ;
foreach ( var bud in buds )
{
GroupBuildings groupBuildings = new GroupBuildings ( )
{
2023-05-19 14:22:05 +08:00
tag = bud . Key ,
2022-10-14 16:08:54 +08:00
name = bud . Select ( a = > a . building_name ) . FirstOrDefault ( ) . ToString ( ) ,
device_amount = 0 ,
groupFloors = new List < GroupFloor > ( )
} ;
var floors = bud . GroupBy ( a = > a . device_floor_guid ) ;
foreach ( var floor in floors )
{
GroupFloor groupFloor = new GroupFloor ( )
{
guid = floor . Key ,
name = floor . Select ( a = > a . floor_name ) . FirstOrDefault ( ) . ToString ( ) ,
groupLayer2s = new List < GroupLayer2 > ( )
} ;
var layer2s = floor . GroupBy ( a = > a . device_system_category_layer2 ) ;
foreach ( var layer2 in layer2s )
{
GroupLayer2 groupLayer2 = new GroupLayer2 ( )
{
value = layer2 . Key ,
name = layer2 . Select ( a = > a . system_category_layer2 ) . FirstOrDefault ( ) . ToString ( ) ,
device_amount = 0 ,
groupLayer3s = new List < GroupLayer3 > ( )
} ;
var layer3s = layer2 . GroupBy ( a = > a . device_system_category_layer3 ) ;
foreach ( var layer3 in layer3s )
{
GroupLayer3 groupLayer3 = new GroupLayer3 ( )
{
value = layer3 . Key ,
name = layer3 . Select ( a = > a . system_category_layer3 ) . FirstOrDefault ( ) . ToString ( ) ,
device_amount = layer3 . Select ( a = > a . device_amount ) . FirstOrDefault ( )
} ;
groupLayer2 . groupLayer3s . Add ( groupLayer3 ) ;
}
groupFloor . groupLayer2s . Add ( groupLayer2 ) ;
}
groupBuildings . groupFloors . Add ( groupFloor ) ;
}
getDeviceGroup1 . groupBuildings . Add ( groupBuildings ) ;
}
finalDeviceGroup . Add ( getDeviceGroup1 ) ;
}
apiResult . Code = "0000" ;
apiResult . Data = finalDeviceGroup ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
2023-10-27 18:14:07 +08:00
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception ) ;
2022-10-14 16:08:54 +08:00
}
return Ok ( apiResult ) ;
}
[HttpPost]
[Route("api/EmergencyDevice/CheckVerifybool")]
public async Task < ActionResult < ApiResult < bool > > > CheckVerifybool ( string pass )
{
ApiResult < bool > apiResult = new ApiResult < bool > ( ) ;
if ( ! jwtlife )
{
apiResult . Code = "5000" ;
return BadRequest ( apiResult ) ;
}
try
{
EDFunction edFunction = new EDFunction ( ) ;
string passto = "" ;
if ( pass ! = null )
{
passto = edFunction . GetSHA256Encryption ( pass ) ;
}
var Verify = await backendRepository . GetAllAsync < string > ( "userinfo" , $" role_guid = 'B0556AD7-C1E1-47A1-A1F1-802E22714B33' and password = '{passto}'" ) ;
if ( Verify . Count = = 0 )
{
apiResult . Data = false ;
}
else
{
apiResult . Data = true ;
}
apiResult . Code = "0000" ;
}
catch ( Exception ex )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + pass ) ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + ex . Message ) ;
}
return Ok ( apiResult ) ;
}
2023-10-27 18:14:07 +08:00
/// <summary>
/// 取得緊急應變取得Niagara Alarm時間範圍(起始移動天數, 今日為0計算)
/// </summary>
/// <param name="account"></param>
/// <returns></returns>
[HttpPost]
[Route("api/EmergencyDevice/GetNiagaraAlarmMoveDayStart")]
public async Task < ActionResult < ApiResult < int > > > GetNiagaraAlarmMoveDayStart ( )
{
ApiResult < int > apiResult = new ApiResult < int > ( ) ;
try
{
var sqlString = $@"SELECT system_value FROM variable WHERE system_type = 'emergencyConfig' AND system_key = 'getNiagaraAlarmMoveDayNumStart' AND deleted = 0" ;
int moveDayNum = int . Parse ( ( await frontendRepository . GetOneAsync < string > ( sqlString ) ) ? ? "-1" ) ;
apiResult . Code = "0000" ;
apiResult . Data = moveDayNum ;
}
catch ( Exception exception )
{
apiResult . Code = "9999" ;
apiResult . Msg = "系統內部錯誤,請聯絡管理者。" ;
Logger . LogError ( "【" + controllerName + "/" + actionName + "】" + exception ) ;
return Ok ( apiResult ) ;
}
return Ok ( apiResult ) ;
}
2022-10-14 16:08:54 +08:00
}
2023-10-27 18:14:07 +08:00
2022-10-14 16:08:54 +08:00
}