ibms-dome/FrontendWebApi/ApiControllers/BuildController.cs

845 lines
41 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using FrontendWebApi.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Repository.BackendRepository.Interface;
using Repository.FrontendRepository.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FrontendWebApi.ApiControllers
{
public class BuildController : MyBaseApiController<BuildController>
{
private readonly IBackendRepository backendRepository;
private readonly IFrontendRepository frontendRepository;
public BuildController
(
IBackendRepository backendRepository,
IFrontendRepository frontendRepository
)
{
this.backendRepository = backendRepository;
this.frontendRepository = frontendRepository;
}
/// <summary>
/// 取得天氣資訊
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("api/GetWeateher")]
public async Task<ActionResult<ApiResult<Weateher>>> GetWeateher()
{
ApiResult<Weateher> apiResult = new ApiResult<Weateher>(jwt_str);
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
try
{
var sql = $@"
SELECT
(
SELECT w.get_value
FROM api_weateher w
WHERE w.weather_type = 'Wx' AND @DateNow BETWEEN w.start_time AND w.end_time ORDER BY created_at DESC, w.id desc
limit 1
) AS WxText,
(
SELECT wd.WeatherKey
FROM api_weateher w
LEFT JOIN weather_description wd ON w.get_value = wd.WeatherValue
WHERE w.weather_type = 'WxV' AND @DateNow BETWEEN w.start_time AND w.end_time ORDER BY created_at DESC, w.id desc
limit 1
) AS Wx,
(
SELECT w.get_value
FROM api_weateher w
WHERE w.weather_type = 'T' AND @DateNow >= w.start_time
order by created_at desc, id desc
limit 1
) AS Temp,
(
SELECT w.get_value
FROM api_weateher w
WHERE w.weather_type = 'RH' AND @DateNow >= w.start_time
order by created_at desc, id desc
limit 1
) AS RH
";
var dateNow = DateTime.Now.ToString("yyyy-MM-dd HH:mm:00");
var weateher = await backendRepository.GetOneAsync<Weateher>(sql, new { DateNow = dateNow });
apiResult.Data = weateher;
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]
public async Task<ApiResult<List<BuildInfo>>> BuildInfoList()
{
ApiResult<List<BuildInfo>> apiResult = new ApiResult<List<BuildInfo>>();
List<BuildInfo> buildInfo = new List<BuildInfo>();
try
{
var sqlString = @$"SELECT A.priority, A.building_tag, A.full_name, A.ip_address, A.ip_port, (SELECT COUNT(*) FROM floor f WHERE f.deleted = 0 AND f.building_tag = A.building_tag) AS 'floorNum', A.created_at,
A.orgName_3D, A.extName_3D
FROM building A
WHERE A.deleted = 0
ORDER BY A.priority ASC, A.created_at DESC";
buildInfo = await backendRepository.GetAllAsync<BuildInfo>(sqlString);
apiResult.Code = "0000";
apiResult.Data = buildInfo;
}
catch (Exception exception)
{
apiResult.Code = "9999";
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
}
return apiResult;
}
/// <summary>
/// 取得預設的棟別資訊
/// </summary>
/// <param name="defaultBuilding"></param>
/// <returns></returns>
[HttpPost]
[Route("api/GetDefaultBuilding")]
public async Task<ActionResult<ApiResult<Building>>> GetDefaultBuilding(DefaultBuilding defaultBuilding)
{
ApiResult<Building> apiResult = new ApiResult<Building>(jwt_str);
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
try
{
var sWhere = "deleted = 0 AND ip_address = @ip_address AND ip_port = @ip_port";
var building = await frontendRepository.GetOneAsync<Building>("building", sWhere, new { ip_address = defaultBuilding.ip_address, ip_port = defaultBuilding.ip_port });
apiResult.Data = building;
apiResult.Code = "0000";
}
catch (Exception exception)
{
apiResult.Code = "9999";
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
return Ok(apiResult);
}
return Ok(apiResult);
}
/// <summary>
/// 取得L型選單資料
/// </summary>
/// <param name="account"></param>
/// <returns></returns>
[HttpPost]
[Route("api/GetMenu")]
public async Task<ActionResult<ApiResult<List<Building>>>> GetMenu(string account)
{
ApiResult<List<Building>> apiResult = new ApiResult<List<Building>>(jwt_str);
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
try
{
var buildmenusql = await backendRepository.GetAllAsync<BuildMenuSql>(@$"
select
me.* ,
b.full_name bfull_name,
b.ip_address,
b.priority bpriority,
v1.system_key mafull_name,
v1.system_priority mapriority,
v1.system_value,
v2.system_key subfull_name,
v2.system_priority subpriority
from building_menu me
join variable v1 on me.main_system_tag = v1.system_value and v1.deleted = 0 and v1.system_type = 'device_system_category_layer2'
join variable v2 on me.sub_system_tag = v2.system_value and v2.deleted = 0 and v2.system_type = 'device_system_category_layer3'
inner join (
SELECT
ap.building_tag,
ap.ShowView
FROM
(
SELECT *
FROM role_auth ra
WHERE ra.role_guid = (SELECT ui.role_guid from userinfo ui where account = @Account)
) ra
join auth_page ap on ra.AuthCode = ap.AuthCode
where ap.AuthType = 1
) shower on shower.building_tag = me.building_tag and shower.ShowView = v2.id
join building b on b.building_tag = me.building_tag and b.deleted = 0 and shower.building_tag = b.building_tag
where me.is_link > 0
order by b.priority, v1.system_priority, me.priority, v2.system_priority, v2.created_at DESC", new { Account = account });
var floorsql = await backendRepository.GetAllAsync<Floorsql>(@"
select * from (select * from sub_system_floor ssf where ssf.deleted = 0 and ssf.status = 0 and ssf.is_link = 1) a
join floor on floor.full_name = a.floor_tag order by floor.priority;");
var common = await backendRepository.GetAllAsync<KeyValue>($@"select ap.building_tag Name,ap.ShowView Value from auth_page ap
left join role_auth ra on ra.AuthCode = ap.AuthCode
right join userinfo ui on ui.role_guid = ra.role_guid
where SUBSTRING(ap.AuthCode,1,1) = 'C' and ui.account = '{account}'
");
var building = buildmenusql.GroupBy(a => a.building_tag).ToList();
List<Building> buildingMenus = new List<Building>();
foreach (var menu in building)
{
Building building1 = new Building()
{
full_name = menu.Select(a => a.bfull_name).FirstOrDefault(),
ip_address = menu.Select(a => a.ip_address).FirstOrDefault(),
priority = menu.Select(a => a.bpriority).FirstOrDefault(),
building_tag = menu.Select(a => a.device_building_tag).FirstOrDefault(),
main_system = new List<Main_system>(),
common = new List<string>()
};
var commonlist = common.Where(a => a.Name == building1.building_tag).Select(a => a.Value).ToList();
building1.common = commonlist;
var mainsystem = menu.GroupBy(a => a.main_system_tag).ToList();
foreach (var ma in mainsystem)
{
Main_system main_System = new Main_system()
{
code = ma.Select(a => a.code).FirstOrDefault(),
main_system_tag = ma.Select(a => a.main_system_tag).FirstOrDefault(),
full_name = ma.Select(a => a.mafull_name).FirstOrDefault(),
priority = ma.Select(a => a.mapriority).FirstOrDefault(),
Sub_system = new List<Sub_systemGuid>()
};
var subsystem = ma.GroupBy(a => a.sub_system_tag).ToList();
string mainSystemTag = ma.Select(m => m.main_system_tag).FirstOrDefault();
foreach (var sub in subsystem)
{
if (mainSystemTag != "S") //normal
{
Sub_systemGuid sub_System = new Sub_systemGuid()
{
sub_system_tag = sub.Select(a => a.sub_system_tag).FirstOrDefault(),
full_name = sub.Select(a => a.subfull_name).FirstOrDefault(),
priority = sub.Select(a => a.subpriority).FirstOrDefault(),
device_system_tag = sub.Select(a => a.device_system_tag).FirstOrDefault(),
OpenTab = sub.Select(a => a.OpenTab).FirstOrDefault(),
system_url = sub.Select(a => a.left_system_url).FirstOrDefault()
};
main_System.Sub_system.Add(sub_System);
}
else // 人流計數處理
{
string name = sub.Select(s => s.subfull_name).FirstOrDefault();
bool check = true;
if (name == "人流計數")
check = sub.Select(s => s.sub_system_tag).FirstOrDefault().StartsWith(menu.Select(m => m.device_building_tag[0]).FirstOrDefault());
if (check)
{
Sub_systemGuid sub_System = new Sub_systemGuid()
{
sub_system_tag = sub.Select(a => a.sub_system_tag).FirstOrDefault(),
full_name = sub.Select(a => a.subfull_name).FirstOrDefault(),
priority = sub.Select(a => a.subpriority).FirstOrDefault(),
device_system_tag = sub.Select(a => a.device_system_tag).FirstOrDefault(),
OpenTab = sub.Select(a => a.OpenTab).FirstOrDefault(),
system_url = sub.Select(a => a.left_system_url).FirstOrDefault()
};
main_System.Sub_system.Add(sub_System);
}
}
}
building1.main_system.Add(main_System);
}
buildingMenus.Add(building1);
}
var projectName = await backendRepository.GetOneAsync<string>($"select system_value from variable where system_type = 'project_name' and deleted = 0");
if (!string.IsNullOrEmpty(projectName) && projectName.Contains("ibms_dome")) //處理安全系統 的緊急壓扣, 閃光喇叭小類
{
foreach(var bm in buildingMenus)
{
var safeSystem = bm.main_system.Where(x => x.main_system_tag == "S").FirstOrDefault();
if (safeSystem != null)
{
var EmerBuckle = safeSystem.Sub_system.Where(x => x.sub_system_tag == "P").ToList();
EmerBuckle.AddRange(safeSystem.Sub_system.Where(x => x.sub_system_tag == "B").ToList());
safeSystem.Sub_system.RemoveAll(x => x.sub_system_tag == "B");
}
}
}
#region extra progress for DataAnalyst and HistorySearch
var extraMenus = await backendRepository.GetAllAsync<Building>($@"SELECT distinct
b.building_tag,
b.full_name,
b.ip_address,
b.priority
FROM
(
SELECT *
FROM role_auth ra
WHERE ra.role_guid = (SELECT ui.role_guid from userinfo ui where account = '{account}')
) ra
join auth_page ap on ra.AuthCode = ap.AuthCode
join building b on ap.building_tag = b.building_tag and b.deleted = 0
where ap.AuthType = 1 and (ap.showview = 'DataAnalyst' or ap.showview = 'HistorySearch')");
if (extraMenus.Any())
{
foreach (var menu in extraMenus)
{
if (!buildingMenus.Any(x => x.building_tag == menu.building_tag))
{
menu.common = new List<string>();
menu.main_system = new List<Main_system>();
buildingMenus.Add(menu);
}
}
}
#endregion
apiResult.Data = buildingMenus;
apiResult.Code = "0000";
}
catch (Exception exception)
{
apiResult.Code = "9999";
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
return Ok(apiResult);
}
return Ok(apiResult);
}
[HttpPost]
[Route("api/GetSubSystem")]
public async Task<ActionResult<ApiResult<Sub_system>>> GetSubSystem(GetSubPost get)
{
ApiResult<Sub_system> apiResult = new ApiResult<Sub_system>(jwt_str);
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
if (get.building_tag == null || get.main_system_tag == null || get.sub_system_tag == null)
{
apiResult.Code = "9997";
return Ok(apiResult);
}
try
{
var sub_system = await backendRepository.GetOneAsync<BuildMenuSql>(@$"select v.system_key subfull_name,me.* from building_menu me
left join variable v on v.system_value = me.sub_system_tag and v.system_type = 'device_system_category_layer3' and v.deleted = 0
where me.building_tag = '{get.building_tag}' and me.main_system_tag = '{get.main_system_tag}' and me.sub_system_tag = '{get.sub_system_tag}' order by me.priority");
get.sub_system_tag = get.sub_system_tag == "P" ? $"'{get.sub_system_tag}','B'" : $"'{get.sub_system_tag}'"; // 巨蛋緊急壓扣(P)跟閃光喇吧被視為同一類
List <Floor> Floors = new List<Floor>();
var floorsql = await backendRepository.GetAllAsync<Floorsql>($@"
select * from (select *,
CASE
WHEN ssf.sub_system_tag IN ({get.sub_system_tag}) THEN 'P_B' -- 將 'P' 和 'B' 合併為一個類
ELSE ssf.sub_system_tag -- 其他保持原樣
END AS merged_sub_system_tag
from sub_system_floor ssf where ssf.deleted = 0 and ssf.status = 0
and ssf.building_tag = '{get.building_tag}'
and ssf.main_system_tag = '{get.main_system_tag}'
and ssf.sub_system_tag in ({get.sub_system_tag})
and ssf.is_link = 1) a
left join floor on floor.full_name = a.floor_tag and a.building_tag = floor.building_tag
where floor.deleted = 0
GROUP BY a.floor_tag, a.building_tag, a.merged_sub_system_tag
order by floor.priority");
Sub_system sub_System = new Sub_system()
{
sub_system_tag = sub_system.sub_system_tag,
left_system_url = sub_system.left_system_url,
left_drawing = sub_system.left_drawing,
Floors = new List<Floor>(),
full_name = sub_system.subfull_name,
left_icon_click = sub_system.left_icon_click,
left_icon_click_url = sub_system.left_icon_click_url,
left_planimetric_click = sub_system.left_planimetric_click,
left_planimetric_floor_guid = sub_system.left_planimetric_floor_guid,
left_riser_diagram_url = sub_system.left_riser_diagram_url,
left_build_menu_blankurl_modal = sub_system.left_build_menu_blankurl_modal,
priority = sub_system.subpriority
};
foreach (var floor in floorsql)
{
Floor floor1 = new Floor()
{
devices = null,
floor_guid = floor.floor_guid,
Floor_map_name = floor.Floor_map_name,
full_name = floor.full_name,
InitMapName = floor.InitMapName,
priority = floor.priority
};
Floors.Add(floor1);
}
sub_System.Floors = Floors;
apiResult.Data = sub_System;
apiResult.Code = "0000";
}
catch (Exception exception)
{
apiResult.Code = "9999";
apiResult.Msg = "9999";
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
return Ok(apiResult);
}
return Ok(apiResult);
}
[HttpPost]
[Route("api/GetFloor")]
public async Task<ActionResult<ApiResult<Floor>>> GetFloor(string guid)
{
ApiResult<Floor> apiResult = new ApiResult<Floor>(jwt_str);
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
try
{
string sWhere = $@"deleted = 0 AND floor_guid = @Guid";
var floor = await backendRepository.GetOneAsync<Floor>("floor", sWhere, new { Guid = guid });
apiResult.Data = floor;
apiResult.Code = "0000";
}
catch (Exception exception)
{
apiResult.Code = "9999";
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
return Ok(apiResult);
}
return Ok(apiResult);
}
/// <summary>
/// 依據過濾條件取得該棟別與系統tag name
/// </summary>
/// <param name="post"></param>
/// <returns></returns>
[HttpPost]
[Route("api/GetBuildingAndSystemTagName")]
public async Task<ActionResult<ApiResult<BuildingSystemTagName>>> GetBuildingAndSystemTagName(PostTagName post)
{
ApiResult<BuildingSystemTagName> apiResult = new ApiResult<BuildingSystemTagName>(jwt_str);
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
try
{
string sql = $@"
SELECT
device_building_tag,
sub_system_tag
FROM building_menu
WHERE building_tag = @building_tag
AND main_system_tag = @main_system_tag
AND sub_system_tag = @sub_system_tag
";
var tagName = await backendRepository.GetOneAsync<BuildingSystemTagName>(sql, post);
apiResult.Data = tagName;
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="post"></param>
/// <returns></returns>
[HttpPost]
[Route("api/GetDevice")]
public async Task<ActionResult<ApiResult<List<DeviceList>>>> GetDevice(GetSubPost post)
{
ApiResult<List<DeviceList>> apiResult = new ApiResult<List<DeviceList>>();
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
if (post.building_tag == null)
{
apiResult.Code = "9997";
return Ok(apiResult);
}
try
{
var projectName = await backendRepository.GetOneAsync<string>($"select system_value from variable where system_type = 'project_name' and deleted = 0");
var main_system_guidsql = "";
var sub_system_guidsql = "";
var disasterjoinsql = "";
var disastersql = "";
var devicesql = "";
var layer3sql = "";
var sWhere = "";
var singleSubSql = "";
var cctvSql = "";
if (!String.IsNullOrEmpty(post.main_system_tag))
{
main_system_guidsql = $" and d.device_system_tag = '{post.main_system_tag}'";
}
if (!String.IsNullOrEmpty(post.sub_system_tag))
{
if (!string.IsNullOrEmpty(projectName) && projectName.Contains("ibms_dome") && (post.main_system_tag == "S" && post.sub_system_tag == "P"))
{
sub_system_guidsql = $@" and (d.device_name_tag = '{post.sub_system_tag}' or d.device_name_tag = 'B') and d.device_number not like '%ATS%'";
singleSubSql = $"and (di.device_name_tag = '{post.sub_system_tag}' or di.device_name_tag = 'B')";
}
else
{
sub_system_guidsql = $" and d.device_name_tag = '{post.sub_system_tag}'";
singleSubSql = $"and di.device_name_tag = '{post.sub_system_tag}'";
if (post.main_system_tag.Equals("S") && post.sub_system_tag.Equals("C"))
cctvSql = $" and d.device_model_tag = dk.device_model_tag";
}
}
if (!String.IsNullOrEmpty(post.device_system_category_layer3))
{
layer3sql = $" and d.device_system_category_layer3 = '{post.device_system_category_layer3}'";
}
if (!String.IsNullOrEmpty(post.device_system_value))
{
disasterjoinsql = " left join device_disaster dd on dd.device_guid = d.device_guid";
disastersql = $" and dd.device_system_value = '{post.device_system_value}'";
}
if (!String.IsNullOrEmpty(post.device_number)) {
devicesql = " and d.device_number = @device_number ";
}
if (!String.IsNullOrEmpty(post.show_cctv) && post.show_cctv == "1")
{
var str_arr = new List<string>();
if (!String.IsNullOrEmpty(post.main_system_tag))
{
str_arr.Add($@"d.device_system_tag = '{post.main_system_tag}'");
}
if (!String.IsNullOrEmpty(post.sub_system_tag))
{
str_arr.Add($@"d.device_name_tag = '{post.sub_system_tag}'");
}
if (!String.IsNullOrEmpty(post.device_system_category_layer3))
{
str_arr.Add($@"d.device_system_category_layer3 = '{post.device_system_category_layer3}'");
}
if (!String.IsNullOrEmpty(post.device_system_value))
{
str_arr.Add($@"dd.device_system_value = '{post.device_system_value}'");
}
if (!String.IsNullOrEmpty(post.device_number))
{
str_arr.Add($@"d.device_number = @device_number");
}
if (str_arr.Count > 0)
{
sWhere = $@" AND (
(
{string.Join(" AND ", str_arr)}
) OR
d.device_name_tag = 'C'
)";
}
else
{
sWhere = $@" AND d.device_name_tag = 'C'";
}
}
else
{
sWhere = $@"{main_system_guidsql} {sub_system_guidsql} {disastersql} {layer3sql} {devicesql}";
}
var sql = $@"select
d.*,
dk.device_image,
dk.device_normal_text,
dk.device_normal_point_name,
dk.device_normal_point_col,
dk.device_normal_point_value,
dk.device_normal_color,
dk.device_normal_flashing,
dk.device_close_text,
dk.device_close_point_name,
dk.device_close_point_col,
dk.device_close_point_value,
dk.device_close_color,
dk.device_close_flashing,
dk.device_error_text,
dk.device_error_point_name,
dk.device_error_point_col,
dk.device_error_point_value,
dk.device_error_color,
dk.device_error_flashing,
dk.device_error_independent,
CASE WHEN dm.device_master_number IS NOT NULL THEN dm.device_master_number
ELSE CONCAT(d.device_building_tag, '_', d.device_name_tag)
END AS device_master_number,
dm.device_master_full_name,
dm.device_master_icon,
bm.left_icon_click,
bm.left_icon_click_url,
bm.left_icon_click_url_width,
bm.left_icon_click_url_height,
di.full_name as point_name,
di.points,
di.is_bool as points_is_bool,
f.floor_guid
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_floor_tag = dk.device_floor_tag
and d.device_name_tag = dk.device_name_tag
and dk.is_link = 1
{cctvSql}
left join device_master dm ON d.device_building_tag = dm.device_building_tag
AND d.device_name_tag = dm.device_name_tag
left join (
select device_name_tag, full_name, points, is_bool
from device_item di
where di.device_building_tag = '{post.building_tag}'
AND di.deleted = 0
AND di.is_link = 1
AND di.is_show_riserDiagram = 1
{(string.IsNullOrEmpty(singleSubSql) ? $"and di.device_name_tag = '{post.sub_system_tag}'" : singleSubSql)}
limit 1000
) di on di.device_name_tag = d.device_name_tag
left join floor f on d.device_floor_tag = f.full_name and f.deleted = 0 and d.device_building_tag = f.building_tag
{disasterjoinsql}
LEFT JOIN building_menu bm ON d.device_building_tag = bm.building_tag AND d.device_system_tag = bm.main_system_tag AND d.device_name_tag = bm.sub_system_tag
where d.deleted = 0 and d.is_link = 1 and d.device_building_tag = '{post.building_tag}' {sWhere}
order by d.priority ASC, left(device_serial_tag, LENGTH(device_serial_tag) - 1) ASC";
var devicelist = await backendRepository.GetAllAsync<DeviceFloor>(sql,new { device_number = post.device_number });
//抓出該設備底下的子節點
var sql_node = $@"SELECT
dn.device_node_guid,
dn.device_guid,
dn.full_name AS Device_node_full_name,
dn.device_node_coordinate,
dn.priority
FROM device_node dn
WHERE dn.deleted = 0 AND dn.device_guid = @device_guid
ORDER BY dn.priority ASC";
foreach (var device in devicelist)
{
device.Device_nodes = await backendRepository.GetAllAsync<DeviceNode>(sql_node, new { device_guid = device.device_guid });
}
//抓出該設備所需要的顯示的即時資料(平面圖)
var sql_tips = $@"SELECT di.* FROM device_item di WHERE di.deleted = 0 AND is_show = 1 AND device_name_tag = @sub_system_tag and device_building_tag = '{post.building_tag}'";
var device_item_floormap = await backendRepository.GetAllAsync<DeviceItem>(sql_tips, new { sub_system_tag = post.sub_system_tag });
foreach (var device in devicelist)
{
device.deviceItems = device_item_floormap;
}
var dev = devicelist.GroupBy(a => a.floor_guid).ToList();
apiResult.Data = new List<DeviceList>();
foreach (var one in dev)
{
DeviceList afloor = new DeviceList()
{
floor_guid = one.Key,
device = new List<Device>()
};
foreach (var de in one)
{
var device_url = string.Empty;
if (((de.left_icon_click & 1) > 0) && !string.IsNullOrEmpty(de.left_icon_click_url))
{
device_url = de.left_icon_click_url;
//點擊顯示系統圖
if (de.left_icon_click_url.Contains("[device_building_tag]"))
{
device_url = device_url.Replace("[device_building_tag]", de.device_building_tag);
}
if (de.left_icon_click_url.Contains("[device_system_tag]"))
{
device_url = device_url.Replace("[device_system_tag]", de.device_system_tag);
}
if (de.left_icon_click_url.Contains("[device_floor_tag]"))
{
device_url = device_url.Replace("[device_floor_tag]", de.device_floor_tag);
}
if (de.left_icon_click_url.Contains("[device_name_tag]"))
{
device_url = device_url.Replace("[device_name_tag]", de.device_name_tag);
}
if (de.left_icon_click_url.Contains("[device_serial_tag]"))
{
device_url = device_url.Replace("[device_serial_tag]", de.device_serial_tag);
}
if (de.left_icon_click_url.Contains("[tag_name]"))
{
device_url = device_url.Replace("[tag_name]", de.device_number);
}
de.left_icon_click_url = null;
de.DeviceURL = device_url;
}
afloor.device.Add(de);
//Device device = new Device()
//{
// device_building_tag = de.device_building_tag,
// device_close_color =de.device_close_color,
// device_coordinate = de.device_coordinate,
// device_error_color = de.device_error_color,
// device_flashing = de.device_flashing,
// device_floor_tag = de.device_floor_tag,
// device_guid = de.device_guid ,
// device_image = de.device_image,
// device_model = de.device_model,
// device_name_tag = de.device_name_tag,
// device_normal_color = de.device_normal_color,
// device_number = de.device_number,
// device_serial_tag= de.device_serial_tag,
// device_system_tag= de.device_system_tag,
// full_name = de.full_name,
// priority = de.priority,
// status = de.status,
// DeviceURL = device_url,
// left_icon_click = de.left_icon_click
//};
//afloor.device.Add(device);
}
apiResult.Data.Add(afloor);
}
apiResult.Code = "0000";
}
catch (Exception exception)
{
apiResult.Code = "9999";
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
return Ok(apiResult);
}
return Ok(apiResult);
}
[HttpPost]
[Route("api/GetAllfloorSVG")]
public async Task<ActionResult<ApiResult<List<string>>>> GetAllfloorSVG(string guid)
{
ApiResult<List<string>> apiResult = new ApiResult<List<string>>(jwt_str);
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
try
{
string sWhere = $@"
SELECT
floor_map_name
FROM floor
where building_guid = @Guid and deleted = 0";
var floor = await backendRepository.GetAllAsync<string>(sWhere, new { Guid = guid });
apiResult.Data = floor;
apiResult.Code = "0000";
}
catch (Exception exception)
{
apiResult.Code = "9999";
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
return Ok(apiResult);
}
return Ok(apiResult);
}
[HttpPost]
[Route("api/GetAllfloor")]
public async Task<ActionResult<ApiResult<List<Floor>>>> GetAllfloor(string building_tag)
{
ApiResult<List<Floor>> apiResult = new ApiResult<List<Floor>>(jwt_str);
if (!jwtlife)
{
apiResult.Code = "5000";
return BadRequest(apiResult);
}
try
{
string sWhere = $@"
SELECT
floor_guid,full_name,building_tag
FROM floor
where building_tag = @building_tag and deleted = 0 order by priority";
var floor = await backendRepository.GetAllAsync<Floor>(sWhere, new { building_tag = building_tag });
apiResult.Data = floor;
apiResult.Code = "0000";
}
catch (Exception exception)
{
apiResult.Code = "9999";
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
return Ok(apiResult);
}
return Ok(apiResult);
}
}
}