Compare commits
10 Commits
49de1960e6
...
b97828ca6a
Author | SHA1 | Date | |
---|---|---|---|
b97828ca6a | |||
db77070dd3 | |||
4895975a46 | |||
9f2a1b4825 | |||
c2cb089d61 | |||
d0c5d8a1b9 | |||
7fb85c72d7 | |||
f2c56cc45d | |||
9885a73975 | |||
4d99d576aa |
@ -167,7 +167,11 @@ namespace Backend.Controllers
|
|||||||
|
|
||||||
buildMenu.left_system_url = string.Format("http://{0}:{1}{2}", building.Ip_address, building.Ip_port, buildMenu.left_system_url);
|
buildMenu.left_system_url = string.Format("http://{0}:{1}{2}", building.Ip_address, building.Ip_port, buildMenu.left_system_url);
|
||||||
}
|
}
|
||||||
|
if (buildMenu.left_planimetric_click == 1)
|
||||||
|
{
|
||||||
|
dictionary.Add("@left_icon_click_url_width", buildMenu.left_icon_click_url_width);
|
||||||
|
dictionary.Add("@left_icon_click_url_height", buildMenu.left_icon_click_url_height);
|
||||||
|
}
|
||||||
dictionary.Add("@left_system_url", buildMenu.left_system_url);
|
dictionary.Add("@left_system_url", buildMenu.left_system_url);
|
||||||
}
|
}
|
||||||
else if (buildMenu.left_drawing == 4)
|
else if (buildMenu.left_drawing == 4)
|
||||||
@ -184,8 +188,11 @@ namespace Backend.Controllers
|
|||||||
dictionary.Add("@left_riser_diagram_url", buildMenu.left_riser_diagram_url);
|
dictionary.Add("@left_riser_diagram_url", buildMenu.left_riser_diagram_url);
|
||||||
dictionary.Add("@left_icon_click", buildMenu.left_icon_click);
|
dictionary.Add("@left_icon_click", buildMenu.left_icon_click);
|
||||||
dictionary.Add("@left_icon_click_url", buildMenu.left_icon_click_url);
|
dictionary.Add("@left_icon_click_url", buildMenu.left_icon_click_url);
|
||||||
dictionary.Add("@left_icon_click_url_width", buildMenu.left_icon_click_url_width);
|
if (buildMenu.left_icon_click == 1 || buildMenu.left_planimetric_click == 1)
|
||||||
dictionary.Add("@left_icon_click_url_height", buildMenu.left_icon_click_url_height);
|
{
|
||||||
|
dictionary.Add("@left_icon_click_url_width", buildMenu.left_icon_click_url_width);
|
||||||
|
dictionary.Add("@left_icon_click_url_height", buildMenu.left_icon_click_url_height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (buildMenu.left_drawing == 1)
|
else if (buildMenu.left_drawing == 1)
|
||||||
{
|
{
|
||||||
@ -293,7 +300,11 @@ namespace Backend.Controllers
|
|||||||
|
|
||||||
buildMenu.left_system_url = string.Format("http://{0}:{1}{2}", building.Ip_address, building.Ip_port, buildMenu.left_system_url);
|
buildMenu.left_system_url = string.Format("http://{0}:{1}{2}", building.Ip_address, building.Ip_port, buildMenu.left_system_url);
|
||||||
}
|
}
|
||||||
|
if (buildMenu.left_planimetric_click == 1)
|
||||||
|
{
|
||||||
|
dictionary.Add("@left_icon_click_url_width", buildMenu.left_icon_click_url_width);
|
||||||
|
dictionary.Add("@left_icon_click_url_height", buildMenu.left_icon_click_url_height);
|
||||||
|
}
|
||||||
dictionary.Add("@left_system_url", buildMenu.left_system_url);
|
dictionary.Add("@left_system_url", buildMenu.left_system_url);
|
||||||
}
|
}
|
||||||
else if (buildMenu.left_drawing == 4)
|
else if (buildMenu.left_drawing == 4)
|
||||||
@ -310,8 +321,11 @@ namespace Backend.Controllers
|
|||||||
dictionary.Add("@left_riser_diagram_url", buildMenu.left_riser_diagram_url);
|
dictionary.Add("@left_riser_diagram_url", buildMenu.left_riser_diagram_url);
|
||||||
dictionary.Add("@left_icon_click", buildMenu.left_icon_click);
|
dictionary.Add("@left_icon_click", buildMenu.left_icon_click);
|
||||||
dictionary.Add("@left_icon_click_url", buildMenu.left_icon_click_url);
|
dictionary.Add("@left_icon_click_url", buildMenu.left_icon_click_url);
|
||||||
dictionary.Add("@left_icon_click_url_width", buildMenu.left_icon_click_url_width);
|
if (buildMenu.left_icon_click == 1 || buildMenu.left_planimetric_click == 1)
|
||||||
dictionary.Add("@left_icon_click_url_height", buildMenu.left_icon_click_url_height);
|
{
|
||||||
|
dictionary.Add("@left_icon_click_url_width", buildMenu.left_icon_click_url_width);
|
||||||
|
dictionary.Add("@left_icon_click_url_height", buildMenu.left_icon_click_url_height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (buildMenu.left_drawing == 1)
|
else if (buildMenu.left_drawing == 1)
|
||||||
{
|
{
|
||||||
|
@ -137,7 +137,7 @@ namespace Backend.Controllers
|
|||||||
string random_password = new string(Enumerable.Repeat(chars, 8).Select(s => s[random.Next(chars.Length)]).ToArray());
|
string random_password = new string(Enumerable.Repeat(chars, 8).Select(s => s[random.Next(chars.Length)]).ToArray());
|
||||||
|
|
||||||
//var newPassword = edFunction.GetSHA256Encryption(random_password);
|
//var newPassword = edFunction.GetSHA256Encryption(random_password);
|
||||||
var newPassword = edFunction.GetSHA256Encryption("123456");
|
var newPassword = edFunction.GetSHA256Encryption(post.Password);
|
||||||
|
|
||||||
//產生一組GUID
|
//產生一組GUID
|
||||||
var guid = Guid.NewGuid(); //使用者GUID
|
var guid = Guid.NewGuid(); //使用者GUID
|
||||||
|
@ -60,6 +60,7 @@ namespace Backend.Models
|
|||||||
{
|
{
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
public string Name { get; set; } //姓名
|
public string Name { get; set; } //姓名
|
||||||
|
public string Password { get; set; } //密碼
|
||||||
public string Email { get; set; } //信箱
|
public string Email { get; set; } //信箱
|
||||||
public string Account { get; set; } //帳號
|
public string Account { get; set; } //帳號
|
||||||
public string Phone { get; set; } //手機號碼
|
public string Phone { get; set; } //手機號碼
|
||||||
|
@ -869,15 +869,16 @@
|
|||||||
changebuild_menu_drawing_modal(this);
|
changebuild_menu_drawing_modal(this);
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
$('#build_menu_icon_click_onoff_modal_div').on("click", "input[type=checkbox]", function () {
|
|
||||||
if ($(this).prop("checked") && $(this).val() == 1) {
|
// $('#build_menu_icon_click_onoff_modal_div').on("click", "input[type=checkbox]", function () {
|
||||||
//$('#build_menu_icon_click_url_modal_div').show();
|
// if ($(this).prop("checked") && $(this).val() == 1) {
|
||||||
$('#build_menu_icon_click_url_width_height_modal_div').show();
|
// $('#build_menu_icon_click_url_modal_div').show();
|
||||||
} else {
|
// $('#build_menu_icon_click_url_width_height_modal_div').show();
|
||||||
//$('#build_menu_icon_click_url_modal_div').hide();
|
// } else {
|
||||||
$('#build_menu_icon_click_url_width_height_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_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) {
|
||||||
@ -1057,43 +1058,131 @@
|
|||||||
}, 'json');
|
}, 'json');
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
function changebuild_menu_drawing_modal(selector = "input[name^='drawing']:checked") {
|
|
||||||
|
|
||||||
|
function changebuild_menu_drawing_modal(selector = "input[name^='drawing']:checked") {
|
||||||
$(selector).each(function (index, value) {
|
$(selector).each(function (index, value) {
|
||||||
let drawingParent = $(value).parents("[id^=build_menu_position]")
|
let drawingParent = $(value).parents("[id^=build_menu_position]");
|
||||||
|
|
||||||
|
// 重置所有相關的 modal
|
||||||
$(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_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();
|
||||||
$(drawingParent).find('[id^=build_menu_planimetric_modal_div]').show();
|
$(drawingParent).find('[id^=build_menu_planimetric_modal_div]').show();
|
||||||
if ($(value).val() == 2) {
|
|
||||||
$(drawingParent).find('[id^=planimetric_click]').attr("disabled", false);
|
// 根據 input 的值設定顯示/隱藏邏輯
|
||||||
$(drawingParent).find('[id^=build_menu_systemurl_modal_div]').show();
|
switch ($(value).val()) {
|
||||||
} else if ($(value).val() == 4) {
|
case '2':
|
||||||
$(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_systemurl_modal_div]').show();
|
||||||
if ($(drawingParent).find("[id^=icon_click_url]").prop('checked')) {
|
|
||||||
//$(drawingParent).find('[id^=build_menu_icon_click_url_modal_div]').show();
|
function toggleModalVisibilityCase2() {
|
||||||
$(drawingParent).find('[id^=build_menu_icon_click_url_width_height_modal_div]').show();
|
const planimetricChecked = $(drawingParent).find('#build_menu_planimetric_modal_div input[type=checkbox]').is(":checked");
|
||||||
}
|
if (planimetricChecked) {
|
||||||
} else if ($(value).val() == 1) {
|
$(drawingParent).find('#build_menu_icon_click_url_width_height_modal_div').show();
|
||||||
$(drawingParent).find('[id^=planimetric_click]').prop("checked", true).attr("disabled", true);
|
} else {
|
||||||
$(drawingParent).find('[id^=build_menu_planimetric_floor_modal_div]').show();
|
$(drawingParent).find('#build_menu_icon_click_url_width_height_modal_div').hide();
|
||||||
} else if ($(value).val() == 5) {
|
}
|
||||||
$(drawingParent).find('[id^=planimetric_click]').prop("checked", false);
|
}
|
||||||
$(drawingParent).find('[id^=build_menu_blankurl_modal_div]').show();
|
|
||||||
} else if ($(value).val() == 3) {
|
$(drawingParent).find('#build_menu_planimetric_modal_div').on("click", "input[type=checkbox]", function () {
|
||||||
$(drawingParent).find('[id^=planimetric_click]').prop("checked", false).attr("disabled", true);
|
toggleModalVisibilityCase2();
|
||||||
} else {
|
});
|
||||||
$(drawingParent).find('[id^=build_menu_planimetric_modal_div]').hide();
|
|
||||||
|
toggleModalVisibilityCase2(); // 初始化時也要檢查一次
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '4':
|
||||||
|
$(drawingParent).find('[id^=planimetric_click]').attr("disabled", false);
|
||||||
|
$(drawingParent).find('[id^=build_menu_icon_click_onoff_modal_div]').show();
|
||||||
|
|
||||||
|
function toggleModalVisibilityCase4() {
|
||||||
|
const planimetricChecked = $(drawingParent).find('#build_menu_planimetric_modal_div input[type=checkbox]').is(":checked");
|
||||||
|
const onoffChecked = $(drawingParent).find('#build_menu_icon_click_onoff_modal_div input[type=checkbox]').is(":checked");
|
||||||
|
|
||||||
|
if (planimetricChecked || onoffChecked) {
|
||||||
|
$(drawingParent).find('#build_menu_icon_click_url_width_height_modal_div').show();
|
||||||
|
} else {
|
||||||
|
$(drawingParent).find('#build_menu_icon_click_url_width_height_modal_div').hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(drawingParent).find('#build_menu_planimetric_modal_div').on("click", "input[type=checkbox]", function () {
|
||||||
|
toggleModalVisibilityCase4();
|
||||||
|
});
|
||||||
|
|
||||||
|
$(drawingParent).find('#build_menu_icon_click_onoff_modal_div').on("click", "input[type=checkbox]", function () {
|
||||||
|
toggleModalVisibilityCase4();
|
||||||
|
});
|
||||||
|
|
||||||
|
toggleModalVisibilityCase4(); // 初始化時也要檢查一次
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '1':
|
||||||
|
$(drawingParent).find('[id^=planimetric_click]').prop("checked", true).attr("disabled", true);
|
||||||
|
$(drawingParent).find('[id^=build_menu_planimetric_floor_modal_div]').show();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '5':
|
||||||
|
$(drawingParent).find('[id^=planimetric_click]').prop("checked", false);
|
||||||
|
$(drawingParent).find('[id^=build_menu_blankurl_modal_div]').show();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '3':
|
||||||
|
$(drawingParent).find('[id^=planimetric_click]').prop("checked", false).attr("disabled", true);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$(drawingParent).find('[id^=build_menu_planimetric_modal_div]').hide();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
});
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// function changebuild_menu_drawing_modal(selector = "input[name^='drawing']:checked") {
|
||||||
|
|
||||||
|
// $(selector).each(function (index, value) {
|
||||||
|
// let drawingParent = $(value).parents("[id^=build_menu_position]")
|
||||||
|
// $(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_icon_click_url_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_systemurl_modal_div]').hide();
|
||||||
|
// $(drawingParent).find('[id^=build_menu_planimetric_modal_div]').show();
|
||||||
|
// if ($(value).val() == 2) {
|
||||||
|
// $(drawingParent).find('[id^=planimetric_click]').attr("disabled", false);
|
||||||
|
// $(drawingParent).find('[id^=build_menu_systemurl_modal_div]').show();
|
||||||
|
// if ($(drawingParent).find("[id^=planimetric_click]").prop('checked')) {
|
||||||
|
// $(drawingParent).find('[id^=build_menu_icon_click_url_width_height_modal_div]').show();
|
||||||
|
// }
|
||||||
|
// } else if ($(value).val() == 4) {
|
||||||
|
// $(drawingParent).find('[id^="planimetric_click"]').attr("disabled", false);
|
||||||
|
// $(drawingParent).find('[id^=build_menu_icon_click_onoff_modal_div]').show();
|
||||||
|
// 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_width_height_modal_div]').show();
|
||||||
|
// }
|
||||||
|
// } else if ($(value).val() == 1) {
|
||||||
|
// $(drawingParent).find('[id^=planimetric_click]').prop("checked", true).attr("disabled", true);
|
||||||
|
// $(drawingParent).find('[id^=build_menu_planimetric_floor_modal_div]').show();
|
||||||
|
// } else if ($(value).val() == 5) {
|
||||||
|
// $(drawingParent).find('[id^=planimetric_click]').prop("checked", false);
|
||||||
|
// $(drawingParent).find('[id^=build_menu_blankurl_modal_div]').show();
|
||||||
|
// } else if ($(value).val() == 3) {
|
||||||
|
// $(drawingParent).find('[id^=planimetric_click]').prop("checked", false).attr("disabled", true);
|
||||||
|
// } else {
|
||||||
|
// $(drawingParent).find('[id^=build_menu_planimetric_modal_div]').hide();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// })
|
||||||
|
|
||||||
|
|
||||||
|
// }
|
||||||
$('#buildMenu_table').on("click", "button.del-btn", function () {
|
$('#buildMenu_table').on("click", "button.del-btn", function () {
|
||||||
|
|
||||||
var send_data = {
|
var send_data = {
|
||||||
|
@ -2951,9 +2951,14 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($("#device_normal_point_value_modal").val() == $("#device_close_point_value_modal").val()) {
|
var normalValue = $("#device_normal_point_value_modal").val();
|
||||||
toast_warning("點位值設定重複,請修改");
|
var closeValue = $("#device_close_point_value_modal").val();
|
||||||
return;
|
|
||||||
|
if (normalValue != "" && closeValue != "" && normalValue != null && closeValue != null) {
|
||||||
|
if (normalValue == closeValue) {
|
||||||
|
toast_warning("點位值設定重複,請修改");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($("#device-kind-form").valid()) {
|
if ($("#device-kind-form").valid()) {
|
||||||
|
@ -329,8 +329,9 @@
|
|||||||
var send_data = {
|
var send_data = {
|
||||||
Id: selected_id,
|
Id: selected_id,
|
||||||
Name: $("#user_name_modal").val(),
|
Name: $("#user_name_modal").val(),
|
||||||
|
Password: $("#user_password_modal").val(),
|
||||||
Email: $("#user_email_modal").val(),
|
Email: $("#user_email_modal").val(),
|
||||||
Account: $("#user_account_modal").val(),
|
Account: $("#user_account_modal").val(),
|
||||||
Phone: $("#user_phone_modal").val(),
|
Phone: $("#user_phone_modal").val(),
|
||||||
RoleId: $("#user_role_modal").val()
|
RoleId: $("#user_role_modal").val()
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@
|
|||||||
|
|
||||||
<div class="form-group col-lg-6 user-password-div">
|
<div class="form-group col-lg-6 user-password-div">
|
||||||
<label class="form-label" for="user_password_modal">密碼</label>
|
<label class="form-label" for="user_password_modal">密碼</label>
|
||||||
<input type="password" id="user_password_modal" name="user_password_modal" class="form-control" placeholder="由系統產生" disabled>
|
<input type="password" id="user_password_modal" name="user_password_modal" class="form-control">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group col-lg-6">
|
<div class="form-group col-lg-6">
|
||||||
|
@ -1127,9 +1127,9 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
|
|
||||||
var endDay = System.DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
|
var endDay = System.DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
|
||||||
|
|
||||||
foreach (DateTime day in EachMonth(startDay, endDay))
|
foreach (DateTime month in EachMonth(startDay, endDay))
|
||||||
{
|
{
|
||||||
if (day.ToString("yyyy-MM") == System.DateTime.Now.AddDays(-1).ToString("yyyy-MM"))
|
if (month.ToString("yyyy-MM") == System.DateTime.Now.AddDays(-1).ToString("yyyy-MM"))
|
||||||
{
|
{
|
||||||
var preDay = now.AddDays(-1); //取得前一天
|
var preDay = now.AddDays(-1); //取得前一天
|
||||||
|
|
||||||
@ -1154,9 +1154,9 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var dayInMonth = DateTime.DaysInMonth(day.Year, day.Month);
|
var dayInMonth = DateTime.DaysInMonth(month.Year, month.Month);
|
||||||
var FirstDay = new DateTime(day.Year, day.Month, 1);
|
var FirstDay = new DateTime(month.Year, month.Month, 1);
|
||||||
var LastDay = new DateTime(day.Year, day.Month, dayInMonth);
|
var LastDay = new DateTime(month.Year, month.Month, dayInMonth);
|
||||||
|
|
||||||
startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.ToString("yyyy-MM-dd"));
|
startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.ToString("yyyy-MM-dd"));
|
||||||
|
|
||||||
@ -1270,7 +1270,7 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
{
|
{
|
||||||
var dayInMonth = DateTime.DaysInMonth(day.Year, day.Month);
|
var dayInMonth = DateTime.DaysInMonth(day.Year, day.Month);
|
||||||
var FirstDay = new DateTime(day.Year, day.Month, 1);
|
var FirstDay = new DateTime(day.Year, day.Month, 1);
|
||||||
var LastDay = new DateTime(day.Year, day.Month, dayInMonth);
|
var LastDay = new DateTime(day.Year, day.Month, dayInMonth).AddDays(1);
|
||||||
|
|
||||||
startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.ToString("yyyy-MM-dd"));
|
startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.ToString("yyyy-MM-dd"));
|
||||||
|
|
||||||
@ -1746,9 +1746,11 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
{
|
{
|
||||||
var strtday = DateTime.Parse(from);
|
var strtday = DateTime.Parse(from);
|
||||||
var endday = DateTime.Parse(thru);
|
var endday = DateTime.Parse(thru);
|
||||||
for (var _month = strtday.Date; _month.Month <= endday.Month; _month = _month.AddMonths(1))
|
|
||||||
yield return _month;
|
|
||||||
|
|
||||||
|
for (var _month = strtday.Date; _month <= endday; _month = _month.AddMonths(1))
|
||||||
|
{
|
||||||
|
yield return _month;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private List<Dictionary<string, object>> ArrangeRawData(DeviceNumberPoint deviceNumberPoint, JObject jsonResult)
|
private List<Dictionary<string, object>> ArrangeRawData(DeviceNumberPoint deviceNumberPoint, JObject jsonResult)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using FrontendWebApi.Models;
|
using FrontendWebApi.Models;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Quartz;
|
using Quartz;
|
||||||
|
using Repository.BackendRepository.Implement;
|
||||||
using Repository.BackendRepository.Interface;
|
using Repository.BackendRepository.Interface;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -52,8 +53,10 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
|
|
||||||
using (HttpClient client = new HttpClient())
|
using (HttpClient client = new HttpClient())
|
||||||
{
|
{
|
||||||
string username = "stanGG";
|
var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
|
||||||
string password = "St12345678";
|
var variableObix = backendRepository.GetAllAsync<KeyValue>(sqlObix).Result;
|
||||||
|
string username = variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault();
|
||||||
|
string password = variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault();
|
||||||
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
||||||
|
|
||||||
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
|
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
|
||||||
@ -88,7 +91,8 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
|
|
||||||
foreach (var obj in filteredObjs)
|
foreach (var obj in filteredObjs)
|
||||||
{
|
{
|
||||||
var newguid = Guid.NewGuid();
|
var guid = obj.Descendants().Where(d => d.Name.LocalName == "str" && d.Attribute("name").Value == "niagara-uuid").
|
||||||
|
Select(x => x.Attribute("val").Value).FirstOrDefault();
|
||||||
var alarm_timestamp = obj.Descendants().Where(d => d.Name.LocalName == "abstime" && d.Attribute("name").Value == "timestamp")
|
var alarm_timestamp = obj.Descendants().Where(d => d.Name.LocalName == "abstime" && d.Attribute("name").Value == "timestamp")
|
||||||
.Select(d =>
|
.Select(d =>
|
||||||
{
|
{
|
||||||
@ -110,7 +114,7 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
|
|
||||||
var dictionary = new Dictionary<string, object>()
|
var dictionary = new Dictionary<string, object>()
|
||||||
{
|
{
|
||||||
{"@emergency_event_guid",newguid},
|
{"@emergency_event_guid",guid},
|
||||||
{"@disaster",filterDevice.device_system_value},
|
{"@disaster",filterDevice.device_system_value},
|
||||||
{"@building_tag", filterDevice.device_building_tag},
|
{"@building_tag", filterDevice.device_building_tag},
|
||||||
{"@device_guid",filterDevice.device_guid },
|
{"@device_guid",filterDevice.device_guid },
|
||||||
@ -120,7 +124,7 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
dictionaryList.Add(dictionary);
|
dictionaryList.Add(dictionary);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
// 之前以為沒有唯一識別碼(uuid),故該table有設置一個以device_guid跟alarm_time的unique替代
|
||||||
var mergeSql = @"
|
var mergeSql = @"
|
||||||
INSERT INTO emergency_event
|
INSERT INTO emergency_event
|
||||||
(emergency_event_guid, disaster, device_guid, building_tag, type, alarm_time)
|
(emergency_event_guid, disaster, device_guid, building_tag, type, alarm_time)
|
||||||
|
@ -42,8 +42,11 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string username = "stanGG";
|
var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
|
||||||
string password = "St12345678";
|
|
||||||
|
var variableObix = backgroundServiceRepository.GetAllAsync<KeyValue>(sqlObix).Result;
|
||||||
|
string username = variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault();
|
||||||
|
string password = variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault();
|
||||||
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
||||||
HttpWebRequest Postrequest = (HttpWebRequest)WebRequest.Create(url);
|
HttpWebRequest Postrequest = (HttpWebRequest)WebRequest.Create(url);
|
||||||
Postrequest.Method = "POST";
|
Postrequest.Method = "POST";
|
||||||
|
@ -61,8 +61,10 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
|
|
||||||
using (HttpClient client = new HttpClient())
|
using (HttpClient client = new HttpClient())
|
||||||
{
|
{
|
||||||
string username = "stanGG";
|
var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
|
||||||
string password = "St12345678";
|
var variableObix = frontendRepository.GetAllAsync<KeyValue>(sqlObix).Result;
|
||||||
|
string username = variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault();
|
||||||
|
string password = variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault();
|
||||||
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
||||||
|
|
||||||
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
|
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
|
||||||
|
@ -359,12 +359,22 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
var sub_system = await backendRepository.GetOneAsync<BuildMenuSql>(@$"select v.system_key subfull_name,me.* from building_menu me
|
var sub_system = await backendRepository.GetOneAsync<BuildMenuSql>(@$"select v.system_key subfull_name,me.* from building_menu me
|
||||||
left join variable v on v.system_value = me.sub_system_tag and v.system_type = 'device_system_category_layer3' and v.deleted = 0
|
left join variable v on v.system_value = me.sub_system_tag and v.system_type = 'device_system_category_layer3' and v.deleted = 0
|
||||||
where me.building_tag = '{get.building_tag}' and me.main_system_tag = '{get.main_system_tag}' and me.sub_system_tag = '{get.sub_system_tag}' order by me.priority");
|
where me.building_tag = '{get.building_tag}' and me.main_system_tag = '{get.main_system_tag}' and me.sub_system_tag = '{get.sub_system_tag}' order by me.priority");
|
||||||
|
get.sub_system_tag = get.sub_system_tag == "P" ? $"'{get.sub_system_tag}','B'" : $"'{get.sub_system_tag}'"; // 巨蛋緊急壓扣(P)跟閃光喇吧被視為同一類
|
||||||
List<Floor> Floors = new List<Floor>();
|
List <Floor> Floors = new List<Floor>();
|
||||||
var floorsql = await backendRepository.GetAllAsync<Floorsql>($@"
|
var floorsql = await backendRepository.GetAllAsync<Floorsql>($@"
|
||||||
select * from (select * from sub_system_floor ssf where ssf.deleted = 0 and ssf.status = 0 and ssf.building_tag = '{get.building_tag}' and ssf.main_system_tag = '{get.main_system_tag}' and ssf.sub_system_tag = '{get.sub_system_tag}' and ssf.is_link = 1) a
|
select * from (select *,
|
||||||
|
CASE
|
||||||
|
WHEN ssf.sub_system_tag IN ({get.sub_system_tag}) THEN 'P_B' -- 將 'P' 和 'B' 合併為一個類
|
||||||
|
ELSE ssf.sub_system_tag -- 其他保持原樣
|
||||||
|
END AS merged_sub_system_tag
|
||||||
|
from sub_system_floor ssf where ssf.deleted = 0 and ssf.status = 0
|
||||||
|
and ssf.building_tag = '{get.building_tag}'
|
||||||
|
and ssf.main_system_tag = '{get.main_system_tag}'
|
||||||
|
and ssf.sub_system_tag in ({get.sub_system_tag})
|
||||||
|
and ssf.is_link = 1) a
|
||||||
left join floor on floor.full_name = a.floor_tag and a.building_tag = floor.building_tag
|
left join floor on floor.full_name = a.floor_tag and a.building_tag = floor.building_tag
|
||||||
where floor.deleted = 0
|
where floor.deleted = 0
|
||||||
|
GROUP BY a.floor_tag, a.building_tag, a.merged_sub_system_tag
|
||||||
order by floor.priority");
|
order by floor.priority");
|
||||||
Sub_system sub_System = new Sub_system()
|
Sub_system sub_System = new Sub_system()
|
||||||
{
|
{
|
||||||
@ -402,6 +412,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
apiResult.Code = "9999";
|
apiResult.Code = "9999";
|
||||||
|
apiResult.Msg = "9999";
|
||||||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
return Ok(apiResult);
|
return Ok(apiResult);
|
||||||
}
|
}
|
||||||
|
@ -319,6 +319,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
input.EnableLimit = false; // CSV關閉5W筆限制
|
||||||
var apiData = await GetHistoryRealTime(input);
|
var apiData = await GetHistoryRealTime(input);
|
||||||
if (apiData.Value == null)
|
if (apiData.Value == null)
|
||||||
{
|
{
|
||||||
@ -1394,6 +1395,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
ApiResult<List<HistoryRawData>> apiResult = new ApiResult<List<HistoryRawData>>(jwt_str);
|
ApiResult<List<HistoryRawData>> apiResult = new ApiResult<List<HistoryRawData>>(jwt_str);
|
||||||
apiResult.Data = new List<HistoryRawData>();
|
apiResult.Data = new List<HistoryRawData>();
|
||||||
List<string> noDataDevice = new List<string>();
|
List<string> noDataDevice = new List<string>();
|
||||||
|
|
||||||
if (!jwtlife)
|
if (!jwtlife)
|
||||||
{
|
{
|
||||||
apiResult.Code = "5000";
|
apiResult.Code = "5000";
|
||||||
@ -1439,41 +1441,40 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
int totalRecordCount = 0;
|
int totalRecordCount = 0;
|
||||||
|
|
||||||
// 先計算總記錄數
|
// 先計算總記錄數
|
||||||
foreach (var hi in input.HistoryItems)
|
if (input.EnableLimit)
|
||||||
{
|
{
|
||||||
var device_number = hi.Device_number_point.Split(":")[0];
|
foreach (var hi in input.HistoryItems)
|
||||||
var point = hi.Device_number_point.Split(":")[1];
|
|
||||||
var stationName = await backendRepository.GetOneAsync<string>($"select distinct parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split('_')[0]}' limit 1");
|
|
||||||
var tableName = await backgroundServiceMsSqlRepository.GetOneAsync<string>($"select table_name from INFORMATION_SCHEMA.TABLES where table_name like '%{stationName}_{device_number}_{point}%'");
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(tableName))
|
|
||||||
{
|
{
|
||||||
var sqlCount = $@"select count(*) from {tableName}
|
var device_number = hi.Device_number_point.Split(":")[0];
|
||||||
|
var point = hi.Device_number_point.Split(":")[1];
|
||||||
|
var stationName = await backendRepository.GetOneAsync<string>($"select distinct parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split('_')[0]}' limit 1");
|
||||||
|
var tableName = await backgroundServiceMsSqlRepository.GetOneAsync<string>($"select table_name from INFORMATION_SCHEMA.TABLES where table_name like '%{stationName}_{device_number}_{point}%'");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(tableName))
|
||||||
|
{
|
||||||
|
var sqlCount = $@"select count(*) from {tableName}
|
||||||
where replace(convert(varchar, [timestamp], 111), '/', '-') >= @startTime
|
where replace(convert(varchar, [timestamp], 111), '/', '-') >= @startTime
|
||||||
and replace(convert(varchar, [timestamp], 111), '/', '-') <= @endTime";
|
and replace(convert(varchar, [timestamp], 111), '/', '-') <= @endTime";
|
||||||
|
|
||||||
var recordCount = await backgroundServiceMsSqlRepository.GetOneAsync<int>(sqlCount, new { startTime = input.Start_timestamp, endTime = input.End_timestamp });
|
var recordCount = await backgroundServiceMsSqlRepository.GetOneAsync<int>(sqlCount, new { startTime = input.Start_timestamp, endTime = input.End_timestamp });
|
||||||
totalRecordCount += recordCount;
|
totalRecordCount += recordCount;
|
||||||
|
|
||||||
if (totalRecordCount > 50000)
|
if (totalRecordCount > 50000)
|
||||||
{
|
{
|
||||||
// 如果總記錄數超過5萬筆,返回提示信息
|
// 如果總記錄數超過5萬筆,返回提示信息
|
||||||
apiResult.Code = "5000";
|
apiResult.Code = "5000";
|
||||||
apiResult.Msg = "資料量超過5萬筆,請減少選擇區間或設備";
|
apiResult.Msg = "資料量超過5萬筆,請減少選擇區間或設備";
|
||||||
return apiResult;
|
return apiResult;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
noDataDevice.Add(hi.Device_number_point);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 正式撈取資料
|
// 正式撈取資料
|
||||||
foreach (var hi in input.HistoryItems)
|
foreach (var hi in input.HistoryItems)
|
||||||
{
|
{
|
||||||
var device_number = hi.Device_number_point.Split(":")[0];
|
var device_number = hi.Device_number_point.Split(":")[0];
|
||||||
var point = hi.Device_number_point.Split(":")[1];
|
var point = hi.Device_number_point.Split(":")[1];
|
||||||
var stationName = await backendRepository.GetOneAsync<string>($"select distinct parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split('_')[0]}' limit 1");
|
var stationName = await backendRepository.GetOneAsync<string>($"select distinct parent_path from import_niagara_item_history where device_number = '{device_number}' limit 1");
|
||||||
var tableName = await backgroundServiceMsSqlRepository.GetOneAsync<string>($"select table_name from INFORMATION_SCHEMA.TABLES where table_name like '%{stationName}_{device_number}_{point}%'");
|
var tableName = await backgroundServiceMsSqlRepository.GetOneAsync<string>($"select table_name from INFORMATION_SCHEMA.TABLES where table_name like '%{stationName}_{device_number}_{point}%'");
|
||||||
if (!string.IsNullOrEmpty(tableName))
|
if (!string.IsNullOrEmpty(tableName))
|
||||||
{
|
{
|
||||||
@ -1485,56 +1486,92 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
//valueFacets = "range=E:{$u5176$u4ed6$u72c0$u614b=1,$u6b63$u5e38=2,$u4f4e$u96fb$u4f4d=3,$u8017$u76e1=4,$u672a$u9023$u63a5=5,$u7570$u5e38=6}";
|
//valueFacets = "range=E:{$u5176$u4ed6$u72c0$u614b=1,$u6b63$u5e38=2,$u4f4e$u96fb$u4f4d=3,$u8017$u76e1=4,$u672a$u9023$u63a5=5,$u7570$u5e38=6}";
|
||||||
|
|
||||||
// 檢查 valueFacets 是否包含 "range=E"
|
// 檢查 valueFacets 是否包含 "range=E"
|
||||||
string valueDisplaySql;
|
string valueDisplaySql = string.Empty;
|
||||||
if (valueFacets != null && valueFacets.Contains("range=E"))
|
// 直接給千分位數值會讓前台套件顯示有問題,故頁面千分位顯示由前端處理,CSV千分位後端處理
|
||||||
|
string DisplaySql = input.EnableLimit ? "ROUND(value, 2) AS Value" : " FORMAT(ROUND(value, 2), 'N2') AS Value";
|
||||||
|
|
||||||
|
if (valueFacets != null)
|
||||||
{
|
{
|
||||||
// 提取 "range=E:" 之後的部分
|
|
||||||
string rangePart = valueFacets.Substring(valueFacets.IndexOf("range=E:") + "range=E:".Length);
|
|
||||||
|
|
||||||
// 去除開頭和結尾的大括號
|
|
||||||
rangePart = rangePart.Trim('{', '}');
|
|
||||||
|
|
||||||
// 分割各個條目
|
|
||||||
var entries = rangePart.Split(',');
|
|
||||||
|
|
||||||
// 存儲匹配條目的列表
|
// 存儲匹配條目的列表
|
||||||
var caseWhenStatements = new List<string>();
|
var caseWhenStatements = new List<string>();
|
||||||
|
|
||||||
foreach (var entry in entries)
|
// 轉換 Unicode 序列為中文字符的函數
|
||||||
|
string ConvertUnicodeToChinese(string unicodeSequence)
|
||||||
{
|
{
|
||||||
// 分割 Unicode 序列和數字
|
var chineseCharacters = new StringBuilder();
|
||||||
var parts = entry.Split('=');
|
var unicodeParts = unicodeSequence.Split("$u");
|
||||||
if (parts.Length == 2)
|
foreach (var unicodePart in unicodeParts)
|
||||||
{
|
{
|
||||||
string unicodeSequence = parts[0];
|
if (unicodePart.Length == 4)
|
||||||
int correspondingValue = int.Parse(parts[1]);
|
|
||||||
|
|
||||||
// 轉換 Unicode 序列為中文字符
|
|
||||||
var chineseCharacters = new StringBuilder();
|
|
||||||
var unicodeParts = unicodeSequence.Split("$u");
|
|
||||||
foreach (var unicodePart in unicodeParts)
|
|
||||||
{
|
{
|
||||||
if (unicodePart.Length == 4)
|
var unicodeValue = Convert.ToInt32(unicodePart, 16);
|
||||||
{
|
chineseCharacters.Append(char.ConvertFromUtf32(unicodeValue));
|
||||||
var unicodeValue = Convert.ToInt32(unicodePart, 16);
|
|
||||||
chineseCharacters.Append(char.ConvertFromUtf32(unicodeValue));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加 Case When 語句
|
|
||||||
caseWhenStatements.Add($"when value = {correspondingValue} then '{chineseCharacters}'");
|
|
||||||
}
|
}
|
||||||
|
return chineseCharacters.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 處理 range=E 的部分
|
||||||
|
if (valueFacets.Contains("range=E"))
|
||||||
|
{
|
||||||
|
// 提取 "range=E:" 之後的部分
|
||||||
|
string rangePart = valueFacets.Substring(valueFacets.IndexOf("range=E:") + "range=E:".Length);
|
||||||
|
rangePart = rangePart.Trim('{', '}'); // 去除大括號
|
||||||
|
var entries = rangePart.Split(',');
|
||||||
|
|
||||||
|
foreach (var entry in entries)
|
||||||
|
{
|
||||||
|
var parts = entry.Split('=');
|
||||||
|
if (parts.Length == 2)
|
||||||
|
{
|
||||||
|
string unicodeSequence = parts[0];
|
||||||
|
int correspondingValue = int.Parse(parts[1]);
|
||||||
|
|
||||||
|
// 轉換 Unicode 為中文
|
||||||
|
string chineseCharacters = ConvertUnicodeToChinese(unicodeSequence);
|
||||||
|
|
||||||
|
// 添加 Case When 語句
|
||||||
|
caseWhenStatements.Add($"when value = {correspondingValue} then '{chineseCharacters}'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
valueDisplaySql = $"Case {string.Join(" ", caseWhenStatements)} else 'Unknow' End as Value";
|
||||||
|
}
|
||||||
|
// 處理 trueText 和 falseText 的部分
|
||||||
|
else if (valueFacets.Contains("trueText=s:") && valueFacets.Contains("falseText=s:"))
|
||||||
|
{
|
||||||
|
// 提取 trueText 和 falseText 的部分
|
||||||
|
string trueTextPart = valueFacets.Substring(valueFacets.IndexOf("trueText=s:") + "trueText=s:".Length);
|
||||||
|
trueTextPart = trueTextPart.Split('|')[0]; // 只保留 trueText 的部分
|
||||||
|
|
||||||
|
string falseTextPart = valueFacets.Substring(valueFacets.IndexOf("falseText=s:") + "falseText=s:".Length);
|
||||||
|
falseTextPart = falseTextPart.Split('|')[0]; // 只保留 falseText 的部分
|
||||||
|
|
||||||
|
// 如果不包含 $u,就直接使用這些字串
|
||||||
|
if (trueTextPart.Contains("$u"))
|
||||||
|
{
|
||||||
|
trueTextPart = ConvertUnicodeToChinese(trueTextPart);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (falseTextPart.Contains("$u"))
|
||||||
|
{
|
||||||
|
falseTextPart = ConvertUnicodeToChinese(falseTextPart);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加 Case When 語句
|
||||||
|
caseWhenStatements.Add($"when value = 1 then '{trueTextPart}'");
|
||||||
|
caseWhenStatements.Add($"when value = 0 then '{falseTextPart}'");
|
||||||
|
|
||||||
|
valueDisplaySql = $"Case {string.Join(" ", caseWhenStatements)} else 'Unknow' End as Value";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 使用原始的顯示方式
|
||||||
|
valueDisplaySql = valueType.Equals("bit")
|
||||||
|
? "Case when value = 1 then 'true' when value = 0 then 'false' else 'Unknow' End as Value"
|
||||||
|
: DisplaySql;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 最後的 SQL 語句
|
|
||||||
valueDisplaySql = $"Case {string.Join(" ", caseWhenStatements)} else 'Unknow' End as Value";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 如果不包含 range=E,使用原始的顯示方式
|
|
||||||
valueDisplaySql = valueType.Equals("bit")
|
|
||||||
? "Case when value = 1 then 'true' when value = 0 then 'false' else 'Unknow' End as Value"
|
|
||||||
: "round(value, 2) as Value";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1560,7 +1597,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
|
|
||||||
apiResult.Code = "0000";
|
apiResult.Code = "0000";
|
||||||
apiResult.Msg = @$"DB無資料的設備:{string.Join(".", noDataDevice)}";
|
apiResult.Msg = @$"DB無資料的設備:{string.Join(".", noDataDevice)}";
|
||||||
apiResult.Data = apiResult.Data.OrderBy(x => x.Device_number).ThenByDescending(x => x.Timestamp).ToList();
|
apiResult.Data = apiResult.Data.OrderBy(x => x.Device_number).ThenBy(x => x.Points).ThenByDescending(x => x.Timestamp).ToList();
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
|
@ -170,7 +170,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
stylein12.WrapText = true;
|
stylein12.WrapText = true;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var sheet = workbook.CreateSheet("電表報表");
|
var sheet = workbook.CreateSheet(input.exportOpeTypeName);
|
||||||
int RowPosition = 0;
|
int RowPosition = 0;
|
||||||
if (result.Count > 0)
|
if (result.Count > 0)
|
||||||
{
|
{
|
||||||
@ -202,7 +202,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
|
|
||||||
cell = row.CreateCell(i++);
|
cell = row.CreateCell(i++);
|
||||||
cell.SetCellValue("內容");
|
cell.SetCellValue("內容");
|
||||||
cell.CellStyle = stylein12;
|
cell.CellStyle = styleLine12;
|
||||||
cell = row.CreateCell(i++);
|
cell = row.CreateCell(i++);
|
||||||
cell.SetCellValue("紀錄時間");
|
cell.SetCellValue("紀錄時間");
|
||||||
cell.CellStyle = styleLine12;
|
cell.CellStyle = styleLine12;
|
||||||
|
@ -6,6 +6,7 @@ using Newtonsoft.Json;
|
|||||||
using NPOI.SS.UserModel;
|
using NPOI.SS.UserModel;
|
||||||
using NPOI.XSSF.UserModel;
|
using NPOI.XSSF.UserModel;
|
||||||
using Repository.BackendRepository.Implement;
|
using Repository.BackendRepository.Implement;
|
||||||
|
using Repository.BackendRepository.Interface;
|
||||||
using Repository.FrontendRepository.Interface;
|
using Repository.FrontendRepository.Interface;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -82,8 +83,10 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
using (HttpClient client = new HttpClient())
|
using (HttpClient client = new HttpClient())
|
||||||
{
|
{
|
||||||
apiUrl = Path.Combine(baseApiUrl, "obix/config/", apiUrl);
|
apiUrl = Path.Combine(baseApiUrl, "obix/config/", apiUrl);
|
||||||
string username = "stanGG";
|
var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
|
||||||
string password = "St12345678";
|
var variableObix = frontendRepository.GetAllAsync<KeyValue>(sqlObix).Result;
|
||||||
|
string username = variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault();
|
||||||
|
string password = variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault();
|
||||||
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
||||||
|
|
||||||
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
|
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
|
||||||
@ -165,8 +168,10 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
using (HttpClient client = new HttpClient())
|
using (HttpClient client = new HttpClient())
|
||||||
{
|
{
|
||||||
apiUrl = Path.Combine(baseApiUrl, "obix/config/", apiUrl);
|
apiUrl = Path.Combine(baseApiUrl, "obix/config/", apiUrl);
|
||||||
string username = "stanGG";
|
var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
|
||||||
string password = "St12345678";
|
var variableObix = frontendRepository.GetAllAsync<KeyValue>(sqlObix).Result;
|
||||||
|
string username = variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault();
|
||||||
|
string password = variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault();
|
||||||
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
string encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
||||||
|
|
||||||
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
|
client.DefaultRequestHeaders.Add("Authorization", "Basic " + encoded);
|
||||||
|
@ -197,6 +197,7 @@ namespace FrontendWebApi.Models
|
|||||||
public string point_name { get; set; }
|
public string point_name { get; set; }
|
||||||
public string points { get; set; }
|
public string points { get; set; }
|
||||||
public byte points_is_bool { get; set; }
|
public byte points_is_bool { get; set; }
|
||||||
|
public int is_RTSP { get; set; } // 巨蛋監視器控制項
|
||||||
public List<DeviceNode> Device_nodes { get; set; }
|
public List<DeviceNode> Device_nodes { get; set; }
|
||||||
public List<DeviceItem> deviceItems { get; set; }
|
public List<DeviceItem> deviceItems { get; set; }
|
||||||
}
|
}
|
||||||
|
@ -259,6 +259,7 @@ namespace FrontendWebApi.Models
|
|||||||
{
|
{
|
||||||
public string Start_timestamp { get; set; }
|
public string Start_timestamp { get; set; }
|
||||||
public string End_timestamp { get; set; }
|
public string End_timestamp { get; set; }
|
||||||
|
public bool EnableLimit { get; set; } = true; // 控制是否需要限制查詢筆數
|
||||||
public List<HistoryItem> HistoryItems { get; set; }
|
public List<HistoryItem> HistoryItems { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@
|
|||||||
<span aria-hidden="true"><i class="fal fa-times"></i></span>
|
<span aria-hidden="true"><i class="fal fa-times"></i></span>
|
||||||
</button>*@
|
</button>*@
|
||||||
<div class="position-absolute pos-right mr-sm-3 mt-sm-3 z-index-space">
|
<div class="position-absolute pos-right mr-sm-3 mt-sm-3 z-index-space">
|
||||||
@*<button type="button" class="btn btn-danger waves-effect waves-themed mr-2" id="Tcp" onclick="SendMessageAsync('D002')">取消上牆</button>*@
|
<button type="button" class="btn btn-danger waves-effect waves-themed mr-2" id="Tcp" onclick="SendMessageAsync('D002')">取消上牆</button>
|
||||||
<button type="button" class="btn btn-danger waves-effect waves-themed" id="closemodal" onclick="Closemodal()">關閉流程</button>
|
<button type="button" class="btn btn-danger waves-effect waves-themed" id="closemodal" onclick="Closemodal()">關閉流程</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body bg-white">
|
||||||
@ -755,7 +755,7 @@
|
|||||||
selected_device_time = $(this).parents('tr').attr('data-time');
|
selected_device_time = $(this).parents('tr').attr('data-time');
|
||||||
|
|
||||||
OnSimulationExercise(selected_device_guid, selected_device_disaster, 0, selected_device_time);
|
OnSimulationExercise(selected_device_guid, selected_device_disaster, 0, selected_device_time);
|
||||||
// SendMessageAsync("D001");
|
SendMessageAsync("D001");
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@ -1952,7 +1952,7 @@
|
|||||||
CloseVerify = true;
|
CloseVerify = true;
|
||||||
$('#emergency-verify-modal').modal('hide');
|
$('#emergency-verify-modal').modal('hide');
|
||||||
$('#SimulationExercisemodal').modal('hide');
|
$('#SimulationExercisemodal').modal('hide');
|
||||||
// SendMessageAsync("D002");
|
SendMessageAsync("D002");
|
||||||
UpdateRecordFinishTime()
|
UpdateRecordFinishTime()
|
||||||
CloseVerify = false; // 每次關閉流程都要驗證一次
|
CloseVerify = false; // 每次關閉流程都要驗證一次
|
||||||
} else {
|
} else {
|
||||||
|
@ -122,7 +122,7 @@
|
|||||||
<span aria-hidden="true"><i class="fal fa-times"></i></span>
|
<span aria-hidden="true"><i class="fal fa-times"></i></span>
|
||||||
</button>*@
|
</button>*@
|
||||||
<div class="position-absolute pos-right mr-sm-3 mt-sm-3 z-index-space">
|
<div class="position-absolute pos-right mr-sm-3 mt-sm-3 z-index-space">
|
||||||
@*<button type="button" class="btn btn-danger waves-effect waves-themed mr-2" id="Tcp" onclick="SendMessageAsync('D002')">取消上牆</button>*@
|
<button type="button" class="btn btn-danger waves-effect waves-themed mr-2" id="Tcp" onclick="SendMessageAsync('D002')">取消上牆</button>
|
||||||
<button type="button" class="btn btn-danger waves-effect waves-themed" id="closemodal" onclick="Closemodal()">關閉流程</button>
|
<button type="button" class="btn btn-danger waves-effect waves-themed" id="closemodal" onclick="Closemodal()">關閉流程</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body bg-white">
|
||||||
@ -860,7 +860,7 @@
|
|||||||
SimulationExerciseGuid = selected_event_guid;
|
SimulationExerciseGuid = selected_event_guid;
|
||||||
|
|
||||||
OnSimulationExercise(selected_event_guid, selected_device_disaster, 0);
|
OnSimulationExercise(selected_event_guid, selected_device_disaster, 0);
|
||||||
// SendMessageAsync("D001");
|
SendMessageAsync("D001");
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
//#region 模擬演練 / SOP 開啟畫面
|
//#region 模擬演練 / SOP 開啟畫面
|
||||||
@ -1385,7 +1385,7 @@
|
|||||||
CloseVerify = true;
|
CloseVerify = true;
|
||||||
$('#emergency-verify-modal').modal('hide');
|
$('#emergency-verify-modal').modal('hide');
|
||||||
$('#SimulationExercisemodal').modal('hide');
|
$('#SimulationExercisemodal').modal('hide');
|
||||||
// SendMessageAsync("D002");
|
SendMessageAsync("D002");
|
||||||
UpdateRecordFinishTime(function () {
|
UpdateRecordFinishTime(function () {
|
||||||
EmergencyEventTable.ajax.reload();
|
EmergencyEventTable.ajax.reload();
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user