function addzero(num) {
  return num < 10 ? '0' + num : num;
}

/**
* 取得異常資料 by baja
* @param {any} startDate_millisecond
* @param {any} endDate_millisecond
* @param {any} isRecover
* @param {any} isAck
* @param {any} alarmClass
* @param {any} callback
*/
// function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) {
//     let _sourceTmp;
//     var _result = "";
//     var _ss = "";
//     var _bfName = "";
//     var _sourceName = "";
//     var _index = 0;
//     var _recoverState = isRecover ? "!= null" : "= null";
//     var _ackState = isAck ? "= 1" : "!= 1";

//     require(['baja!'], function (baja) {
//         baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " order by timestamp asc").get()
//             .then(function (table) {
//                 return table.cursor({
//                     each: function (record) {
//                         _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
//                         _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
//                         _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
//                         _ss += ', "' + _index + '": {"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
//                         _index++;
//                     },
//                     after: function () {
//                         _result += '{' + '"count": ' + _index;
//                         _result += _ss;
//                         _result += '}';
//                         if (typeof callback === 'function') {
//                             callback(_result);
//                         }
//                     }
//                 });
//             });
//     });
// }
// function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) {
//     let _sourceTmp;
//     var _result = "";
//     var _ss = "";
//     var _bfName = "";
//     var _sourceName = "";
//     var _index = 0;
//     var _recoverState = isRecover ? "!= null" : "= null"
//     var _ackState = isAck ? "= 1" : "!= 1";

//     require(['baja!'], function (baja) {
//         baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " order by timestamp asc").get()
//             .then(function (table) {
//                 return table.cursor({
//                     each: function (record) {
//                         _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
//                         _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
//                         _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];

