Merge branch 'master' of https://gitea.mjm-staging.developers-homelab.net/BIMS/BIMS
This commit is contained in:
commit
b0e9ba73f0
@ -777,6 +777,11 @@ namespace Backend.Controllers
|
|||||||
{
|
{
|
||||||
device_guid_record = device_guid.ToString();
|
device_guid_record = device_guid.ToString();
|
||||||
node_priority = 1;
|
node_priority = 1;
|
||||||
|
Dictionary<string, object> deviceForLight = new Dictionary<string, object>();
|
||||||
|
deviceForLight.Add("@device_coordinate_3d", idfc.device_coordinate_3d);
|
||||||
|
deviceForLight.Add("@forge_dbid", idfc.forge_dbid);
|
||||||
|
deviceForLight.Add("@updated_at", DateTime.Now);
|
||||||
|
await backendRepository.UpdateOneByCustomTable(deviceForLight, "device", $@" device_guid = '{device_guid}'");
|
||||||
}
|
}
|
||||||
|
|
||||||
//燈具
|
//燈具
|
||||||
@ -798,11 +803,9 @@ namespace Backend.Controllers
|
|||||||
Dictionary<string, object> device = new Dictionary<string, object>();
|
Dictionary<string, object> device = new Dictionary<string, object>();
|
||||||
device.Add("@device_coordinate_3d", idfc.device_coordinate_3d);
|
device.Add("@device_coordinate_3d", idfc.device_coordinate_3d);
|
||||||
device.Add("@forge_dbid", idfc.forge_dbid);
|
device.Add("@forge_dbid", idfc.forge_dbid);
|
||||||
|
device.Add("@updated_at", DateTime.Now);
|
||||||
await backendRepository.UpdateOneByCustomTable(device, "device", $@" device_number = '{idfc.device_number}'");
|
await backendRepository.UpdateOneByCustomTable(device, "device", $@" device_number = '{idfc.device_number}'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
apiResult.Code = "0000";
|
apiResult.Code = "0000";
|
||||||
@ -823,5 +826,91 @@ namespace Backend.Controllers
|
|||||||
|
|
||||||
return apiResult;
|
return apiResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新forge_room room_id(dbid), room_name
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<ApiResult<string>> ImportForgeRoom([FromBody] List<ImportForgeRoom> post)
|
||||||
|
{
|
||||||
|
ApiResult<string> apiResult = new ApiResult<string>();
|
||||||
|
//var device_guid_record = "";
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (post != null)
|
||||||
|
{
|
||||||
|
if (post.Count > 0)
|
||||||
|
{
|
||||||
|
//清空device_node資料表
|
||||||
|
await backendRepository.TruncateTable("forge_room");
|
||||||
|
|
||||||
|
foreach (var idfc in post)
|
||||||
|
{
|
||||||
|
// var room_name_arr = idfc.room_name.Split('_');
|
||||||
|
string full_name = idfc.room_name;
|
||||||
|
char first = full_name[0];
|
||||||
|
if (first != 'B' && first != 'R' && first != 'U')
|
||||||
|
{
|
||||||
|
full_name = 'U' + full_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
//var param = new { floor_name = floor_name };
|
||||||
|
|
||||||
|
//房間 新增Data至forge_room資料表
|
||||||
|
Dictionary<string, object> room = new Dictionary<string, object>();
|
||||||
|
room.Add("@room_id", idfc.room_id);
|
||||||
|
room.Add("@deleted", 0);
|
||||||
|
room.Add("@room_name", full_name);
|
||||||
|
room.Add("@created_at", DateTime.Now);
|
||||||
|
|
||||||
|
await backendRepository.AddOneByCustomTableReturnId(room, "forge_room", false);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//更新forge_room資料表 building_tag, floor_guid欄位
|
||||||
|
string sql = @"
|
||||||
|
update forge_room a
|
||||||
|
join (
|
||||||
|
select building_tag, floor_guid,
|
||||||
|
case when right(floor_name, 1) = 'F' then floor_name
|
||||||
|
else CONCAT(floor_name, 'F') end floor_name , priority
|
||||||
|
from (
|
||||||
|
SELECT
|
||||||
|
a.building_tag,
|
||||||
|
a.floor_guid, a.full_name,
|
||||||
|
case when left(a.full_name, 1) = 'B' then a.full_name
|
||||||
|
when left(a.full_name, 1) = 'R' then a.full_name
|
||||||
|
when left(a.full_name, 1) = 'U' then a.full_name
|
||||||
|
else CONCAT('U', a.full_name) end as floor_name,
|
||||||
|
a.priority
|
||||||
|
FROM floor AS a
|
||||||
|
INNER JOIN building AS b ON a.building_tag = b.building_tag
|
||||||
|
WHERE a.deleted = 0 AND b.deleted = 0
|
||||||
|
)y
|
||||||
|
)x on SUBSTRING_INDEX(a.room_name, '_', 1) = x.floor_name
|
||||||
|
set a.building_tag = x.building_tag,
|
||||||
|
a.floor_guid = x.floor_guid";
|
||||||
|
await backendRepository.ExecuteSql(sql);
|
||||||
|
}
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Msg = "編輯成功";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
apiResult.Code = "0001";
|
||||||
|
apiResult.Msg = "無資料輸入";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
apiResult.Code = "9999";
|
||||||
|
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return apiResult;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -270,4 +270,23 @@ namespace Backend.Models
|
|||||||
public string device_coordinate_3d { get; set; }
|
public string device_coordinate_3d { get; set; }
|
||||||
public int forge_dbid { get; set; }
|
public int forge_dbid { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ImportForgeRoom
|
||||||
|
{
|
||||||
|
public string building_tag { get; set; }
|
||||||
|
public string floor_guid { get; set; }
|
||||||
|
public int room_id { get; set; }
|
||||||
|
public int deleted { get; set; }
|
||||||
|
public string room_name { get; set; }
|
||||||
|
public string created_at { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Import_floor_data
|
||||||
|
{
|
||||||
|
public string building_tag { get; set; }
|
||||||
|
public string floor_guid { get; set; }
|
||||||
|
public string floor_name { get; set; }
|
||||||
|
public int priority { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -54,11 +54,9 @@
|
|||||||
<th>左邊預設頁面</th>
|
<th>左邊預設頁面</th>
|
||||||
<th>左邊是否顯示<br>平面圖</th>
|
<th>左邊是否顯示<br>平面圖</th>
|
||||||
<th>左邊昇位圖<br>詳細資料設定</th>
|
<th>左邊昇位圖<br>詳細資料設定</th>
|
||||||
<th>左邊昇位圖<br>詳細資料URL</th>
|
|
||||||
<th>右邊預設頁面</th>
|
<th>右邊預設頁面</th>
|
||||||
<th>右邊是否顯示<br>平面圖</th>
|
<th>右邊是否顯示<br>平面圖</th>
|
||||||
<th>右邊昇位圖<br>詳細資料設定</th>
|
<th>右邊昇位圖<br>詳細資料設定</th>
|
||||||
<th>右邊昇位圖<br>詳細資料URL</th>
|
|
||||||
@*<th>昇位圖URL</th>*@
|
@*<th>昇位圖URL</th>*@
|
||||||
<th>功能</th>
|
<th>功能</th>
|
||||||
</tr>
|
</tr>
|
||||||
@ -215,12 +213,12 @@
|
|||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="custom-control custom-checkbox">
|
<div class="custom-control custom-checkbox">
|
||||||
<input type="checkbox" class="custom-control-input" name="icon_click[]" id="icon_click_url" value="1">
|
<input type="checkbox" class="custom-control-input" name="icon_click[]" id="icon_click_url" value="1">
|
||||||
<label class="custom-control-label" for="icon_click_url">顯示詳細資料</label>
|
<label class="custom-control-label" for="icon_click_url">顯示詳細資料 - (抓取設備八段路徑呈現詳細資料)</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group col-12" id="build_menu_icon_click_url_modal_div" name="drawing_extend">
|
@*<div class="form-group col-12" id="build_menu_icon_click_url_modal_div" name="drawing_extend">
|
||||||
<label class="form-label" for="build_menu_icon_click_url_modal">詳細資料 URL</label><br>
|
<label class="form-label" for="build_menu_icon_click_url_modal">詳細資料 URL</label><br>
|
||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_building_tag', 'l')">+/[device_building_tag]</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_building_tag', 'l')">+/[device_building_tag]</button>
|
||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_system_tag', 'l')">+/[device_system_tag]</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_system_tag', 'l')">+/[device_system_tag]</button>
|
||||||
@ -229,7 +227,7 @@
|
|||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_serial_tag', 'l')">+/[device_serial_tag]</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_serial_tag', 'l')">+/[device_serial_tag]</button>
|
||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('tag_name', 'l')">+/[tag_name]</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('tag_name', 'l')">+/[tag_name]</button>
|
||||||
<input type="text" id="build_menu_icon_click_url_modal" class="form-control">
|
<input type="text" id="build_menu_icon_click_url_modal" class="form-control">
|
||||||
</div>
|
</div>*@
|
||||||
<div class="form-group col-12" id="build_menu_icon_click_url_width_height_modal_div">
|
<div class="form-group col-12" id="build_menu_icon_click_url_width_height_modal_div">
|
||||||
<label class="form-label">詳細資料 顯示視窗設定</label><br>
|
<label class="form-label">詳細資料 顯示視窗設定</label><br>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -340,12 +338,12 @@
|
|||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="custom-control custom-checkbox">
|
<div class="custom-control custom-checkbox">
|
||||||
<input type="checkbox" class="custom-control-input" name="icon_click[]_r" id="icon_click_url_r" value="1">
|
<input type="checkbox" class="custom-control-input" name="icon_click[]_r" id="icon_click_url_r" value="1">
|
||||||
<label class="custom-control-label" for="icon_click_url_r">顯示詳細資料</label>
|
<label class="custom-control-label" for="icon_click_url_r">顯示詳細資料 - (抓取設備八段路徑呈現詳細資料)</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group col-12" id="build_menu_icon_click_url_modal_div_r" name="drawing_extend_r">
|
@*<div class="form-group col-12" id="build_menu_icon_click_url_modal_div_r" name="drawing_extend_r">
|
||||||
<label class="form-label" for="build_menu_icon_click_url_modal_r">詳細資料 URL</label><br>
|
<label class="form-label" for="build_menu_icon_click_url_modal_r">詳細資料 URL</label><br>
|
||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_building_tag')">+/[device_building_tag]</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_building_tag')">+/[device_building_tag]</button>
|
||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_system_tag')">+/[device_system_tag]</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_system_tag')">+/[device_system_tag]</button>
|
||||||
@ -354,7 +352,7 @@
|
|||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_serial_tag')">+/[device_serial_tag]</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('device_serial_tag')">+/[device_serial_tag]</button>
|
||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('tag_name')">+/[tag_name]</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed mb-2" onclick="AddTagIntoClickUrl('tag_name')">+/[tag_name]</button>
|
||||||
<input type="text" id="build_menu_icon_click_url_modal_r" class="form-control">
|
<input type="text" id="build_menu_icon_click_url_modal_r" class="form-control">
|
||||||
</div>
|
</div>*@
|
||||||
<div class="form-group col-12" id="build_menu_icon_click_url_width_height_modal_div_r">
|
<div class="form-group col-12" id="build_menu_icon_click_url_width_height_modal_div_r">
|
||||||
<label class="form-label">詳細資料 顯示視窗設定</label><br>
|
<label class="form-label">詳細資料 顯示視窗設定</label><br>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -478,14 +476,14 @@
|
|||||||
str.push("點擊開關")
|
str.push("點擊開關")
|
||||||
}
|
}
|
||||||
if (1 & parseInt(data) > 0) {
|
if (1 & parseInt(data) > 0) {
|
||||||
str.push("顯示詳細資料")
|
str.push("顯示詳細資料 - (抓取設備八段路徑呈現詳細資料)")
|
||||||
}
|
}
|
||||||
return str.join(";");
|
return str.join(";");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
//{
|
||||||
"data": "left_icon_click_url"
|
// "data": "left_icon_click_url"
|
||||||
},
|
//},
|
||||||
{
|
{
|
||||||
"data": "right_drawing_name"
|
"data": "right_drawing_name"
|
||||||
},
|
},
|
||||||
@ -500,14 +498,14 @@
|
|||||||
str.push("點擊開關")
|
str.push("點擊開關")
|
||||||
}
|
}
|
||||||
if (1 & parseInt(data) > 0) {
|
if (1 & parseInt(data) > 0) {
|
||||||
str.push("顯示詳細資料")
|
str.push("顯示詳細資料 - (抓取設備八段路徑呈現詳細資料)")
|
||||||
}
|
}
|
||||||
return str.join(";");
|
return str.join(";");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
//{
|
||||||
"data": "right_icon_click_url"
|
// "data": "right_icon_click_url"
|
||||||
},
|
//},
|
||||||
{
|
{
|
||||||
"data": null,
|
"data": null,
|
||||||
"render": function (data, type, row, meta){
|
"render": function (data, type, row, meta){
|
||||||
@ -542,13 +540,13 @@
|
|||||||
$.each(this.data, function (k, rel) {
|
$.each(this.data, function (k, rel) {
|
||||||
rel.sub_system_guid_name = "<font color='#7c91df'>" + rel.sub_system_guid_name + "</font>"
|
rel.sub_system_guid_name = "<font color='#7c91df'>" + rel.sub_system_guid_name + "</font>"
|
||||||
if (rel.left_drawing == 2) {
|
if (rel.left_drawing == 2) {
|
||||||
rel.left_drawing_name = rel.left_drawing_name + "<br>" + '<a href = "' + rel.system_url + '" target="_blank" >點擊連結</a >'
|
rel.left_drawing_name = rel.left_drawing_name + "<br>" + '<a href = "' + rel.left_system_url + '" target="_blank" >點擊連結</a >'
|
||||||
}
|
}
|
||||||
if (rel.left_drawing == 1) {
|
if (rel.left_drawing == 1) {
|
||||||
rel.left_drawing_name = rel.left_drawing_name + "<br>" + '[' + rel.floor_guid_name + ']'
|
rel.left_drawing_name = rel.left_drawing_name + "<br>" + '[' + rel.floor_guid_name + ']'
|
||||||
}
|
}
|
||||||
if (rel.right_drawing == 2) {
|
if (rel.right_drawing == 2) {
|
||||||
rel.right_drawing_name = rel.right_drawing_name + "<br>" + '<a href = "' + rel.system_url + '" target="_blank" >點擊連結</a >'
|
rel.right_drawing_name = rel.right_drawing_name + "<br>" + '<a href = "' + rel.right_system_url + '" target="_blank" >點擊連結</a >'
|
||||||
}
|
}
|
||||||
if (rel.right_drawing == 1) {
|
if (rel.right_drawing == 1) {
|
||||||
rel.right_drawing_name = rel.right_drawing_name + "<br>" + '[' + rel.floor_guid_name + ']'
|
rel.right_drawing_name = rel.right_drawing_name + "<br>" + '[' + rel.floor_guid_name + ']'
|
||||||
@ -787,20 +785,20 @@
|
|||||||
//#endregion
|
//#endregion
|
||||||
$('#build_menu_icon_click_onoff_modal_div').on("click", "input[type=checkbox]", function () {
|
$('#build_menu_icon_click_onoff_modal_div').on("click", "input[type=checkbox]", function () {
|
||||||
if ($(this).prop("checked") && $(this).val() == 1) {
|
if ($(this).prop("checked") && $(this).val() == 1) {
|
||||||
$('#build_menu_icon_click_url_modal_div').show();
|
//$('#build_menu_icon_click_url_modal_div').show();
|
||||||
$('#build_menu_icon_click_url_width_height_modal_div').show();
|
$('#build_menu_icon_click_url_width_height_modal_div').show();
|
||||||
} else {
|
} else {
|
||||||
$('#build_menu_icon_click_url_modal_div').hide();
|
//$('#build_menu_icon_click_url_modal_div').hide();
|
||||||
$('#build_menu_icon_click_url_width_height_modal_div').hide();
|
$('#build_menu_icon_click_url_width_height_modal_div').hide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#build_menu_icon_click_onoff_modal_div_r').on("click", "input[type=checkbox]", function () {
|
$('#build_menu_icon_click_onoff_modal_div_r').on("click", "input[type=checkbox]", function () {
|
||||||
if ($(this).prop("checked") && $(this).val() == 1) {
|
if ($(this).prop("checked") && $(this).val() == 1) {
|
||||||
$('#build_menu_icon_click_url_modal_div_r').show();
|
//$('#build_menu_icon_click_url_modal_div_r').show();
|
||||||
$('#build_menu_icon_click_url_width_height_modal_div_r').show();
|
$('#build_menu_icon_click_url_width_height_modal_div_r').show();
|
||||||
} else {
|
} else {
|
||||||
$('#build_menu_icon_click_url_modal_div_r').hide();
|
//$('#build_menu_icon_click_url_modal_div_r').hide();
|
||||||
$('#build_menu_icon_click_url_width_height_modal_div_r').hide();
|
$('#build_menu_icon_click_url_width_height_modal_div_r').hide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -977,7 +975,7 @@
|
|||||||
let drawingParent = $(value).parents("[id^=build_menu_position]")
|
let drawingParent = $(value).parents("[id^=build_menu_position]")
|
||||||
$(drawingParent).find('[id^=build_menu_icon_click_onoff_modal_div]').hide();
|
$(drawingParent).find('[id^=build_menu_icon_click_onoff_modal_div]').hide();
|
||||||
$(drawingParent).find('[id^=build_menu_blankurl_modal_div]').hide();
|
$(drawingParent).find('[id^=build_menu_blankurl_modal_div]').hide();
|
||||||
$(drawingParent).find('[id^=build_menu_icon_click_url_modal_div]').hide();
|
//$(drawingParent).find('[id^=build_menu_icon_click_url_modal_div]').hide();
|
||||||
$(drawingParent).find('[id^=build_menu_icon_click_url_width_height_modal_div]').hide();
|
$(drawingParent).find('[id^=build_menu_icon_click_url_width_height_modal_div]').hide();
|
||||||
$(drawingParent).find('[id^=build_menu_planimetric_floor_modal_div]').hide();
|
$(drawingParent).find('[id^=build_menu_planimetric_floor_modal_div]').hide();
|
||||||
$(drawingParent).find('[id^=build_menu_systemurl_modal_div]').hide();
|
$(drawingParent).find('[id^=build_menu_systemurl_modal_div]').hide();
|
||||||
@ -989,7 +987,7 @@
|
|||||||
$(drawingParent).find('[id^="planimetric_click"]').attr("disabled", false);
|
$(drawingParent).find('[id^="planimetric_click"]').attr("disabled", false);
|
||||||
$(drawingParent).find('[id^=build_menu_icon_click_onoff_modal_div]').show();
|
$(drawingParent).find('[id^=build_menu_icon_click_onoff_modal_div]').show();
|
||||||
if ($(drawingParent).find("[id^=icon_click_url]").prop('checked')) {
|
if ($(drawingParent).find("[id^=icon_click_url]").prop('checked')) {
|
||||||
$(drawingParent).find('[id^=build_menu_icon_click_url_modal_div]').show();
|
//$(drawingParent).find('[id^=build_menu_icon_click_url_modal_div]').show();
|
||||||
$(drawingParent).find('[id^=build_menu_icon_click_url_width_height_modal_div]').show();
|
$(drawingParent).find('[id^=build_menu_icon_click_url_width_height_modal_div]').show();
|
||||||
}
|
}
|
||||||
} else if ($(value).val() == 1) {
|
} else if ($(value).val() == 1) {
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
<button type="button" class="btn btn-dark" onclick="cancelTransparentModel()">取消透明物件</button>
|
<button type="button" class="btn btn-dark" onclick="cancelTransparentModel()">取消透明物件</button>
|
||||||
<button type="button" class="btn btn-danger" onclick="proFile()">剖面</button>
|
<button type="button" class="btn btn-danger" onclick="proFile()">剖面</button>
|
||||||
<button type="button" class="btn btn-dark" onclick="getLevels()">取得levels</button>
|
<button type="button" class="btn btn-dark" onclick="getLevels()">取得levels</button>
|
||||||
<button type="button" class="btn btn-success" onclick="importDevCor()">匯入設備座標及dbid</button>
|
<button type="button" class="btn btn-success" onclick="importDevCor()">匯入設備座標及房間等dbid</button>
|
||||||
<!--<input id="lightBar" type="range" min="0" max="100" step="5" onchange="changeLightPower()">亮度-->
|
<!--<input id="lightBar" type="range" min="0" max="100" step="5" onchange="changeLightPower()">亮度-->
|
||||||
<!-- <input type="range">Main Axis</input> -->
|
<!-- <input type="range">Main Axis</input> -->
|
||||||
</div>
|
</div>
|
||||||
@ -240,8 +240,13 @@
|
|||||||
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dGEzaHFzZmZ6cWJub3V4a3BsZGt1a3NldzRzajIxdzUtYmltc19tb2RlbHMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU2JUE4JUExJUU1JUJDJThGK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8yMDIyXzEyXzMxLm53ZA');
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dGEzaHFzZmZ6cWJub3V4a3BsZGt1a3NldzRzajIxdzUtYmltc19tb2RlbHMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU2JUE4JUExJUU1JUJDJThGK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8yMDIyXzEyXzMxLm53ZA');
|
||||||
|
|
||||||
//雙模式
|
//雙模式
|
||||||
launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dGEzaHFzZmZ6cWJub3V4a3BsZGt1a3NldzRzajIxdzUtYmltc19tb2RlbHMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU2JUE4JUExJUU1JUJDJThGK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8yMDIyXzEyXzMxLm53ZA==');
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dGEzaHFzZmZ6cWJub3V4a3BsZGt1a3NldzRzajIxdzUtYmltc19tb2RlbHMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU2JUE4JUExJUU1JUJDJThGK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8yMDIyXzEyXzMxLm53ZA==');
|
||||||
|
|
||||||
|
//01.06 樓層刪除燈具
|
||||||
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1vZGVsX3Rlc3QxMTIxLyVFMyU4MCU5MCVFNSU4RiVCMCVFNSU4QyU5NyVFNCVCOCVBRCVFOCU4RiVCMSVFNSVBNCVBNyVFNiVBOCU5MyVFMyU4MCU5MUFSQyVFOSU5QiU5OSVFNiVBOCVBMSVFNSVCQyU4RitNRVAlRTYlOEIlODYlRTclQjMlQkIlRTclQjUlQjFfJUU1JTg4JUFBJUU3JTg3JTg4JUU1JTg1JUI3XzIwMjNfMDFfMDYubndk');
|
||||||
|
|
||||||
|
|
||||||
|
launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1vZGVsX3Rlc3QxMTIxLyVFMyU4MCU5MCVFNSU4RiVCMCVFNSU4QyU5NyVFNCVCOCVBRCVFOCU4RiVCMSVFNSVBNCVBNyVFNiVBOCU5MyVFMyU4MCU5MUFSQyVFOSU5QiU5OSVFNiVBOCVBMSVFNSVCQyU4RitNRVAlRTYlOEIlODYlRTclQjMlQkIlRTclQjUlQjFfJUU1JTg4JUFBJUU3JTg3JTg4JUU1JTg1JUI3XzIwMjNfMDFfMDYubndk');
|
||||||
|
|
||||||
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxXzIwMjJfMTJfMTMubndk');//new ARC
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxXzIwMjJfMTJfMTMubndk');//new ARC
|
||||||
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMTMubndj');//new MEP
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMTMubndj');//new MEP
|
||||||
@ -381,6 +386,7 @@
|
|||||||
|
|
||||||
function importDevCor() {
|
function importDevCor() {
|
||||||
ImportDevForCor();
|
ImportDevForCor();
|
||||||
|
ImportForgeRoom();
|
||||||
}
|
}
|
||||||
|
|
||||||
function ImportDevForCor() {//callback = null
|
function ImportDevForCor() {//callback = null
|
||||||
@ -412,9 +418,38 @@
|
|||||||
fail: function (xhr, status, error) {
|
fail: function (xhr, status, error) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ImportForgeRoom() {
|
||||||
|
var url = "/DeviceImport/ImportForgeRoom";
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
method: "POST",
|
||||||
|
url: url,
|
||||||
|
data: JSON.stringify(roomDataList),
|
||||||
|
cache: false,
|
||||||
|
async: false,
|
||||||
|
contentType: "application/json; charset=UTF-8",
|
||||||
|
dataType: 'json',
|
||||||
|
success: function (rel) {
|
||||||
|
if (rel.code != "0000") {
|
||||||
|
if (rel.code == "9999") {
|
||||||
|
console.log(rel.msg);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log(rel.msg);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log(rel.msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail: function (xhr, status, error) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -13,7 +13,8 @@ var levels;//剖面用
|
|||||||
var baseApiUrl = "http://localhost:3604";
|
var baseApiUrl = "http://localhost:3604";
|
||||||
var instanceTree;
|
var instanceTree;
|
||||||
//var objSendData = { Data: null };
|
//var objSendData = { Data: null };
|
||||||
var tagIdDevList = [];
|
var tagIdDevList = [];//模型設備List: device_number、device_coordinate_3d、forge_dbid
|
||||||
|
var roomDataList = [];//模型房間List: room_id、room_name
|
||||||
|
|
||||||
function launchViewer(urn) {
|
function launchViewer(urn) {
|
||||||
var av = Autodesk.Viewing;
|
var av = Autodesk.Viewing;
|
||||||
@ -274,39 +275,36 @@ function onDocumentLoadSuccess(doc) {
|
|||||||
e.properties.forEach(function (item) {
|
e.properties.forEach(function (item) {
|
||||||
if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】
|
if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】
|
||||||
if (item.displayValue != "") {
|
if (item.displayValue != "") {
|
||||||
//if ((item.displayValue).indexOf('TPE_B1_ME_M10') > -1) {
|
////if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {// TPE_B1_ME_M10
|
||||||
console.log("--------------------------------------------------");
|
//console.log("--------------------------------------------------");
|
||||||
console.log("Tag_name dbid: " + e.dbId);
|
//console.log("Tag_name dbid: " + e.dbId);
|
||||||
console.log("value: " + item.displayValue);
|
//console.log("value: " + item.displayValue);
|
||||||
|
////}
|
||||||
//myDataList.forEach((myData, index) => {
|
var str = item.displayValue.split('_');
|
||||||
// devices.push({ id: index, position: JSON.parse(myData.device_coordinate_3d), sensorTypes: ["temperature", "humidity"] });
|
if (str.length == 2) { //兩段為房間 ex: U7F_01
|
||||||
//});
|
roomDataList.push({ room_id: e.dbId, room_name: item.displayValue });
|
||||||
//}
|
}
|
||||||
|
else if (str.length == 8) { //八段為設備 ex: TPE_B1_ME_M10_U7F_NA_FCU_N1
|
||||||
let bounds = new THREE.Box3();
|
//取得座標
|
||||||
|
let bounds = new THREE.Box3();
|
||||||
|
instanceTree.enumNodeFragments(e.dbId, (fragId) => {
|
||||||
|
let box = new THREE.Box3();
|
||||||
|
fragList.getWorldBounds(fragId, box);
|
||||||
|
bounds.union(box);
|
||||||
|
}, true);
|
||||||
|
var position = bounds.center();
|
||||||
|
////if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {
|
||||||
|
//console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")");
|
||||||
|
//console.log("--------------------------------------------------");
|
||||||
|
////}
|
||||||
|
tagIdDevList.push({ device_number: item.displayValue, device_coordinate_3d: '{ "x": ' + (position.x).toFixed(2) + ', "y": ' + (position.y).toFixed(2) + ', "z": ' + (position.z).toFixed(2) + ' }', forge_dbid: e.dbId });
|
||||||
|
}
|
||||||
|
|
||||||
instanceTree.enumNodeFragments(e.dbId, (fragId) => {
|
|
||||||
let box = new THREE.Box3();
|
|
||||||
fragList.getWorldBounds(fragId, box);
|
|
||||||
bounds.union(box);
|
|
||||||
}, true);
|
|
||||||
var position = bounds.center();
|
|
||||||
//if ((item.displayValue).indexOf('TPE_B1_ME_M10') > -1) {
|
|
||||||
console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")");
|
|
||||||
tagIdDevList.push({ device_number: item.displayValue, device_coordinate_3d: '{ "x": ' + (position.x).toFixed(2) + ', "y": ' + (position.y).toFixed(2) + ', "z": ' + (position.z).toFixed(2) + ' }', forge_dbid: e.dbId });
|
|
||||||
console.log("--------------------------------------------------");
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
//getFragmentWorldMatrixByNodeId(e.dbId, viewer);
|
|
||||||
//let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
//---------------------- end ---------------------------------------------------
|
//---------------------- end ---------------------------------------------------
|
||||||
@ -792,8 +790,6 @@ function setElevatorSpeed(speed) { //0.01 ~ 1
|
|||||||
}
|
}
|
||||||
|
|
||||||
function movElevator() {
|
function movElevator() {
|
||||||
|
|
||||||
|
|
||||||
let tree = viewer.model.getData().instanceTree;//三組:(749,750,751),(755,756,757),(761,762,763)
|
let tree = viewer.model.getData().instanceTree;//三組:(749,750,751),(755,756,757),(761,762,763)
|
||||||
let nodeId = 12112;//12104; //749; //10952;
|
let nodeId = 12112;//12104; //749; //10952;
|
||||||
let nodeId2 = 12111;//12105; //750;
|
let nodeId2 = 12111;//12105; //750;
|
||||||
@ -908,64 +904,6 @@ function hideColor(nodeId) {//顏色改成透明
|
|||||||
viewer.setThemingColor(nodeId, color);
|
viewer.setThemingColor(nodeId, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
//function movElevator() {
|
|
||||||
|
|
||||||
|
|
||||||
// let tree = viewer.model.getData().instanceTree;
|
|
||||||
// let nodeId = 750;// 10952;
|
|
||||||
// let fragProxyZ = 0;
|
|
||||||
// var movStatus = 0; // 0=no 1=up 2=down
|
|
||||||
|
|
||||||
|
|
||||||
// if (fragProxy.position.z > targetFloorZ) {
|
|
||||||
// movStatus = 2
|
|
||||||
// }
|
|
||||||
// else if (fragProxy.position.z < targetFloorZ) {
|
|
||||||
// movStatus = 1
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (movStatus == 0) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// tree.enumNodeFragments(nodeId, function (frag) {
|
|
||||||
// fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
|
||||||
// fragProxy.getAnimTransform();
|
|
||||||
// //let fragPosition = new THREE.Vector3(0, 0, 15);// 一樓0 二樓15 三樓 26
|
|
||||||
// if (movStatus == 2) {
|
|
||||||
// fragProxy.position.z -= elevatorSpeed;
|
|
||||||
// }
|
|
||||||
// else if (movStatus == 1) {
|
|
||||||
// fragProxy.position.z += elevatorSpeed;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// fragProxyZ = fragProxy.position.z;
|
|
||||||
// fragProxy.updateAnimTransform()
|
|
||||||
|
|
||||||
// });
|
|
||||||
// viewer.impl.sceneUpdated(true);
|
|
||||||
|
|
||||||
// if (movStatus == 2) {
|
|
||||||
// if (fragProxyZ >= targetFloorZ) {
|
|
||||||
// requestAnimationFrame(movElevator);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else if (movStatus == 1) {
|
|
||||||
// if (fragProxyZ <= targetFloorZ) {
|
|
||||||
// requestAnimationFrame(movElevator);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// //let fragPosition = new THREE.Vector3(position);// 一樓0 二樓15 三樓 26
|
|
||||||
|
|
||||||
// //fragProxy.position = fragPosition;
|
|
||||||
|
|
||||||
// //fragProxy.updateAnimTransform();
|
|
||||||
|
|
||||||
// //viewer.impl.sceneUpdated(true);
|
|
||||||
//}
|
|
||||||
|
|
||||||
function getAllDbIds(viewer) {
|
function getAllDbIds(viewer) {
|
||||||
var instanceTree = viewer.model.getData().instanceTree;
|
var instanceTree = viewer.model.getData().instanceTree;
|
||||||
|
|
||||||
@ -1025,10 +963,6 @@ function onButtonClicked() {
|
|||||||
this.viewer.setCutPlanes([upperCutPlaneParam, lowerCutPlaneParam]);
|
this.viewer.setCutPlanes([upperCutPlaneParam, lowerCutPlaneParam]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function displayCuttedPlane() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Autodesk.Viewing.Document.load() failuire callback.
|
* Autodesk.Viewing.Document.load() failuire callback.
|
||||||
*/
|
*/
|
||||||
@ -1082,27 +1016,7 @@ async function loadHeatmaps(model) {
|
|||||||
position: { x: 6.98, y: -2.24, z: 16.86 }, // x: 0, y: 25.03, z: -2.52 (-4.93, -3.85, 16.86)
|
position: { x: 6.98, y: -2.24, z: 16.86 }, // x: 0, y: 25.03, z: -2.52 (-4.93, -3.85, 16.86)
|
||||||
sensorTypes: ["temperature", "humidity"]
|
sensorTypes: ["temperature", "humidity"]
|
||||||
}
|
}
|
||||||
|
|
||||||
//{
|
|
||||||
// id: "Oficina 5",
|
|
||||||
// //name: "Oficina-",
|
|
||||||
// position: { x: 3.35, y: -4.81, z: 12.88 }, // x: 0, y: 25, z: -2.5 (3.35, -4.81, 12.88
|
|
||||||
// sensorTypes: ["temperature", "humidity"]
|
|
||||||
//},
|
|
||||||
//{
|
|
||||||
// id: "Oficina 4",
|
|
||||||
// //name: "Oficina-",
|
|
||||||
// position: { x: 37.03, y: -4.81, z: 12.88 }, // x: 0, y: 25.03, z: -2.52 (37.03, -4.81, 12.88)
|
|
||||||
// sensorTypes: ["temperature", "humidity"]
|
|
||||||
//},
|
|
||||||
//{
|
|
||||||
// id: "Oficina 3",
|
|
||||||
// //name: "Oficina-",
|
|
||||||
// position: { x: 2.83, y: -22.60, z: 12.88 }, // x: 0, y: 25.03, z: -2.52 (2.83, -22.60, 12.88)
|
|
||||||
// sensorTypes: ["temperature", "humidity"]
|
|
||||||
//}
|
|
||||||
];
|
];
|
||||||
//冷氣N5: (6.98, -19.00, 16.86), N4: (35.85, -2.24, 16.86), N3: (6.98, -2.24, 16.86)
|
|
||||||
|
|
||||||
// Initialize sensor values
|
// Initialize sensor values
|
||||||
let sensorVals = [];
|
let sensorVals = [];
|
||||||
@ -1228,11 +1142,6 @@ async function loadHeatmap() {
|
|||||||
|
|
||||||
function hideObject() {
|
function hideObject() {
|
||||||
//viewer.hide(4);
|
//viewer.hide(4);
|
||||||
//viewer.hide(58);
|
|
||||||
//viewer.hide(613);
|
|
||||||
//viewer.hide(640);
|
|
||||||
//viewer.hide(560);
|
|
||||||
|
|
||||||
for (var i = 0; i < allDbIdsStr.length; i++) {
|
for (var i = 0; i < allDbIdsStr.length; i++) {
|
||||||
viewer.hide(parseInt(allDbIdsStr[i]));
|
viewer.hide(parseInt(allDbIdsStr[i]));
|
||||||
}
|
}
|
||||||
@ -1240,11 +1149,6 @@ function hideObject() {
|
|||||||
|
|
||||||
function openObject() {
|
function openObject() {
|
||||||
//viewer.show(4);
|
//viewer.show(4);
|
||||||
//viewer.show(58);
|
|
||||||
//viewer.show(613);
|
|
||||||
//viewer.show(640);
|
|
||||||
//viewer.show(560);
|
|
||||||
|
|
||||||
for (var i = 0; i < allDbIdsStr.length; i++) {
|
for (var i = 0; i < allDbIdsStr.length; i++) {
|
||||||
viewer.show(parseInt(allDbIdsStr[i]));
|
viewer.show(parseInt(allDbIdsStr[i]));
|
||||||
}
|
}
|
||||||
@ -1252,67 +1156,11 @@ function openObject() {
|
|||||||
|
|
||||||
async function setObjectTransparent() {
|
async function setObjectTransparent() {
|
||||||
//setTransparency(4, 0);
|
//setTransparency(4, 0);
|
||||||
//setTransparency(58, 0);
|
|
||||||
//setTransparency(613, 0);
|
|
||||||
//setTransparency(640, 0);
|
|
||||||
//setTransparency(560, 0);
|
|
||||||
//setTransparency(parseInt(515), 0);
|
|
||||||
|
|
||||||
//for (var i = 0; i < allDbIdsStr.length; i++) {
|
|
||||||
// setTransparency(parseInt(allDbIdsStr[i]), 0);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//setTransparency(parseInt(515), 0);
|
|
||||||
//setTransparency(parseInt(516), 0);
|
|
||||||
//setTransparency(parseInt(517), 0);
|
|
||||||
//setTransparency(parseInt(518), 0);
|
|
||||||
//setTransparency(parseInt(519), 0);
|
|
||||||
//setTransparency(parseInt(399), 0);
|
|
||||||
//setTransparency(parseInt(101), 0);
|
|
||||||
//setTransparency(parseInt(100), 0);
|
|
||||||
//setTransparency(parseInt(58), 0);
|
|
||||||
|
|
||||||
//setTransparency(parseInt(587), 0);
|
|
||||||
//setTransparency(parseInt(586), 0);
|
|
||||||
//setTransparency(parseInt(585), 0);
|
|
||||||
//setTransparency(parseInt(584), 0);
|
|
||||||
//setTransparency(parseInt(583), 0);
|
|
||||||
//setTransparency(parseInt(562), 0);
|
|
||||||
//setTransparency(parseInt(361), 0);
|
|
||||||
|
|
||||||
//test();
|
|
||||||
//hideColor(587);
|
|
||||||
//hideColor(586);
|
|
||||||
//hideColor(585);
|
|
||||||
//hideColor(584);
|
|
||||||
//hideColor(583);
|
|
||||||
//hideColor(562);
|
|
||||||
//hideColor(361);
|
|
||||||
|
|
||||||
setTransparentBuilding();
|
setTransparentBuilding();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function cancelObjectTransparent() {
|
async function cancelObjectTransparent() {
|
||||||
//setTransparency(4, 1);
|
//setTransparency(4, 1);
|
||||||
//setTransparency(58, 1);
|
|
||||||
//setTransparency(613, 1);
|
|
||||||
//setTransparency(640, 1);
|
|
||||||
//setTransparency(560, 1);
|
|
||||||
//for (var i = 0; i < allDbIdsStr.length; i++) {
|
|
||||||
// setTransparency(parseInt(allDbIdsStr[i]), 1);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//setTransparency(515, 0.2);
|
|
||||||
//setTransparency(516, 0.2);
|
|
||||||
//setTransparency(517, 0.2);
|
|
||||||
//setTransparency(518, 0.2);
|
|
||||||
//setTransparency(519, 0.2);
|
|
||||||
//setTransparency(399, 0.2);
|
|
||||||
//setTransparency(101, 0.2);
|
|
||||||
//setTransparency(100, 0.2);
|
|
||||||
//setTransparency(58, 0.2);
|
|
||||||
|
|
||||||
recoverTransparentBuilding();
|
recoverTransparentBuilding();
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1348,7 +1196,6 @@ async function test() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//------------ 剖面 ----------------------
|
//------------ 剖面 ----------------------
|
||||||
async function getRemoteLevels() {
|
async function getRemoteLevels() {
|
||||||
const aecData = await Autodesk.Viewing.Document.getAecModelData(this.viewer.model.getDocumentNode());
|
const aecData = await Autodesk.Viewing.Document.getAecModelData(this.viewer.model.getDocumentNode());
|
||||||
@ -1364,26 +1211,6 @@ async function getLevelsData() {
|
|||||||
this.levels = data;
|
this.levels = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//function getCutPlaneParam(idx, n) {
|
|
||||||
// if (idx < 0 || !n) return;
|
|
||||||
|
|
||||||
// const level = this.levels[idx];
|
|
||||||
// if (!level) return;
|
|
||||||
|
|
||||||
// //const precision = Autodesk.Viewing.Private.calculatePrecision( level.elevation );
|
|
||||||
// const model = this.viewer.model;
|
|
||||||
// const globalOffset = model.getData().globalOffset;
|
|
||||||
// const units = model.getUnitString();
|
|
||||||
// const elevRaw = Autodesk.Viewing.Private.convertUnits('ft', units, 1, level.elevation);
|
|
||||||
|
|
||||||
// let d = elevRaw - globalOffset.z - 0.5;
|
|
||||||
// if (n == 1)
|
|
||||||
// d = -1 * d;
|
|
||||||
|
|
||||||
// return new THREE.Vector4(0, 0, n, d);
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
function profile() {
|
function profile() {
|
||||||
const upperIdx = 6;
|
const upperIdx = 6;
|
||||||
const upperCutPlaneParam = this.getCutPlaneParam(upperIdx, 1);
|
const upperCutPlaneParam = this.getCutPlaneParam(upperIdx, 1);
|
||||||
@ -1393,71 +1220,3 @@ function profile() {
|
|||||||
}
|
}
|
||||||
//----------------- end -----------------------------------------------
|
//----------------- end -----------------------------------------------
|
||||||
|
|
||||||
// 設備的dbid和3D座標 存進 資料庫
|
|
||||||
//function ImportDevForCor() {//callback = null
|
|
||||||
// var url = "/DeviceImport/ImportDevForCor";
|
|
||||||
// //let sendData = {
|
|
||||||
// // "device_number": pageAct.AreaTag,
|
|
||||||
// // "device_coordinate_3d": "",
|
|
||||||
// // "device_dbid": "",
|
|
||||||
// //};
|
|
||||||
// objSendData.Data = tagIdDevList;
|
|
||||||
// //ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
|
|
||||||
// // if (!res || res.code != "0000" || !res.data) {
|
|
||||||
|
|
||||||
// // } else {
|
|
||||||
|
|
||||||
// // }
|
|
||||||
// //}, null, "POST").send();
|
|
||||||
|
|
||||||
// //$.post(url, objSendData, function (rel) {
|
|
||||||
// // if (rel.code != "0000") {
|
|
||||||
// // if (rel.code == "9999") {
|
|
||||||
// // toast_error(rel.msg);
|
|
||||||
// // }
|
|
||||||
// // else {
|
|
||||||
// // toast_warning(rel.msg);
|
|
||||||
// // }
|
|
||||||
// // return;
|
|
||||||
// // }
|
|
||||||
// // else {
|
|
||||||
// // toast_ok(rel.msg);
|
|
||||||
// // //ReloadRawDataCheckTable();
|
|
||||||
// // }
|
|
||||||
|
|
||||||
// //}, 'json');
|
|
||||||
|
|
||||||
// //headers={'content-type': 'application/json'}
|
|
||||||
|
|
||||||
// $.ajax({
|
|
||||||
// type: "POST",
|
|
||||||
// url: url,
|
|
||||||
// data: objSendData,
|
|
||||||
// cache: false,
|
|
||||||
// contentType: 'application/json',
|
|
||||||
// processData: false,
|
|
||||||
// success: function (rel) {
|
|
||||||
// //$("#save-building-btn").html('確定').attr("disabled", false);
|
|
||||||
// if (rel.code != "0000") {
|
|
||||||
// if (rel.code == "9999") {
|
|
||||||
// toast_error(rel.msg);
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// toast_warning(rel.msg);
|
|
||||||
// }
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// toast_ok(rel.msg);
|
|
||||||
// //buildInfoTable.ajax.reload(null, false);
|
|
||||||
// //$('#build-modal').modal('hide');
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// fail: function (xhr, status, error) {
|
|
||||||
// //$("#save-building-btn").html('確定').attr("disabled", false);
|
|
||||||
// //toast_error(rel.msg);
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
|
|
||||||
//}
|
|
12
Frontend/Web.config
Normal file
12
Frontend/Web.config
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<location path="." inheritInChildApplications="false">
|
||||||
|
<system.webServer>
|
||||||
|
<!--<handlers>
|
||||||
|
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
|
||||||
|
</handlers>
|
||||||
|
<aspNetCore processPath="dotnet" arguments=".\Backend.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />-->
|
||||||
|
</system.webServer>
|
||||||
|
</location>
|
||||||
|
</configuration>
|
||||||
|
<!--ProjectGuid: C0B93B4D-F0AF-4C80-ABF9-5C984425749C-->
|
@ -161,27 +161,16 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-12 col-lg-4">
|
<div class="col-sm-12 col-lg-4">
|
||||||
<div class="row">
|
<div class="row h-100">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<div id="panel-3" class="panel" data-panel-sortable data-panel-collapsed data-panel-close>
|
<div id="panel-3" class="panel" style="height: calc(100% - 1.5rem);">
|
||||||
<div class="panel-hdr">
|
<div class="panel-hdr">
|
||||||
<h2>
|
<h2>
|
||||||
異常狀態
|
異常狀態
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-container show">
|
<div class="panel-container h-100 show">
|
||||||
<div class="panel-content poisition-relative p-0">
|
<div class="panel-content poisition-relative p-0 row p-0 h-100">
|
||||||
<!--<div class="pb-5 pt-3">
|
|
||||||
<div class="d-flex mr-4">
|
|
||||||
<div class="mr-2">
|
|
||||||
<span class="peity-donut" data-peity="{ "fill": ["#967bbd", "#ccbfdf"], "innerRadius": 14, "radius": 20 }">7/10</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<label class="fs-sm mb-0 mt-2 mt-md-0">New Sessions</label>
|
|
||||||
<h4 class="font-weight-bold mb-0">70.60%</h4>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>-->
|
|
||||||
<div class="col-12 mb-2 position-relative row m-0 justify-content-center">
|
<div class="col-12 mb-2 position-relative row m-0 justify-content-center">
|
||||||
<canvas class="chart" id="errRecChart"></canvas>
|
<canvas class="chart" id="errRecChart"></canvas>
|
||||||
</div>
|
</div>
|
||||||
@ -193,34 +182,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<div id="panel-3" class="panel" data-panel-sortable data-panel-collapsed data-panel-close>
|
<div id="panel-3" class="panel" style="height: calc(100% - 1.5rem);">
|
||||||
<div class="panel-hdr">
|
<div class="panel-hdr">
|
||||||
<h2>
|
<h2>
|
||||||
工單進度
|
工單進度
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-container show">
|
<div class="panel-container h-100 show">
|
||||||
<div class="panel-content poisition-relative p-0">
|
<div class="panel-content poisition-relative row p-0 h-100 p-0">
|
||||||
<!--<div class="pb-5 pt-3">
|
|
||||||
<div class="d-flex mr-0">
|
|
||||||
<div class="mr-2">
|
|
||||||
<span class="peity-donut" data-peity="{ "fill": ["#2196F3", "#9acffa"], "innerRadius": 14, "radius": 20 }">3/10</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<label class="fs-sm mb-0 mt-2 mt-md-0">Page Views</label>
|
|
||||||
<h4 class="font-weight-bold mb-0">14,134</h4>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>-->
|
|
||||||
<div class="col-12 mb-2 position-relative row m-0 justify-content-center">
|
<div class="col-12 mb-2 position-relative row m-0 justify-content-center">
|
||||||
<span class="text-center position-absolute t-white" style="top:25%;left:27%;">已完成<br>6</span>
|
<canvas class="chart" id="worOrdErrChart"></canvas>
|
||||||
<img src="img/u40.png" class="" style="width:75%;margin-left:0px;left:-22px;">
|
|
||||||
<span class="text-center position-absolute t-white" style="top:51%;left:58%;">未完成<br>8</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 mb-2 position-relative row m-0 justify-content-center">
|
<div class="col-12 mb-2 position-relative row m-0 justify-content-center">
|
||||||
<span class="text-center position-absolute t-white" style="top:43%;left:26%;">未派工<br>5</span>
|
<canvas class="chart" id="worOrdFinChart"></canvas>
|
||||||
<img src="img/u43.png" class="mt-2 mb-1" style="width:51%;">
|
|
||||||
<span class="text-center position-absolute t-white" style="top:42%;left:58%;">派工中<br>9</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -244,6 +219,8 @@
|
|||||||
var timeOuters = [];
|
var timeOuters = [];
|
||||||
var eveDayElecChart = null;
|
var eveDayElecChart = null;
|
||||||
var eveWeekElecChart = null;
|
var eveWeekElecChart = null;
|
||||||
|
var worOrdErrChart = null;
|
||||||
|
var worOrdFinChart = null;
|
||||||
var errRecChart = null;
|
var errRecChart = null;
|
||||||
var errChkChart = null;
|
var errChkChart = null;
|
||||||
var loadedCnt = 0;
|
var loadedCnt = 0;
|
||||||
@ -262,6 +239,11 @@
|
|||||||
{ mainSys: "FE", subSys: "F2", iconClass: "fal fa-smog" },
|
{ mainSys: "FE", subSys: "F2", iconClass: "fal fa-smog" },
|
||||||
{ mainSys: "WP", subSys: "W1", iconClass: "fal fa-stopwatch" },
|
{ mainSys: "WP", subSys: "W1", iconClass: "fal fa-stopwatch" },
|
||||||
{ mainSys: "S", subSys: "R", iconClass: "fal fa-user-shield" },
|
{ mainSys: "S", subSys: "R", iconClass: "fal fa-user-shield" },
|
||||||
|
{ mainSys: "LT", subSys: "L2", iconClass: "fal fa-sun"},
|
||||||
|
{ mainSys: "ME", subSys: "M1", iconClass: "fal fa-icicles"},
|
||||||
|
{ mainSys: "ME", subSys: "M8", iconClass: "fal fa-bong"},
|
||||||
|
{ mainSys: "W3", subSys: "W1", iconClass: "fal fa-tint"},
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
var tempSysSubText = [
|
var tempSysSubText = [
|
||||||
@ -270,12 +252,16 @@
|
|||||||
{ text: "緊急發電機", mainSys: "EE", subSys: "E3", },
|
{ text: "緊急發電機", mainSys: "EE", subSys: "E3", },
|
||||||
{ text: "電錶系統", mainSys: "EE", subSys: "E4", },
|
{ text: "電錶系統", mainSys: "EE", subSys: "E4", },
|
||||||
{ text: "二線式照明系統", mainSys: "LT", subSys: "L1", },
|
{ text: "二線式照明系統", mainSys: "LT", subSys: "L1", },
|
||||||
|
{ text: "景觀照明系統", mainSys: "LT", subSys: "L2", },
|
||||||
|
{ text: "儲冰系統", mainSys: "ME", subSys: "M1", },
|
||||||
{ text: "小型送風機", mainSys: "ME", subSys: "M10", },
|
{ text: "小型送風機", mainSys: "ME", subSys: "M10", },
|
||||||
|
{ text: "排油煙設備", mainSys: "ME", subSys: "M8", },
|
||||||
{ text: "環境感測設備", mainSys: "ME", subSys: "M12", },
|
{ text: "環境感測設備", mainSys: "ME", subSys: "M12", },
|
||||||
{ text: "電梯設備", mainSys: "ELEV", subSys: "EL", },
|
{ text: "電梯設備", mainSys: "ELEV", subSys: "EL", },
|
||||||
{ text: "消防設備", mainSys: "FE", subSys: "F1", },
|
{ text: "消防設備", mainSys: "FE", subSys: "F1", },
|
||||||
{ text: "排煙系統", mainSys: "FE", subSys: "F2", },
|
{ text: "排煙系統", mainSys: "FE", subSys: "F2", },
|
||||||
{ text: "電子水錶", mainSys: "WP", subSys: "W1", },
|
{ text: "電子水錶", mainSys: "WP", subSys: "W1", },
|
||||||
|
{ text: "熱水系統", mainSys: "W3", subSys: "W1", },
|
||||||
{ text: "門禁安全系統", mainSys: "S", subSys: "R", }
|
{ text: "門禁安全系統", mainSys: "S", subSys: "R", }
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -291,7 +277,7 @@
|
|||||||
let strHtml = ``;
|
let strHtml = ``;
|
||||||
|
|
||||||
$.each(tempSysSubText, (idx, obj) => {
|
$.each(tempSysSubText, (idx, obj) => {
|
||||||
if (isExiNames.indexOf(obj.text) == -1 && $("#sysSubBtnList .dev-group").length < 12) {
|
if (isExiNames.indexOf(obj.text) == -1 && $("#sysSubBtnList .dev-group").length < 16) {
|
||||||
let iconObj = sysIconList.filter(x => x.mainSys == obj.mainSys && x.subSys == obj.subSys)[0];
|
let iconObj = sysIconList.filter(x => x.mainSys == obj.mainSys && x.subSys == obj.subSys)[0];
|
||||||
strHtml = `<div class="btn-group btn-group-lg col-lg-3 mb-4 dev-group">
|
strHtml = `<div class="btn-group btn-group-lg col-lg-3 mb-4 dev-group">
|
||||||
<button name="topFunBtn" data-page="alert" type="button" class="btn btn-secondary col-4"><i class="${iconObj.iconClass || "fal fa-hdd"} fa-2x py-2"></i></button>
|
<button name="topFunBtn" data-page="alert" type="button" class="btn btn-secondary col-4"><i class="${iconObj.iconClass || "fal fa-hdd"} fa-2x py-2"></i></button>
|
||||||
@ -408,14 +394,14 @@
|
|||||||
// 本週與上週用電量 (每天)
|
// 本週與上週用電量 (每天)
|
||||||
getElectricMeterDayDataByBaja(devNum + "_KWH", n4Sup, prevTwoWeek, tomorrow, (data) => {
|
getElectricMeterDayDataByBaja(devNum + "_KWH", n4Sup, prevTwoWeek, tomorrow, (data) => {
|
||||||
let curDay = (new Date()).getDay() == 0 ? 7 : (new Date()).getDay();
|
let curDay = (new Date()).getDay() == 0 ? 7 : (new Date()).getDay();
|
||||||
let curWeekData = data.data.filter(x => strToDate(displayDate(new Date(), "date"), null, 0 - (curDay - 1)) <= strToDate(x.timestamp.$cEncStr));
|
let curWeekData = data.data.filter(x => strToDate(displayDate(new Date(), "date"), null, 1 - 7) <= strToDate(x.timestamp.$cEncStr));
|
||||||
let prevWeekData = data.data.filter(x => strToDate(displayDate(new Date(), "date"), null, 0 - 7 - (curDay - 1)) <= strToDate(x.timestamp.$cEncStr) && strToDate(new Date(), null, 0 - 7) >= strToDate(x.timestamp.$cEncStr));
|
let prevWeekData = data.data.filter(x => strToDate(displayDate(new Date(), "date"), null, 1 - 14) <= strToDate(x.timestamp.$cEncStr) && strToDate(new Date(), null, 1 - 7) >= strToDate(x.timestamp.$cEncStr));
|
||||||
|
debugger
|
||||||
chartEveWeeksElec(curWeekData, prevWeekData)
|
chartEveWeeksElec(curWeekData, prevWeekData)
|
||||||
chkBajaLoaded();
|
chkBajaLoaded();
|
||||||
})
|
})
|
||||||
|
|
||||||
// 異常數量與賦歸數量
|
// 異常數量與復歸數量
|
||||||
getAlarmCountByBaja((aData) => {
|
getAlarmCountByBaja((aData) => {
|
||||||
chartDataCnt.alarmCnt = aData.count;
|
chartDataCnt.alarmCnt = aData.count;
|
||||||
chkBajaLoaded();
|
chkBajaLoaded();
|
||||||
@ -424,7 +410,7 @@
|
|||||||
chartDataCnt.recCnt = rData.count;
|
chartDataCnt.recCnt = rData.count;
|
||||||
chkBajaLoaded();
|
chkBajaLoaded();
|
||||||
})
|
})
|
||||||
// 異常數量與賦歸數量
|
// 異常數量與復歸數量
|
||||||
getCheckedAckedCountByBaja((data) => {
|
getCheckedAckedCountByBaja((data) => {
|
||||||
chartDataCnt.chkedErrCnt = data.count;
|
chartDataCnt.chkedErrCnt = data.count;
|
||||||
chkBajaLoaded();
|
chkBajaLoaded();
|
||||||
@ -440,8 +426,10 @@
|
|||||||
loadedCnt++;
|
loadedCnt++;
|
||||||
|
|
||||||
if (loadedCnt == 9) {
|
if (loadedCnt == 9) {
|
||||||
chartErrRec(["異常數量", "賦歸數量"], [chartDataCnt.alarmCnt, chartDataCnt.recCnt]);
|
chartErrRec(["異常數量", "復歸數量"], [chartDataCnt.alarmCnt, chartDataCnt.recCnt]);
|
||||||
chartErrChk(["已確認異常", "未確認異常"], [chartDataCnt.chkedErrCnt, chartDataCnt.unChkedErrCnt]);
|
chartErrChk(["已確認異常", "未確認異常"], [chartDataCnt.chkedErrCnt, chartDataCnt.unChkedErrCnt]);
|
||||||
|
chartWorOrdErr();
|
||||||
|
chartWorOrdFin();
|
||||||
|
|
||||||
endPageLoading();
|
endPageLoading();
|
||||||
}
|
}
|
||||||
@ -628,7 +616,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 圖表 - 異常與賦歸圖表 (圓餅圖)
|
// 圖表 - 異常與復歸圖表 (圓餅圖)
|
||||||
function chartErrRec(labels, datas) {
|
function chartErrRec(labels, datas) {
|
||||||
|
|
||||||
let errRecChartCanvas = ctx = $('#errRecChart').get(0).getContext('2d');
|
let errRecChartCanvas = ctx = $('#errRecChart').get(0).getContext('2d');
|
||||||
@ -720,6 +708,101 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 圖表 - 異常未派工與異常已派工 (圓環圖)
|
||||||
|
function chartWorOrdErr(labels, datas) {
|
||||||
|
labels = ["異常未派工", "異常已派工"]
|
||||||
|
datas = [5, 9]
|
||||||
|
let worOrdErrChartCanvas = ctx = $('#worOrdErrChart').get(0).getContext('2d');
|
||||||
|
|
||||||
|
let worOrdErrChartData = {
|
||||||
|
labels: labels,
|
||||||
|
datasets: [
|
||||||
|
{
|
||||||
|
label: '數量',
|
||||||
|
unit: '個',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: [color.danger._500, color.info._300],
|
||||||
|
//data: worOrdErrArr.map(x => parseInt((Math.random() * (1500 - 300) + 300))),
|
||||||
|
data: datas,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
let worOrdErrChartOptions = {
|
||||||
|
//maintainAspectRatio: false,
|
||||||
|
responsive: true,
|
||||||
|
legend: {
|
||||||
|
display: true,
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (worOrdErrChart == null) {
|
||||||
|
worOrdErrChart = new Chart(worOrdErrChartCanvas, {
|
||||||
|
type: "doughnut",
|
||||||
|
data: worOrdErrChartData,
|
||||||
|
options: worOrdErrChartOptions
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
worOrdErrChart.data.datasets.forEach((dataset) => {
|
||||||
|
dataset.data = datas;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 圖表 - 工單已完成與工單未完成 (圓環圖)
|
||||||
|
function chartWorOrdFin(labels, datas) {
|
||||||
|
labels = ["工單已完成","工單未完成"]
|
||||||
|
datas = [5,9]
|
||||||
|
let worOrdFinChartCanvas = ctx = $('#worOrdFinChart').get(0).getContext('2d');
|
||||||
|
|
||||||
|
let worOrdFinChartData = {
|
||||||
|
labels: labels,
|
||||||
|
datasets: [
|
||||||
|
{
|
||||||
|
label: '數量',
|
||||||
|
unit: '個',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: [color.danger._500, color.info._300],
|
||||||
|
//data: worOrdFinArr.map(x => parseInt((Math.random() * (1500 - 300) + 300))),
|
||||||
|
data: datas,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
let worOrdFinChartOptions = {
|
||||||
|
//maintainAspectRatio: false,
|
||||||
|
responsive: true,
|
||||||
|
legend: {
|
||||||
|
display: true,
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (worOrdFinChart == null) {
|
||||||
|
worOrdFinChart = new Chart(worOrdFinChartCanvas, {
|
||||||
|
type: "doughnut",
|
||||||
|
data: worOrdFinChartData,
|
||||||
|
options: worOrdFinChartOptions
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
worOrdFinChart.data.datasets.forEach((dataset) => {
|
||||||
|
dataset.data = datas;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 從 baja 訂閱 左下角各系統小類異常狀態
|
// 從 baja 訂閱 左下角各系統小類異常狀態
|
||||||
function getAlarmSub(data) {
|
function getAlarmSub(data) {
|
||||||
$.each(data.data, (idx, alaObj) => {
|
$.each(data.data, (idx, alaObj) => {
|
||||||
|
@ -38,14 +38,17 @@
|
|||||||
var allDevList = []; //全設備清單
|
var allDevList = []; //全設備清單
|
||||||
var subDeviceData = [];
|
var subDeviceData = [];
|
||||||
var heatMap = null;
|
var heatMap = null;
|
||||||
|
var buildMenuData = {};
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
getBuildMenu((arr, data) => {
|
getBuildMenu((arr, data) => {
|
||||||
|
buildMenuData = data;
|
||||||
if (arr.indexOf(4) != -1) {
|
if (arr.indexOf(4) != -1) {
|
||||||
getFloDevList();
|
getFloDevList(arr[0] == 4 ? "left" :"right");
|
||||||
setLightColor();
|
setLightColor();
|
||||||
}
|
}
|
||||||
if (arr.indexOf(3) != -1) {
|
if (arr.indexOf(3) != -1) {
|
||||||
|
getLightPoint();
|
||||||
getHotspotPoint(() => {
|
getHotspotPoint(() => {
|
||||||
show3DModel(data.urn_3D);
|
show3DModel(data.urn_3D);
|
||||||
});
|
});
|
||||||
@ -72,7 +75,10 @@
|
|||||||
</div>`;
|
</div>`;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
strHtml = `<div name="forgeViewer" style="height:85vh;"></div>`;
|
strHtml = `<div class="d-flex mb-4" style="gap:15px">
|
||||||
|
${setTopHeatBar()}
|
||||||
|
</div>
|
||||||
|
<div name="forgeViewer" style="height:85vh;"></div>`;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,6 +96,7 @@
|
|||||||
}
|
}
|
||||||
myBaja.setSubscribeDevicesByBql(ordPath);
|
myBaja.setSubscribeDevicesByBql(ordPath);
|
||||||
myBaja.setSubscribeDevicesCallBack(function (data) {
|
myBaja.setSubscribeDevicesCallBack(function (data) {
|
||||||
|
console.log(data)
|
||||||
let matchDevice = allDevList.filter(x => x.device_number == data.device_number_full)[0];
|
let matchDevice = allDevList.filter(x => x.device_number == data.device_number_full)[0];
|
||||||
if (!matchDevice) {
|
if (!matchDevice) {
|
||||||
return false;
|
return false;
|
||||||
@ -127,18 +134,35 @@
|
|||||||
} else if (data.point_name == errDevPoiName && data.value == matchDevice.device_error_point_value) {
|
} else if (data.point_name == errDevPoiName && data.value == matchDevice.device_error_point_value) {
|
||||||
$(`#${matchDevice.device_number}_status`).attr("data-light-type", "error").data("light-type", "error");
|
$(`#${matchDevice.device_number}_status`).attr("data-light-type", "error").data("light-type", "error");
|
||||||
}
|
}
|
||||||
|
|
||||||
setLightColor();
|
setLightColor();
|
||||||
setForgeHotSpotColor(matchDevice);
|
setForgeHotSpotColor(matchDevice);
|
||||||
|
lightDevForgeSpotLig(matchDevice)
|
||||||
|
// 從設備訂閱更新每個設備卡片即時點位
|
||||||
|
setDevItemPoiValBySub(data);
|
||||||
});
|
});
|
||||||
|
|
||||||
myBaja.setSubscribeDeviceEndCallBack(function (data) {
|
myBaja.setSubscribeDeviceEndCallBack(function (data) {
|
||||||
|
|
||||||
endPageLoading();
|
endPageLoading();
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function lightDevForgeSpotLig(devObj) {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 從設備訂閱更新每個設備卡片即時點位
|
||||||
|
function setDevItemPoiValBySub(data) {
|
||||||
|
|
||||||
|
let pointSpan = $(`.card.device-wrap[data-number=${data.device_number_full}] span[name=devItemPoiVal]`);
|
||||||
|
if (pointSpan && pointSpan.data("point") == data.point_name) {
|
||||||
|
console.log(data)
|
||||||
|
pointSpan.text(data.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function setLightColor() {
|
function setLightColor() {
|
||||||
$("[data-light-type]").each((index, ele) => {
|
$("[data-light-type]").each((index, ele) => {
|
||||||
let type = $(ele).data("light-type");
|
let type = $(ele).data("light-type");
|
||||||
@ -192,6 +216,12 @@
|
|||||||
return strHtml;
|
return strHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 設置 Forge 3D 溫度條
|
||||||
|
function setTopHeatBar() {
|
||||||
|
let strHtml = `<canvas name="forgeHeatBar" width="200" height="30" style="z-index:9999"></canvas>`;
|
||||||
|
return strHtml;
|
||||||
|
}
|
||||||
|
|
||||||
// forge 3D 異常點位變紅色
|
// forge 3D 異常點位變紅色
|
||||||
function setForgeHotSpotColor(device) {
|
function setForgeHotSpotColor(device) {
|
||||||
let subData = subDeviceData.filter(x => x.device_number == device.device_number)[0]
|
let subData = subDeviceData.filter(x => x.device_number == device.device_number)[0]
|
||||||
@ -200,8 +230,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 取得昇位圖點位 (deviceItem)
|
||||||
|
function getRiserPoiObj() {
|
||||||
|
let tarDevItem = pageAct.devItems?.filter(x => x.is_show_riserDiagram == 1);
|
||||||
|
if (tarDevItem && tarDevItem[0]) {
|
||||||
|
return tarDevItem[0];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// 取得設備列表 並繪製卡片
|
// 取得設備列表 並繪製卡片
|
||||||
function getFloDevList() {
|
function getFloDevList(position = "left") {
|
||||||
let url = baseApiUrl + "/api/Device/GetDeviceList";
|
let url = baseApiUrl + "/api/Device/GetDeviceList";
|
||||||
let sendData = {
|
let sendData = {
|
||||||
sub_system_tag: pageAct.sysSubTag,
|
sub_system_tag: pageAct.sysSubTag,
|
||||||
@ -220,8 +259,8 @@
|
|||||||
strHtml += `<div class="col p-0 d-grid grid-gap-5 grid-temp-col-c" style="--c-grid-temp-col:repeat(auto-fill,minmax(250px,1fr))">`
|
strHtml += `<div class="col p-0 d-grid grid-gap-5 grid-temp-col-c" style="--c-grid-temp-col:repeat(auto-fill,minmax(250px,1fr))">`
|
||||||
$.each(floObj.device_list, (index2, devObj) => {
|
$.each(floObj.device_list, (index2, devObj) => {
|
||||||
allDevList.push(devObj);
|
allDevList.push(devObj);
|
||||||
|
let devItem = getRiserPoiObj();
|
||||||
strHtml += `<div class="card m-1 border device-wrap">
|
strHtml += `<div class="card m-1 border device-wrap" data-number="${devObj.device_number}" data-position="${position}">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="d-flex mb-2">
|
<div class="d-flex mb-2">
|
||||||
<div class="mr-5 cur-poi">
|
<div class="mr-5 cur-poi">
|
||||||
@ -233,7 +272,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="d-flex mb-0 mt-2 align-items-center">
|
<div class="d-flex mb-0 mt-2 align-items-center">
|
||||||
<span id="${devObj.device_number}_status" class="circle-light"></span>
|
<span id="${devObj.device_number}_status" class="circle-light"></span>
|
||||||
<span class="d-none">即時功率:</span>
|
<span class="${devItem ? "" : "d-none"} ml-2">${devItem?.full_name}:<span name="devItemPoiVal" data-point="${devItem?.points}"></span>${devItem?.unit}</span>
|
||||||
<a href="javascript:;" name="devItem" data-id="${devObj.device_guid}" data-number="${devObj.device_number}" data-name="${devObj.full_name}" class=" ml-2 mb-0 ">詳細資料</a>
|
<a href="javascript:;" name="devItem" data-id="${devObj.device_guid}" data-number="${devObj.device_number}" data-name="${devObj.full_name}" class=" ml-2 mb-0 ">詳細資料</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -295,19 +334,27 @@
|
|||||||
// Card 即時狀態
|
// Card 即時狀態
|
||||||
function drawStateTabBlo(devNum) {
|
function drawStateTabBlo(devNum) {
|
||||||
let devPath = devNum.replaceAll("_", "/");
|
let devPath = devNum.replaceAll("_", "/");
|
||||||
let strHtml = `<div style="height:100%">
|
let position = $(`.card.device-wrap[data-number=${devNum}]`).data("position");
|
||||||
<iframe src="/ord?station:%7Cslot:/${devPath}|view:?fullScreen=true" style="width:100%;height:100%;min-height:30vh"></iframe>
|
let width = buildMenuData[position + "_icon_click_url_width"] ? buildMenuData[position + "_icon_click_url_width"] + "px" : "100%";
|
||||||
|
let height = buildMenuData[position + "_icon_click_url_height"] ? buildMenuData[position + "_icon_click_url_height"] + "px" : "100%";
|
||||||
|
let strHtml = `<div style="height:100%;width:100%">
|
||||||
|
<iframe src="/ord?station:%7Cslot:/${devPath}|view:?fullScreen=true" style="width:${width};height:${height};min-height:100px;"></iframe>
|
||||||
</div>`
|
</div>`
|
||||||
return strHtml;
|
return strHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
function iframeResize(obj) {
|
function iframeResize(obj) {
|
||||||
obj.style.height = obj.contentWindow.document.documentElement.scrollHeight + 'px';
|
obj.style.height = obj.contentWindow.document.documentElement.scrollHeight + 'px';
|
||||||
}
|
}
|
||||||
|
|
||||||
function show3DModel(urn) {
|
function show3DModel(urn) {
|
||||||
$(loadEle).Loading("start");
|
$(loadEle).Loading("start");
|
||||||
|
getLightData(allDevList);
|
||||||
launchViewerForHotspot(urn, (viewer, nodeIds) => {
|
launchViewerForHotspot(urn, (viewer, nodeIds) => {
|
||||||
|
showHeat("[name=forgeHeatBar]");
|
||||||
let devDbIds = allDevList.map(x => x.forge_dbid);
|
let devDbIds = allDevList.map(x => x.forge_dbid);
|
||||||
/*hideAllObjects(devDbIds);*/
|
/*hideAllObjects(devDbIds);*/
|
||||||
|
|
||||||
setTransparentBuilding(0, devDbIds);
|
setTransparentBuilding(0, devDbIds);
|
||||||
$(loadEle).Loading("close");
|
$(loadEle).Loading("close");
|
||||||
|
|
||||||
@ -416,11 +463,49 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getLightPoint(callback = null) {
|
||||||
|
let url = baseApiUrl + "/api/GetDevNodeForCor";
|
||||||
|
let sendData = {
|
||||||
|
"device_area_tag": pageAct.AreaTag,
|
||||||
|
"device_building_tag": pageAct.buiTag,
|
||||||
|
"device_system_tag": pageAct.sysMainTag,
|
||||||
|
"device_name_tag": pageAct.sysSubTag,
|
||||||
|
};
|
||||||
|
objSendData.Data = sendData;
|
||||||
|
ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
|
||||||
|
if (!res || res.code != "0000" || !res.data) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
let myDataList = [];
|
||||||
|
$.each(res.data, (idx, data) => {
|
||||||
|
let item = {};
|
||||||
|
item.position = {};
|
||||||
|
if (data.device_node_coordinate_3d != null && isJSON(data.device_node_coordinate_3d)) {
|
||||||
|
item.position = JSON.parse(data.device_node_coordinate_3d);
|
||||||
|
}
|
||||||
|
$.extend(item, data);
|
||||||
|
myDataList.push(item);
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log("2", myDataList)
|
||||||
|
setLightPoint(myDataList);
|
||||||
|
callback ? callback() : "";
|
||||||
|
}
|
||||||
|
}, null, "POST").send();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function setHotspotPoint(myDataList = []) {
|
function setHotspotPoint(myDataList = []) {
|
||||||
console.log(myDataList)
|
console.log(myDataList)
|
||||||
getHopspotPoint(myDataList);
|
getHopspotPoint(myDataList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function setLightPoint(myDataList = []) {
|
||||||
|
console.log(myDataList)
|
||||||
|
getLightData(myDataList);
|
||||||
|
}
|
||||||
|
|
||||||
var parentEle = "";
|
var parentEle = "";
|
||||||
onEvent("autodesk:click:sprite", "[name=forgeViewer]", function (e, obj) {
|
onEvent("autodesk:click:sprite", "[name=forgeViewer]", function (e, obj) {
|
||||||
forgeUnFocusAll();
|
forgeUnFocusAll();
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
<style>
|
|
||||||
[id^=yt_tooltip] {
|
|
||||||
width: 650px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row bg-dark align-items-center">
|
<div class="row bg-dark align-items-center">
|
||||||
<label id="sysSubText" class=" mx-5 mb-0 fs-1-05"></label>
|
<label id="sysSubText" class=" mx-5 mb-0 fs-1-05"></label>
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
label[id$='-error'].error { color: var(--yt-red-2); }
|
label[id$='-error'].error { color: var(--yt-red-2); }
|
||||||
|
|
||||||
[id^=yt_tooltip] { min-width: 650px !important; }
|
/*[id^=yt_tooltip] { min-width: 650px !important; }*/
|
||||||
|
|
||||||
.circle-light { display: inline-block; width: 25px; height: 25px; border-radius: 50px; }
|
.circle-light { display: inline-block; width: 25px; height: 25px; border-radius: 50px; }
|
||||||
|
|
||||||
@ -89,8 +89,25 @@ input:-webkit-autofill { background-color: rgba(0, 0, 0, 0.15) !important; }
|
|||||||
.yt-navbar-content ul li a:active, .yt-navbar-content ul li a.active { background-color: var(--theme-fusion-500); }
|
.yt-navbar-content ul li a:active, .yt-navbar-content ul li a.active { background-color: var(--theme-fusion-500); }
|
||||||
|
|
||||||
.card-header.p-3.ui-draggable-handle:hover { cursor: move; }
|
.card-header.p-3.ui-draggable-handle:hover { cursor: move; }
|
||||||
@media screen and (max-width: 576px) {
|
|
||||||
.yt-left-navbar { width: 100%; max-width: 100%; margin-top: 0; }
|
.device-wrap .card-body #info, .device-wrap .card-body #errRec, .device-wrap .card-body #opeRec { min-width: 500px; }
|
||||||
|
.scrolledTable { overflow-y: auto; clear: both; max-height:100%;}
|
||||||
|
|
||||||
|
/*a[data-tabname="topFunBtn"] { color: #fff }
|
||||||
|
|
||||||
|
a[data-tabname="topFunBtn"].active { color: #886ab5 }
|
||||||
|
a[data-tabname="topFunBtn"]:hover { color: var(--theme-primary-50); }
|
||||||
|
|
||||||
|
.userblock {
|
||||||
|
color:#fff;
|
||||||
|
}
|
||||||
|
.userblock:hover { color: var(--theme-primary-50); }
|
||||||
|
.dropdown.show .userblock { color: var(--theme-primary-50) !important; }*/
|
||||||
|
.page-header a {color:#fff !important;}
|
||||||
|
.page-header a:hover { color: var(--theme-primary-50) !important; }
|
||||||
|
.page-header a.active { color: var(--theme-primary-500) !important; }
|
||||||
|
.dropdown.show a { color: var(--theme-primary-50) !important; }
|
||||||
|
@media screen and (max-width: 576px) { .yt-left-navbar { width: 100%; max-width: 100%; margin-top: 0; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes lds-ring {
|
@keyframes lds-ring {
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
<canvas id="iot-heatmap-legend" width="300" height="50"></canvas>
|
<canvas id="iot-heatmap-legend" width="300" height="50"></canvas>
|
||||||
</div>
|
</div>
|
||||||
<button type="button" class="btn btn-info" onclick="showHeat()">顯示熱圖圖示</button>
|
<button type="button" class="btn btn-info" onclick="showHeat()">顯示熱圖圖示</button>
|
||||||
|
<button type="button" class="btn btn-default" onclick="showList()">顯示設備清單</button>
|
||||||
<!--<input id="lightBar" type="range" min="0" max="100" step="5" onchange="changeLightPower()">亮度-->
|
<!--<input id="lightBar" type="range" min="0" max="100" step="5" onchange="changeLightPower()">亮度-->
|
||||||
<!-- <input type="range">Main Axis</input> -->
|
<!-- <input type="range">Main Axis</input> -->
|
||||||
</div>
|
</div>
|
||||||
@ -244,7 +245,7 @@
|
|||||||
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1pdHN1YmlzaGkvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU5JUExJUFGXzEyMjgubndk');
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1pdHN1YmlzaGkvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU5JUExJUFGXzEyMjgubndk');
|
||||||
|
|
||||||
//12.30 整棟樓 ARC + MEP
|
//12.30 整棟樓 ARC + MEP
|
||||||
launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8xMl8zMC5ud2Q');
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8xMl8zMC5ud2Q');
|
||||||
|
|
||||||
//12.30 整棟樓 ARC + MEP 半透明
|
//12.30 整棟樓 ARC + MEP 半透明
|
||||||
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk');
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk');
|
||||||
@ -254,8 +255,11 @@
|
|||||||
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMTMubndj');//new MEP
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMTMubndj');//new MEP
|
||||||
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxJUU1JTg1JUE4JUU2JUEzJTlGXzIwMjJfMTJfMTMubndj');//全棟 ARC
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxJUU1JTg1JUE4JUU2JUEzJTlGXzIwMjJfMTJfMTMubndj');//全棟 ARC
|
||||||
|
|
||||||
|
//01.06 加上room_id(樓層有燈具)
|
||||||
|
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU2JUE4JUExJUU1JUJDJThGK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8yMDIzXzAxXzA2Lm53ZA');
|
||||||
|
|
||||||
|
//01.06 樓層刪除燈具
|
||||||
|
launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1vZGVsX3Rlc3QxMTIxLyVFMyU4MCU5MCVFNSU4RiVCMCVFNSU4QyU5NyVFNCVCOCVBRCVFOCU4RiVCMSVFNSVBNCVBNyVFNiVBOCU5MyVFMyU4MCU5MUFSQyVFOSU5QiU5OSVFNiVBOCVBMSVFNSVCQyU4RitNRVAlRTYlOEIlODYlRTclQjMlQkIlRTclQjUlQjFfJUU1JTg4JUFBJUU3JTg3JTg4JUU1JTg1JUI3XzIwMjNfMDFfMDYubndk');
|
||||||
|
|
||||||
});
|
});
|
||||||
//function move1Floor() {
|
//function move1Floor() {
|
||||||
@ -412,6 +416,10 @@
|
|||||||
createHeatmapRect(labels, colorStops);
|
createHeatmapRect(labels, colorStops);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showList() {
|
||||||
|
consoleList();
|
||||||
|
}
|
||||||
|
|
||||||
function createHeatmapRect(labels, colorStops) {
|
function createHeatmapRect(labels, colorStops) {
|
||||||
if (!this.canvas) {
|
if (!this.canvas) {
|
||||||
return;
|
return;
|
||||||
@ -438,7 +446,7 @@
|
|||||||
context.fillRect(10, 20, 280, 20);
|
context.fillRect(10, 20, 280, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -180,7 +180,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<a class="dropdown-toggle" href="javascript:;" role="button" id="buiActDrop"
|
<a class="dropdown-toggle fs-1" href="javascript:;" role="button" id="buiActDrop"
|
||||||
data-target="buiList" data-toggle="dropdown" aria-haspopup="true">
|
data-target="buiList" data-toggle="dropdown" aria-haspopup="true">
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
@ -199,8 +199,11 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
<!--<img src="img/demo/avatars/avatar-admin.png" class="profile-image rounded-circle"
|
<!--<img src="img/demo/avatars/avatar-admin.png" class="profile-image rounded-circle"
|
||||||
alt="Dr. Codex Lantern">-->
|
alt="Dr. Codex Lantern">-->
|
||||||
<!--you can also add username next to the avatar with the codes below:-->
|
<!--you can also add username next to the avatar with the codes below:-->
|
||||||
<span id="usrName" class="ml-1 mr-2 text-truncate text-truncate-header hidden-xs-down"></span>
|
<div class="row m-0 justify-content-center userblock">
|
||||||
<i class="ni ni-chevron-down hidden-xs-down"></i>
|
<i class="fas fa-user-circle fs-1-5 w-100 text-center"></i>
|
||||||
|
<span id="usrName" class="text-truncate text-truncate-header hidden-xs-down"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
<div id="logoutList" class="dropdown-menu dropdown-menu-right dropdown-lg">
|
<div id="logoutList" class="dropdown-menu dropdown-menu-right dropdown-lg">
|
||||||
|
|
||||||
@ -726,9 +729,11 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
if (location.href.indexOf("ord") != -1) {
|
if (location.href.indexOf("ord") != -1) {
|
||||||
location.href = "/file/index.html"
|
location.href = "/file/index.html"
|
||||||
}
|
}
|
||||||
|
var lastPage = sessionStorage.getItem("lastPage");
|
||||||
// 執行初步 Loading
|
// 執行初步 Loading
|
||||||
var loadEle = pageLoading();
|
var loadEle = pageLoading();
|
||||||
var errRecTable = null, opeRecTable = null;
|
var errRecTable = null, opeRecTable = null;
|
||||||
|
var tolSubList = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 頁面 Loading 建立
|
* 頁面 Loading 建立
|
||||||
@ -770,7 +775,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
"lib/statistics/flot/flot.bundle",
|
"lib/statistics/flot/flot.bundle",
|
||||||
"lib/statistics/peity/peity.bundle",
|
"lib/statistics/peity/peity.bundle",
|
||||||
"lib/jquery-validation/dist/jquery.validate",
|
"lib/jquery-validation/dist/jquery.validate",
|
||||||
"lib/jquery-validation/dist/additional-methods.min",
|
/*"lib/jquery-validation/dist/additional-methods.min",*/ /* 會影響 messages_zh_TW 文字呈現 */
|
||||||
"lib/jquery-validation/dist/localization/messages_zh_TW",
|
"lib/jquery-validation/dist/localization/messages_zh_TW",
|
||||||
"lib/jquery-ui/jquery-ui.min",
|
"lib/jquery-ui/jquery-ui.min",
|
||||||
"lib/chart.js/Chart.min",
|
"lib/chart.js/Chart.min",
|
||||||
@ -825,8 +830,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
* 登入驗證完成 Callback
|
* 登入驗證完成 Callback
|
||||||
* */
|
* */
|
||||||
function isValidLogin() {
|
function isValidLogin() {
|
||||||
$("#app").load("_dashboard.html", loadCallback);
|
|
||||||
|
|
||||||
getUserInfo();
|
getUserInfo();
|
||||||
iniFroList();
|
iniFroList();
|
||||||
showMainSys();
|
showMainSys();
|
||||||
@ -834,6 +838,24 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
getSysMonBtnList();
|
getSysMonBtnList();
|
||||||
checkDevState();
|
checkDevState();
|
||||||
|
|
||||||
|
if (lastPage) {
|
||||||
|
let lastPageAct = {};
|
||||||
|
if (isJSON(sessionStorage.getItem("pageAct"))) {
|
||||||
|
lastPageAct = JSON.parse(sessionStorage.getItem("pageAct"));
|
||||||
|
}
|
||||||
|
if (lastPageAct.sysSubTag && lastPage == "systemMonitor") {
|
||||||
|
$(`#subSysBtn${lastPageAct.sysSubTag}`).click();
|
||||||
|
$("#sysMonTopBtn").YTTab("set");
|
||||||
|
} else {
|
||||||
|
$(`[data-tabname=topFunBtn][data-page=${lastPage}]`).YTTab("setAndClick");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*$(`[name=topFunBtn][data-page=${lastPage}]`).click();*/
|
||||||
|
} else {
|
||||||
|
$("#app").load("_dashboard.html", loadCallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function getBuiList() {
|
function getBuiList() {
|
||||||
let url = baseApiUrl + "/api/Device/GetBuild";
|
let url = baseApiUrl + "/api/Device/GetBuild";
|
||||||
ytAjax = new YourTeam.Ajax(url, null, function (res) {
|
ytAjax = new YourTeam.Ajax(url, null, function (res) {
|
||||||
@ -893,10 +915,17 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
onEvent("click", "[name=topFunBtn]", function () {
|
onEvent("click", "[name=topFunBtn]", function () {
|
||||||
_ytTabInited = [];
|
_ytTabInited = [];
|
||||||
let page = $(this).data("page");
|
let page = $(this).data("page");
|
||||||
|
if (!page) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (page != "systemMonitor") {
|
if (page != "systemMonitor") {
|
||||||
$("#sysMonBtnList .dropdown-item").removeClass("active");
|
$("#sysMonBtnList .dropdown-item").removeClass("active");
|
||||||
pageAct.sysMainTag = null;
|
pageAct.sysMainTag = null;
|
||||||
|
pageAct.sysSubTag = null;
|
||||||
|
} else {
|
||||||
|
setSysTagForPageAct(this);
|
||||||
|
$("#sysMonTopBtn").YTTab("set");
|
||||||
|
$(`#subSysBtn${pageAct.sysSubTag}`).YTTab("set");
|
||||||
}
|
}
|
||||||
$.each(tolSubList, (idx, sub) => {
|
$.each(tolSubList, (idx, sub) => {
|
||||||
sub.unsubscribeAll();
|
sub.unsubscribeAll();
|
||||||
@ -914,6 +943,9 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
}
|
}
|
||||||
|
|
||||||
getUserInfo();
|
getUserInfo();
|
||||||
|
|
||||||
|
sessionStorage.setItem("lastPage", page);
|
||||||
|
sessionStorage.setItem("pageAct", JSON.stringify(pageAct));
|
||||||
$("#app").load(`_${page}.html`, loadCallback);
|
$("#app").load(`_${page}.html`, loadCallback);
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -924,10 +956,11 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
})
|
})
|
||||||
|
|
||||||
onEvent("click", "#sysMonBtnList a", function (e) {
|
onEvent("click", "#sysMonBtnList a", function (e) {
|
||||||
pageAct.sysMainTag = $(this).data("subSysObj").main_system_tag;
|
//pageAct.sysMainTag = $(this).data("subSysObj").main_system_tag;
|
||||||
pageAct.sysSubTag = $(this).data("subSysObj").sub_system_tag;
|
//pageAct.sysSubTag = $(this).data("subSysObj").sub_system_tag;
|
||||||
pageAct.sysSubName = $(this).data("subSysObj").full_name;
|
//pageAct.sysSubName = $(this).data("subSysObj").full_name;
|
||||||
pageAct.sysSubObj = $(this).data("subSysObj");
|
//pageAct.sysSubObj = $(this).data("subSysObj");
|
||||||
|
//getDevItem();
|
||||||
})
|
})
|
||||||
|
|
||||||
onEvent("active:change", "#buiList", function (e, actEle) {
|
onEvent("active:change", "#buiList", function (e, actEle) {
|
||||||
@ -945,6 +978,12 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
onEvent("yt:tab:prechange", "[data-tabname=topFunBtn]", function (e, arg) {
|
||||||
|
if ($(this)[0].id == "sysMonTopBtn" || !$(this).data("page")) {
|
||||||
|
arg.cancel = true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
onEvent("click", "#testsysbtn", function () {
|
onEvent("click", "#testsysbtn", function () {
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -1080,7 +1119,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2 tab-content">
|
<div class="card-body p-2 tab-content">
|
||||||
<div id="state" class="show active" data-tabname="cardTab" data-tabrole="child" style="height:100%">
|
<div id="state" class="show active" data-tabname="cardTab" data-tabrole="child" style="height:100%;width:100%">
|
||||||
${drawStateTabBlo(devNum)}
|
${drawStateTabBlo(devNum)}
|
||||||
</div>
|
</div>
|
||||||
<div id="info" data-tabname="cardTab" data-tabrole="child">
|
<div id="info" data-tabname="cardTab" data-tabrole="child">
|
||||||
@ -1106,18 +1145,27 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
}
|
}
|
||||||
$(tooltipEle).draggable({
|
$(tooltipEle).draggable({
|
||||||
cursor: "move",
|
cursor: "move",
|
||||||
handle: ".card-header" // 只能通过卡片的标题栏拖拽
|
handle: ".card-header", // 只能通过卡片的标题栏拖拽
|
||||||
|
containment: "document",
|
||||||
|
scroll: true
|
||||||
});
|
});
|
||||||
$(tooltipEle).resizable({
|
$(tooltipEle).resizable({
|
||||||
resize: function (event,ui) {
|
resize: function (event,ui) {
|
||||||
let iframe = $(ui.element).find("iframe");
|
let iframe = $(ui.element).find("iframe");
|
||||||
if (iframe.length != 0) {
|
if (iframe.length != 0) {
|
||||||
//let cardBodyHei = $(ui.element).find(".card-body").css("height");
|
if (ui.size.width != ui.originalSize.width) {
|
||||||
//if (cardBodyHei) {
|
iframe.css("width", "100%");
|
||||||
// $(iframe).css("height", cardBodyHei);
|
} else if (ui.size.height != ui.originalSize.height) {
|
||||||
//}
|
iframe.css("height", "100%");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
let cardBodyHeight = $(ui.element).find(".card-body").css("height");
|
||||||
|
$(ui.element).find(".scrolledTable").css("height", cardBodyHeight)
|
||||||
|
|
||||||
|
errRecTable.draw(false)
|
||||||
|
},
|
||||||
|
minWidth: 200,
|
||||||
|
minHeight:150,
|
||||||
});
|
});
|
||||||
typeof subDeviceSetTable != "undefined" ? subDeviceSetTable($(oriEle).data("number")) : ""
|
typeof subDeviceSetTable != "undefined" ? subDeviceSetTable($(oriEle).data("number")) : ""
|
||||||
},
|
},
|
||||||
@ -1172,7 +1220,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
opeRecTable = new YourTeam.JqDataTables.getTableByAjax(url, tag, null, columns, column_defs, null, null, null, null, null, null, "tpi");
|
opeRecTable = new YourTeam.JqDataTables.getTableByAjax(url, tag, null, columns, column_defs, null, null, null, null, null, null, "<'scrolledTable'tpi>");
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadLightSchTable(devGuid) {
|
function loadLightSchTable(devGuid) {
|
||||||
@ -1294,7 +1342,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
|
|
||||||
let json_object = JSON.parse(result);
|
let json_object = JSON.parse(result);
|
||||||
datas = json_object['data'];
|
datas = json_object['data'];
|
||||||
errRecTable = new YourTeam.JqDataTables.getTableByStatic(tag, datas, columns, column_defs, null, null, null, null, "tpi");
|
errRecTable = new YourTeam.JqDataTables.getTableByStatic(tag, datas, columns, column_defs, null, null, null, null, "<'scrolledTable'tpi>");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1350,6 +1398,30 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
$(loadEle).Loading("close");
|
$(loadEle).Loading("close");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setSysTagForPageAct(obj) {
|
||||||
|
pageAct.sysMainTag = $(obj).data("subSysObj").main_system_tag;
|
||||||
|
pageAct.sysSubTag = $(obj).data("subSysObj").sub_system_tag;
|
||||||
|
pageAct.sysSubName = $(obj).data("subSysObj").full_name;
|
||||||
|
pageAct.sysSubObj = $(obj).data("subSysObj");
|
||||||
|
getDevItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDevItem() {
|
||||||
|
let url = baseApiUrl + "/api/Device/GetDeviceItem";
|
||||||
|
|
||||||
|
objSendData.Data = {
|
||||||
|
main_system_tag: pageAct.sysMainTag,
|
||||||
|
sub_system_tag: pageAct.sysSubTag,
|
||||||
|
}
|
||||||
|
ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
|
||||||
|
if (!res || res.code != "0000" || !res.data) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
pageAct.devItems = res.data;
|
||||||
|
}
|
||||||
|
}, null, "POST").send();
|
||||||
|
}
|
||||||
|
|
||||||
function alarmIconBlink(data) {
|
function alarmIconBlink(data) {
|
||||||
if (data?.data.length != 0) {
|
if (data?.data.length != 0) {
|
||||||
$(".page-header [name=topFunBtn][data-page=alert] i").addClass("blink");
|
$(".page-header [name=topFunBtn][data-page=alert] i").addClass("blink");
|
||||||
@ -1411,7 +1483,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
let strHtml = `<div class="btn-group mx-4">
|
let strHtml = `<div class="btn-group mx-4">
|
||||||
<a href="javascript:;" name="topFunBtn" data-page="dashboard" class="text-center">
|
<a href="javascript:;" name="topFunBtn" data-page="dashboard" data-tabname="topFunBtn" class="text-center">
|
||||||
<i class="fal fa-home fa-2x"></i><br>首頁
|
<i class="fal fa-home fa-2x"></i><br>首頁
|
||||||
</a>
|
</a>
|
||||||
<!--<div class="dropdown-menu">
|
<!--<div class="dropdown-menu">
|
||||||
@ -1424,7 +1496,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
$.each(res.data, function (i, v) {
|
$.each(res.data, function (i, v) {
|
||||||
if (v.authCode == 'PF1') {
|
if (v.authCode == 'PF1') {
|
||||||
strHtml += `<div class="btn-group mx-4" >
|
strHtml += `<div class="btn-group mx-4" >
|
||||||
<a href="javascript:;" id="sysMonTopBtn" class="text-center" data-toggle="navbar" data-target="#sysMonNavbar" aria-haspopup="true" aria-expanded="false">
|
<a href="javascript:;" id="sysMonTopBtn" class="text-center" data-toggle="navbar" data-target="#sysMonNavbar" data-tabname="topFunBtn" aria-haspopup="true" aria-expanded="false">
|
||||||
<i class="fal fa-tv fa-2x"></i><br>${v.subName}
|
<i class="fal fa-tv fa-2x"></i><br>${v.subName}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
@ -1433,9 +1505,9 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
hasMonitor = true;
|
hasMonitor = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
let icon = v.authCode == 'PF2' ? 'fa-chart-pie' : v.authCode == 'PF3' ? 'fa-chart-area' : v.authCode == 'PF4' ? 'fa-bell' : v.authCode == 'PF5' ? 'fa-server' : v.authCode == 'PF6' ? 'fa-image' : v.authCode == 'PF7' ? 'fa-user' : '';
|
let icon = v.authCode == 'PF2' ? 'fa-chart-pie' : v.authCode == 'PF3' ? 'fa-chart-area' : v.authCode == 'PF4' ? 'fa-chart-line' : v.authCode == 'PF5' ? 'fa-bell' : v.authCode == 'PF6' ? 'fa-server' : v.authCode == 'PF7' ? 'fa-image' : v.authCode == 'PF8' ? 'fa-user' : '';
|
||||||
strHtml += `<div class="btn-group mx-4">
|
strHtml += `<div class="btn-group mx-4">
|
||||||
<a href="javascript:;" name="topFunBtn" class="dropdown-toggle no-arrow text-center"
|
<a href="javascript:;" name="topFunBtn" data-tabname="topFunBtn" class="dropdown-toggle no-arrow text-center"
|
||||||
data-page="${v.showView}">
|
data-page="${v.showView}">
|
||||||
<i class="fal ${icon} fa-2x"></i><br>${v.subName}
|
<i class="fal ${icon} fa-2x"></i><br>${v.subName}
|
||||||
</a>
|
</a>
|
||||||
@ -1464,7 +1536,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
$("#sysMonBtnList").html("")
|
$("#sysMonBtnList").html("")
|
||||||
debugger
|
|
||||||
$.each(res.data.history_Main_Systems, (index, mainSysObj) => {
|
$.each(res.data.history_Main_Systems, (index, mainSysObj) => {
|
||||||
$.each(mainSysObj.history_Sub_systems, (index2, subSysObj) => {
|
$.each(mainSysObj.history_Sub_systems, (index2, subSysObj) => {
|
||||||
let page = "systemMonitor";
|
let page = "systemMonitor";
|
||||||
|
@ -330,15 +330,6 @@ class elevator3D {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onDocumentLoadSuccess(doc, eleOption) {
|
function onDocumentLoadSuccess(doc, eleOption) {
|
||||||
//取得燈光清單
|
|
||||||
if (lightDataList != undefined && lightDataList != null && lightDataList.length > 0) {
|
|
||||||
lightDataList.forEach((myData, index) => {
|
|
||||||
//if (myData.priority == 5) {
|
|
||||||
const position = JSON.parse(myData.device_node_coordinate_3d);
|
|
||||||
lightList.push({ dbid: myData.forge_dbid, spotLight: newLight(position) });
|
|
||||||
//}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var viewables = doc.getRoot().getDefaultGeometry();
|
var viewables = doc.getRoot().getDefaultGeometry();
|
||||||
viewer.loadDocumentNode(doc, viewables).then(i => {
|
viewer.loadDocumentNode(doc, viewables).then(i => {
|
||||||
@ -727,15 +718,26 @@ function hideColor(nodeId) {//顏色改成透明
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------ 紀錄熱點座標 ---------------
|
//紀錄燈具座標
|
||||||
function getHopspotPoint(data) {
|
async function getLightData(data) {
|
||||||
//var av = Autodesk.Viewing;
|
lightDataList = data;
|
||||||
myDataList = data;
|
}
|
||||||
//viewer.addEventListener(av.GEOMETRY_LOADED_EVENT, addHotPoint, {
|
|
||||||
// once: true,
|
async function testNewLight(dataList) {
|
||||||
//});
|
dataList.forEach((myData, index) => {
|
||||||
|
const position = JSON.parse(myData.device_node_coordinate_3d);
|
||||||
|
lightList.push({ dbid: myData.forge_dbid, device_guid: myData.device_guid, lightObject: new THREE.SpotLight(0xffffff, 200, 20, 0.6, 0.5, 10) });
|
||||||
|
|
||||||
|
lightList[index].lightObject.position.set(position.x, position.y, position.z);
|
||||||
|
lightList[index].lightObject.castShadow = true;
|
||||||
|
lightList[index].lightObject.visible = true;
|
||||||
|
lightList[index].lightObject.target.position.set(position.x, position.y, position.z - 20);
|
||||||
|
viewer.scene.add(lightList[index].lightObject.target);
|
||||||
|
viewer.scene.add(lightList[index].lightObject);
|
||||||
|
viewer.impl.sceneUpdated(true);
|
||||||
|
|
||||||
|
});
|
||||||
}
|
}
|
||||||
//-------------------- end ----------------------
|
|
||||||
|
|
||||||
//------------------- 加入熱點 -----------------
|
//------------------- 加入熱點 -----------------
|
||||||
async function addHotPoint(data) {
|
async function addHotPoint(data) {
|
||||||
@ -753,13 +755,10 @@ async function addHotPoint(data) {
|
|||||||
|
|
||||||
const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon);
|
const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon);
|
||||||
|
|
||||||
//取得燈光清單
|
if (lightDataList != undefined && lightDataList != null && lightDataList.length > 0) {
|
||||||
//if (lightDataList != undefined && lightDataList != null && lightDataList.length > 0) {
|
testNewLight(lightDataList);
|
||||||
// lightDataList.forEach((myData, index) => {
|
}
|
||||||
// const position = JSON.parse(myData.device_node_coordinate_3d);
|
|
||||||
// lightList.push({ dbid: myData.forge_dbid, spotLight: newLight(position) });
|
|
||||||
// });
|
|
||||||
//}
|
|
||||||
|
|
||||||
//熱點 點擊事件註冊
|
//熱點 點擊事件註冊
|
||||||
viewer.addEventListener(DataVizCore.MOUSE_CLICK, onSpriteClicked);// SPRITE_SELECTED
|
viewer.addEventListener(DataVizCore.MOUSE_CLICK, onSpriteClicked);// SPRITE_SELECTED
|
||||||
@ -790,12 +789,17 @@ async function addHotPoint(data) {
|
|||||||
if (event != undefined && event != null) {
|
if (event != undefined && event != null) {
|
||||||
if (event.dbId >= dbIdStart) {//event.dbId > 0 && event.dbId < 19
|
if (event.dbId >= dbIdStart) {//event.dbId > 0 && event.dbId < 19
|
||||||
console.log(`Sprite clicked: ${event.dbId}`);
|
console.log(`Sprite clicked: ${event.dbId}`);
|
||||||
openHotspotModal();
|
|
||||||
for (let i = dbIdStart; i <= myDataList.length + 10; i++) {
|
for (let i = dbIdStart; i <= myDataList.length + 10; i++) {
|
||||||
changeColorForHotspot(i);
|
changeColorForHotspot(i);
|
||||||
changeScaleForHotspot(i, false);
|
changeScaleForHotspot(i, false);
|
||||||
}
|
}
|
||||||
let myData = myDataList.filter(x => x._dbId == event.dbId)[0];
|
let myData = myDataList.filter(x => x._dbId == event.dbId)[0];
|
||||||
|
if (lightList != undefined && lightList != null && lightList.length > 0) {
|
||||||
|
//setLightOpenOrClose(false, myData.device_guid);//關燈測試
|
||||||
|
//setLightValues(myData.device_guid, 20, 0x00ff00);//更改燈光顏色和強度的測試
|
||||||
|
moveViewToDevice(myData.forge_dbid);//移動視角至該設備
|
||||||
|
}
|
||||||
$(selector).trigger("autodesk:click:sprite", { event, myData });
|
$(selector).trigger("autodesk:click:sprite", { event, myData });
|
||||||
} else {
|
} else {
|
||||||
$(selector).trigger("autodesk:clickOut:sprite", { event });
|
$(selector).trigger("autodesk:clickOut:sprite", { event });
|
||||||
@ -817,7 +821,6 @@ async function addHotPoint(data) {
|
|||||||
// if (dbIds.length > 0) {
|
// if (dbIds.length > 0) {
|
||||||
// // 處理已選取元件的邏輯
|
// // 處理已選取元件的邏輯
|
||||||
// $(selector).trigger("autodesk:click:sprite", event);
|
// $(selector).trigger("autodesk:click:sprite", event);
|
||||||
// //openHotspotModal();
|
|
||||||
// console.log(`------ name: ${viewer.model.getInstanceTree().getNodeName(dbIds)} , dbId: ${dbIds}`);//, id: ${event.clickInfo.object.id}, position.x: ${event.clickInfo.point.x}, y: ${event.clickInfo.point.y}, z: ${event.clickInfo.point.z}
|
// console.log(`------ name: ${viewer.model.getInstanceTree().getNodeName(dbIds)} , dbId: ${dbIds}`);//, id: ${event.clickInfo.object.id}, position.x: ${event.clickInfo.point.x}, y: ${event.clickInfo.point.y}, z: ${event.clickInfo.point.z}
|
||||||
// } else {
|
// } else {
|
||||||
// // 處理沒有選取元件的邏輯
|
// // 處理沒有選取元件的邏輯
|
||||||
@ -864,22 +867,7 @@ async function changeScaleForHotspot(dbId, type = true) {
|
|||||||
|
|
||||||
//------------------- end --------------
|
//------------------- end --------------
|
||||||
|
|
||||||
//----------------- 開關熱點小視窗 ----------------------
|
|
||||||
function openHotspotModal() {
|
|
||||||
//var modal = document.getElementById("hotspotModal");
|
|
||||||
//modal.style.display = "block";
|
|
||||||
//$("#pills-register-tab").removeClass("active");
|
|
||||||
//$("#pills-alarm-tab").removeClass("active");
|
|
||||||
//$("#pills-operation-tab").removeClass("active");
|
|
||||||
//$("#pills-login-tab").tab("show");
|
|
||||||
}
|
|
||||||
|
|
||||||
function closeHotspotModal() {
|
|
||||||
//var modal = document.getElementById("hotspotModal");
|
|
||||||
//modal.style.display = "none";
|
|
||||||
|
|
||||||
}
|
|
||||||
//------------------ end --------------------------------
|
|
||||||
|
|
||||||
//------------------ 熱圖 -------------------------------
|
//------------------ 熱圖 -------------------------------
|
||||||
async function loadHeatmaps(model) {
|
async function loadHeatmaps(model) {
|
||||||
@ -1106,6 +1094,7 @@ async function newLight(lightPosition) {
|
|||||||
//聚光燈
|
//聚光燈
|
||||||
var spotLight = new THREE.SpotLight(0xffffff, 200, 20, 0.6, 0.5, 10);
|
var spotLight = new THREE.SpotLight(0xffffff, 200, 20, 0.6, 0.5, 10);
|
||||||
spotLight.position.set(lightPosition.x, lightPosition.y, lightPosition.z);
|
spotLight.position.set(lightPosition.x, lightPosition.y, lightPosition.z);
|
||||||
|
console.log(lightPosition.x, lightPosition.y, lightPosition.z)
|
||||||
spotLight.castShadow = false;
|
spotLight.castShadow = false;
|
||||||
spotLight.visible = true;
|
spotLight.visible = true;
|
||||||
spotLight.target.position.set(lightPosition.x, lightPosition.y, lightPosition.z-20);
|
spotLight.target.position.set(lightPosition.x, lightPosition.y, lightPosition.z-20);
|
||||||
@ -1117,25 +1106,24 @@ async function newLight(lightPosition) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//調整燈光 強度、顏色
|
//調整燈光 強度、顏色
|
||||||
async function setLightValues(dbid, intensity, color) {
|
async function setLightValues(deviceGuid, intensity, color) {
|
||||||
for (var i = 0; i < lightList.length; i++) {
|
for (var i = 0; i < lightList.length; i++) {
|
||||||
if (lightList[i].dbid == dbid) {
|
if (lightList[i].device_guid == deviceGuid) {
|
||||||
lightList[i].spotLight.intensity = intensity;
|
lightList[i].lightObject.intensity = intensity;
|
||||||
|
|
||||||
var tempcolor = new THREE.Color().setHex(color);
|
var tempcolor = new THREE.Color().setHex(color);
|
||||||
lightList[i].spotLight.color = tempcolor;
|
lightList[i].lightObject.color = tempcolor;
|
||||||
viewer.impl.sceneUpdated(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
viewer.impl.sceneUpdated(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//燈光開關
|
//燈光開關
|
||||||
function setLightOpenOrClose(value, light) {
|
async function setLightOpenOrClose(value, deviceGuid) {
|
||||||
if (value) {
|
for (var i = 0; i < lightList.length; i++) {
|
||||||
light.visible = true;
|
if (lightList[i].device_guid == deviceGuid) {
|
||||||
}
|
lightList[i].lightObject.visible = value;
|
||||||
else {
|
}
|
||||||
light.visible = false;
|
|
||||||
}
|
}
|
||||||
viewer.impl.sceneUpdated(true);
|
viewer.impl.sceneUpdated(true);
|
||||||
}
|
}
|
||||||
@ -1166,17 +1154,48 @@ function showAllObjects() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showHeat(selector) {
|
||||||
|
const labels = [
|
||||||
|
`${(10).toFixed(2)}${"°C"}`,
|
||||||
|
`${(40 / 2).toFixed(2)}${"°C"}`,
|
||||||
|
`${(30).toFixed(2)}${"°C"}`
|
||||||
|
];
|
||||||
|
const colorStops = ['blue', 'green', 'yellow', 'red'];
|
||||||
|
createHeatmapRect(labels, colorStops, selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
function createHeatmapRect(labels, colorStops, selector) {
|
||||||
|
if (!$(selector)[0]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const context = $(selector)[0].getContext('2d');
|
||||||
|
let i, len;
|
||||||
|
context.clearRect(0, 0, 300, 50);
|
||||||
|
context.fillStyle = 'back';//white
|
||||||
|
for (i = 0, len = labels.length; i < len; i++) {
|
||||||
|
let x = 10 + 280 * i / (len - 1);
|
||||||
|
if (i === len - 1) {
|
||||||
|
x -= context.measureText(labels[i]).width;
|
||||||
|
}
|
||||||
|
else if (i > 0) {
|
||||||
|
x -= 0.5 * context.measureText(labels[i]).width;
|
||||||
|
}
|
||||||
|
context.fillText(labels[i], x, 10);
|
||||||
|
}
|
||||||
|
const gradient = context.createLinearGradient(0, 0, 300, 0);
|
||||||
|
for (i = 0, len = colorStops.length; i < len; i++) {
|
||||||
|
gradient.addColorStop(i / (len - 1), colorStops[i]);
|
||||||
|
}
|
||||||
|
context.fillStyle = gradient;
|
||||||
|
context.fillRect(10, 20, 280, 20);
|
||||||
|
}
|
||||||
|
|
||||||
//======================== 外部呼叫function ===========================
|
//======================== 外部呼叫function ===========================
|
||||||
//紀錄熱點座標
|
//紀錄熱點座標
|
||||||
function getHopspotPoint(data) {
|
function getHopspotPoint(data) {
|
||||||
myDataList = data;
|
myDataList = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//紀錄燈具座標
|
|
||||||
async function getLightData(data) {
|
|
||||||
lightDataList = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
//呼叫載入熱圖
|
//呼叫載入熱圖
|
||||||
async function toLoadHeatmap(roomArr) {
|
async function toLoadHeatmap(roomArr) {
|
||||||
const model = viewer.model;
|
const model = viewer.model;
|
||||||
@ -1188,4 +1207,15 @@ function setShadowShow(type = false) {
|
|||||||
viewer.impl.sceneUpdated(true);
|
viewer.impl.sceneUpdated(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
//============================= end ===================================
|
//============================= end ===================================
|
||||||
|
|
||||||
|
function moveViewToDevice(letter) {
|
||||||
|
if (letter != "") {
|
||||||
|
viewer.clearSelection();
|
||||||
|
viewer.select(letter);
|
||||||
|
viewer.fitToView([letter]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
viewer.clearSelection();
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,7 @@ var elevatorSpeed;
|
|||||||
var allDbIdsStr;
|
var allDbIdsStr;
|
||||||
let bulbLight;//點燈
|
let bulbLight;//點燈
|
||||||
var spotLight;//聚光燈
|
var spotLight;//聚光燈
|
||||||
|
let testLight;
|
||||||
var myDataList;//設備清單
|
var myDataList;//設備清單
|
||||||
var viewableData;
|
var viewableData;
|
||||||
var dataVizExtn;
|
var dataVizExtn;
|
||||||
@ -12,7 +13,9 @@ var spriteColorRed;
|
|||||||
var levels;//剖面用
|
var levels;//剖面用
|
||||||
var light;
|
var light;
|
||||||
let pointLightHelper;
|
let pointLightHelper;
|
||||||
|
var tagIdDevList = [];//模型設備List: device_number、device_coordinate_3d、forge_dbid
|
||||||
|
var roomDataList = [];//模型房間List: room_id、room_name
|
||||||
|
|
||||||
function launchViewer(urn) {
|
function launchViewer(urn) {
|
||||||
var av = Autodesk.Viewing;
|
var av = Autodesk.Viewing;
|
||||||
var options = {
|
var options = {
|
||||||
@ -139,12 +142,10 @@ function onDocumentLoadSuccess(doc) {
|
|||||||
|
|
||||||
|
|
||||||
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () {
|
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () {
|
||||||
var instanceTree = viewer.model.getData().instanceTree;
|
var instanceTree = viewer.model.getData().instanceTree;
|
||||||
|
var domElem = document.getElementById('all_id');
|
||||||
var domElem = document.getElementById('all_id');
|
allDbIdsStr = Object.keys(instanceTree.nodeAccess.dbIdToIndex);
|
||||||
allDbIdsStr = Object.keys(instanceTree.nodeAccess.dbIdToIndex);
|
domElem.innerText = allDbIdsStr;
|
||||||
domElem.innerText = allDbIdsStr;
|
|
||||||
|
|
||||||
//parseInt(allDbIdsStr[i]
|
//parseInt(allDbIdsStr[i]
|
||||||
//for (var i = 0; i < allDbIdsStr.length; i++) {
|
//for (var i = 0; i < allDbIdsStr.length; i++) {
|
||||||
// //setTransparency(parseInt(allDbIdsStr[i]), 0.2);
|
// //setTransparency(parseInt(allDbIdsStr[i]), 0.2);
|
||||||
@ -161,105 +162,152 @@ function onDocumentLoadSuccess(doc) {
|
|||||||
// })
|
// })
|
||||||
//}
|
//}
|
||||||
|
|
||||||
// ------------------ 取得tag_id底下的nodeId --------------------------------------
|
//// ------------------ 取得tag_id底下的nodeId --------------------------------------
|
||||||
var curDbId = 0;
|
//var curDbId = 0;
|
||||||
var tagId = 0;
|
////var tagId = 0;
|
||||||
var _parentId = 0;
|
////var _parentId = 0;
|
||||||
var _childId = 0;
|
////var _childId = 0;
|
||||||
var itemName = '';
|
////var itemName = '';
|
||||||
var childIdArr = new Array();
|
////var childIdArr = new Array();
|
||||||
let evelMap = new Map();
|
////let evelMap = new Map();
|
||||||
|
|
||||||
let tree = viewer.model.getData().instanceTree;
|
//let tree = viewer.model.getData().instanceTree;
|
||||||
const model = viewer.model;
|
//const model = viewer.model;
|
||||||
const fragList = model.getFragmentList();
|
//const fragList = model.getFragmentList();
|
||||||
|
|
||||||
|
|
||||||
//loadHeatmaps(model);
|
// //loadHeatmaps(model);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////allDbIdsStr.forEach((dbId) => {
|
||||||
|
//// curDbId = parseInt(dbId);
|
||||||
|
//// viewer.getProperties(curDbId, function (e) {
|
||||||
|
//// e.properties.forEach(function (item) {
|
||||||
|
//// if (item.displayName == "tag_id" && e.name == "【電梯】") {
|
||||||
|
|
||||||
|
//// //getFragmentWorldMatrixByNodeId(e.dbId, viewer);
|
||||||
|
//// //let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
||||||
|
|
||||||
|
//// tree.enumNodeFragments(e.dbId, function (frag) {
|
||||||
|
|
||||||
|
//// let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
||||||
|
//// let matrix = new THREE.Matrix4();
|
||||||
|
//// console.log("proxy: " + fragProxy.position);
|
||||||
|
|
||||||
|
//// fragProxy.getWorldMatrix(matrix);
|
||||||
|
|
||||||
|
//// });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//// tagId = e.dbId;
|
||||||
|
//// viewer.getProperties(tagId, function (e2) {
|
||||||
|
//// e2.properties.forEach(function (item2) {
|
||||||
|
//// if (item2.displayName == "child") {
|
||||||
|
//// _parentId = item2.displayValue;
|
||||||
|
|
||||||
|
//// viewer.getProperties(_parentId, function (e3) {
|
||||||
|
//// let itemMap = new Map();
|
||||||
|
//// e3.properties.forEach(function (item3) {
|
||||||
|
//// if (item3.displayName == "child") {
|
||||||
|
//// _childId = item3.displayValue;
|
||||||
|
//// childIdArr.push(_childId);
|
||||||
|
|
||||||
|
//// var n = 0;
|
||||||
|
//// viewer.getProperties(childIdArr[n], function (e5) {
|
||||||
|
//// e5.properties.forEach(function (item5) {
|
||||||
|
//// if (item5.displayName == "Name") {
|
||||||
|
//// itemName = item5.displayValue;
|
||||||
|
//// itemMap.set(childIdArr[0], itemName)
|
||||||
|
//// console.log("childIdArr[0] ", childIdArr[0])
|
||||||
|
//// console.log("item name: ", itemName);
|
||||||
|
//// n += 3;
|
||||||
|
//// }
|
||||||
|
//// });
|
||||||
|
//// })
|
||||||
|
|
||||||
|
//// n = 1;
|
||||||
|
//// viewer.getProperties(childIdArr[n], function (e6) {
|
||||||
|
//// e6.properties.forEach(function (item6) {
|
||||||
|
//// if (item6.displayName == "Name") {
|
||||||
|
//// itemName = item6.displayValue;
|
||||||
|
//// itemMap.set(childIdArr[1], itemName)
|
||||||
|
//// console.log("childIdArr[1] ", childIdArr[1])
|
||||||
|
//// console.log("item name: ", itemName);
|
||||||
|
//// n += 3;
|
||||||
|
//// }
|
||||||
|
//// });
|
||||||
|
//// })
|
||||||
|
|
||||||
|
//// n = 2;
|
||||||
|
//// viewer.getProperties(childIdArr[n], function (e7) {
|
||||||
|
//// e7.properties.forEach(function (item7) {
|
||||||
|
//// if (item7.displayName == "Name") {
|
||||||
|
//// itemName = item7.displayValue;
|
||||||
|
//// itemMap.set(childIdArr[2], itemName)
|
||||||
|
//// console.log("childIdArr[2] ", childIdArr[2])
|
||||||
|
//// console.log("item name: ", itemName);
|
||||||
|
//// n += 3;
|
||||||
|
//// }
|
||||||
|
//// });
|
||||||
|
//// })
|
||||||
|
|
||||||
|
//// }
|
||||||
|
//// });
|
||||||
|
//// evelMap.set(item.displayValue, itemMap)
|
||||||
|
//// })
|
||||||
|
|
||||||
|
//// }
|
||||||
|
//// });
|
||||||
|
//// })
|
||||||
|
//// }
|
||||||
|
//// });
|
||||||
|
|
||||||
|
//// })
|
||||||
|
|
||||||
|
////})
|
||||||
|
|
||||||
//allDbIdsStr.forEach((dbId) => {
|
//allDbIdsStr.forEach((dbId) => {
|
||||||
// curDbId = parseInt(dbId);
|
// curDbId = parseInt(dbId);
|
||||||
// viewer.getProperties(curDbId, function (e) {
|
// viewer.getProperties(curDbId, function (e) {
|
||||||
// e.properties.forEach(function (item) {
|
// e.properties.forEach(function (item) {
|
||||||
// if (item.displayName == "tag_id" && e.name == "【電梯】") {
|
// if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】
|
||||||
|
// if (item.displayValue != "") {
|
||||||
|
// if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {// TPE_B1_ME_M10
|
||||||
|
// console.log("--------------------------------------------------");
|
||||||
|
// console.log("Tag_name dbid: " + e.dbId);
|
||||||
|
// console.log("value: " + item.displayValue);
|
||||||
|
// }
|
||||||
|
// //var v = getFragmentWorldMatrixByNodeId(e.dbId, viewer);
|
||||||
|
// //console.log("v: " + v);
|
||||||
|
|
||||||
|
|
||||||
|
// //tree.enumNodeFragments(e.dbId, function (frag) {
|
||||||
|
// // fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
||||||
|
// // fragProxy.getAnimTransform();
|
||||||
|
// // console.log("postion: " + fragProxy.position + ", fragP: " + fragProxy.fragPosition);
|
||||||
|
// //});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// let bounds = new THREE.Box3();
|
||||||
|
|
||||||
|
// instanceTree.enumNodeFragments(e.dbId, (fragId) => {
|
||||||
|
// let box = new THREE.Box3();
|
||||||
|
// fragList.getWorldBounds(fragId, box);
|
||||||
|
// bounds.union(box);
|
||||||
|
// }, true);
|
||||||
|
// var position = bounds.center();
|
||||||
|
// if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {
|
||||||
|
// console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")");
|
||||||
|
// console.log("--------------------------------------------------");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
// //getFragmentWorldMatrixByNodeId(e.dbId, viewer);
|
// //getFragmentWorldMatrixByNodeId(e.dbId, viewer);
|
||||||
// //let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
// //let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
||||||
|
|
||||||
// tree.enumNodeFragments(e.dbId, function (frag) {
|
|
||||||
|
|
||||||
// let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
|
||||||
// let matrix = new THREE.Matrix4();
|
|
||||||
// console.log("proxy: " + fragProxy.position);
|
|
||||||
|
|
||||||
// fragProxy.getWorldMatrix(matrix);
|
|
||||||
|
|
||||||
// });
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// tagId = e.dbId;
|
|
||||||
// viewer.getProperties(tagId, function (e2) {
|
|
||||||
// e2.properties.forEach(function (item2) {
|
|
||||||
// if (item2.displayName == "child") {
|
|
||||||
// _parentId = item2.displayValue;
|
|
||||||
|
|
||||||
// viewer.getProperties(_parentId, function (e3) {
|
|
||||||
// let itemMap = new Map();
|
|
||||||
// e3.properties.forEach(function (item3) {
|
|
||||||
// if (item3.displayName == "child") {
|
|
||||||
// _childId = item3.displayValue;
|
|
||||||
// childIdArr.push(_childId);
|
|
||||||
|
|
||||||
// var n = 0;
|
|
||||||
// viewer.getProperties(childIdArr[n], function (e5) {
|
|
||||||
// e5.properties.forEach(function (item5) {
|
|
||||||
// if (item5.displayName == "Name") {
|
|
||||||
// itemName = item5.displayValue;
|
|
||||||
// itemMap.set(childIdArr[0], itemName)
|
|
||||||
// console.log("childIdArr[0] ", childIdArr[0])
|
|
||||||
// console.log("item name: ", itemName);
|
|
||||||
// n += 3;
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// })
|
|
||||||
|
|
||||||
// n = 1;
|
|
||||||
// viewer.getProperties(childIdArr[n], function (e6) {
|
|
||||||
// e6.properties.forEach(function (item6) {
|
|
||||||
// if (item6.displayName == "Name") {
|
|
||||||
// itemName = item6.displayValue;
|
|
||||||
// itemMap.set(childIdArr[1], itemName)
|
|
||||||
// console.log("childIdArr[1] ", childIdArr[1])
|
|
||||||
// console.log("item name: ", itemName);
|
|
||||||
// n += 3;
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// })
|
|
||||||
|
|
||||||
// n = 2;
|
|
||||||
// viewer.getProperties(childIdArr[n], function (e7) {
|
|
||||||
// e7.properties.forEach(function (item7) {
|
|
||||||
// if (item7.displayName == "Name") {
|
|
||||||
// itemName = item7.displayValue;
|
|
||||||
// itemMap.set(childIdArr[2], itemName)
|
|
||||||
// console.log("childIdArr[2] ", childIdArr[2])
|
|
||||||
// console.log("item name: ", itemName);
|
|
||||||
// n += 3;
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// })
|
|
||||||
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// evelMap.set(item.displayValue, itemMap)
|
|
||||||
// })
|
|
||||||
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// })
|
|
||||||
// }
|
// }
|
||||||
// });
|
// });
|
||||||
|
|
||||||
@ -267,54 +315,64 @@ function onDocumentLoadSuccess(doc) {
|
|||||||
|
|
||||||
//})
|
//})
|
||||||
|
|
||||||
allDbIdsStr.forEach((dbId) => {
|
////---------------------- end ---------------------------------------------------
|
||||||
curDbId = parseInt(dbId);
|
|
||||||
viewer.getProperties(curDbId, function (e) {
|
// ------------------ 2023.01.06 取得tag_id、底下的nodeId --------------------------------------
|
||||||
e.properties.forEach(function (item) {
|
var curDbId = 0;
|
||||||
if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】
|
|
||||||
if (item.displayValue != "") {
|
let tree = viewer.model.getData().instanceTree;
|
||||||
if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {// TPE_B1_ME_M10
|
const model = viewer.model;
|
||||||
console.log("--------------------------------------------------");
|
const fragList = model.getFragmentList();
|
||||||
console.log("Tag_name dbid: " + e.dbId);
|
|
||||||
console.log("value: " + item.displayValue);
|
|
||||||
|
allDbIdsStr.forEach((dbId) => {
|
||||||
|
curDbId = parseInt(dbId);
|
||||||
|
viewer.getProperties(curDbId, function (e) {
|
||||||
|
e.properties.forEach(function (item) {
|
||||||
|
if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】
|
||||||
|
if (item.displayValue != "") {
|
||||||
|
////if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {// TPE_B1_ME_M10
|
||||||
|
//console.log("--------------------------------------------------");
|
||||||
|
//console.log("Tag_name dbid: " + e.dbId);
|
||||||
|
//console.log("value: " + item.displayValue);
|
||||||
|
////}
|
||||||
|
var str = item.displayValue.split('_');
|
||||||
|
if (str.length == 2) { //兩段為房間 ex: U7F_01
|
||||||
|
roomDataList.push({ room_id: e.dbId, room_name: item.displayValue });
|
||||||
|
}
|
||||||
|
else if (str.length == 8) { //八段為設備 ex: TPE_B1_ME_M10_U7F_NA_FCU_N1
|
||||||
|
//取得座標
|
||||||
|
let bounds = new THREE.Box3();
|
||||||
|
instanceTree.enumNodeFragments(e.dbId, (fragId) => {
|
||||||
|
let box = new THREE.Box3();
|
||||||
|
fragList.getWorldBounds(fragId, box);
|
||||||
|
bounds.union(box);
|
||||||
|
}, true);
|
||||||
|
var position = bounds.center();
|
||||||
|
////if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {
|
||||||
|
//console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")");
|
||||||
|
//console.log("--------------------------------------------------");
|
||||||
|
////}
|
||||||
|
tagIdDevList.push({ device_number: item.displayValue, device_coordinate_3d: '{ "x": ' + (position.x).toFixed(2) + ', "y": ' + (position.y).toFixed(2) + ', "z": ' + (position.z).toFixed(2) + ' }', forge_dbid: e.dbId });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//var v = getFragmentWorldMatrixByNodeId(e.dbId, viewer);
|
|
||||||
//console.log("v: " + v);
|
|
||||||
|
|
||||||
|
|
||||||
//tree.enumNodeFragments(e.dbId, function (frag) {
|
|
||||||
// fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
|
||||||
// fragProxy.getAnimTransform();
|
|
||||||
// console.log("postion: " + fragProxy.position + ", fragP: " + fragProxy.fragPosition);
|
|
||||||
//});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let bounds = new THREE.Box3();
|
|
||||||
|
|
||||||
instanceTree.enumNodeFragments(e.dbId, (fragId) => {
|
|
||||||
let box = new THREE.Box3();
|
|
||||||
fragList.getWorldBounds(fragId, box);
|
|
||||||
bounds.union(box);
|
|
||||||
}, true);
|
|
||||||
var position = bounds.center();
|
|
||||||
if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {
|
|
||||||
console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")");
|
|
||||||
console.log("--------------------------------------------------");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//getFragmentWorldMatrixByNodeId(e.dbId, viewer);
|
});
|
||||||
//let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
|
||||||
|
|
||||||
|
})
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
//---------------------- end ---------------------------------------------------
|
||||||
})
|
|
||||||
|
|
||||||
//---------------------- end ---------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -359,116 +417,51 @@ function onDocumentLoadSuccess(doc) {
|
|||||||
// })
|
// })
|
||||||
|
|
||||||
//})
|
//})
|
||||||
|
|
||||||
|
|
||||||
//let tree = viewer.model.getData().instanceTree;
|
|
||||||
let nodeId = 12112;//12104; //749; //10952;
|
|
||||||
let nodeId2 = 12111;//12105; //750;
|
|
||||||
let nodeId3 = 12110;//12104; //751;
|
|
||||||
|
|
||||||
tree.enumNodeFragments(nodeId, function (frag) {
|
|
||||||
fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
|
||||||
fragProxy.getAnimTransform();
|
|
||||||
let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26
|
|
||||||
|
|
||||||
fragProxy.position = fragPosition
|
// //let tree = viewer.model.getData().instanceTree;
|
||||||
|
//let nodeId = 12112;//12104; //749; //10952;
|
||||||
|
//let nodeId2 = 12111;//12105; //750;
|
||||||
|
//let nodeId3 = 12110;//12104; //751;
|
||||||
|
|
||||||
fragProxy.updateAnimTransform()
|
//tree.enumNodeFragments(nodeId, function (frag) {
|
||||||
|
// fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
||||||
|
// fragProxy.getAnimTransform();
|
||||||
|
// let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26
|
||||||
|
// fragProxy.position = fragPosition
|
||||||
|
// fragProxy.updateAnimTransform()
|
||||||
|
//});
|
||||||
|
//viewer.impl.sceneUpdated(true);
|
||||||
|
|
||||||
});
|
////------------ add -------------
|
||||||
viewer.impl.sceneUpdated(true);
|
//tree.enumNodeFragments(nodeId2, function (frag) {
|
||||||
|
// fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
||||||
|
// fragProxy.getAnimTransform();
|
||||||
|
// let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26
|
||||||
|
|
||||||
//------------ add -------------
|
// fragProxy.position = fragPosition
|
||||||
tree.enumNodeFragments(nodeId2, function (frag) {
|
|
||||||
fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
|
||||||
fragProxy.getAnimTransform();
|
|
||||||
let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26
|
|
||||||
|
|
||||||
fragProxy.position = fragPosition
|
// fragProxy.updateAnimTransform()
|
||||||
|
|
||||||
fragProxy.updateAnimTransform()
|
//});
|
||||||
|
//viewer.impl.sceneUpdated(true);
|
||||||
|
|
||||||
});
|
//tree.enumNodeFragments(nodeId3, function (frag) {
|
||||||
viewer.impl.sceneUpdated(true);
|
// fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
||||||
|
// fragProxy.getAnimTransform();
|
||||||
|
// let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26
|
||||||
|
|
||||||
tree.enumNodeFragments(nodeId3, function (frag) {
|
// fragProxy.position = fragPosition
|
||||||
fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
|
|
||||||
fragProxy.getAnimTransform();
|
|
||||||
let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26
|
|
||||||
|
|
||||||
fragProxy.position = fragPosition
|
// fragProxy.updateAnimTransform()
|
||||||
|
|
||||||
fragProxy.updateAnimTransform()
|
//});
|
||||||
|
//viewer.impl.sceneUpdated(true);
|
||||||
});
|
|
||||||
viewer.impl.sceneUpdated(true);
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
//newLight();
|
||||||
//add toolbar fail
|
//testLight = new THREE.SpotLight();
|
||||||
//function ToolbarExtension(viewer, options) {
|
|
||||||
// Autodesk.Viewing.Extension.call(this, viewer, options);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//ToolbarExtension.prototype = Object.create(Autodesk.Viewing.Extension.prototype);
|
|
||||||
//ToolbarExtension.prototype.constructor = ToolbarExtension;
|
|
||||||
|
|
||||||
//ToolbarExtension.prototype.load = function () {
|
|
||||||
// this.viewer.setLightPreset(6);
|
|
||||||
// this.viewer.setEnvMapBackground(true);
|
|
||||||
// this.viewer.fitToView();
|
|
||||||
// return true;
|
|
||||||
//};
|
|
||||||
|
|
||||||
//ToolbarExtension.prototype.unload = function () {
|
|
||||||
|
|
||||||
//};
|
|
||||||
//Autodesk.Viewing.theExtensionManager.registerExtension('ToolbarExtension', ToolbarExtension);
|
|
||||||
|
|
||||||
//ToolbarExtension.prototype.onToolbarCreated = function (toolbar) {
|
|
||||||
// //alert('TODO: customize Viewer toolbar');
|
|
||||||
|
|
||||||
// var viewer = this.viewer;
|
|
||||||
// var button1 = new Autodesk.Viewing.UI.Button('show-env-bg-button');
|
|
||||||
// button1.onClick = function (e) {
|
|
||||||
// viewer.setEnvMapBackground(true);
|
|
||||||
// };
|
|
||||||
// button1.addClass('show-env-bg-button');
|
|
||||||
// button1.setToolTip('Show Environment');
|
|
||||||
|
|
||||||
// //SubToolbar
|
|
||||||
// this.subToolbar = new Autodesk.Viewing.UI.ControlGroup('my-custom-toolbar');
|
|
||||||
// this.subToolbar.addControl(button1);
|
|
||||||
// toolbar.addControl(this.subToolbar);
|
|
||||||
|
|
||||||
//};
|
|
||||||
|
|
||||||
|
|
||||||
//加入點燈光
|
|
||||||
//bulbLight = new THREE.PointLight(0xffffff, 1, 1, 2);//0xff0000
|
|
||||||
//bulbLight.position.set(-17.33, 51.03, -2.52);//17.880840301513672
|
|
||||||
//bulbLight.castShadow = true;
|
|
||||||
//bulbLight.intensity = 50;
|
|
||||||
//bulbLight.distance = 1;
|
|
||||||
//bulbLight.emissiveIntensity = bulbLight.intensity / Math.pow(0.02, 2.0);
|
|
||||||
//viewer.scene.add(bulbLight);
|
|
||||||
|
|
||||||
//聚光燈
|
|
||||||
//spotLight = new THREE.SpotLight(0xffff00, 80, 10);//0xffffff
|
|
||||||
//spotLight.position.set(-7.58, 18.20, -0.25); //set(-17.33, 51.03, -2.52);
|
|
||||||
//spotLight.castShadow = true;
|
|
||||||
//spotLight.visible = true;
|
|
||||||
//var geom = new THREE.BoxGeometry(); //create 幾何對象 -17.33, 51.03, -4.52
|
|
||||||
//var material = new THREE.MeshLambertMaterial({ color: 0xffff00 });//0xff0000
|
|
||||||
//var cube = new THREE.Mesh(geom, material);
|
|
||||||
//cube.position.set(-7.58, 18.20, -1); //set(-17.33, 51.03, -10);//-4.52
|
|
||||||
//viewer.scene.add(cube);
|
|
||||||
//spotLight.target = cube;
|
|
||||||
//viewer.scene.add(spotLight);
|
|
||||||
|
|
||||||
//light = newLight();
|
|
||||||
newLight();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------- 加入熱點 -----------------
|
//------------------- 加入熱點 -----------------
|
||||||
@ -482,7 +475,8 @@ async function addHotPoint(data) {
|
|||||||
const spriteIcon = "https://d2zqnmauvnpnnm.cloudfront.net/assets-1/images/circle.svg"; //"/img/forge/hotspot.svg";
|
const spriteIcon = "https://d2zqnmauvnpnnm.cloudfront.net/assets-1/images/circle.svg"; //"/img/forge/hotspot.svg";
|
||||||
|
|
||||||
const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon);
|
const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon);
|
||||||
var a = newLight();
|
//var a = newLight();
|
||||||
|
newLight();
|
||||||
//function onSpriteClicked(event) {
|
//function onSpriteClicked(event) {
|
||||||
// console.log(`Sprite clicked: ${event.dbId}`);
|
// console.log(`Sprite clicked: ${event.dbId}`);
|
||||||
//}
|
//}
|
||||||
@ -521,7 +515,7 @@ async function addHotPoint(data) {
|
|||||||
event.hasStopped = true;
|
event.hasStopped = true;
|
||||||
if (event != undefined && event != null) {
|
if (event != undefined && event != null) {
|
||||||
if (event.dbId >= 10 && event.dbId <= 13) {//event.dbId > 0 && event.dbId < 19
|
if (event.dbId >= 10 && event.dbId <= 13) {//event.dbId > 0 && event.dbId < 19
|
||||||
setLightValues(20, 0x00ff00)
|
setLightValues(20, 0x00ff00);
|
||||||
console.log(`Sprite clicked: ${event.dbId}`);
|
console.log(`Sprite clicked: ${event.dbId}`);
|
||||||
openHotspotModal();
|
openHotspotModal();
|
||||||
}
|
}
|
||||||
@ -1387,26 +1381,26 @@ async function newLight() {
|
|||||||
//angle - 光從其上界為 Math.PI / 2 的方向散射的最大角度。
|
//angle - 光從其上界為 Math.PI / 2 的方向散射的最大角度。
|
||||||
//半影 - 由於半影而衰減的聚光燈錐體的百分比。取值介於 0 和 1 之間。默認值為零。
|
//半影 - 由於半影而衰減的聚光燈錐體的百分比。取值介於 0 和 1 之間。默認值為零。
|
||||||
//decay - 光沿光的距離變暗的量。
|
//decay - 光沿光的距離變暗的量。
|
||||||
//spotLight = new THREE.SpotLight(0xff0000, 200, 20, 0.6, 0.5, 10);//0xffffff 80, 10 //15, 20 , Math.PI / 12
|
spotLight = new THREE.SpotLight(0xff0000, 200, 20, 0.6, 0.5, 10);//0xffffff 80, 10 //15, 20 , Math.PI / 12
|
||||||
//spotLight.position.set(43.72, -15.65, -44.96); //set(-17.33, 51.03, -2.52); // -7.58, 18.20, -0.25 -44.96
|
spotLight.position.set(43.72, -15.65, -44.96); //set(-17.33, 51.03, -2.52); // -7.58, 18.20, -0.25 -44.96
|
||||||
//spotLight.castShadow = false;
|
spotLight.castShadow = false;
|
||||||
//spotLight.visible = true;
|
spotLight.visible = true;
|
||||||
|
|
||||||
//spotLight.target.position.set(43.72, -15.65, -60);// -15.65 -48
|
spotLight.target.position.set(43.72, -15.65, -60);// -15.65 -48
|
||||||
//viewer.scene.add(spotLight.target);
|
viewer.scene.add(spotLight.target);
|
||||||
|
|
||||||
//viewer.scene.add(spotLight);
|
viewer.scene.add(spotLight);
|
||||||
|
|
||||||
//viewer.impl.sceneUpdated(true);
|
viewer.impl.sceneUpdated(true);
|
||||||
|
|
||||||
//return spotLight;
|
//return spotLight;
|
||||||
|
|
||||||
//加入點燈光
|
//加入點燈光
|
||||||
bulbLight = new THREE.PointLight(0xff0000, 50, 20, 2);//0xff0000
|
//bulbLight = new THREE.PointLight(0xffffff, 50, 20, 2);//0xff0000
|
||||||
bulbLight.position.set(43.72, -15.65, -44.96);//17.880840301513672
|
//bulbLight.position.set(43.72, -15.65, -44.96);//17.880840301513672
|
||||||
bulbLight.castShadow = true;
|
//bulbLight.castShadow = true;
|
||||||
bulbLight.visible = true;
|
//bulbLight.visible = true;
|
||||||
viewer.scene.add(bulbLight);
|
//viewer.scene.add(bulbLight);
|
||||||
|
|
||||||
//pointLightHelper = new THREE.PointLightHelper(pointLight);
|
//pointLightHelper = new THREE.PointLightHelper(pointLight);
|
||||||
//viewer.scene.add(pointLightHelper);
|
//viewer.scene.add(pointLightHelper);
|
||||||
@ -1439,13 +1433,15 @@ function setLightValues(intensity, color) {// distance, angle, penumbra, decay,
|
|||||||
function setLightOpenOrClose(value) {//, light
|
function setLightOpenOrClose(value) {//, light
|
||||||
if (value) {
|
if (value) {
|
||||||
//light.visible = true;
|
//light.visible = true;
|
||||||
//spotLight.visible = true;
|
spotLight.visible = true;
|
||||||
bulbLight.visible = true;
|
//bulbLight.visible = true;
|
||||||
|
//testLight.visible = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//light.visible = false;
|
//light.visible = false;
|
||||||
//spotLight.visible = false;
|
spotLight.visible = false;
|
||||||
bulbLight.visible = false;
|
//bulbLight.visible = false;
|
||||||
|
//testLight.visible = false;
|
||||||
}
|
}
|
||||||
viewer.impl.sceneUpdated(true);
|
viewer.impl.sceneUpdated(true);
|
||||||
}
|
}
|
||||||
@ -1457,3 +1453,7 @@ function setLightTransparency(value) {
|
|||||||
}
|
}
|
||||||
//------------- end -----------------------------------
|
//------------- end -----------------------------------
|
||||||
|
|
||||||
|
function consoleList() {
|
||||||
|
console.log(tagIdDevList);
|
||||||
|
console.log(roomDataList);
|
||||||
|
}
|
@ -21,27 +21,238 @@ var endPageLoading; // 開始 loading
|
|||||||
window.tolSubList = [];
|
window.tolSubList = [];
|
||||||
|
|
||||||
var user_name = "";
|
var user_name = "";
|
||||||
function subscriptionDevices() {
|
|
||||||
// 用BQL的方式去訂閱
|
class subscriptionDevices {
|
||||||
this.setSubscribeDevicesByBql = function (tempOrdPath) {
|
constructor() {
|
||||||
ordPath = tempOrdPath;
|
this.ordPath = {};
|
||||||
BajaSubscribeDevicesByBql();
|
this.changeCallback = null;
|
||||||
|
this.changeEndCallback = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
setSubscribeDevicesByBql = function (tempOrdPath) {
|
||||||
|
this.ordPath = tempOrdPath;
|
||||||
|
this.BajaSubscribeDevicesByBql();
|
||||||
};
|
};
|
||||||
// BQL去訂閱回傳的Function
|
|
||||||
this.setSubscribeDevicesCallBack = function (callBackFunc) {
|
setSubscribeDevicesCallBack = function (callBackFunc) {
|
||||||
if (callBackFunc != undefined && callBackFunc != null) {
|
if (callBackFunc != undefined && callBackFunc != null) {
|
||||||
baja_subscribe_device_callback_func = callBackFunc;
|
this.changeCallback = callBackFunc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// BQL訂閱結束回傳的Function
|
// BQL訂閱結束回傳的Function
|
||||||
this.setSubscribeDeviceEndCallBack = function (callBackFunc) {
|
setSubscribeDeviceEndCallBack = function (callBackFunc) {
|
||||||
if (callBackFunc != undefined && callBackFunc != null) {
|
if (callBackFunc != undefined && callBackFunc != null) {
|
||||||
baja_subscribe_end_device_callback_func = callBackFunc;
|
this.changeEndCallback = callBackFunc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BajaSubscribeDevicesByBql = function () {
|
||||||
|
let _this = this;
|
||||||
|
require(['baja!'], function (baja) {
|
||||||
|
console.log("進入Function 準備執行BQL訂閱");
|
||||||
|
startPageLoading ? startPageLoading() : ""
|
||||||
|
var init_start = new Date(Date.now());
|
||||||
|
var sub = new baja.Subscriber();
|
||||||
|
|
||||||
|
sub.attach('changed', function (prop) {
|
||||||
|
if (prop.getName() === 'out') {
|
||||||
|
var out_value = this.getOutDisplay();
|
||||||
|
var target_device_number = this.$parent.getDisplayName().split('_').slice(0, 5).join('_');
|
||||||
|
var point_name = this.getDisplayName();
|
||||||
|
|
||||||
|
//依據Facets判斷回傳的內容值為何
|
||||||
|
var facets_split = this.getFacets1().$cEncStr.split('|');
|
||||||
|
var facets_arr = [];
|
||||||
|
facets_split.forEach(function (item, index) {
|
||||||
|
facets_arr.push(item.split('=s:'));
|
||||||
|
});
|
||||||
|
|
||||||
|
var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||||||
|
|
||||||
|
var point_out_split = this.getOutDisplay().split(' ');
|
||||||
|
|
||||||
|
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||||||
|
|
||||||
|
if (key == undefined) {
|
||||||
|
key = point_out_split[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
var modify_target_device = {
|
||||||
|
"device_number": target_device_number ? target_device_number : null,
|
||||||
|
"device_number_full": this.$parent.getSlotPath().$names.join("_"),
|
||||||
|
"point_name": point_name ? point_name : null,
|
||||||
|
"value": key
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_this.changeCallback != undefined && _this.changeCallback != null) {
|
||||||
|
_this.changeCallback(modify_target_device, true); //第2參數用在平面圖,刷新畫面
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, function (err) {
|
||||||
|
console.log(err)
|
||||||
|
});
|
||||||
|
|
||||||
|
//使用bql語法
|
||||||
|
// var building_tag = "H";
|
||||||
|
// var system_tag = "M10";
|
||||||
|
// baja.Ord.make(`ip:greencloud.fic.com.tw|foxs:|station:|slot:/Arena/${building_tag}/${system_tag}|bql:select name, displayname, slotPath, out.value, out from control:ControlPoint`)
|
||||||
|
console.log(`local:|foxs:|station:|slot:/TPE/${_this.ordPath.building_tag}/${_this.ordPath.system_tag}/${_this.ordPath.name_tag}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`);
|
||||||
|
baja.Ord.make(`local:|foxs:|station:|slot:/TPE/${_this.ordPath.building_tag}/${_this.ordPath.system_tag}/${_this.ordPath.name_tag}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`)
|
||||||
|
.get(
|
||||||
|
function (table) {
|
||||||
|
var tableStart, tableFinish;
|
||||||
|
var subStart, subFinish;
|
||||||
|
var component_index = 0;
|
||||||
|
var total_component_index = 0;
|
||||||
|
var totalTargetDevice = [];
|
||||||
|
var readBqlFinish = new Date(Date.now());
|
||||||
|
// $("#readPath-finish-timestamp").html(readBqlFinish.toISOString());
|
||||||
|
// $("#readPath-finish-time").html((readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec");
|
||||||
|
console.log("讀取路徑完成-花費時間", (readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec");
|
||||||
|
table.cursor({
|
||||||
|
before: function () {
|
||||||
|
totalTargetDevice = [];
|
||||||
|
tableStart = new Date(Date.now());
|
||||||
|
$("#table-start-timestamp").html(tableStart.toISOString());
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
each: function (item, index) {
|
||||||
|
if (index < 1) {
|
||||||
|
subStart = new Date(Date.now());
|
||||||
|
$("#sub-start").html(subStart.toISOString());
|
||||||
|
}
|
||||||
|
$("#sub-number").html(index + 1);
|
||||||
|
total_component_index = index;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var target_device_number_split = this.getDisplay("slotPath").split('/');
|
||||||
|
var target_device_number = target_device_number_split[8];
|
||||||
|
//console.log(target_device_number);
|
||||||
|
var point_name = this.getDisplay("name");
|
||||||
|
var facets = this.getDisplay("facets");
|
||||||
|
|
||||||
|
//依據Facets判斷回傳的內容值為何
|
||||||
|
var facets_split = facets.split(',');
|
||||||
|
var facets_arr = [];
|
||||||
|
facets_split.forEach(function (item, index) {
|
||||||
|
facets_arr.push(item.split('='));
|
||||||
|
});
|
||||||
|
|
||||||
|
facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||||||
|
|
||||||
|
var point_out_split = this.getDisplay("out").split(' ');
|
||||||
|
|
||||||
|
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||||||
|
|
||||||
|
if (key == undefined) {
|
||||||
|
key = point_out_split[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
var modify_target_device = {
|
||||||
|
"device_number": target_device_number ? target_device_number : null,
|
||||||
|
"device_number_full": this.getDisplay("slotPath").split("slot:")[1].split('/').slice(1, -1).join("_"),
|
||||||
|
"point_name": point_name ? point_name : null,
|
||||||
|
"value": key
|
||||||
|
}
|
||||||
|
totalTargetDevice.push(modify_target_device);
|
||||||
|
//取得component當下就更新設備點位
|
||||||
|
if (_this.changeCallback != undefined && _this.changeCallback != null) {
|
||||||
|
_this.changeCallback(modify_target_device);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath"))
|
||||||
|
.get()
|
||||||
|
.then(function (component) {
|
||||||
|
component_index++;
|
||||||
|
var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
|
||||||
|
var point_name = component.getDisplayName();
|
||||||
|
|
||||||
|
// //依據Facets判斷回傳的內容值為何
|
||||||
|
// var facets_split = component.getFacets1().$cEncStr.split('|');
|
||||||
|
// var facets_arr = [];
|
||||||
|
// facets_split.forEach(function (item, index) {
|
||||||
|
// facets_arr.push(item.split('=s:'));
|
||||||
|
// });
|
||||||
|
|
||||||
|
// var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||||||
|
|
||||||
|
// var point_out_split = component.getOutDisplay().split(' ');
|
||||||
|
|
||||||
|
// let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||||||
|
|
||||||
|
// if (key == undefined) {
|
||||||
|
// key = point_out_split[0];
|
||||||
|
// }
|
||||||
|
|
||||||
|
// var modify_target_device = {
|
||||||
|
// "device_number": target_device_number ? target_device_number : null,
|
||||||
|
// "point_name": point_name ? point_name : null,
|
||||||
|
// "value": key
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //取得component當下就更新設備點位
|
||||||
|
// if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) {
|
||||||
|
// if (component_index == total_component_index) {
|
||||||
|
// baja_subscribe_device_callback_func(modify_target_device, true);
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// baja_subscribe_device_callback_func(modify_target_device);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
sub.subscribe({
|
||||||
|
comps: component,
|
||||||
|
});
|
||||||
|
tolSubList.push(sub);
|
||||||
|
subFinish = new Date(Date.now());
|
||||||
|
$("#sub-end").html(subFinish.toISOString());
|
||||||
|
$("#sub-time").html((subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
||||||
|
// console.log("訂閱完成時間", (subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
||||||
|
});
|
||||||
|
},
|
||||||
|
after: function () {
|
||||||
|
tableFinish = new Date(Date.now());
|
||||||
|
// $("#table-finish-timestamp").html(tableFinish.toISOString());
|
||||||
|
// $("#table-time").html((tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
||||||
|
//取得component當下就更新設備點位
|
||||||
|
if (_this.changeEndCallback != undefined && _this.changeEndCallback != null) {
|
||||||
|
_this.changeEndCallback(totalTargetDevice);
|
||||||
|
}
|
||||||
|
endPageLoading ? endPageLoading() : ""
|
||||||
|
console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
||||||
|
},
|
||||||
|
limit: -1,
|
||||||
|
offset: 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//function subscriptionDevices() {
|
||||||
|
// // 用BQL的方式去訂閱
|
||||||
|
// this.setSubscribeDevicesByBql = function (tempOrdPath) {
|
||||||
|
// ordPath = tempOrdPath;
|
||||||
|
// BajaSubscribeDevicesByBql();
|
||||||
|
// };
|
||||||
|
// // BQL去訂閱回傳的Function
|
||||||
|
// this.setSubscribeDevicesCallBack = function (callBackFunc) {
|
||||||
|
// if (callBackFunc != undefined && callBackFunc != null) {
|
||||||
|
// baja_subscribe_device_callback_func = callBackFunc;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // BQL訂閱結束回傳的Function
|
||||||
|
// this.setSubscribeDeviceEndCallBack = function (callBackFunc) {
|
||||||
|
// if (callBackFunc != undefined && callBackFunc != null) {
|
||||||
|
// baja_subscribe_end_device_callback_func = callBackFunc;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
function subscriptionAlarms() {
|
function subscriptionAlarms() {
|
||||||
// 用BQL的方式去訂閱
|
// 用BQL的方式去訂閱
|
||||||
this.setSubscribeAlarmsByBql = function (tempOrdPath) {
|
this.setSubscribeAlarmsByBql = function (tempOrdPath) {
|
||||||
@ -96,191 +307,191 @@ function MyBaja() {
|
|||||||
/**
|
/**
|
||||||
* 使用者透過BQL指定路徑去訂閱設備點位
|
* 使用者透過BQL指定路徑去訂閱設備點位
|
||||||
*/
|
*/
|
||||||
function BajaSubscribeDevicesByBql() {
|
//function BajaSubscribeDevicesByBql() {
|
||||||
|
|
||||||
|
|
||||||
require(['baja!'], function (baja) {
|
// require(['baja!'], function (baja) {
|
||||||
console.log("進入Function 準備執行BQL訂閱");
|
// console.log("進入Function 準備執行BQL訂閱");
|
||||||
startPageLoading ? startPageLoading() : ""
|
// startPageLoading ? startPageLoading() : ""
|
||||||
var init_start = new Date(Date.now());
|
// var init_start = new Date(Date.now());
|
||||||
var sub = new baja.Subscriber();
|
// var sub = new baja.Subscriber();
|
||||||
|
|
||||||
sub.attach('changed', function (prop) {
|
// sub.attach('changed', function (prop) {
|
||||||
if (prop.getName() === 'out') {
|
// if (prop.getName() === 'out') {
|
||||||
var out_value = this.getOutDisplay();
|
// var out_value = this.getOutDisplay();
|
||||||
var target_device_number = this.$parent.getDisplayName().split('_').slice(0, 5).join('_');
|
// var target_device_number = this.$parent.getDisplayName().split('_').slice(0, 5).join('_');
|
||||||
var point_name = this.getDisplayName();
|
// var point_name = this.getDisplayName();
|
||||||
|
|
||||||
//依據Facets判斷回傳的內容值為何
|
// //依據Facets判斷回傳的內容值為何
|
||||||
var facets_split = this.getFacets1().$cEncStr.split('|');
|
// var facets_split = this.getFacets1().$cEncStr.split('|');
|
||||||
var facets_arr = [];
|
// var facets_arr = [];
|
||||||
facets_split.forEach(function (item, index) {
|
// facets_split.forEach(function (item, index) {
|
||||||
facets_arr.push(item.split('=s:'));
|
// facets_arr.push(item.split('=s:'));
|
||||||
});
|
// });
|
||||||
|
|
||||||
var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
// var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||||||
|
|
||||||
var point_out_split = this.getOutDisplay().split(' ');
|
// var point_out_split = this.getOutDisplay().split(' ');
|
||||||
|
|
||||||
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
// let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||||||
|
|
||||||
if (key == undefined) {
|
// if (key == undefined) {
|
||||||
key = point_out_split[0];
|
// key = point_out_split[0];
|
||||||
}
|
// }
|
||||||
|
|
||||||
var modify_target_device = {
|
// var modify_target_device = {
|
||||||
"device_number": target_device_number ? target_device_number : null,
|
// "device_number": target_device_number ? target_device_number : null,
|
||||||
"device_number_full": this.$parent.getSlotPath().$names.join("_"),
|
// "device_number_full": this.$parent.getSlotPath().$names.join("_"),
|
||||||
"point_name": point_name ? point_name : null,
|
// "point_name": point_name ? point_name : null,
|
||||||
"value": key
|
// "value": key
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) {
|
// if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) {
|
||||||
baja_subscribe_device_callback_func(modify_target_device, true); //第2參數用在平面圖,刷新畫面
|
// baja_subscribe_device_callback_func(modify_target_device, true); //第2參數用在平面圖,刷新畫面
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}, function (err) {
|
// }, function (err) {
|
||||||
console.log(err)
|
// console.log(err)
|
||||||
});
|
// });
|
||||||
|
|
||||||
//使用bql語法
|
// //使用bql語法
|
||||||
// var building_tag = "H";
|
// // var building_tag = "H";
|
||||||
// var system_tag = "M10";
|
// // var system_tag = "M10";
|
||||||
// baja.Ord.make(`ip:greencloud.fic.com.tw|foxs:|station:|slot:/Arena/${building_tag}/${system_tag}|bql:select name, displayname, slotPath, out.value, out from control:ControlPoint`)
|
// // baja.Ord.make(`ip:greencloud.fic.com.tw|foxs:|station:|slot:/Arena/${building_tag}/${system_tag}|bql:select name, displayname, slotPath, out.value, out from control:ControlPoint`)
|
||||||
console.log(`local:|foxs:|station:|slot:/${ordPath.area_tag}/${ordPath.building_tag}/${ordPath.system_tag}/${ordPath.name_tag}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`);
|
// console.log(`local:|foxs:|station:|slot:/TPE/${ordPath.building_tag}/${ordPath.system_tag}/${ordPath.name_tag}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`);
|
||||||
baja.Ord.make(`local:|foxs:|station:|slot:/${ordPath.area_tag}/${ordPath.building_tag}/${ordPath.system_tag}/${ordPath.name_tag}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`)
|
// baja.Ord.make(`local:|foxs:|station:|slot:/TPE/${ordPath.building_tag}/${ordPath.system_tag}/${ordPath.name_tag}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`)
|
||||||
.get(
|
// .get(
|
||||||
function (table) {
|
// function (table) {
|
||||||
var tableStart, tableFinish;
|
// var tableStart, tableFinish;
|
||||||
var subStart, subFinish;
|
// var subStart, subFinish;
|
||||||
var component_index = 0;
|
// var component_index = 0;
|
||||||
var total_component_index = 0;
|
// var total_component_index = 0;
|
||||||
var totalTargetDevice = [];
|
// var totalTargetDevice = [];
|
||||||
var readBqlFinish = new Date(Date.now());
|
// var readBqlFinish = new Date(Date.now());
|
||||||
// $("#readPath-finish-timestamp").html(readBqlFinish.toISOString());
|
// // $("#readPath-finish-timestamp").html(readBqlFinish.toISOString());
|
||||||
// $("#readPath-finish-time").html((readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec");
|
// // $("#readPath-finish-time").html((readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec");
|
||||||
console.log("讀取路徑完成-花費時間", (readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec");
|
// console.log("讀取路徑完成-花費時間", (readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec");
|
||||||
table.cursor({
|
// table.cursor({
|
||||||
before: function () {
|
// before: function () {
|
||||||
totalTargetDevice = [];
|
// totalTargetDevice = [];
|
||||||
tableStart = new Date(Date.now());
|
// tableStart = new Date(Date.now());
|
||||||
$("#table-start-timestamp").html(tableStart.toISOString());
|
// $("#table-start-timestamp").html(tableStart.toISOString());
|
||||||
render_start = new Date(Date.now());
|
// render_start = new Date(Date.now());
|
||||||
|
|
||||||
},
|
// },
|
||||||
each: function (item, index) {
|
// each: function (item, index) {
|
||||||
if (index < 1) {
|
// if (index < 1) {
|
||||||
subStart = new Date(Date.now());
|
// subStart = new Date(Date.now());
|
||||||
$("#sub-start").html(subStart.toISOString());
|
// $("#sub-start").html(subStart.toISOString());
|
||||||
}
|
// }
|
||||||
$("#sub-number").html(index + 1);
|
// $("#sub-number").html(index + 1);
|
||||||
total_component_index = index;
|
// total_component_index = index;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var target_device_number_split = this.getDisplay("slotPath").split('/');
|
// var target_device_number_split = this.getDisplay("slotPath").split('/');
|
||||||
var target_device_number = target_device_number_split[8];
|
// var target_device_number = target_device_number_split[8];
|
||||||
//console.log(target_device_number);
|
// //console.log(target_device_number);
|
||||||
var point_name = this.getDisplay("name");
|
// var point_name = this.getDisplay("name");
|
||||||
var facets = this.getDisplay("facets");
|
// var facets = this.getDisplay("facets");
|
||||||
|
|
||||||
//依據Facets判斷回傳的內容值為何
|
// //依據Facets判斷回傳的內容值為何
|
||||||
var facets_split = facets.split(',');
|
// var facets_split = facets.split(',');
|
||||||
var facets_arr = [];
|
// var facets_arr = [];
|
||||||
facets_split.forEach(function (item, index) {
|
// facets_split.forEach(function (item, index) {
|
||||||
facets_arr.push(item.split('='));
|
// facets_arr.push(item.split('='));
|
||||||
});
|
// });
|
||||||
|
|
||||||
facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
// facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||||||
|
|
||||||
var point_out_split = this.getDisplay("out").split(' ');
|
// var point_out_split = this.getDisplay("out").split(' ');
|
||||||
|
|
||||||
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
// let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||||||
|
|
||||||
if (key == undefined) {
|
// if (key == undefined) {
|
||||||
key = point_out_split[0];
|
// key = point_out_split[0];
|
||||||
}
|
// }
|
||||||
|
|
||||||
var modify_target_device = {
|
// var modify_target_device = {
|
||||||
"device_number": target_device_number ? target_device_number : null,
|
// "device_number": target_device_number ? target_device_number : null,
|
||||||
"device_number_full": this.getDisplay("slotPath").split("slot:")[1].split('/').slice(1, -1).join("_"),
|
// "device_number_full": this.getDisplay("slotPath").split("slot:")[1].split('/').slice(1, -1).join("_"),
|
||||||
"point_name": point_name ? point_name : null,
|
// "point_name": point_name ? point_name : null,
|
||||||
"value": key
|
// "value": key
|
||||||
}
|
// }
|
||||||
totalTargetDevice.push(modify_target_device);
|
// totalTargetDevice.push(modify_target_device);
|
||||||
//取得component當下就更新設備點位
|
// //取得component當下就更新設備點位
|
||||||
if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) {
|
// if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) {
|
||||||
baja_subscribe_device_callback_func(modify_target_device);
|
// baja_subscribe_device_callback_func(modify_target_device);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath"))
|
// baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath"))
|
||||||
.get()
|
// .get()
|
||||||
.then(function (component) {
|
// .then(function (component) {
|
||||||
component_index++;
|
// component_index++;
|
||||||
var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
|
// var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
|
||||||
var point_name = component.getDisplayName();
|
// var point_name = component.getDisplayName();
|
||||||
|
|
||||||
// //依據Facets判斷回傳的內容值為何
|
// // //依據Facets判斷回傳的內容值為何
|
||||||
// var facets_split = component.getFacets1().$cEncStr.split('|');
|
// // var facets_split = component.getFacets1().$cEncStr.split('|');
|
||||||
// var facets_arr = [];
|
// // var facets_arr = [];
|
||||||
// facets_split.forEach(function (item, index) {
|
// // facets_split.forEach(function (item, index) {
|
||||||
// facets_arr.push(item.split('=s:'));
|
// // facets_arr.push(item.split('=s:'));
|
||||||
// });
|
// // });
|
||||||
|
|
||||||
// var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
// // var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||||||
|
|
||||||
// var point_out_split = component.getOutDisplay().split(' ');
|
// // var point_out_split = component.getOutDisplay().split(' ');
|
||||||
|
|
||||||
// let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
// // let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||||||
|
|
||||||
// if (key == undefined) {
|
// // if (key == undefined) {
|
||||||
// key = point_out_split[0];
|
// // key = point_out_split[0];
|
||||||
// }
|
// // }
|
||||||
|
|
||||||
// var modify_target_device = {
|
// // var modify_target_device = {
|
||||||
// "device_number": target_device_number ? target_device_number : null,
|
// // "device_number": target_device_number ? target_device_number : null,
|
||||||
// "point_name": point_name ? point_name : null,
|
// // "point_name": point_name ? point_name : null,
|
||||||
// "value": key
|
// // "value": key
|
||||||
// }
|
// // }
|
||||||
|
|
||||||
// //取得component當下就更新設備點位
|
// // //取得component當下就更新設備點位
|
||||||
// if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) {
|
// // if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) {
|
||||||
// if (component_index == total_component_index) {
|
// // if (component_index == total_component_index) {
|
||||||
// baja_subscribe_device_callback_func(modify_target_device, true);
|
// // baja_subscribe_device_callback_func(modify_target_device, true);
|
||||||
// }
|
// // }
|
||||||
// else {
|
// // else {
|
||||||
// baja_subscribe_device_callback_func(modify_target_device);
|
// // baja_subscribe_device_callback_func(modify_target_device);
|
||||||
// }
|
// // }
|
||||||
// }
|
// // }
|
||||||
|
|
||||||
sub.subscribe({
|
// sub.subscribe({
|
||||||
comps: component,
|
// comps: component,
|
||||||
});
|
// });
|
||||||
tolSubList.push(sub);
|
// tolSubList.push(sub);
|
||||||
subFinish = new Date(Date.now());
|
// subFinish = new Date(Date.now());
|
||||||
$("#sub-end").html(subFinish.toISOString());
|
// $("#sub-end").html(subFinish.toISOString());
|
||||||
$("#sub-time").html((subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
// $("#sub-time").html((subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
||||||
// console.log("訂閱完成時間", (subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
// // console.log("訂閱完成時間", (subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
||||||
});
|
// });
|
||||||
},
|
// },
|
||||||
after: function () {
|
// after: function () {
|
||||||
tableFinish = new Date(Date.now());
|
// tableFinish = new Date(Date.now());
|
||||||
// $("#table-finish-timestamp").html(tableFinish.toISOString());
|
// // $("#table-finish-timestamp").html(tableFinish.toISOString());
|
||||||
// $("#table-time").html((tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
// // $("#table-time").html((tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
||||||
//取得component當下就更新設備點位
|
// //取得component當下就更新設備點位
|
||||||
if (baja_subscribe_end_device_callback_func != undefined && baja_subscribe_end_device_callback_func != null) {
|
// if (baja_subscribe_end_device_callback_func != undefined && baja_subscribe_end_device_callback_func != null) {
|
||||||
baja_subscribe_end_device_callback_func(totalTargetDevice);
|
// baja_subscribe_end_device_callback_func(totalTargetDevice);
|
||||||
}
|
// }
|
||||||
endPageLoading ? endPageLoading() : ""
|
// endPageLoading ? endPageLoading() : ""
|
||||||
console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
// console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
||||||
},
|
// },
|
||||||
limit: -1,
|
// limit: -1,
|
||||||
offset: 0
|
// offset: 0
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
})
|
// })
|
||||||
}
|
//}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 使用者透過BQL指定路徑去訂閱Alarm
|
* 使用者透過BQL指定路徑去訂閱Alarm
|
||||||
@ -296,7 +507,7 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
|
|||||||
var sourceState = (this.$map.$map.in10.$val.$map.$map.value.$display) == 'true' ? "Offnormal" : "Normal";
|
var sourceState = (this.$map.$map.in10.$val.$map.$map.value.$display) == 'true' ? "Offnormal" : "Normal";
|
||||||
|
|
||||||
var modify_target_device = {
|
var modify_target_device = {
|
||||||
"system": ordPathForAlarm.area_tag + "_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
|
"system": "TPE_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
|
||||||
"sourceState": sourceState ? sourceState : null
|
"sourceState": sourceState ? sourceState : null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,8 +518,8 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
//使用bql語法
|
//使用bql語法
|
||||||
console.log(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`);
|
console.log(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, normalTime where alarmData.sourceName like '%TPE_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`);
|
||||||
baja.Ord.make(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`)
|
baja.Ord.make(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%TPE_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`)
|
||||||
.get(
|
.get(
|
||||||
function (table) {
|
function (table) {
|
||||||
var tableStart, tableFinish;
|
var tableStart, tableFinish;
|
||||||
@ -338,7 +549,7 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
|
|||||||
var normalTime = this.getDisplay("normalTime");
|
var normalTime = this.getDisplay("normalTime");
|
||||||
|
|
||||||
var modify_target_device = {
|
var modify_target_device = {
|
||||||
"system": ordPathForAlarm.area_tag + "_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
|
"system": "TPE_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
|
||||||
"sourceState": sourceState ? sourceState : null
|
"sourceState": sourceState ? sourceState : null
|
||||||
}
|
}
|
||||||
totalTargetDevice.push(modify_target_device);
|
totalTargetDevice.push(modify_target_device);
|
||||||
|
@ -368,16 +368,29 @@ function dayToChiDay(num) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 取得現在或前後時間,輸出單位依據 type
|
// 取得現在或前後時間,輸出單位依據 type
|
||||||
function getTimeByType(type = null, cal = 0) {
|
function getTimeByType(type = null, cal = 0, unit = "d") {
|
||||||
let now = new Date();
|
let now = new Date();
|
||||||
return strToDate(now, type, cal);
|
return strToDate(now, type, cal, unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 取得某當下時間或前後時間,輸出單位依據 type
|
// 取得某當下時間或前後時間,輸出單位依據 type
|
||||||
function strToDate(text, type = null, cal = 0) {
|
function strToDate(text, type = null, cal = 0, unit = "d") {
|
||||||
let calDay = function (_d, _cal) {
|
let dec = 24 * 60 * 60 * 1000;
|
||||||
return new Date(_d.getTime() + (cal * 24 * 60 * 60 * 1000));
|
|
||||||
|
if (unit == "d") {
|
||||||
|
dec = 24 * 60 * 60 * 1000;
|
||||||
|
} else if (unit == "h") {
|
||||||
|
dec = 60 * 60 * 1000;
|
||||||
|
} else if (unit == "m") {
|
||||||
|
dec = 60 * 1000;
|
||||||
|
} else if (unit == "s") {
|
||||||
|
dec = 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let calDay = function (_d, _cal) {
|
||||||
|
return new Date(_d.getTime() + (cal * dec));
|
||||||
|
}
|
||||||
|
|
||||||
let tarDate = new Date(text);
|
let tarDate = new Date(text);
|
||||||
let result = 0;
|
let result = 0;
|
||||||
if (type == "year") {
|
if (type == "year") {
|
||||||
@ -394,6 +407,23 @@ function strToDate(text, type = null, cal = 0) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function dateRanCutPart(start, end, cutNum) {
|
||||||
|
let sTime = (new Date(start)).getTime();
|
||||||
|
let eTime = (new Date(end)).getTime();
|
||||||
|
let cutTimeArr = [];
|
||||||
|
if (sTime < eTime) return [];
|
||||||
|
|
||||||
|
|
||||||
|
let partNum = (sTime - eTime) / cutNum;
|
||||||
|
for (let i = eTime; i <= sTime; i = i + partNum) {
|
||||||
|
cutTimeArr.push(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
cutTimeArr.forEach(x => new Date(x));
|
||||||
|
|
||||||
|
return cutTimeArr;
|
||||||
|
}
|
||||||
|
|
||||||
function isJSON(str) {
|
function isJSON(str) {
|
||||||
try {
|
try {
|
||||||
JSON.parse(str);
|
JSON.parse(str);
|
||||||
|
@ -307,7 +307,14 @@ function displayDate(dateTime, dateType = "YMdHms", locale = 'zh-TW') {
|
|||||||
if (dateTime) {
|
if (dateTime) {
|
||||||
let regex = /^\/Date\((\d+)\)\/$/gm;
|
let regex = /^\/Date\((\d+)\)\/$/gm;
|
||||||
|
|
||||||
let t = Date.parse(dateTime); //若從資料庫回傳 /Date(xxxxxxxxxxxxxx)/ DateTime格式
|
let t = null; //若從資料庫回傳 /Date(xxxxxxxxxxxxxx)/ DateTime格式
|
||||||
|
|
||||||
|
if (typeof dateTime == "number" && dateTime > 1000000) {
|
||||||
|
dateTime = new Date(dateTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
t = Date.parse(dateTime);
|
||||||
|
|
||||||
if (regex.test(dateTime)) {
|
if (regex.test(dateTime)) {
|
||||||
t = parseInt(dateTime.replace(regex, '$1'));
|
t = parseInt(dateTime.replace(regex, '$1'));
|
||||||
}
|
}
|
||||||
@ -354,9 +361,30 @@ function displayDate(dateTime, dateType = "YMdHms", locale = 'zh-TW') {
|
|||||||
hour = d.getHours();
|
hour = d.getHours();
|
||||||
minute = d.getMinutes();
|
minute = d.getMinutes();
|
||||||
}
|
}
|
||||||
|
|
||||||
date = [year, String(month).padStart(2, '0'), String(day).padStart(2, '0')].filter(n => n).join("/");
|
date = [year, String(month).padStart(2, '0'), String(day).padStart(2, '0')].filter(n => n).join("/");
|
||||||
time = [String(hour).padStart(2, '0'), String(minute).padStart(2, '0')].filter(n => n).join(":");
|
|
||||||
result = date.toString() + " " + time.toString();
|
time = [String(hour).padStart(2, '0'), String(minute).padStart(2, '0')];
|
||||||
|
|
||||||
|
if (dateType != "date" && dateType != "time" && dateType != "datetime") {
|
||||||
|
let showArr = [];
|
||||||
|
if (year) showArr.push(year);
|
||||||
|
if (month) showArr.push(month.toString().padStart(2, '0'));
|
||||||
|
if (day) showArr.push(day.toString().padStart(2, '0'));
|
||||||
|
if (showArr.length != 0) {
|
||||||
|
result += showArr.join("/");
|
||||||
|
showArr = [];
|
||||||
|
}
|
||||||
|
if (hour) showArr.push(hour.toString().padStart(2, '0'));
|
||||||
|
if (minute) showArr.push(minute.toString().padStart(2, '0'));
|
||||||
|
if (second) showArr.push(second.toString().padStart(2, '0'));
|
||||||
|
if (millisecond) showArr.push(millisecond.toString().padStart(3, '0'));
|
||||||
|
if (showArr.length != 0) {
|
||||||
|
result += " " + showArr.join(":");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result = date.toString() + " " + time.toString();
|
||||||
|
}
|
||||||
|
|
||||||
if (dateType == "date") {
|
if (dateType == "date") {
|
||||||
result = date.toString();
|
result = date.toString();
|
||||||
|
@ -103,7 +103,7 @@ class YourTeamNavbar {
|
|||||||
$("[data-toggle=navbar]").each((idx, ele) => {
|
$("[data-toggle=navbar]").each((idx, ele) => {
|
||||||
let target = $(ele).data("target");
|
let target = $(ele).data("target");
|
||||||
if ($(this.element)[0] == $(target)[0]) {
|
if ($(this.element)[0] == $(target)[0]) {
|
||||||
$(ele).off("click").on("click", () => {
|
$(ele).on("click", () => {
|
||||||
this.toggle();
|
this.toggle();
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,10 @@ function initTabsByEle() {
|
|||||||
class YourTeamTab {
|
class YourTeamTab {
|
||||||
constructor(option = {}) {
|
constructor(option = {}) {
|
||||||
this.tabName = option.tabName ?? null;
|
this.tabName = option.tabName ?? null;
|
||||||
|
this.activeEle = null;
|
||||||
|
this.eventArg = { cancel: false };
|
||||||
this.init()
|
this.init()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
init = function () {
|
init = function () {
|
||||||
@ -44,23 +47,49 @@ class YourTeamTab {
|
|||||||
this.event();
|
this.event();
|
||||||
$(`[data-tabname=${this.tabName}][data-tabrole=child]`).css("display", "none");
|
$(`[data-tabname=${this.tabName}][data-tabrole=child]`).css("display", "none");
|
||||||
if ($(`[data-tabname=${this.tabName}][data-target].active`).length == 0) {
|
if ($(`[data-tabname=${this.tabName}][data-target].active`).length == 0) {
|
||||||
$(`[data-tabname=${this.tabName}][data-target]`).first().trigger("click");
|
let parTabEle = $(`[data-tabname=${this.tabName}][data-target]`).first();
|
||||||
|
if (parTabEle.data("toggle") == "tab" || !parTabEle.data("toggle")) {
|
||||||
|
$(`[data-tabname=${this.tabName}][data-target]`).first().trigger("click");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$(`[data-tabname=${this.tabName}][data-target].active`).first().trigger("click");
|
$(`[data-tabname=${this.tabName}][data-target].active`).first().trigger("click");
|
||||||
}
|
}
|
||||||
|
|
||||||
_ytTabInited.push(this.tabName);
|
_ytTabInited.push(this.tabName);
|
||||||
|
this.setThisObj();
|
||||||
|
}
|
||||||
|
|
||||||
|
setThisObj = function () {
|
||||||
|
$(`[data-tabname=${this.tabName}]`).each((idx, ele) => {
|
||||||
|
$(ele)[0]._ytTab = this;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
setActItem = function (element) {
|
||||||
|
|
||||||
|
this.activeEle = element;
|
||||||
|
}
|
||||||
|
|
||||||
|
updActClass = function () {
|
||||||
|
$(`[data-tabname=${this.tabName}]:not([data-tabrole=child])`).removeClass("active");
|
||||||
|
$(this.activeEle).addClass("active");
|
||||||
}
|
}
|
||||||
|
|
||||||
event = function () {
|
event = function () {
|
||||||
let clsObj = this;
|
let clsObj = this;
|
||||||
|
|
||||||
// Tab Item 按鈕 click
|
// Tab Item 按鈕 click
|
||||||
$(`[data-tabname=${this.tabName}]`).off("click").on("click", function (e) {
|
$(`[data-tabname=${this.tabName}]`).on("click", function (e) {
|
||||||
let target = $(this).data("target");
|
let target = $(this).data("target");
|
||||||
let obj = this;
|
let obj = this;
|
||||||
$(`[data-tabname=${clsObj.tabName}]:not([data-tabrole=child])`).removeClass("active");
|
clsObj.eventArg.cancel = false;
|
||||||
$(obj).addClass("active");
|
$(obj).trigger("yt:tab:prechange", clsObj.eventArg)
|
||||||
|
|
||||||
|
if (clsObj.eventArg.cancel) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
clsObj.activeEle = obj;
|
||||||
|
clsObj.updActClass();
|
||||||
// 觸發 yt:tab:change事件
|
// 觸發 yt:tab:change事件
|
||||||
$(obj).trigger("yt:tab:change");
|
$(obj).trigger("yt:tab:change");
|
||||||
if (target) {
|
if (target) {
|
||||||
@ -80,4 +109,30 @@ class YourTeamTab {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$.fn.YTTab = function (method,...arg) {
|
||||||
|
let tabObj = $(this)[0]._ytTab;
|
||||||
|
|
||||||
|
if (!tabObj) {
|
||||||
|
let tabName = $(this).data("tabname");
|
||||||
|
if (tabName && _ytTabInited.indexOf(tabName) == -1) {
|
||||||
|
let ytTab = new YT.Tab({ tabName: tabName })
|
||||||
|
_ytTabInited.push(tabName);
|
||||||
|
tabObj = ytTab;
|
||||||
|
} else {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method == "set") {
|
||||||
|
tabObj.setActItem(this);
|
||||||
|
tabObj.updActClass();
|
||||||
|
} else if (method == "setAndClick") {
|
||||||
|
tabObj.setActItem(this);
|
||||||
|
$(this).click();
|
||||||
|
}
|
||||||
|
|
||||||
|
return tabObj;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
YT.Tab = YT.Tab || YourTeamTab;
|
YT.Tab = YT.Tab || YourTeamTab;
|
@ -872,5 +872,43 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
}
|
}
|
||||||
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,14 +1,18 @@
|
|||||||
using FrontendWebApi.Models;
|
using FrontendWebApi.Models;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.Extensions.Hosting;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using NPOI.SS.Formula.Functions;
|
using NPOI.SS.Formula.Functions;
|
||||||
|
using NPOI.SS.Formula.PTG;
|
||||||
using Repository.BackendRepository.Interface;
|
using Repository.BackendRepository.Interface;
|
||||||
using Repository.FrontendRepository.Interface;
|
using Repository.FrontendRepository.Interface;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data.SqlTypes;
|
using System.Data.SqlTypes;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Channels;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace FrontendWebApi.ApiControllers
|
namespace FrontendWebApi.ApiControllers
|
||||||
@ -47,5 +51,72 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
}
|
}
|
||||||
return Ok(apiResult);
|
return Ok(apiResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("api/Energe/GetAutDemVal")]
|
||||||
|
public async Task<ActionResult<ApiResult<List<Variable>>>> GetAutDemVal()
|
||||||
|
{
|
||||||
|
ApiResult<List<Variable>> apiResult = new ApiResult<List<Variable>>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var sqlString = $@"SELECT system_value,system_key FROM variable
|
||||||
|
where system_type = 'automated_demand_response' and deleted = '0'";
|
||||||
|
var ess = await backendRepository.GetAllAsync<Variable>(sqlString);
|
||||||
|
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Data = ess;
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
apiResult.Code = "9999";
|
||||||
|
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
|
return Ok(apiResult);
|
||||||
|
}
|
||||||
|
return Ok(apiResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("api/Energe/EdiAutDemVal")]
|
||||||
|
public async Task<ActionResult<ApiResult<List<int?>>>> EdiAutDemVal([FromBody] List<Variable> variables)
|
||||||
|
{
|
||||||
|
ApiResult<List<int?>> apiResult = new ApiResult<List<int?>>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var sqlString = $@"SELECT system_value,system_key FROM variable
|
||||||
|
where system_type = 'automated_demand_response' and deleted = '0'";
|
||||||
|
var vs = await backendRepository.GetAllAsync<Variable>(sqlString);
|
||||||
|
|
||||||
|
var autDemKeys = vs.Select(x => x.System_key);
|
||||||
|
foreach (var v in variables) {
|
||||||
|
if (autDemKeys.Where(x => x == v.System_key).Count() != 0) {
|
||||||
|
Dictionary<string, object> sqlParam = new Dictionary<string, object>() {
|
||||||
|
{ "@system_key", v.System_key},
|
||||||
|
{ "@system_value", v.system_value},
|
||||||
|
{ "@updated_by", myUser.userinfo_guid},
|
||||||
|
{ "@updated_at", DateTime.Now},
|
||||||
|
};
|
||||||
|
|
||||||
|
await backendRepository.UpdateOneByCustomTable(sqlParam, "variable", $" system_type = 'automated_demand_response' AND system_key = @system_key");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Data = null;
|
||||||
|
apiResult.Msg = "編輯成功";
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
apiResult.Code = "9999";
|
||||||
|
apiResult.Msg = "系統內部錯誤,請聯絡管理者。" + exception.Message;
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
|
return Ok(apiResult);
|
||||||
|
}
|
||||||
|
return Ok(apiResult);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -141,4 +141,27 @@ namespace FrontendWebApi.Models
|
|||||||
public string device_node_coordinate_3d { get; set; }
|
public string device_node_coordinate_3d { get; set; }
|
||||||
public int? forge_dbid { get; set; }
|
public int? forge_dbid { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class DeviceItemViewModel
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public short deleted { get; set; }
|
||||||
|
public string full_name { get; set; }
|
||||||
|
public string points { get; set; }
|
||||||
|
public string unit { get; set; }
|
||||||
|
public short is_show { get; set; }
|
||||||
|
public short? is_show_riserDiagram { get; set; }
|
||||||
|
public short is_controll { get; set; }
|
||||||
|
public short is_bool { get; set; }
|
||||||
|
public short is_link { get; set; }
|
||||||
|
public short is_show_history { get; set; }
|
||||||
|
public string device_system_tag { get; set; }
|
||||||
|
public string device_name_tag { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FindDeviceItem : FindDevice
|
||||||
|
{
|
||||||
|
public string points { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,4 +7,6 @@
|
|||||||
public string system_remark { get; set; }
|
public string system_remark { get; set; }
|
||||||
public string priority { get; set; }
|
public string priority { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -48,10 +48,10 @@ namespace FrontendWebApi.Models
|
|||||||
|
|
||||||
public class Variable : Actor
|
public class Variable : Actor
|
||||||
{
|
{
|
||||||
public int id { get; set; }
|
public int? id { get; set; }
|
||||||
public string System_type { get; set; }
|
public string System_type { get; set; }
|
||||||
public string System_key { get; set; }
|
public string System_key { get; set; }
|
||||||
public string system_value { get; set; }
|
public string system_value { get; set; }
|
||||||
public int system_parent_id { get; set; }
|
public int? system_parent_id { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,10 +6,10 @@
|
|||||||
"Microsoft.Hosting.Lifetime": "Information"
|
"Microsoft.Hosting.Lifetime": "Information"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"LoginExpireMinute": 3600, //登入到期時間,單位(分)
|
"LoginExpireMinute": 3600, //<EFBFBD>n<EFBFBD>J<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD>)
|
||||||
"JwtSettings": {
|
"JwtSettings": {
|
||||||
"Issuer": "Admin", //發送者
|
"Issuer": "Admin", //<EFBFBD>o<EFBFBD>e<EFBFBD><EFBFBD>
|
||||||
"SignKey": "TaipeiDome123456", //簽章//最少16字元
|
"SignKey": "TaipeiDome123456", //ñ<EFBFBD><EFBFBD>//<EFBFBD>̤<EFBFBD>16<EFBFBD>r<EFBFBD><EFBFBD>
|
||||||
"JwtLifeSeconds": 3600
|
"JwtLifeSeconds": 3600
|
||||||
},
|
},
|
||||||
"DBConfig": {
|
"DBConfig": {
|
||||||
|
Loading…
Reference in New Issue
Block a user