1218 lines
57 KiB
C#
1218 lines
57 KiB
C#
using FrontendWebApi.Models;
|
||
using Microsoft.AspNetCore.Http;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using Microsoft.CodeAnalysis.CSharp;
|
||
using Microsoft.Extensions.Logging;
|
||
using Newtonsoft.Json;
|
||
using Newtonsoft.Json.Linq;
|
||
using Repository.BackendRepository.Interface;
|
||
using Repository.FrontendRepository.Interface;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Collections.Specialized;
|
||
using System.Data.SqlTypes;
|
||
using System.Diagnostics;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Net;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace FrontendWebApi.ApiControllers
|
||
{
|
||
public class DeviceManageController : MyBaseApiController<DeviceManageController>
|
||
{
|
||
private readonly IBackendRepository backendRepository;
|
||
private readonly IFrontendRepository frontendRepository;
|
||
private string deviceKindFilePath = "upload/device_icon/";
|
||
|
||
public DeviceManageController
|
||
(
|
||
IBackendRepository backendRepository,
|
||
IFrontendRepository frontendRepository
|
||
)
|
||
{
|
||
this.backendRepository = backendRepository;
|
||
this.frontendRepository = frontendRepository;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 系統監控列表
|
||
/// </summary>
|
||
/// <param name="account"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetMainSub")]
|
||
public async Task<ActionResult<ApiResult<History_MainSubBuildFloor>>> GetMainSub([FromBody] FindDevice fd)
|
||
{
|
||
ApiResult<History_MainSubBuildFloor> apiResult = new ApiResult<History_MainSubBuildFloor>(jwt_str);
|
||
if (!jwtlife)
|
||
{
|
||
apiResult.Code = "5000";
|
||
return BadRequest(apiResult);
|
||
}
|
||
else if (string.IsNullOrEmpty(fd.building_tag))
|
||
{
|
||
apiResult.Code = "0002";
|
||
apiResult.Msg = "必須選擇東別";
|
||
return apiResult;
|
||
}
|
||
|
||
try
|
||
{
|
||
var dbsub = await frontendRepository.GetAllAsync<HistoryDBMainSub>(
|
||
@$"select distinct v1.system_key main_name, v1.system_value main_system_tag, v2.system_key sub_name, v2.system_value sub_system_tag, v1.system_priority, v2.system_priority, bm.priority,
|
||
dk.device_normal_color, dk.device_close_color, dk.device_error_color,dk.device_normal_flashing, dk.device_close_flashing, dk.device_error_flashing,
|
||
dk.device_normal_text, dk.device_close_text, dk.device_error_text,dk.device_normal_point_name, dk.device_close_point_name, dk.device_error_point_name,
|
||
dk.device_normal_point_value, dk.device_close_point_value, dk.device_error_point_value
|
||
-- di.full_name as device_item_name, di.points as device_item_points, di.unit as device_item_unit, di.is_show_riserDiagram as device_item_is_show_riserDiagram,
|
||
-- di.is_controll as device_item_is_controll, di.is_bool as device_item_is_bool, di.is_link as device_item_is_link
|
||
from role_auth a
|
||
join auth_page b on a.AuthCode = b.AuthCode
|
||
join userinfo c on c.role_guid = a.role_guid
|
||
join variable v2 on b.ShowView = v2.id and v2.system_type = @sub_system_type
|
||
join variable v1 on v1.id = v2.system_parent_id and v1.system_type = @main_system_type
|
||
join device d on v1.system_value = d.device_system_tag and v2.system_value = d.device_name_tag and d.deleted = 0
|
||
left join device_kind dk on v1.system_value = dk.device_system_tag and v2.system_value = dk.device_name_tag and dk.device_building_tag = @building_tag
|
||
and dk.is_link = 1 and (dk.device_model_tag is null or dk.device_model_tag = d.device_model_tag)
|
||
-- left join device_item di on v2.system_value = di.device_name_tag and v1.system_value = di.device_system_tag and di.deleted = 0
|
||
join (
|
||
select distinct main_system_tag, sub_system_tag, priority from building_menu where building_tag = @building_tag and is_link = 1
|
||
) as bm on v2.system_value = bm.sub_system_tag and v1.system_value = bm.main_system_tag
|
||
where c.account = @account
|
||
order by v2.system_priority, bm.priority", new { @account = myUser.account, @sub_system_type = sub_system_type, @main_system_type = main_system_type, @building_tag = fd.building_tag });
|
||
var mains = dbsub.GroupBy(a => a.main_system_tag).ToList();
|
||
apiResult.Data = new History_MainSubBuildFloor();
|
||
apiResult.Data.history_Main_Systems = new List<History_Main_system>();
|
||
|
||
foreach (var main in mains)
|
||
{
|
||
History_Main_system history_Main_System = new History_Main_system();
|
||
history_Main_System.main_system_tag = main.Select(a => a.main_system_tag).FirstOrDefault();
|
||
history_Main_System.full_name = main.Select(a => a.main_name).FirstOrDefault();
|
||
history_Main_System.History_Sub_systems = new List<History_Sub_system>();
|
||
|
||
var subs = dbsub.Where(x => x.main_system_tag == main.Select(m => m.main_system_tag).FirstOrDefault()).ToList();
|
||
foreach (var sub in subs)
|
||
{
|
||
History_Sub_system history_Sub_System = new History_Sub_system();
|
||
history_Sub_System.sub_system_tag = sub.sub_system_tag;
|
||
history_Sub_System.full_name = sub.sub_name;
|
||
history_Sub_System.device_normal_color = sub.device_normal_color;
|
||
history_Sub_System.device_close_color = sub.device_close_color;
|
||
history_Sub_System.device_error_color = sub.device_error_color;
|
||
history_Sub_System.device_normal_flashing = sub.device_normal_flashing;
|
||
history_Sub_System.device_close_flashing = sub.device_close_flashing;
|
||
history_Sub_System.device_error_flashing = sub.device_error_flashing;
|
||
history_Sub_System.device_normal_text = sub.device_normal_text;
|
||
history_Sub_System.device_close_text = sub.device_close_text;
|
||
history_Sub_System.device_error_text = sub.device_error_text;
|
||
history_Sub_System.device_normal_point_name = sub.device_normal_point_name;
|
||
history_Sub_System.device_close_point_name = sub.device_close_point_name;
|
||
history_Sub_System.device_error_point_name = sub.device_error_point_name;
|
||
history_Sub_System.device_normal_point_value = sub.device_normal_point_value;
|
||
history_Sub_System.device_close_point_value = sub.device_close_point_value;
|
||
history_Sub_System.device_error_point_value = sub.device_error_point_value;
|
||
|
||
history_Main_System.History_Sub_systems.Add(history_Sub_System);
|
||
}
|
||
|
||
apiResult.Data.history_Main_Systems.Add(history_Main_System);
|
||
}
|
||
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 系統監控電錶左右區塊呈現
|
||
/// </summary>
|
||
/// <param name="account"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetBuildMenu")]
|
||
public async Task<ActionResult<ApiResult<BuildBuildingMenu>>> GetBuildMenu([FromBody] FindDevice fd)
|
||
{
|
||
ApiResult<BuildBuildingMenu> apiResult = new ApiResult<BuildBuildingMenu>(jwt_str);
|
||
if (!jwtlife)
|
||
{
|
||
apiResult.Code = "5000";
|
||
return BadRequest(apiResult);
|
||
}
|
||
else if (string.IsNullOrEmpty(fd.building_tag) || string.IsNullOrEmpty(fd.main_system_tag) || string.IsNullOrEmpty(fd.sub_system_tag))
|
||
{
|
||
apiResult.Code = "0002";
|
||
apiResult.Msg = "傳入參數不完整";
|
||
return apiResult;
|
||
}
|
||
|
||
try
|
||
{
|
||
var buiMenu = await frontendRepository.GetOneAsync<BuildBuildingMenu>(
|
||
@$"SELECT b.urn_3D,bm.* FROM building_menu bm
|
||
JOIN building b on b.building_tag = bm.building_tag
|
||
WHERE bm.building_tag = @building_tag AND bm.main_system_tag = @main_system_tag AND bm.sub_system_tag = @sub_system_tag
|
||
ORDER BY bm.priority",
|
||
new { @sub_system_tag = fd.sub_system_tag, @main_system_tag = fd.main_system_tag, @building_tag = fd.building_tag });
|
||
|
||
apiResult.Data = buiMenu;
|
||
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 棟別列表
|
||
/// </summary>
|
||
/// <param name="account"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetBuild")]
|
||
public async Task<ActionResult<ApiResult<List<BuildList>>>> GetBuild()
|
||
{
|
||
ApiResult<List<BuildList>> apiResult = new ApiResult<List<BuildList>>();
|
||
|
||
try
|
||
{
|
||
var sqlString = $@"select building_tag, full_name, urn_3D, forge_light_group from building where deleted = 0 order by priority";
|
||
var bl = await backendRepository.GetAllAsync<BuildList>(sqlString);
|
||
|
||
apiResult.Code = "0000";
|
||
apiResult.Data = bl;
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 樓層列表
|
||
/// </summary>
|
||
/// <param name="account"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetFloor")]
|
||
public async Task<ActionResult<ApiResult<List<FloorList>>>> GetFloor([FromBody] FindDevice fd)
|
||
{
|
||
ApiResult<List<FloorList>> apiResult = new ApiResult<List<FloorList>>();
|
||
|
||
if (string.IsNullOrEmpty(fd.building_tag))
|
||
{
|
||
apiResult.Code = "0002";
|
||
apiResult.Msg = "必須選擇東別";
|
||
return apiResult;
|
||
}
|
||
else if (string.IsNullOrEmpty(fd.sub_system_tag))
|
||
{
|
||
apiResult.Code = "0002";
|
||
apiResult.Msg = "必須選擇小類系統";
|
||
return apiResult;
|
||
}
|
||
|
||
try
|
||
{
|
||
var sqlString = $@"select f.full_name as floor_tag, f.floor_guid
|
||
from sub_system_floor ssf
|
||
join floor f on ssf.floor_tag = f.full_name and ssf.building_tag = f.building_tag and f.deleted = 0
|
||
where ssf.deleted = 0 and f.building_tag = @building_tag and sub_system_tag = @sub_system_tag order by f.priority";
|
||
var param = new { @building_tag = fd.building_tag, @sub_system_tag = fd.sub_system_tag };
|
||
var fl = await backendRepository.GetAllAsync<FloorList>(sqlString, param);
|
||
|
||
apiResult.Code = "0000";
|
||
apiResult.Data = fl;
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 系統監控內頁 - 設備列表
|
||
/// </summary>
|
||
/// <param name="fd">floor_tag: null->總覽</param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetDeviceList")]
|
||
public async Task<ActionResult<ApiResult<List<FloorList>>>> GetDeviceList([FromBody] FindDevice fd)
|
||
{
|
||
ApiResult<List<FloorList>> apiResult = new ApiResult<List<FloorList>>();
|
||
|
||
//是否顯示DeviceNode
|
||
string sqlStringqueryModuleLightNodeDisplay = $"SELECT system_value FROM variable WHERE system_type = 'module_light_switch' AND system_key = 'displaynode'";
|
||
string displayNode = await backendRepository.GetOneAsync<string>(sqlStringqueryModuleLightNodeDisplay);
|
||
if (string.IsNullOrEmpty(fd.sub_system_tag))
|
||
{
|
||
apiResult.Code = "0001";
|
||
apiResult.Msg = "必須系統類別";
|
||
return BadRequest(apiResult);
|
||
}
|
||
else if (string.IsNullOrEmpty(fd.building_tag))
|
||
{
|
||
apiResult.Code = "0002";
|
||
apiResult.Msg = "必須選擇棟別";
|
||
return BadRequest(apiResult);
|
||
}
|
||
|
||
try
|
||
{
|
||
var sqlString = $@"select f.full_name, f.InitMapName as map_name, concat(f.floor_map_name,'.svg') as floor_map_name, f.urn_3D
|
||
from sub_system_floor ssf
|
||
join floor f on ssf.floor_tag = f.full_name and ssf.building_tag = f.building_tag and f.deleted = 0
|
||
where ssf.deleted = 0 and ssf.building_tag = @building_tag and ssf.sub_system_tag = @sub_system_tag and ssf.floor_tag = ifnull(@floor_tag, ssf.floor_tag);";
|
||
var param = new { @building_tag = fd.building_tag, @floor_tag = fd.floor_tag, @sub_system_tag = fd.sub_system_tag };
|
||
var fl = await backendRepository.GetAllAsync<FloorList>(sqlString, param);
|
||
|
||
foreach (var f in fl)
|
||
{
|
||
List<DeviceLists> dl = new List<DeviceLists>();
|
||
sqlString = $@"select d.device_guid, d.full_name, d.device_coordinate, d.priority, dk.device_image, d.device_number, CONCAT('{baseURL}', '{deviceKindFilePath}', dk.device_image) AS device_image_url,d.status,
|
||
dk.device_normal_point_id, dk.device_normal_point_guid, dk.device_normal_point_col, dk.device_normal_point_value, dk.device_normal_flashing, dk.device_normal_point_name, dk.device_normal_color,
|
||
dk.device_close_point_id, dk.device_close_point_guid, dk.device_close_point_col, dk.device_close_point_value, dk.device_close_flashing, dk.device_close_point_name, dk.device_close_color,
|
||
dk.device_error_point_id, dk.device_error_point_guid, dk.device_error_point_col, dk.device_error_point_value, dk.device_error_flashing, dk.device_error_point_name, dk.device_error_color,
|
||
d.room_dbid, d.device_coordinate_3d, d.forge_dbid
|
||
from device d
|
||
left join device_kind dk on d.device_building_tag = dk.device_building_tag and d.device_system_tag = dk.device_system_tag
|
||
and d.device_name_tag = dk.device_name_tag and dk.is_link = 1 and (dk.device_model_tag is null or dk.device_model_tag = d.device_model_tag)
|
||
where d.deleted = 0 and d.device_name_tag = @sub_system_tag and d.device_building_tag = @building_tag and d.device_floor_tag = @floor_tag
|
||
order by d.device_number";
|
||
var dlParam = new { @sub_system_tag = fd.sub_system_tag, @building_tag = fd.building_tag, @floor_tag = f.full_name };
|
||
dl = await backendRepository.GetAllAsync<DeviceLists>(sqlString, dlParam);
|
||
|
||
foreach (var d in dl)
|
||
{
|
||
var sql_node = $@"SELECT
|
||
dn.device_node_guid,
|
||
dn.device_guid,
|
||
dn.full_name AS Device_node_full_name,
|
||
dn.device_node_coordinate,
|
||
dn.device_node_coordinate_3d,
|
||
dn.device_number,
|
||
dn.priority,
|
||
dn.forge_dbid
|
||
FROM device_node dn
|
||
WHERE dn.deleted = 0 AND dn.device_guid = @device_guid
|
||
ORDER BY dn.priority ASC";
|
||
|
||
d.Device_nodes = await backendRepository.GetAllAsync<DeviceNode>(sql_node, new { device_guid = d.device_guid });
|
||
}
|
||
f.device_list = dl;
|
||
}
|
||
|
||
apiResult.Module = displayNode;
|
||
apiResult.Data = fl;
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 獲取全部設備資料
|
||
/// </summary>
|
||
/// <param name="fd"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetAllDevice")]
|
||
public async Task<ActionResult<ApiResult<List<DeviceBaseList>>>> GetAllDevice()
|
||
{
|
||
ApiResult<List<DeviceBaseList>> apiResult = new ApiResult<List<DeviceBaseList>>();
|
||
try
|
||
{
|
||
|
||
|
||
string sql = $@"select device_guid,device_number, full_name, device_coordinate,device_coordinate_3d,forge_dbid,priority from device where deleted = 0";
|
||
|
||
var device = await backendRepository.GetAllAsync<DeviceBaseList>(sql);
|
||
|
||
if (device == null)
|
||
{
|
||
apiResult.Msg = "查無次設備";
|
||
apiResult.Code = "0001";
|
||
return apiResult;
|
||
}
|
||
|
||
apiResult.Data = device;
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
|
||
apiResult.Code = "9999";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
[HttpPost]
|
||
[Route("api/Device/GetDeviceListBySystem")]
|
||
public async Task<ActionResult<ApiResult<List<DeviceFullList>>>> GetDeviceListBySystem(FindDevice fd)
|
||
{
|
||
ApiResult<List<DeviceFullList>> apiResult = new ApiResult<List<DeviceFullList>>();
|
||
try
|
||
{
|
||
|
||
List<string> queryCollection = new List<string>();
|
||
if (!string.IsNullOrEmpty(fd.building_tag)) {
|
||
queryCollection.Add("device_building_tag = @building_tag");
|
||
}
|
||
if (fd.main_system_tags != null && fd.main_system_tags.Count() > 0)
|
||
{
|
||
queryCollection.Add("device_system_tag IN @system_tags");
|
||
}
|
||
queryCollection.Add("deleted = 0");
|
||
|
||
string query = string.Join(" AND ", queryCollection);
|
||
string sql = $@"SELECT *
|
||
FROM device
|
||
Where {query}";
|
||
|
||
var device = await backendRepository.GetAllAsync<DeviceFullList>(sql,
|
||
new { building_tag = fd.building_tag , system_tags = fd.main_system_tags });
|
||
|
||
apiResult.Data = device;
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
|
||
apiResult.Code = "9999";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 獲取設備資料
|
||
/// </summary>
|
||
/// <param name="fd"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetBaseDevice")]
|
||
public async Task<ActionResult<ApiResult<DeviceBaseInfo>>> GetBaseDevice([FromBody] FindDevice fd)
|
||
{
|
||
ApiResult<DeviceBaseInfo> apiResult = new ApiResult<DeviceBaseInfo>();
|
||
try
|
||
{
|
||
if (fd.device_guid == null && fd.device_number == null) {
|
||
apiResult.Code = "0002";
|
||
apiResult.Msg = "必需輸入設備資訊";
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
string sql = $@"select device_number, full_name, device_coordinate,device_coordinate_3d from device where deleted = 0 and
|
||
(
|
||
(@device_guid is not null and device_guid = @device_guid)
|
||
OR (@device_guid is null and device_number = @device_number)
|
||
)
|
||
";
|
||
object param = new { @device_guid = fd.device_guid,@device_number = fd.device_number};
|
||
|
||
var device = await backendRepository.GetOneAsync<DeviceBaseInfo>(sql, param);
|
||
|
||
if (device == null)
|
||
{
|
||
apiResult.Msg = "查無次設備";
|
||
apiResult.Code = "0001";
|
||
return apiResult;
|
||
}
|
||
|
||
apiResult.Data = device;
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
|
||
apiResult.Code = "9999";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 獲取設備運維資料
|
||
/// </summary>
|
||
/// <param name="fd"></param>
|
||
/// <returns></returns>
|
||
[HttpGet]
|
||
[Route("api/Device/GetOpeDevice")]
|
||
public async Task<ActionResult<ApiResult<List<DeviceOpeRecord>>>> GetOpeDevice([FromQuery] string device_guid)
|
||
{
|
||
ApiResult<List<DeviceOpeRecord>> apiResult = new ApiResult<List<DeviceOpeRecord>>();
|
||
try
|
||
{
|
||
string sql = $@"select orr.work_type, orr.fix_do, ui.full_name as work_person_name, orr.finish_time, orr.created_at, dn.device_node_guid, dn.full_name as device_node_name
|
||
from device d
|
||
join operation_record orr on d.device_number = orr.fix_do_code and orr.deleted = 0
|
||
left join userinfo ui on orr.work_person_id = ui.userinfo_guid
|
||
left join device_node dn on d.device_guid = dn.device_guid
|
||
where d.deleted = 0 and d.device_guid = @device_guid";
|
||
object param = new { @device_guid = device_guid };
|
||
var device = await backendRepository.GetAllAsync<DeviceOpeRecord>(sql, param);
|
||
|
||
if (device.Count == 0)
|
||
{
|
||
apiResult.Msg = "查無次設備";
|
||
apiResult.Code = "0001";
|
||
return apiResult;
|
||
}
|
||
|
||
apiResult.Data = device;
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取得L型選單的alarm的報警設備
|
||
/// 由原本的obix打API方式改為此action
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/MenuAlarm")]
|
||
public async Task<ActionResult<ApiResult<List<OntimeAlarmRawData>>>> MenuAlarm(string account)
|
||
{
|
||
ApiResult<List<OntimeAlarmRawData>> apiResult = new ApiResult<List<OntimeAlarmRawData>>(jwt_str);
|
||
if (!jwtlife)
|
||
{
|
||
apiResult.Code = "5000";
|
||
return BadRequest(apiResult);
|
||
}
|
||
try
|
||
{
|
||
//取得發生異常的設備
|
||
string sql = $@"
|
||
SELECT
|
||
unicode_decode(value) device_point
|
||
FROM alarmorion_orionalarmrecord a
|
||
JOIN alarmorion_orionalarmfacetvalue b on a.id = b.alarm
|
||
WHERE a.sourceState = 1 and b.facetName = 9";
|
||
|
||
var alarmDevicePoints = await frontendRepository.GetAllAsync<string>(sql);
|
||
|
||
List<string> alarmDevices = new List<string>();
|
||
foreach (var alarmDevicePoint in alarmDevicePoints)
|
||
{
|
||
var alarmDevicePointSplit = alarmDevicePoint.Split("_");
|
||
|
||
var alarmDevice = string.Join("_", alarmDevicePointSplit.SkipLast(1));
|
||
|
||
if (!alarmDevices.Contains(alarmDevice))
|
||
{
|
||
alarmDevices.Add(alarmDevice);
|
||
}
|
||
}
|
||
|
||
var sqlDevice = $@"
|
||
SELECT
|
||
d.building_guid,
|
||
d.main_system_guid,
|
||
d.sub_system_guid,
|
||
d.floor_guid,
|
||
d.device_number
|
||
FROM Device d
|
||
INNER JOIN (
|
||
SELECT
|
||
ap.building_guid,
|
||
ap.ShowView AS sub_system_guid
|
||
FROM
|
||
(
|
||
SELECT *
|
||
FROM role_auth ra
|
||
WHERE ra.role_guid = (SELECT ui.role_guid FROM userinfo ui WHERE account = @Account)
|
||
) ra
|
||
LEFT JOIN auth_page ap ON ra.AuthCode = ap.AuthCode
|
||
WHERE ap.AuthType = 1
|
||
) shower ON d.building_guid = shower.building_guid AND d.sub_system_guid = shower.sub_system_guid
|
||
WHERE d.deleted = 0 AND d.device_number IN @DeviceNumbers
|
||
";
|
||
|
||
var menuAlarmDevices = await frontendRepository.GetAllAsync<OntimeAlarmRawData>(sqlDevice, new { Account = account, DeviceNumbers = alarmDevices });
|
||
|
||
apiResult.Data = menuAlarmDevices;
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取得報警設備
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/Getalarm")]
|
||
public async Task<ActionResult<ApiResult<AlarmObj>>> Alarm()
|
||
{
|
||
ApiResult<AlarmObj> apiResult = new ApiResult<AlarmObj>(jwt_str);
|
||
if (!jwtlife)
|
||
{
|
||
apiResult.Code = "5000";
|
||
return BadRequest(apiResult);
|
||
}
|
||
try
|
||
{
|
||
AlarmObj alarmObj = new AlarmObj()
|
||
{
|
||
alarmorion = new List<AlarmorionString>(),
|
||
buildingAlarmDeviceAmount = new List<BuildingAlarmDeviceAmount>()
|
||
};
|
||
|
||
// old寫法
|
||
//string sql = $@"SELECT sl.source device_number,from_unixtime(amc.timestamp/1000,'%Y-%m-%d %H:%i:%s') alarm_timestamp FROM alarmorion_orionalarmrecord amc
|
||
// JOIN (
|
||
// SELECT MAX(amc.alarm) ad,m.source FROM alarmorion_orionalarmsourceorder amc
|
||
// JOIN (SELECT * FROM alarmorion_orionalarmsource a WHERE substring(a.source,23,5) ='Arena') m ON amc.alarmSource = m.id
|
||
// GROUP BY m.source
|
||
// ) sl ON amc.id = sl.ad
|
||
// WHERE amc.sourceState = 1
|
||
// ";
|
||
|
||
string sql = $@"
|
||
select * from
|
||
(
|
||
SELECT a.* ,from_unixtime(a.timestamp/1000,'%Y-%m-%d %H:%i:%s') alarm_timestamp, errmsg device_point,
|
||
substring( errmsg, 1,
|
||
LENGTH(errmsg) -
|
||
LENGTH(SUBSTRING_INDEX(errmsg, '_', -1) -1) -- 最後一段的長度
|
||
-1 -- 減掉最後的 _ ex:D3_B_B1F_CO_
|
||
) device_tag
|
||
FROM alarmOrion_OrionAlarmRecord a
|
||
JOIN alarmOrion_OrionAlarmFacetValue b on a.id = b.alarm
|
||
WHERE a.sourceState = 1 and b.facetName = 9
|
||
) a
|
||
left join device b on a.device_tag = b.device_number AND b.deleted = 0
|
||
left join device_disaster c on b.device_guid = c.device_guid
|
||
WHERE c.device_system_value IS NOT NULL";
|
||
|
||
var alarms = await frontendRepository.GetAllAsync<AlarmorionString>(sql);
|
||
|
||
// old寫法
|
||
//List<AlarmorionString> Alarmorions = new List<AlarmorionString>();
|
||
//foreach (var alarm in alarms)
|
||
//{
|
||
// var source = alarm.device_number.Split('/');
|
||
// //if(source[2] != "H")
|
||
// //{
|
||
// // continue;
|
||
// //}
|
||
// alarm.device_number = source[6];
|
||
// Alarmorions.Add(alarm);
|
||
//}
|
||
|
||
//alarmObj.alarmorion = Alarmorions.GroupBy(a => new { a.device_number, a.alarm_timestamp }).Select(a => a.First()).ToList();
|
||
|
||
foreach (var alarm in alarms)
|
||
{
|
||
var temp_alarm = alarmObj.alarmorion.Find(x => x.device_number == alarm.device_number);
|
||
|
||
if (temp_alarm == null)
|
||
{
|
||
alarmObj.alarmorion.Add(alarm);
|
||
}
|
||
}
|
||
|
||
|
||
var device_amount_sql = $@"SELECT
|
||
d.device_building_tag,
|
||
COUNT(*) AS device_amount
|
||
FROM device d
|
||
WHERE d.deleted = 0
|
||
AND d.device_number IN @devices
|
||
GROUP BY d.device_building_tag";
|
||
alarmObj.buildingAlarmDeviceAmount = await frontendRepository.GetAllAsync<BuildingAlarmDeviceAmount>(device_amount_sql, new { devices = alarmObj.alarmorion.Select(x => x.device_number).ToList() });
|
||
|
||
apiResult.Data = alarmObj;
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 修改設備名稱(打後台API)
|
||
/// </summary>
|
||
/// <param name="change"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/SaveChangeName")]
|
||
public async Task<ActionResult<ApiResult<string>>> SaveChangeName(ChangeName change)
|
||
{
|
||
ApiResult<string> apiResult = new ApiResult<string>(jwt_str);
|
||
if (!jwtlife)
|
||
{
|
||
apiResult.Code = "5000";
|
||
return BadRequest(apiResult);
|
||
}
|
||
try
|
||
{
|
||
if (change.ChooseTable == 0)
|
||
{
|
||
//一般設備
|
||
var GetOne = await backendRepository.GetOneAsync<Device>("device", $" device_number = '{change.TagName}'");
|
||
if (GetOne == null)
|
||
{
|
||
apiResult.Data = "查無資料";
|
||
apiResult.Code = "0001";
|
||
}
|
||
else
|
||
{
|
||
//修改設備名稱
|
||
Dictionary<string, object> ChangeN = new Dictionary<string, object>();
|
||
ChangeN = new Dictionary<string, object>()
|
||
{
|
||
{ "@full_name", change.ChangeN},
|
||
{ "@updated_at",DateTime.Now},
|
||
};
|
||
await backendRepository.UpdateOneByCustomTable(ChangeN, "device", $" device_number = '{change.TagName}'");
|
||
|
||
//記錄使用者操作紀錄
|
||
Dictionary<string, object> userOperatorLog = new Dictionary<string, object>()
|
||
{
|
||
{ "@user_guid", myUser.userinfo_guid },
|
||
{ "@operation_type", 1 }, //1:名稱修改
|
||
{ "@building_tag", GetOne.device_building_tag },
|
||
{ "@main_system_tag", GetOne.device_system_tag },
|
||
{ "@sub_system_tag", GetOne.device_name_tag },
|
||
{ "@floor_tag", GetOne.device_floor_tag },
|
||
{ "@device_guid", GetOne.device_guid },
|
||
{ "@action_name", "修改名稱" },
|
||
{ "@parameter", JsonConvert.SerializeObject(change) },
|
||
};
|
||
|
||
await backendRepository.AddOneByCustomTable(userOperatorLog, "operation_log");
|
||
|
||
apiResult.Data = "更改成功";
|
||
apiResult.Code = "0000";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//燈控設備
|
||
var GetOne = await backendRepository.GetOneAsync<string>("device_master", $" device_master_number = '{change.TagName}'");
|
||
if (GetOne == null)
|
||
{
|
||
apiResult.Data = "查無資料";
|
||
apiResult.Code = "0001";
|
||
}
|
||
else
|
||
{
|
||
Dictionary<string, object> ChangeN = new Dictionary<string, object>();
|
||
ChangeN = new Dictionary<string, object>()
|
||
{
|
||
{ "@device_master_full_name", change.ChangeN},
|
||
{ "@updated_at",DateTime.Now},
|
||
};
|
||
await backendRepository.UpdateOneByCustomTable(ChangeN, "device_master", $" device_master_number = '{change.TagName}'");
|
||
|
||
////記錄使用者操作紀錄
|
||
//Dictionary<string, object> userOperatorLog = new Dictionary<string, object>()
|
||
//{
|
||
// { "@user_guid", myUser },
|
||
// { "@operation_type", 1 }, //1:名稱修改
|
||
// { "@building_guid", GetOne.Building_guid },
|
||
// { "@main_system_guid", GetOne.Main_system_guid },
|
||
// { "@sub_system_guid", GetOne.Sub_system_guid },
|
||
// { "@floor_guid", GetOne.Floor_guid },
|
||
// { "@device_guid", GetOne.Device_guid },
|
||
// { "@action_name", "修改名稱" },
|
||
// { "@parameter", JsonConvert.SerializeObject(change) },
|
||
//};
|
||
|
||
//await backendRepository.AddOneByCustomTable(userOperatorLog, "operation_log");
|
||
|
||
apiResult.Data = "更改成功";
|
||
apiResult.Code = "0000";
|
||
}
|
||
}
|
||
|
||
//string authHeader = HttpContext.Request.Headers["Authorization"];
|
||
//var websiteurl = await frontendRepository.GetOneAsync<string>("select system_value from variable where system_type = 'website_config' and system_key = 'website_url' ");
|
||
////傳送到後台API
|
||
//HttpWebRequest request = (HttpWebRequest)WebRequest.Create($"{websiteurl}api/Device/SaveChangeName");
|
||
//request.Method = "POST";
|
||
//request.Headers.Add("Authorization", authHeader);
|
||
//request.ContentType = "application/x-www-form-urlencoded";
|
||
//request.PreAuthenticate = true;
|
||
//NameValueCollection postParams = System.Web.HttpUtility.ParseQueryString(string.Empty);
|
||
//postParams.Add("TagName", change.TagName);
|
||
//postParams.Add("ChangeN", change.ChangeN);
|
||
//postParams.Add("ChooseTable", change.ChooseTable.ToString());
|
||
//byte[] postData = Encoding.UTF8.GetBytes(postParams.ToString());
|
||
//using (Stream st = request.GetRequestStream())
|
||
//{
|
||
// st.Write(postData, 0, postData.Length);
|
||
//}
|
||
|
||
//HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
||
//var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
|
||
//var statusNumber = (int)response.StatusCode;
|
||
//if (statusNumber != 200)
|
||
//{
|
||
// throw new NotImplementedException(responseString);
|
||
//}
|
||
//else
|
||
//{
|
||
// //解析回傳內容
|
||
// var final = JObject.Parse(responseString);
|
||
|
||
// apiResult.Code = final["code"].ToString();
|
||
// apiResult.Data = final["data"].ToString();
|
||
//}
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
[HttpPost]
|
||
[Route("api/Device/GetHaveChangeNameRole")]
|
||
public async Task<ActionResult<ApiResult<bool>>> GetHaveChangeNameRole(ChangeNameRole role)
|
||
{
|
||
ApiResult<bool> apiResult = new ApiResult<bool>(jwt_str);
|
||
if (!jwtlife)
|
||
{
|
||
apiResult.Code = "5000";
|
||
return BadRequest(apiResult);
|
||
}
|
||
try
|
||
{
|
||
var sql = $@"
|
||
select * from userinfo u
|
||
join role_auth a on a.role_guid = u.role_guid
|
||
join auth_page p on p.AuthCode = a.AuthCode
|
||
where u.account = N'{role.Account}'
|
||
and p.SubName = N'編輯設備名稱'
|
||
and p.building_tag = N'{role.Building_tag}'";
|
||
var have = await backendRepository.GetOneAsync<string>(sql);
|
||
if (have == null)
|
||
{
|
||
apiResult.Data = false;
|
||
}
|
||
else
|
||
{
|
||
apiResult.Data = true;
|
||
}
|
||
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
[HttpPost]
|
||
[Route("api/GetDevForCor")]
|
||
public async Task<ActionResult<List<DevForCor>>> GetDevForCor([FromBody] Device p)
|
||
{
|
||
ApiResult<List<DevForCor>> apiResult = new ApiResult<List<DevForCor>>();
|
||
List<DevForCor> device = new List<DevForCor>();
|
||
|
||
try
|
||
{
|
||
if (p != null)
|
||
{
|
||
var param = new
|
||
{
|
||
@device_area_tag = p.device_area_tag,
|
||
@device_building_tag = p.device_building_tag,
|
||
@device_system_tag = p.device_system_tag,
|
||
@device_name_tag = p.device_name_tag,
|
||
@device_floor_tag = p.device_floor_tag
|
||
};
|
||
var dl = await backendRepository.GetAllAsync<DevForCor>($@"select device_guid,device_number,device_floor_tag,device_coordinate_3d,forge_dbid, full_name
|
||
from device where deleted = 0 and device_area_tag = @device_area_tag and device_building_tag = @device_building_tag
|
||
and device_system_tag = @device_system_tag and device_name_tag = @device_name_tag
|
||
and device_floor_tag = ifnull(@device_floor_tag, device_floor_tag) ", param);
|
||
|
||
foreach (var d in dl)
|
||
{
|
||
var sql_node = $@"SELECT
|
||
dn.device_node_guid,
|
||
dn.device_guid,
|
||
dn.full_name AS Device_node_full_name,
|
||
dn.device_node_coordinate,
|
||
dn.device_node_coordinate_3d,
|
||
dn.device_number,
|
||
dn.priority,
|
||
dn.forge_dbid
|
||
FROM device_node dn
|
||
WHERE dn.deleted = 0 AND dn.device_guid = @device_guid
|
||
ORDER BY dn.priority ASC";
|
||
d.Device_nodes = await backendRepository.GetAllAsync<DeviceNode>(sql_node, new { device_guid = d.device_guid });
|
||
}
|
||
|
||
apiResult.Data = dl;
|
||
apiResult.Code = "0000";
|
||
}
|
||
else
|
||
{
|
||
apiResult.Msg = "無資料數入";
|
||
apiResult.Code = "0001";
|
||
}
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
[HttpPost]
|
||
[Route("api/GetDevNodeForCor")]
|
||
public async Task<ActionResult<List<DevNodeForCor>>> GetDevNodeForCor([FromBody] Device p)
|
||
{
|
||
ApiResult<List<DevNodeForCor>> apiResult = new ApiResult<List<DevNodeForCor>>();
|
||
List<DevNodeForCor> device = new List<DevNodeForCor>();
|
||
|
||
try
|
||
{
|
||
apiResult.Code = "0001";
|
||
if (p != null)
|
||
{
|
||
if (p.device_system_tag == "LT" && p.device_name_tag == "L1")
|
||
{
|
||
var d = await backendRepository.GetAllAsync<DevNodeForCor>($@"select device_guid,priority,device_node_coordinate_3d,forge_dbid from device_node where deleted = 0");
|
||
|
||
apiResult.Data = d;
|
||
apiResult.Code = "0000";
|
||
}
|
||
}
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 燈控排程列表
|
||
/// </summary>
|
||
/// <param name="account"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetLigSchList")]
|
||
public async Task<ActionResult<ApiResult<BuildBuildingMenu>>> GetLigSchList([FromBody] FindDevice fd)
|
||
{
|
||
ApiResult<BuildBuildingMenu> apiResult = new ApiResult<BuildBuildingMenu>(jwt_str);
|
||
if (!jwtlife)
|
||
{
|
||
apiResult.Code = "5000";
|
||
return BadRequest(apiResult);
|
||
}
|
||
else if (string.IsNullOrEmpty(fd.device_guid))
|
||
{
|
||
apiResult.Code = "0002";
|
||
apiResult.Msg = "傳入參數不完整";
|
||
return apiResult;
|
||
}
|
||
|
||
try
|
||
{
|
||
var buiMenu = await frontendRepository.GetOneAsync<BuildBuildingMenu>(
|
||
@$"SELECT b.urn_3D,bm.* FROM building_menu bm
|
||
JOIN building b on b.building_tag = bm.building_tag
|
||
WHERE bm.building_tag = @building_tag AND bm.main_system_tag = @main_system_tag AND bm.sub_system_tag = @sub_system_tag
|
||
ORDER BY bm.priority",
|
||
new { @sub_system_tag = fd.sub_system_tag, @main_system_tag = fd.main_system_tag, @building_tag = fd.building_tag });
|
||
|
||
apiResult.Data = buiMenu;
|
||
|
||
apiResult.Code = "0000";
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取得 forge 模型 node 名稱,透過 node key
|
||
/// </summary>
|
||
/// <param name="account"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetForgeNodeIdFromVar")]
|
||
public async Task<ActionResult<List<Variable>>> GetForgeNodeIdFromVar([FromBody] string forgeNodeKey)
|
||
{
|
||
ApiResult<List<Variable>> apiResult = new ApiResult<List<Variable>>();
|
||
List<Variable> variable = new List<Variable>();
|
||
|
||
try
|
||
{
|
||
var param = new
|
||
{
|
||
@system_type = forge_node_name_system_type,
|
||
@system_key = forgeNodeKey
|
||
};
|
||
var v = await backendRepository.GetAllAsync<Variable>($@"SELECT id,system_value FROM variable WHERE system_type = @system_type and system_key = ifnull(@system_key,system_key)"
|
||
, param);
|
||
|
||
apiResult.Data = v;
|
||
apiResult.Code = "0000";
|
||
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// input user 所選樓層,回傳樓上那層,如果是頂樓 則回自己
|
||
/// </summary>
|
||
/// <param name="account"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetNextFloor")]
|
||
public async Task<ActionResult<ApiResult<Floor>>> GetNextFloor([FromBody] Floor f)
|
||
{
|
||
ApiResult<Floor> apiResult = new ApiResult<Floor>();
|
||
|
||
if (string.IsNullOrEmpty(f.floor_guid))
|
||
{
|
||
apiResult.Code = "0002";
|
||
apiResult.Msg = "需傳入樓層guid";
|
||
return apiResult;
|
||
}
|
||
|
||
try
|
||
{
|
||
//var sqlString = $@" SELECT * FROM floor WHERE
|
||
// priority = (SELECT MIN(priority) FROM floor WHERE priority > (SELECT priority FROM floor WHERE floor_guid = @floor_guid)
|
||
// AND building_tag = (SELECT building_tag FROM floor WHERE floor_guid = @floor_guid))
|
||
// AND building_tag = (SELECT building_tag FROM floor WHERE floor_guid = @floor_guid)";
|
||
|
||
//找出同一棟 User 所選的上一樓(要拿掉天花板),如已經是頂樓則回傳自己
|
||
var sqlString = $@"select * from
|
||
(
|
||
SELECT * FROM floor -- 下一樓
|
||
where building_tag = @building_tag and priority > (
|
||
select priority from floor
|
||
where building_tag = @building_tag and floor_guid = @floor_guid
|
||
)
|
||
order by priority limit 1
|
||
)a
|
||
union
|
||
select * from
|
||
(
|
||
SELECT * FROM floor -- 如果是頂樓則回傳自己
|
||
where building_tag = @building_tag and priority >= (
|
||
select priority from floor
|
||
where building_tag = @building_tag and floor_guid = @floor_guid
|
||
)
|
||
order by priority limit 1
|
||
)b
|
||
order by priority desc limit 1 ";
|
||
var param = new { @building_tag = f.building_tag, @floor_guid = f.floor_guid };
|
||
var fr = await backendRepository.GetOneAsync<Floor>(sqlString, param);
|
||
|
||
apiResult.Code = "0000";
|
||
apiResult.Data = fr;
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取得 Device Item 系統小類下的點位資訊
|
||
/// </summary>
|
||
/// <param name="account"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetDeviceItem")]
|
||
public async Task<ActionResult<ApiResult<List<DeviceItemViewModel>>>> GetDeviceItem([FromBody] FindDeviceItem fdi)
|
||
{
|
||
ApiResult<List<DeviceItemViewModel>> apiResult = new ApiResult<List<DeviceItemViewModel>>();
|
||
|
||
if (string.IsNullOrEmpty(fdi.main_system_tag) || string.IsNullOrEmpty(fdi.sub_system_tag))
|
||
{
|
||
apiResult.Code = "0002";
|
||
apiResult.Msg = "需傳入大小類tag";
|
||
return apiResult;
|
||
}
|
||
|
||
try
|
||
{
|
||
var sqlString = $@" SELECT * FROM device_item
|
||
WHERE deleted = '0' AND device_system_tag = @main_system_tag AND device_name_tag = @sub_system_tag AND points = IFNULL(@points,points)";
|
||
var param = new { @main_system_tag = fdi.main_system_tag, @sub_system_tag = fdi.sub_system_tag, @points = fdi.points };
|
||
var fr = await backendRepository.GetAllAsync<DeviceItemViewModel>(sqlString, param);
|
||
|
||
apiResult.Code = "0000";
|
||
apiResult.Data = fr;
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取得 Forge 3D 模型不可見的類型
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetForgeInvType")]
|
||
public async Task<ActionResult<ApiResult<List<DeviceItemViewModel>>>> GetForgeInvType([FromBody] string search_tag)
|
||
{
|
||
ApiResult<List<ForgeInvisible>> apiResult = new ApiResult<List<ForgeInvisible>>();
|
||
|
||
try
|
||
{
|
||
var sqlString = $@"SELECT
|
||
v1.system_key AS 'invisible_type',
|
||
v1.system_value AS 'invisible_value',
|
||
v2.system_value AS 'sub_system_tag'
|
||
FROM variable v1
|
||
LEFT JOIN variable v2 ON v2.id = v1.system_parent_id AND v2.deleted = '0'
|
||
WHERE
|
||
v1.deleted = '0'
|
||
AND v1.system_type = 'forge_3d_invisible_type'
|
||
AND (
|
||
(@isDef = true AND v1.system_key = 'default_value')
|
||
OR (@isDef = false AND v2.system_value = @sub_system_tag)
|
||
OR (@isDef = false AND @sub_system_tag IS NULL AND v1.system_key = 'default_value')
|
||
OR (@isDef = false AND @sub_system_tag IS NULL AND v2.system_value = v2.system_value)
|
||
)";
|
||
|
||
var param = new { sub_system_tag = search_tag == "forge_default" ? null : search_tag, isDef = search_tag == "forge_default" };
|
||
|
||
var fr = await backendRepository.GetAllAsync<ForgeInvisible>(sqlString, param);
|
||
|
||
|
||
apiResult.Code = "0000";
|
||
apiResult.Data = fr;
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取得緊急應變設備
|
||
/// </summary>
|
||
/// <param name="account"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
[Route("api/Device/GetDisasterDevice")]
|
||
public async Task<ActionResult<ApiResult<List<DeviceDisaster>>>> GetDisasterDevice([FromBody] FindDeviceDisaster fdd)
|
||
{
|
||
ApiResult<List<DeviceDisaster>> apiResult = new ApiResult<List<DeviceDisaster>>();
|
||
|
||
try
|
||
{
|
||
var result = new List<DeviceDisaster>();
|
||
var sqlString = $@" SELECT * FROM device_disaster WHERE 1=1";
|
||
if (fdd != null)
|
||
{
|
||
if (!string.IsNullOrEmpty(fdd.building_tag)) {
|
||
sqlString += " AND device_building_tag = @building_tag";
|
||
}
|
||
}
|
||
|
||
result = await backendRepository.GetAllAsync<DeviceDisaster>(sqlString,fdd);
|
||
|
||
|
||
apiResult.Code = "0000";
|
||
apiResult.Data = result;
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
apiResult.Code = "9999";
|
||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||
return Ok(apiResult);
|
||
}
|
||
return Ok(apiResult);
|
||
}
|
||
}
|
||
} |