//                         if (_index == 0)
//                             _ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
//                         else
//                             _ss += ',{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
//                         _index++;
//                     },
//                     after: function () {
//                         _result += '{' + '"count": ' + _index + ', "data":[';
//                         _result += _ss;
//                         _result += ']}';
//                         if (typeof callback === 'function') {
//                             callback(_result);
//                         }
//                     },
//                     limit: -1,
//                     offset: 0
//                 });
//             });
//     });
// }
function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) {
  let _sourceTmp;
  var _result = "";
  var _ss = [];
  var _bfName = "";
  var _sourceName = "";
  var _index = 0;
  var _recoverState = isRecover ? "!= null" : "= null";
  var _ackState = isAck ? "= 'acked'" : "= 'unacked'";
    //console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp asc")
  require(['baja!'], function (baja) {
    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp asc").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            // console.log(record)
            const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0]
            //console.log(alarmDisplayName)
            _sourceTmp = alarmDisplayName.split('_');
            _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
            _sourceName = _sourceTmp.slice(0, 8).join("_");
            _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8];
            if (!_sourceTmp.includes("undefined")) {
              _ss.push({ buildingFloorName_zh: _bfName, uuid: record.get('uuid'), timestamp: record.get('timestamp').$cEncStr, alarmClass: record.get('alarmClass'), sourceName_zh: _sourceName, sourceTmp: _sourceTmp, msgText: record.get('alarmData').get('msgText'), ackState: record.get('ackState'), normalTime: record.get('normalTime'), ackedTime: record.get('ackTime').$cEncStr })
            }
            _index++
          },
          after: function () {
            _result = { count: _index, data: _ss }

            //console.log(552, _result);

            if (typeof callback === 'function') {
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

/**
* 取得單一設備最新10筆異常資料 by baja
* @param {any} devicePath
* @param {any} callback
*/
// function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
//     var _result = "";
//     var _ss = "";
//     var _index = 0;
//     //{ "count":2,"data": [{ "time": "2022/11/14 15:00:00", "errId": "0001", "ackCheck": "未確認", "errReason": "燈泡故障" }, { "time": "2022/11/14 15:00:00", "errId": "0002", "ackCheck": "未確認", "errReason": "燈泡故障" }]}
//     require(['baja!'], function (baja) {
//         baja.Ord.make("local:|foxs:|alarm:|bql:select top 10 timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
//             .then(function (table) {
//                 return table.cursor({
//                     each: function (record) {
//                         if (_index == 0)
//                             _ss += '{"uuid":"' + record.get('uuid') + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "timestamp":"' + record.get('timestamp') + '"}';
//                         else
//                             _ss += ',{"uuid":"' + record.get('uuid') + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "timestamp":"' + record.get('timestamp') + '"}';
//                         _index++;
//                     },
//                     after: function () {
//                         _result += '{' + '"count": ' + _index +', "data":[';

//                         _result += _ss+']';
//                         _result += '}';
//                         if (typeof callback === 'function') {
//                             callback(_result);
//                         }
//                     }
//                 });
//             });
//     });
// }
function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
  var _result = {};
  var _ss = [];
  var _occurrenceTime = "";
  var _normalTime = "";
  var _index = 0;
  //{ "count":2,"data": [{ "time": "2022/11/14 15:00:00", "errId": "0001", "ackCheck": "未確認", "errReason": "燈泡故障" }, { "time": "2022/11/14 15:00:00", "errId": "0002", "ackCheck": "未確認", "errReason": "燈泡故障" }]}
  require(['baja!'], function (baja) {
    baja.Ord.make("local:|foxs:|alarm:|bql:select top 10 timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            _occurrenceTime = "";
            _normalTime = "";
            // console.log(record.get('timestamp'),record.get('normalTime') )
            var _resultUuid = record.get('uuid').toString().split("-");//43dc7846-bd96-4be2-ab35-f11aec729c60

            var _occurrenceTime = new Date(record.get('timestamp').$cEncStr).toLocaleString('zh-tw', { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" });
            // _occurrenceTime += _timestampTemp.getFullYear().toString() + "-" + addzero(_timestampTemp.getMonth() + 1).toString() + "-" + addzero(_timestampTemp.getDate()).toString() + " " + addzero(_timestampTemp.getHours()).toString() + ":" + addzero(_timestampTemp.getMinutes()).toString() + ":" + addzero(_timestampTemp.getSeconds()).toString();

            //var _occurrenceTime = _timestamp.format("yyyy-MM-dd hh:mm:ss");//.toLocaleString();
            var _normalTime = new Date(record.get('normalTime').$cEncStr).toLocaleString('zh-tw', { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" });
            // _normalTime += _normaltime.getFullYear().toString() + "-" + addzero(_normaltime.getMonth() + 1).toString() + "-" + addzero(_normaltime.getDate()).toString() + " " + addzero(_normaltime.getHours()).toString() + ":" + addzero(_normaltime.getMinutes()).toString() + ":" + addzero(_normaltime.getSeconds()).toString();

            var _msgText = record.get('alarmData').get('msgText');// == 1 ? _occurrenceTime : "未確認";
            var _ackText = record.get('ackState') == 1 ? _occurrenceTime : "未確認";
            _ss.push({ uuid: _resultUuid[0], msgText: _msgText, ackState: _ackText, timestamp: _occurrenceTime, normalTime: _normalTime })
            _index++;
          },
          after: function () {
            _result = JSON.stringify({ count: _index, data: _ss })
            if (typeof callback === 'function') {
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

/**
* 在單一系統下,取得各個設備的異常狀態
* @param {any} systemPath
* @param {any} callback
*/
// function getOneSystemAlarmStateByBaja(systemPath, callback) {
//     var _result = "";
//     var _ss = "";
//     var _index = 0;

//     require(['baja!'], function (baja) {
//         baja.Ord.make("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get()
//             .then(function (table) {
//                 return table.cursor({
//                     each: function (record) {
//                         _ss += ', "' + _index + '": {"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}';
//                         _index++;
//                     },
//                     after: function () {
//                         _result += '{' + '"count": ' + _index;
//                         _result += _ss;
//                         _result += '}';
//                         if (typeof callback === 'function') {
//                             callback(_result);
//                         }
//                     }
//                 });
//             });
//     });
// }
function getOneSystemAlarmStateByBaja(systemPath, callback) {
  var _result = "";
  var _ss = "";
  var _index = 0;
  /*  console.log("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc")*/
  require(['baja!'], function (baja) {
    baja.Ord.make("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            if (_index == 0)
              _ss += '{"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}';
            else
              _ss += ',{"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}';
            _index++;
          },
          after: function () {
            _result += '{' + '"count": ' + _index + ', "data":[';
            _result += _ss;
            _result += ']}';
            if (typeof callback === 'function') {
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

/**
* 在單一系統下,取得各個系統的狀態 異常與否
* @param {any} systemPath
* @param {any} callback
*/
function getOneSystemStateByBaja(systemPath, callback) {
  var _result = "";
  var _ss = "";
  var _index = 0;

  require(['baja!'], function (baja) {
    baja.Ord.make("local:|foxs:|alarm:|bql:select top 1 alarmData, alarmData.sourceName, sourceState where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            //if (_index == 0)
            //    _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
            //else
            //    _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
            _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
            _index++;
          },
          after: function () {
            _result += '{' + '"count": ' + _index + ', "data":[';
            _result += _ss;
            _result += ']}';
            if (typeof callback === 'function') {
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

/**
* [首頁] 查詢異常數量
* @param {any} callback
*/
function getAlarmCountByBaja(callback) {
  var _result = { count: 0 };
  var _index = 0;

  require(['baja!'], function (baja) {
    baja.Ord.make("local:|foxs:|alarm:|bql:select sourceState where sourceState = 'offnormal'").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            _index++;
          },
          after: function () {
            _result.count = _index;
            if (typeof callback === 'function') {
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

/**
* [首頁] 查詢復歸數量
* @param {any} callback
*/
function getRecoverCountByBaja(callback) {
  var _result = { count: 0 };
  var _index = 0;

  require(['baja!'], function (baja) {
    baja.Ord.make("local:|foxs:|alarm:|bql:select normalTime where normalTime != null").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            _index++;
          },
          after: function () {
            _result.count = _index;
            if (typeof callback === 'function') {
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

/**
* [首頁] 查詢已確認異常數量
* @param {any} callback
*/
function getCheckedAckedCountByBaja(callback) {
  var _result = { count: 0 };
  var _index = 0;

  require(['baja!'], function (baja) {
    baja.Ord.make("local:|foxs:|alarm:|bql:select ackState where ackState ='acked'").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            _index++;
          },
          after: function () {
            _result.count = _index;
            if (typeof callback === 'function') {
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

/**
* [首頁] 查詢未確認異常數量
* @param {any} callback
*/
function getUnCheckedAckedCountByBaja(callback) {
  var _result = { count: 0 };
  var _index = 0;

  require(['baja!'], function (baja) {
    baja.Ord.make("local:|foxs:|alarm:|bql:select ackState where ackState ='unacked'").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            _index++;
          },
          after: function () {
            _result.count = _index;
            if (typeof callback === 'function') {
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

/**
* [首頁] 取得現在是異常的系統 (較快)
* @param {any} callback
*/
function getSystemAlarmByBaja(callback) {
  var _result = { count: 0, data: [] };
  var _index = 0;

  require(['baja!'], function (baja) {
    // console.log("ip:202.39.218.221|foxs:4912|alarm:|bql:select alarmClass where isAlarm")
    //baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where isAlarm").get()
    baja.Ord.make("local:|foxs:|alarm:|bql:select alarmClass where isAlarm").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            // console.log(record)
            let main = {};
            main.alarmClass = record.get('alarmClass');

            _result.data.push(main);
            _index++;
          },
          after: function () {
            _result.count = _index;
            if (typeof callback === 'function') {
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

// /**
//  *  取得單一設備異常
//  * @param {any} callback
//  */
// //(devicePath, callback)
//  function getOneDeviceAlarmByBaja(devicePath, startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) {
//     // var _result = "";
//     // var _ss = "";
//     // var _occurrenceTime = "";
//     // var _normalTime = "";
//     // var _index = 0;

//     let _sourceTmp;
//     var _result = "";
//     var _ss = "";
//     var _bfName = "";
//     var _sourceName = "";
//     var _index = 0;
//     var _recoverState = isRecover ? "!= null" : "= null";
//     //local:|foxs:|alarm:|bql:select ackState from openAlarms where ackState ='acked'
//     var _ackState = isAck ? "= 'acked'" : "= 'unacked'";

//     //{ "count":2,"data": [{ "time": "2022/11/14 15:00:00", "errId": "0001", "ackCheck": "未確認", "errReason": "燈泡故障" }, { "time": "2022/11/14 15:00:00", "errId": "0002", "ackCheck": "未確認", "errReason": "燈泡故障" }]}
//     require(['baja!'], function (baja) {
//         console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmData.sourceName like '%" + devicePath + "%' and timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
//         baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmData.sourceName like '%" + devicePath + "%' and timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
//         // console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmData.sourceName like '%" + devicePath + "%' and alarmClass = '" + alarmClass + "' and timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
//         // baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmData.sourceName like '%" + devicePath + "%' and alarmClass = '" + alarmClass + "' and timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
//         //baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
//             .then(function (table) {
//                 return table.cursor({
//                     each: function (record) {

//                         _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
//                         _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
//                         _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
//                         // _occurrenceTime = "";
//                         // _normalTime = "";
//                         //var _resultUuid = record.get('uuid').toString().split("-");//43dc7846-bd96-4be2-ab35-f11aec729c60

//                         // var _timestampTemp = new Date(record.get('timestamp').toString());
//                         // _occurrenceTime += _timestampTemp.getFullYear().toString() + "-" + addzero(_timestampTemp.getMonth() + 1).toString() + "-" + addzero(_timestampTemp.getDate()).toString() + " " + addzero(_timestampTemp.getHours()).toString() + ":" + addzero(_timestampTemp.getMinutes()).toString() + ":" + addzero(_timestampTemp.getSeconds()).toString();

//                         // var _normaltime = new Date(record.get('normalTime').toString());
//                         // _normalTime += _normaltime.getFullYear().toString() + "-" + addzero(_normaltime.getMonth() + 1).toString() + "-" + addzero(_normaltime.getDate()).toString() + " " + addzero(_normaltime.getHours()).toString() + ":" + addzero(_normaltime.getMinutes()).toString() + ":" + addzero(_normaltime.getSeconds()).toString();

//                         // var _msgText = record.get('alarmData').get('msgText');// == 1 ? _occurrenceTime : "未確認";
//                         // var _ackText = record.get('ackState') == 1 ? _occurrenceTime : "未確認";

//                         //_ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
//                         if (_index == 0)
//                             _ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
//                             //_ss += '{"uuid":"' + record.get('uuid') + '", "msgText":"' + _msgText + '", "ackState":"' + _ackText + '", "timestamp":"' + _occurrenceTime + '", "normalTime":"' + _normalTime + '"}';
//                         else
//                             _ss += ',{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
//                         _index++;
//                     },
//                     after: function () {
//                         _result += '{' + '"count": ' + _index + ', "data":[';
//                         _result += _ss + ']';
//                         _result += '}';
//                         if (typeof callback === 'function') {
//                             callback(_result);
//                         }
//                     },
//                     limit: -1,
//                     offset: 0
//                 });
//             });
//     });
// }

/**
*  取得單一設備異常
* @param {any} devicePath
* @param {any} callback
*/
function getOneDeviceAlarmByBaja(devicePath, callback) {
  let _sourceTmp;
  var _result = "";
  var _ss = [];
  var _bfName = "";
  var _sourceName = "";
  var _index = 0;

  require(['baja!'], function (baja) {
    // console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc");
    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
            _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
            _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
            _ss.push({ buildingFloorName_zh: _bfName, uuid: record.get('uuid'), timestamp: record.get('timestamp'), alarmClass: record.get('alarmClass'), sourceName_zh: _sourceName, msgText: record.get('alarmData').get('msgText'), ackState: record.get('ackState'), normalTime: record.get('normalTime') })
            _index++
          },
          after: function () {
            _result = { count: _index, data: _ss }

            //console.log(552, _result);

            if (typeof callback === 'function') {
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

function getOtherAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) {
  var _result = { count: 0, data: [] };
  var _index = 0;
  var _recoverState = isRecover ? "!= null" : "= null";
  var _ackState = isAck ? "= 'acked'" : "= 'unacked'";

  let startUrl = "";
  if (startDate_millisecond) {
    startUrl = "timestamp.millis >= " + startDate_millisecond + " and ";
  }
  console.log("告警2", "local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
  require(['baja!'], function (baja) {

    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            // console.log(record)
            let main = {};
            //   const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0]
            const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName')
            _sourceTmp = alarmDisplayName.split('_');
            let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4]
            let _sourceName = _sourceTmp.slice(0, 8).join("_");
            _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8];
            console.log(record.get('alarmData').get('sourceName'), _bfName, _sourceName)

            main.buildingFloorName_zh = _bfName;
            main.sourceName_zh = _sourceName;
            main.uuid = record.get('uuid').$val;
            main.timestamp = record.get('timestamp').$cEncStr;
            main.alarmClass = record.get('alarmClass');
            main.point = _sourceTmp;
            main.sourceTmp = _sourceTmp;
            main.devicePath = _sourceName;
            main.msgText = record.get('alarmData').get('msgText');
            main.normalTime = record.get('normalTime');
            main.priority = record.get('priority');
            main.ackedTime = record.get('ackTime').$cEncStr;
            main.ackState = record.get('ackState').$ordinal
            if (_sourceTmp.includes("undefined")) {
              main.buildingFloorName_zh = "無";
              main.alarmClass = "系統異常";
              main.sourceTmp = "無";
              main.msgText = "";
              _result.data.push(main);
            }

            _index++;
          },
          after: function () {
            _result.count = _index;
            if (typeof callback === 'function') {
              //console.log(_result)
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

function getAllDeviceAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) {
  var _result = { count: 0, data: [] };
  var _index = 0;
  var _recoverState = isRecover ? "!= null" : "= null";
  var _ackState = isAck ? "= 'acked'" : "= 'unacked'";

  let startUrl = "";
  if (startDate_millisecond) {
    startUrl = "timestamp.millis >= " + startDate_millisecond + " and ";
  }
  //   console.log("告警", "local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
  require(['baja!'], function (baja) {

    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            // console.log(record)
            let main = {};
            //   const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0]
            const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName')
            _sourceTmp = alarmDisplayName.split('_');
            let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4]
            let _sourceName = _sourceTmp.slice(0, 8).join("_");
            _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8];

            main.buildingFloorName_zh = _bfName;
            main.sourceName_zh = _sourceName;
            main.uuid = record.get('uuid').$val;
            main.timestamp = record.get('timestamp').$cEncStr;
            main.alarmClass = record.get('alarmClass');
            main.point = _sourceTmp;
            main.sourceTmp = _sourceTmp;
            main.devicePath = _sourceName;
            main.msgText = record.get('alarmData').get('msgText');
            main.normalTime = record.get('normalTime');
            main.priority = record.get('priority');
            main.ackedTime = record.get('ackTime').$cEncStr;
            main.ackState = record.get('ackState').$ordinal
            if (_sourceTmp.includes("undefined")) {
              // console.log(main.ackState)
              main.buildingFloorName_zh = "無";
              main.alarmClass = "系統異常";
              main.sourceTmp = "無";
              main.msgText = "";
            }
            _result.data.push(main);
            _index++;
          },
          after: function () {
            _result.count = _index;
            if (typeof callback === 'function') {
              //console.log(_result)
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}


function getDeviceAlarmCardByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) {
  var _result = { count: 0, data: [] };
  var _index = 0;
  var _recoverState = isRecover ? "!= null" : "= null";
  var _ackState = isAck ? "= 'acked'" : "= 'unacked'";

  let startUrl = "";
  if (startDate_millisecond) {
    startUrl = "timestamp.millis >= " + startDate_millisecond + " and ";
  }
  // console.log("首頁","local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
  require(['baja!'], function (baja) {

    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            // console.log(record)
            let main = {};
            // console.log(record.get('alarmData').get('sourceName'),record.get('timestamp').$cEncStr)
            const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0]
            //console.log(alarmDisplayName)
            _sourceTmp = alarmDisplayName.split('_');
            let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4]
            let _sourceName = _sourceTmp.slice(0, 8).join("_");
            _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8];

            main.buildingFloorName_zh = _bfName;
            main.sourceName_zh = _sourceName;
            main.uuid = record.get('uuid').$val;
            main.timestamp = record.get('timestamp').$cEncStr;
            main.alarmClass = record.get('alarmClass');
            main.point = _sourceTmp;
            main.sourceTmp = _sourceTmp;
            main.devicePath = _sourceName;
            main.msgText = record.get('alarmData').get('msgText');
            main.normalTime = record.get('normalTime');
            main.priority = record.get('priority');
            main.ackedTime = record.get('ackTime').$cEncStr;
            main.ackState = record.get('ackState').$ordinal
            //   if (!_sourceTmp.includes("undefined")) {
            //       // console.log(main.ackState)
            //     }
            _result.data.push(main);
            _index++;
          },
          after: function () {
            _result.count = _index;
            if (typeof callback === 'function') {
              //console.log(_result)
              callback(_result);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}

/**
* [首頁] 圓餅圖資料 - 全部的異常
* @param {any} callback
*/
function getAlarmForChartDataByBaja(callback) {
  var _result = "";
  var _ss = "";
  var _index = 0;

  require(['baja!'], function (baja) {
    baja.Ord.make("local:|foxs:|alarm:|bql:select *").get()
      .then(function (table) {
        return table.cursor({
          each: function (record) {
            if (_index == 0)
              _ss += '{"alarmClass":"' + record.get('alarmClass') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
            else
              _ss += ',{"alarmClass":"' + record.get('alarmClass') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
            _index++;
          },
          after: function () {
            //_result += '{' + '"count": ' + _index + ', "data":[';
            //_result += _ss;
            //_result += ']}';
            if (typeof callback === 'function') {
              callback(_index);
            }
          },
          limit: -1,
          offset: 0
        });
      });
  });
}