Merge branch 'MCUT' of https://gitea.mjm-staging.developers-homelab.net/BIMS/BIMS into MCUT
This commit is contained in:
		
						commit
						a79a896641
					
				@ -162,12 +162,12 @@ namespace Backend.Controllers
 | 
				
			|||||||
                //obixApiConfig.UrlSlot =  variableObix.Where(x => x.Name == "url_slot").Select(x => x.Value).FirstOrDefault();
 | 
					                //obixApiConfig.UrlSlot =  variableObix.Where(x => x.Name == "url_slot").Select(x => x.Value).FirstOrDefault();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                var urlSlots = backendRepository.GetAllAsync<string>("select obixSlot from building where deleted = 0").Result;
 | 
					                var urlSlots = backendRepository.GetAllAsync<string>("select obixSlot from building where deleted = 0").Result;
 | 
				
			||||||
                foreach(var us in urlSlots)
 | 
					                //foreach(var us in urlSlots)
 | 
				
			||||||
                {
 | 
					                //{
 | 
				
			||||||
                    var data = svc.obixHisQuery(obixApiConfig.ApiBase + "obix/config/Program/ObixQuery/query/", obixApiConfig.ApiBase + "obix/histories", us,
 | 
					                    var data = svc.obixHisQuery(obixApiConfig.ApiBase + "obix/config/Program/ObixQuery/query/", obixApiConfig.ApiBase + "obix/histories", "",
 | 
				
			||||||
                                obixApiConfig.UserName, obixApiConfig.Password);
 | 
					                                obixApiConfig.UserName, obixApiConfig.Password);
 | 
				
			||||||
                    ds.AddRange(data);
 | 
					                    ds.AddRange(data);
 | 
				
			||||||
                }
 | 
					               // }
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                var buildings = backendRepository.GetAllAsync<string>("select building_tag from building where deleted = 0").Result;
 | 
					                var buildings = backendRepository.GetAllAsync<string>("select building_tag from building where deleted = 0").Result;
 | 
				
			||||||
                apiResult.Code = "0000";
 | 
					                apiResult.Code = "0000";
 | 
				
			||||||
@ -207,6 +207,25 @@ namespace Backend.Controllers
 | 
				
			|||||||
                    await niagaraDataSynchronizeRepository.CheckItemDiffFullNameAndCover(); // update device_item.fullname
 | 
					                    await niagaraDataSynchronizeRepository.CheckItemDiffFullNameAndCover(); // update device_item.fullname
 | 
				
			||||||
                    await niagaraDataSynchronizeRepository.ItemCheckFullNameEmptyReplaceByDeviceName(); // 檢查device_item內FullName為空的值,以points取代
 | 
					                    await niagaraDataSynchronizeRepository.ItemCheckFullNameEmptyReplaceByDeviceName(); // 檢查device_item內FullName為空的值,以points取代
 | 
				
			||||||
                    await niagaraDataSynchronizeRepository.CheckItemIsShowHistory();
 | 
					                    await niagaraDataSynchronizeRepository.CheckItemIsShowHistory();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    #region 歷史資料處理
 | 
				
			||||||
 | 
					                    ds.Clear();
 | 
				
			||||||
 | 
					                    var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'";
 | 
				
			||||||
 | 
					                    var variableObix = backendRepository.GetAllAsync<Backend.Models.KeyValue>(sqlObix).Result;
 | 
				
			||||||
 | 
					                    var obixApiConfig = new Backend.Models.ObixApiConfig();
 | 
				
			||||||
 | 
					                    EDFunction ed = new EDFunction();
 | 
				
			||||||
 | 
					                    obixApiConfig.ApiBase = variableObix.Where(x => x.Name == "ApiBase").Select(x => x.Value).FirstOrDefault();
 | 
				
			||||||
 | 
					                    obixApiConfig.UserName = variableObix.Where(x => x.Name == "UserName").Select(x => x.Value).FirstOrDefault();
 | 
				
			||||||
 | 
					                    obixApiConfig.Password = variableObix.Where(x => x.Name == "Password").Select(x => x.Value).FirstOrDefault();
 | 
				
			||||||
 | 
					                    //obixApiConfig.UrlSlot =  variableObix.Where(x => x.Name == "url_slot").Select(x => x.Value).FirstOrDefault();
 | 
				
			||||||
 | 
					                    webRequestService svc = new webRequestService();
 | 
				
			||||||
 | 
					                    var data = svc.obixHisQuery_v2(obixApiConfig.ApiBase + "obix/config/Program/ObixQuery/query/", obixApiConfig.ApiBase + "obix/histories", "",
 | 
				
			||||||
 | 
					                                obixApiConfig.UserName, obixApiConfig.Password);
 | 
				
			||||||
 | 
					                    ds.AddRange(data);
 | 
				
			||||||
 | 
					                    // save to history 
 | 
				
			||||||
 | 
					                    await niagaraDataSynchronizeRepository.InsertItemFromNiagara_History(ds, building); // insert 暫存table import_niagara_item_history
 | 
				
			||||||
 | 
					                    #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    result = true;
 | 
					                    result = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    apiResult.Code = "0000";
 | 
					                    apiResult.Code = "0000";
 | 
				
			||||||
 | 
				
			|||||||
@ -131,6 +131,149 @@ namespace Backend.Services.Implement
 | 
				
			|||||||
            return result;
 | 
					            return result;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 獲取 niagara history 中的點位
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="bqlUrlString"></param>
 | 
				
			||||||
 | 
					        /// <param name="urlString"></param>
 | 
				
			||||||
 | 
					        /// <param name="slot"></param>
 | 
				
			||||||
 | 
					        /// <returns></returns>
 | 
				
			||||||
 | 
					        public List<ImpNiaItem> obixHisQuery_v2(string bqlUrlString, string urlString, string slot, string acc, string pass)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            //String username = "obixUser";
 | 
				
			||||||
 | 
					            //String password = "Admin123456";
 | 
				
			||||||
 | 
					            //String username = "stanGG";
 | 
				
			||||||
 | 
					            //String password = "St12345678";
 | 
				
			||||||
 | 
					            String username = acc;
 | 
				
			||||||
 | 
					            String password = pass;
 | 
				
			||||||
 | 
					            String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
 | 
				
			||||||
 | 
					            String oneStationName = null;
 | 
				
			||||||
 | 
					            #region get control point data
 | 
				
			||||||
 | 
					            List<control_point> conPoint = new List<control_point>();
 | 
				
			||||||
 | 
					            String cp_API_Url = bqlUrlString;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            HttpWebRequest cp_Postrequest = (HttpWebRequest)WebRequest.Create(cp_API_Url);
 | 
				
			||||||
 | 
					            cp_Postrequest.Method = "POST";
 | 
				
			||||||
 | 
					            cp_Postrequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
 | 
					            cp_Postrequest.PreAuthenticate = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //using (var streamWriter = new StreamWriter(cp_Postrequest.GetRequestStream()))
 | 
				
			||||||
 | 
					            //{
 | 
				
			||||||
 | 
					            //    string json = "<str val='" + slot + "bql: select * from control:ControlPoint'/>";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //    streamWriter.Write(json);
 | 
				
			||||||
 | 
					            //}
 | 
				
			||||||
 | 
					            //HttpWebResponse cp_response = (HttpWebResponse)cp_Postrequest.GetResponse();
 | 
				
			||||||
 | 
					            //var cp_responseString = new StreamReader(cp_response.GetResponseStream()).ReadToEnd();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //XmlDocument cp_xmlDoc = new XmlDocument();
 | 
				
			||||||
 | 
					            //cp_xmlDoc.LoadXml(cp_responseString);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //string cp_jsonText = JsonConvert.SerializeXmlNode(cp_xmlDoc);
 | 
				
			||||||
 | 
					            //var cp_data = Welcome.FromJson(cp_jsonText);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //foreach (var item in cp_data.Obj.Str)
 | 
				
			||||||
 | 
					            //{
 | 
				
			||||||
 | 
					            //    control_point row = new control_point();
 | 
				
			||||||
 | 
					            //    string[] s1 = item.Val.Split(',');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //    string[] s2 = s1[0].Split('/');
 | 
				
			||||||
 | 
					            //    var displayName = s1[1].Split('=')[1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //    row.name = s1[0].Remove(s1[0].Length - 1, 1).Remove(0, 1);
 | 
				
			||||||
 | 
					            //    row.displayName = displayName;
 | 
				
			||||||
 | 
					            //    row.isHistory = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //    conPoint.Add(row);
 | 
				
			||||||
 | 
					            //}
 | 
				
			||||||
 | 
					            #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            #region main program
 | 
				
			||||||
 | 
					            List<ImpNiaItem> result = new List<ImpNiaItem>();
 | 
				
			||||||
 | 
					            String API_Url = urlString;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            HttpWebRequest Postrequest = (HttpWebRequest)WebRequest.Create(API_Url);
 | 
				
			||||||
 | 
					            Postrequest.Method = "GET";
 | 
				
			||||||
 | 
					            Postrequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
 | 
					            Postrequest.PreAuthenticate = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            HttpWebResponse response = (HttpWebResponse)Postrequest.GetResponse();
 | 
				
			||||||
 | 
					            var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            XmlDocument xmlDoc = new XmlDocument();
 | 
				
			||||||
 | 
					            xmlDoc.LoadXml(responseString);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 1.循環所有的 station
 | 
				
			||||||
 | 
					            //ref https://stackoverflow.com/questions/642293/how-do-i-read-and-parse-an-xml-file-in-c
 | 
				
			||||||
 | 
					            foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var stationName = node.Attributes["name"].InnerText; // WSP_Supervisor
 | 
				
			||||||
 | 
					                oneStationName = oneStationName ?? stationName;
 | 
				
			||||||
 | 
					                String API_Url2 = urlString + "/" + stationName; // http://192.168.0.136:8081/obix/histories/WSP_Supervisor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                HttpWebRequest Postrequest2 = (HttpWebRequest)WebRequest.Create(API_Url2);
 | 
				
			||||||
 | 
					                Postrequest2.Method = "GET";
 | 
				
			||||||
 | 
					                Postrequest2.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
 | 
					                Postrequest2.PreAuthenticate = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                HttpWebResponse response2 = (HttpWebResponse)Postrequest2.GetResponse();
 | 
				
			||||||
 | 
					                var responseString2 = new StreamReader(response2.GetResponseStream()).ReadToEnd();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                XmlDocument xmlDoc2 = new XmlDocument();
 | 
				
			||||||
 | 
					                xmlDoc2.LoadXml(responseString2);
 | 
				
			||||||
 | 
					                // 2.獲取 station 中全部的設備+點位
 | 
				
			||||||
 | 
					                foreach (XmlNode node2 in xmlDoc2.DocumentElement.ChildNodes)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    string tagName = node2.Attributes["name"].InnerText;
 | 
				
			||||||
 | 
					                    if (tagName.Split('_').Length == 9)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if (tagName.Split('_')[1].IndexOf("8F5") != -1)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            string ss = tagName.Split('_')[1];
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        ImpNiaItem row = new ImpNiaItem();
 | 
				
			||||||
 | 
					                        row.device_area_tag = tagName.Split('_')[0];
 | 
				
			||||||
 | 
					                        row.device_building_tag = tagName.Split('_')[1];
 | 
				
			||||||
 | 
					                        row.device_system_tag = tagName.Split('_')[2];
 | 
				
			||||||
 | 
					                        row.device_name_tag = tagName.Split('_')[3];
 | 
				
			||||||
 | 
					                        row.device_floor_tag= tagName.Split('_')[4];
 | 
				
			||||||
 | 
					                        row.device_master_tag= tagName.Split('_')[5];
 | 
				
			||||||
 | 
					                        row.device_last_name_tag = tagName.Split('_')[6];
 | 
				
			||||||
 | 
					                        row.device_serial_tag = tagName.Split('_')[7];
 | 
				
			||||||
 | 
					                        row.device_point_name = tagName.Split('_')[8];
 | 
				
			||||||
 | 
					                        row.parent_path = stationName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        result.Add(row); 
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else if (tagName.Split('_').Length == 6)
 | 
				
			||||||
 | 
					                    { //巨蛋 tag 5 段版本
 | 
				
			||||||
 | 
					                        ImpNiaItem row = new ImpNiaItem();
 | 
				
			||||||
 | 
					                        if (tagName.Split('_')[1] == "S") //for security system
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            row.device_building_tag = tagName.Split('_')[0];
 | 
				
			||||||
 | 
					                            row.device_system_tag = tagName.Split('_')[1];
 | 
				
			||||||
 | 
					                            row.device_floor_tag = tagName.Split('_')[2];
 | 
				
			||||||
 | 
					                            row.device_name_tag = tagName.Split('_')[3];
 | 
				
			||||||
 | 
					                            row.device_point_name = tagName.Split('_')[5];
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        else //for normal
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            row.device_building_tag = tagName.Split('_')[0];
 | 
				
			||||||
 | 
					                            //row.device_system_tag = tagName.Split('_')[1];
 | 
				
			||||||
 | 
					                            row.device_floor_tag = tagName.Split('_')[2];
 | 
				
			||||||
 | 
					                            row.device_name_tag = tagName.Split('_')[1];
 | 
				
			||||||
 | 
					                            row.device_point_name = tagName.Split('_')[5];
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        row.parent_path = stationName;
 | 
				
			||||||
 | 
					                        result.Add(row);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            #endregion
 | 
				
			||||||
 | 
					            return result.ToList();
 | 
				
			||||||
 | 
					            //return result.Where(x => x.full_name != null).ToList();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 獲取 niagara history 中的點位
 | 
					        /// 獲取 niagara history 中的點位
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -204,7 +347,7 @@ namespace Backend.Services.Implement
 | 
				
			|||||||
            xmlDoc.LoadXml(responseString);
 | 
					            xmlDoc.LoadXml(responseString);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //ref https://stackoverflow.com/questions/642293/how-do-i-read-and-parse-an-xml-file-in-c
 | 
					            //ref https://stackoverflow.com/questions/642293/how-do-i-read-and-parse-an-xml-file-in-c
 | 
				
			||||||
            foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes)
 | 
					            foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes) //循環所有的 station
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var stationName = node.Attributes["name"].InnerText; // WSP_Supervisor
 | 
					                var stationName = node.Attributes["name"].InnerText; // WSP_Supervisor
 | 
				
			||||||
                oneStationName = oneStationName ?? stationName;
 | 
					                oneStationName = oneStationName ?? stationName;
 | 
				
			||||||
@ -328,6 +471,8 @@ namespace Backend.Services.Implement
 | 
				
			|||||||
            return result.Where(x => x.full_name != null).ToList();
 | 
					            return result.Where(x => x.full_name != null).ToList();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public List<Device_value_disaster> obixDevDisaster(string urlString, string bql, string tag_quantity, string acc, string pass, string dt)
 | 
					        public List<Device_value_disaster> obixDevDisaster(string urlString, string bql, string tag_quantity, string acc, string pass, string dt)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            List<Device_value_disaster> result = new List<Device_value_disaster>();
 | 
					            List<Device_value_disaster> result = new List<Device_value_disaster>();
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ using Microsoft.Extensions.Options;
 | 
				
			|||||||
using Newtonsoft.Json;
 | 
					using Newtonsoft.Json;
 | 
				
			||||||
using Newtonsoft.Json.Linq;
 | 
					using Newtonsoft.Json.Linq;
 | 
				
			||||||
using Quartz;
 | 
					using Quartz;
 | 
				
			||||||
 | 
					using Repository.BackendRepository.Implement;
 | 
				
			||||||
using Repository.BackendRepository.Interface;
 | 
					using Repository.BackendRepository.Interface;
 | 
				
			||||||
using Repository.Helper;
 | 
					using Repository.Helper;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
@ -47,6 +48,7 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
        public async Task Execute(IJobExecutionContext context)
 | 
					        public async Task Execute(IJobExecutionContext context)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Task_Detail task_Detail = new Task_Detail(loggers, backgroundServiceRepository);
 | 
					            Task_Detail task_Detail = new Task_Detail(loggers, backgroundServiceRepository);
 | 
				
			||||||
 | 
					            string device_number = string.Empty;
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if(await task_Detail.GetNeedWorkTask("ArchiveElectricMeterDayJob", "All"))
 | 
					                if(await task_Detail.GetNeedWorkTask("ArchiveElectricMeterDayJob", "All"))
 | 
				
			||||||
@ -159,8 +161,17 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
                            List<Dictionary<string, object>> waterArchiveDayRawDatas = new List<Dictionary<string, object>>();
 | 
					                            List<Dictionary<string, object>> waterArchiveDayRawDatas = new List<Dictionary<string, object>>();
 | 
				
			||||||
                            foreach (var deviceNumberPoint in electricDeviceNumberPoints)
 | 
					                            foreach (var deviceNumberPoint in electricDeviceNumberPoints)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                                device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                                var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                                if (string.IsNullOrEmpty(station))
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					                                    continue;
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                                //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                                //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                                archiveRequest.Method = "POST";
 | 
					                                archiveRequest.Method = "POST";
 | 
				
			||||||
                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -216,8 +227,13 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            foreach (var deviceNumberPoint in waterDeviceNumberPoints)
 | 
					                            foreach (var deviceNumberPoint in waterDeviceNumberPoints)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                                device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                                var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                                //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                                //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                                archiveRequest.Method = "POST";
 | 
					                                archiveRequest.Method = "POST";
 | 
				
			||||||
                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -628,8 +644,17 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
                            List<Dictionary<string, object>> waterArchiveWeekRawDatas = new List<Dictionary<string, object>>();
 | 
					                            List<Dictionary<string, object>> waterArchiveWeekRawDatas = new List<Dictionary<string, object>>();
 | 
				
			||||||
                            foreach (var deviceNumberPoint in electricDeviceNumberPoints)
 | 
					                            foreach (var deviceNumberPoint in electricDeviceNumberPoints)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                                device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                                var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                                if (string.IsNullOrEmpty(station))
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					                                    continue;
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                                //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                                //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                                archiveRequest.Method = "POST";
 | 
					                                archiveRequest.Method = "POST";
 | 
				
			||||||
                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -686,8 +711,13 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            foreach (var deviceNumberPoint in waterDeviceNumberPoints)
 | 
					                            foreach (var deviceNumberPoint in waterDeviceNumberPoints)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                                device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                                var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                                //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                                //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                                archiveRequest.Method = "POST";
 | 
					                                archiveRequest.Method = "POST";
 | 
				
			||||||
                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -995,8 +1025,17 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
                            List<Dictionary<string, object>> waterArchiveMonthRawDatas = new List<Dictionary<string, object>>();
 | 
					                            List<Dictionary<string, object>> waterArchiveMonthRawDatas = new List<Dictionary<string, object>>();
 | 
				
			||||||
                            foreach (var deviceNumberPoint in electricDeviceNumberPoints)
 | 
					                            foreach (var deviceNumberPoint in electricDeviceNumberPoints)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                                device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                                var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                                if (string.IsNullOrEmpty(station))
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					                                    continue;
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                                //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                                //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                                archiveRequest.Method = "POST";
 | 
					                                archiveRequest.Method = "POST";
 | 
				
			||||||
                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -1052,8 +1091,13 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            foreach (var deviceNumberPoint in waterDeviceNumberPoints)
 | 
					                            foreach (var deviceNumberPoint in waterDeviceNumberPoints)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                                device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                                var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                                archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                                //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                                //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                                archiveRequest.Method = "POST";
 | 
					                                archiveRequest.Method = "POST";
 | 
				
			||||||
                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                                archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -1354,17 +1398,19 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "All", exception.ToString());
 | 
					                await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "All", exception.ToString());
 | 
				
			||||||
                logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】");
 | 
					                logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】");
 | 
				
			||||||
                logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】[Exception]:{0}", exception.ToString());
 | 
					                logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】[Exception]:{0} {1}", exception.ToString());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private List<Dictionary<string, object>> ArrangeRawData(DeviceNumberPoint deviceNumberPoint, JObject jsonResult)
 | 
					        private List<Dictionary<string, object>> ArrangeRawData(DeviceNumberPoint deviceNumberPoint, JObject jsonResult)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            List<Dictionary<string, object>> arrangeRawDatas = new List<Dictionary<string, object>>();
 | 
					            List<Dictionary<string, object>> arrangeRawDatas = new List<Dictionary<string, object>>();
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
                var histories = jsonResult["obj"]["list"];
 | 
					                var histories = jsonResult["obj"]["list"];
 | 
				
			||||||
                var rawdateCount = Convert.ToInt32(jsonResult["obj"]["int"]["@val"].ToString());
 | 
					                var rawdateCount = Convert.ToInt32(jsonResult["obj"]["int"]["@val"].ToString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(rawdateCount == 0)
 | 
					                if (rawdateCount == 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    return null;
 | 
					                    return null;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -1415,19 +1461,19 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
                                    switch (name)
 | 
					                                    switch (name)
 | 
				
			||||||
                                    {
 | 
					                                    {
 | 
				
			||||||
                                        case "min":
 | 
					                                        case "min":
 | 
				
			||||||
                                        var min = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                            var min = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                            arrangeRawData.Add("@min_rawdata", min);
 | 
					                                            arrangeRawData.Add("@min_rawdata", min);
 | 
				
			||||||
                                            break;
 | 
					                                            break;
 | 
				
			||||||
                                        case "max":
 | 
					                                        case "max":
 | 
				
			||||||
                                        var max = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                            var max = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                            arrangeRawData.Add("@max_rawdata", max);
 | 
					                                            arrangeRawData.Add("@max_rawdata", max);
 | 
				
			||||||
                                            break;
 | 
					                                            break;
 | 
				
			||||||
                                        case "avg":
 | 
					                                        case "avg":
 | 
				
			||||||
                                        var avg = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                            var avg = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                            arrangeRawData.Add("@avg_rawdata", avg);
 | 
					                                            arrangeRawData.Add("@avg_rawdata", avg);
 | 
				
			||||||
                                            break;
 | 
					                                            break;
 | 
				
			||||||
                                        case "sum":
 | 
					                                        case "sum":
 | 
				
			||||||
                                        var sum = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
					                                            var sum = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                            arrangeRawData.Add("@sum_rawdata", sum);
 | 
					                                            arrangeRawData.Add("@sum_rawdata", sum);
 | 
				
			||||||
                                            break;
 | 
					                                            break;
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
@ -1483,19 +1529,19 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
                                switch (name)
 | 
					                                switch (name)
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    case "min":
 | 
					                                    case "min":
 | 
				
			||||||
                                    var min = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                        var min = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@min_rawdata", min);
 | 
					                                        arrangeRawData.Add("@min_rawdata", min);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                    case "max":
 | 
					                                    case "max":
 | 
				
			||||||
                                    var max = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                        var max = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@max_rawdata", max);
 | 
					                                        arrangeRawData.Add("@max_rawdata", max);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                    case "avg":
 | 
					                                    case "avg":
 | 
				
			||||||
                                    var avg = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                        var avg = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@avg_rawdata", avg);
 | 
					                                        arrangeRawData.Add("@avg_rawdata", avg);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                    case "sum":
 | 
					                                    case "sum":
 | 
				
			||||||
                                    var sum = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
					                                        var sum = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@sum_rawdata", sum);
 | 
					                                        arrangeRawData.Add("@sum_rawdata", sum);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
@ -1512,5 +1558,14 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                return arrangeRawDatas;
 | 
					                return arrangeRawDatas;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception exception)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】");
 | 
				
			||||||
 | 
					                logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】[Exception]:{0}", exception.ToString());
 | 
				
			||||||
 | 
					                logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】[device_number]:{0}", deviceNumberPoint.FullDeviceNumberPoint);
 | 
				
			||||||
 | 
					                logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】[JsonString]:{0}", jsonResult.ToString());
 | 
				
			||||||
 | 
					                return arrangeRawDatas;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -189,7 +189,7 @@ namespace BackendWorkerService.Services.Implement
 | 
				
			|||||||
                //                                    <reltime name='interval' val = 'PT1H' />
 | 
					                //                                    <reltime name='interval' val = 'PT1H' />
 | 
				
			||||||
                //                                </obj>";
 | 
					                //                                </obj>";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //            HttpWebRequest archiveHourRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                //            HttpWebRequest archiveHourRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                //            //HttpWebRequest archiveHourRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                //            //HttpWebRequest archiveHourRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                //            archiveHourRequest.Method = "POST";
 | 
					                //            archiveHourRequest.Method = "POST";
 | 
				
			||||||
                //            archiveHourRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                //            archiveHourRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -280,8 +280,13 @@ namespace BackendWorkerService.Services.Implement
 | 
				
			|||||||
                                                    <reltime name='interval' val = 'PT1D' />
 | 
					                                                    <reltime name='interval' val = 'PT1D' />
 | 
				
			||||||
                                                </obj>";
 | 
					                                                </obj>";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                            string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                            HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                            var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                            HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                            //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                            //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                            archiveDayRequest.Method = "POST";
 | 
					                            archiveDayRequest.Method = "POST";
 | 
				
			||||||
                            archiveDayRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                            archiveDayRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -371,8 +376,13 @@ namespace BackendWorkerService.Services.Implement
 | 
				
			|||||||
                                                    <reltime name='interval' val = 'PT1D' />
 | 
					                                                    <reltime name='interval' val = 'PT1D' />
 | 
				
			||||||
                                                </obj>";
 | 
					                                                </obj>";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                            string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                            HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                            var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                            HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                            //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                            //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                            archiveDayRequest.Method = "POST";
 | 
					                            archiveDayRequest.Method = "POST";
 | 
				
			||||||
                            archiveDayRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                            archiveDayRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -460,8 +470,13 @@ namespace BackendWorkerService.Services.Implement
 | 
				
			|||||||
                                                <reltime name='interval' val = 'PT7D' />
 | 
					                                                <reltime name='interval' val = 'PT7D' />
 | 
				
			||||||
                                            </obj>";
 | 
					                                            </obj>";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                        string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                        HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                        var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                        HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                        //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                        //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                        archiveWeekRequest.Method = "POST";
 | 
					                        archiveWeekRequest.Method = "POST";
 | 
				
			||||||
                        archiveWeekRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                        archiveWeekRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -545,8 +560,13 @@ namespace BackendWorkerService.Services.Implement
 | 
				
			|||||||
                                                <reltime name='interval' val = 'PT7D' />
 | 
					                                                <reltime name='interval' val = 'PT7D' />
 | 
				
			||||||
                                            </obj>";
 | 
					                                            </obj>";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                        string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                        HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                        var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                        HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                        //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                        //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                        archiveWeekRequest.Method = "POST";
 | 
					                        archiveWeekRequest.Method = "POST";
 | 
				
			||||||
                        archiveWeekRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                        archiveWeekRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -636,8 +656,13 @@ namespace BackendWorkerService.Services.Implement
 | 
				
			|||||||
                                                <reltime name='interval' val = 'PT{dayInMonth}D' />
 | 
					                                                <reltime name='interval' val = 'PT{dayInMonth}D' />
 | 
				
			||||||
                                            </obj>";
 | 
					                                            </obj>";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                        string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                        HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                        var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                        HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                        //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                        //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                        archiveMonthRequest.Method = "POST";
 | 
					                        archiveMonthRequest.Method = "POST";
 | 
				
			||||||
                        archiveMonthRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                        archiveMonthRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -724,8 +749,13 @@ namespace BackendWorkerService.Services.Implement
 | 
				
			|||||||
                                                <reltime name='interval' val = 'PT{dayInMonth}D' />
 | 
					                                                <reltime name='interval' val = 'PT{dayInMonth}D' />
 | 
				
			||||||
                                            </obj>";
 | 
					                                            </obj>";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        var station = buildingStation.Where(x => x.system_key == deviceNumberPoint.DeviceNumber.Split("_")[1]).Select(x => x.system_value).FirstOrDefault();
 | 
					                        string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
 | 
				
			||||||
                        HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                        var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
 | 
					                                    device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{device_number.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					                        HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                        //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
					                        //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
				
			||||||
                        archiveMonthRequest.Method = "POST";
 | 
					                        archiveMonthRequest.Method = "POST";
 | 
				
			||||||
                        archiveMonthRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                        archiveMonthRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
@ -855,15 +885,15 @@ namespace BackendWorkerService.Services.Implement
 | 
				
			|||||||
                                switch (name)
 | 
					                                switch (name)
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    case "min":
 | 
					                                    case "min":
 | 
				
			||||||
                                        var min = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                        var min = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@min_rawdata", min);
 | 
					                                        arrangeRawData.Add("@min_rawdata", min);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                    case "max":
 | 
					                                    case "max":
 | 
				
			||||||
                                        var max = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                        var max = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@max_rawdata", max);
 | 
					                                        arrangeRawData.Add("@max_rawdata", max);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                    case "avg":
 | 
					                                    case "avg":
 | 
				
			||||||
                                        var avg = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                        var avg = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@avg_rawdata", avg);
 | 
					                                        arrangeRawData.Add("@avg_rawdata", avg);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                    case "sum":
 | 
					                                    case "sum":
 | 
				
			||||||
@ -923,15 +953,15 @@ namespace BackendWorkerService.Services.Implement
 | 
				
			|||||||
                            switch (name)
 | 
					                            switch (name)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                case "min":
 | 
					                                case "min":
 | 
				
			||||||
                                    var min = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                    var min = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                    arrangeRawData.Add("@min_rawdata", min);
 | 
					                                    arrangeRawData.Add("@min_rawdata", min);
 | 
				
			||||||
                                    break;
 | 
					                                    break;
 | 
				
			||||||
                                case "max":
 | 
					                                case "max":
 | 
				
			||||||
                                    var max = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                    var max = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                    arrangeRawData.Add("@max_rawdata", max);
 | 
					                                    arrangeRawData.Add("@max_rawdata", max);
 | 
				
			||||||
                                    break;
 | 
					                                    break;
 | 
				
			||||||
                                case "avg":
 | 
					                                case "avg":
 | 
				
			||||||
                                    var avg = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                    var avg = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                    arrangeRawData.Add("@avg_rawdata", avg);
 | 
					                                    arrangeRawData.Add("@avg_rawdata", avg);
 | 
				
			||||||
                                    break;
 | 
					                                    break;
 | 
				
			||||||
                                case "sum":
 | 
					                                case "sum":
 | 
				
			||||||
 | 
				
			|||||||
@ -283,8 +283,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            $('#devPointsList').html(strHtml);
 | 
					            $('#devPointsList').html(strHtml);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (!hisFirst)
 | 
					            if (!hisFirst) {
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                let start = new Date($('#his_startdate').val());
 | 
					                let start = new Date($('#his_startdate').val());
 | 
				
			||||||
                let end = new Date(new Date().setDate(new Date($('#his_enddate input').val()).getDate() + 1));
 | 
					                let end = new Date(new Date().setDate(new Date($('#his_enddate input').val()).getDate() + 1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -309,7 +308,16 @@
 | 
				
			|||||||
        var edt = new Date(new Date().setDate(sdt.getDate() + 1));
 | 
					        var edt = new Date(new Date().setDate(sdt.getDate() + 1));
 | 
				
			||||||
        start = start ?? sdt.toLocaleDateString();
 | 
					        start = start ?? sdt.toLocaleDateString();
 | 
				
			||||||
        end = end ?? edt.toLocaleDateString();
 | 
					        end = end ?? edt.toLocaleDateString();
 | 
				
			||||||
        // callBackFromHistory();
 | 
					
 | 
				
			||||||
 | 
					        let sendData = {
 | 
				
			||||||
 | 
					            device_number: pageAct.deviceNumber,
 | 
				
			||||||
 | 
					            device_point: pageAct.deviceItem
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        objSendData.Data = sendData;
 | 
				
			||||||
 | 
					        let url = baseApiUrl + "/api/DevGetWay";
 | 
				
			||||||
 | 
					        ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
 | 
				
			||||||
 | 
					            if (res && res.code == "0000") {
 | 
				
			||||||
 | 
					                pageAct.hisBuiName = res.data;
 | 
				
			||||||
                getHistoryDataByBaja(pageAct.deviceNumber + "_" + pageAct.deviceItem,
 | 
					                getHistoryDataByBaja(pageAct.deviceNumber + "_" + pageAct.deviceItem,
 | 
				
			||||||
                    new Date(start).getTime(),
 | 
					                    new Date(start).getTime(),
 | 
				
			||||||
                    new Date(end).getTime(),
 | 
					                    new Date(end).getTime(),
 | 
				
			||||||
@ -317,6 +325,11 @@
 | 
				
			|||||||
                    pageAct.hisBuiName,
 | 
					                    pageAct.hisBuiName,
 | 
				
			||||||
                    callBackFromHistory);
 | 
					                    callBackFromHistory);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            else {
 | 
				
			||||||
 | 
					                $(loadEle).Loading("close");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }, function (res) { $(loadEle).Loading("close"); }, "POST", true).send();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function callBackFromHistory(res = '{"count":0,"data":[]}') {
 | 
					    function callBackFromHistory(res = '{"count":0,"data":[]}') {
 | 
				
			||||||
        res = JSON.parse(res);
 | 
					        res = JSON.parse(res);
 | 
				
			||||||
@ -484,7 +497,7 @@
 | 
				
			|||||||
            ];
 | 
					            ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            historyTable = new YourTeam.JqDataTables.getTableByStatic(tag, data, columns, column_defs, null, null, null, null, "tpi");
 | 
					            historyTable = new YourTeam.JqDataTables.getTableByStatic(tag, data, columns, column_defs, null, null, null, null, "tpi");
 | 
				
			||||||
            $(tag).DataTable().order([ 3, 'desc' ]);
 | 
					            $(tag).DataTable().order([3, 'desc']);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -496,6 +509,7 @@
 | 
				
			|||||||
        v.starttime = (pageAct.dateType == "month" ? new Date($('#getmonth').val()) : new Date($('#his_startdate').val()));
 | 
					        v.starttime = (pageAct.dateType == "month" ? new Date($('#getmonth').val()) : new Date($('#his_startdate').val()));
 | 
				
			||||||
        v.endtime = $('#his_enddate input').val() === "" ? null : new Date($('#his_enddate input').val());
 | 
					        v.endtime = $('#his_enddate input').val() === "" ? null : new Date($('#his_enddate input').val());
 | 
				
			||||||
        v.dateType = pageAct.dateType;
 | 
					        v.dateType = pageAct.dateType;
 | 
				
			||||||
 | 
					        v.device_number = pageAct.deviceNumber;
 | 
				
			||||||
        objSendData.Data = v;
 | 
					        objSendData.Data = v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $.ajax({
 | 
					        $.ajax({
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
using FrontendWebApi.Models;
 | 
					using FrontendWebApi.Models;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.Localization;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using Microsoft.AspNetCore.Routing;
 | 
					using Microsoft.AspNetCore.Routing;
 | 
				
			||||||
using Microsoft.Extensions.Logging;
 | 
					using Microsoft.Extensions.Logging;
 | 
				
			||||||
@ -58,10 +59,13 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
            //    apiResult.Msg = "沒有資料匯入";
 | 
					            //    apiResult.Msg = "沒有資料匯入";
 | 
				
			||||||
            //    return apiResult;
 | 
					            //    return apiResult;
 | 
				
			||||||
            //}
 | 
					            //}
 | 
				
			||||||
            var fileDateName = lhe.dateType == "today" ? lhe.starttime.ToString("yyyy-MM-dd")
 | 
					            string fileDateName = lhe.dateType == "today" ? lhe.starttime.ToString("yyyy-MM-dd")
 | 
				
			||||||
                                    : lhe.dateType == "month" ? lhe.starttime.ToString("yyyy-MM")
 | 
					                                    : lhe.dateType == "month" ? lhe.starttime.ToString("yyyy-MM")
 | 
				
			||||||
                                    : lhe.starttime.ToString("yyyy-MM-dd") + "_" + ((DateTime)lhe.endtime).ToString("yyyy-MM-dd");
 | 
					                                    : lhe.starttime.ToString("yyyy-MM-dd") + "_" + ((DateTime)lhe.endtime).ToString("yyyy-MM-dd");
 | 
				
			||||||
            var fileName = "歷史資料_" + fileDateName + ".xlsx";
 | 
					            string fileName = "歷史資料_" + fileDateName + ".xlsx";
 | 
				
			||||||
 | 
					            lhe.device_number = char.IsDigit(lhe.device_number.Split("_")[1][0]) 
 | 
				
			||||||
 | 
					                                ? lhe.device_number.Replace(lhe.device_number.Split("_")[1], "$3" + lhe.device_number.Split("_")[1]) 
 | 
				
			||||||
 | 
					                                : lhe.device_number;
 | 
				
			||||||
            XSSFWorkbook workbook = new XSSFWorkbook();
 | 
					            XSSFWorkbook workbook = new XSSFWorkbook();
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -79,25 +83,22 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                var buildStation = backendRepository.GetAllAsync<BuildStation>("select SUBSTRING_INDEX(system_value, '/', 1) system_value, system_key from variable where system_type = 'dashboard_total_elec' and deleted = 0 and (SUBSTRING_INDEX(system_value, '/', 1) != '' and SUBSTRING_INDEX(system_value, '/', 1) is not null)").Result;
 | 
					                var buildStation = backendRepository.GetAllAsync<BuildStation>("select SUBSTRING_INDEX(system_value, '/', 1) system_value, system_key from variable where system_type = 'dashboard_total_elec' and deleted = 0 and (SUBSTRING_INDEX(system_value, '/', 1) != '' and SUBSTRING_INDEX(system_value, '/', 1) is not null)").Result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                #region get device and device_item(point)
 | 
					                #region get device and device_item(point)
 | 
				
			||||||
                var device = backendRepository.GetAllAsync<Device>($"select * from device where deleted = 0 and is_link = 1 and device_building_tag in ('{string.Join("','", building.Select(x => x.building_tag))}')").Result;
 | 
					                var device = backendRepository.GetAllAsync<Device>($"select * from device where deleted = 0 and is_link = 1 and device_number = '{lhe.device_number}'").Result;
 | 
				
			||||||
                var devicePoint = backendRepository.GetAllAsync<Device_item>($"select * from device_item where deleted = 0 and is_link = 1 and is_show_history = 1 and device_building_tag in ('{string.Join("','", building.Select(x => x.building_tag))}')").Result;
 | 
					                var devicePoint = backendRepository.GetAllAsync<Device_item>($"select * from device_item where deleted = 0 and is_link = 1 and is_show_history = 1 and device_building_tag = '{lhe.device_number.Split("_")[1]}' and device_system_tag = '{lhe.device_number.Split("_")[2]}' and device_name_tag = '{lhe.device_number.Split("_")[3]}'").Result;
 | 
				
			||||||
                #endregion
 | 
					                #endregion
 | 
				
			||||||
                List<DeviceNumberPoint> listDevicePoint = new List<DeviceNumberPoint>();
 | 
					                List<DeviceNumberPoint> listDevicePoint = new List<DeviceNumberPoint>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                #region combine device and point
 | 
					                #region combine device and point
 | 
				
			||||||
                foreach (var d in device)
 | 
					                var dp = devicePoint.Where(x => x.device_building_tag == lhe.device_number.Split("_")[1]).ToList();
 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    var dp = devicePoint.Where(x => x.device_building_tag == d.device_building_tag).ToList();
 | 
					 | 
				
			||||||
                foreach (var point in dp)
 | 
					                foreach (var point in dp)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    DeviceNumberPoint deviceNumberPoint = new DeviceNumberPoint();
 | 
					                    DeviceNumberPoint deviceNumberPoint = new DeviceNumberPoint();
 | 
				
			||||||
                        deviceNumberPoint.DeviceNumber = d.device_number;
 | 
					                    deviceNumberPoint.DeviceNumber = lhe.device_number;
 | 
				
			||||||
                    deviceNumberPoint.Point = point.points;
 | 
					                    deviceNumberPoint.Point = point.points;
 | 
				
			||||||
                        deviceNumberPoint.FullDeviceNumberPoint = string.Format("{0}_{1}", d.device_number, point.points);
 | 
					                    deviceNumberPoint.FullDeviceNumberPoint = string.Format("{0}_{1}", lhe.device_number, point.points);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    listDevicePoint.Add(deviceNumberPoint);
 | 
					                    listDevicePoint.Add(deviceNumberPoint);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                #endregion
 | 
					                #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                #region get data from niagara
 | 
					                #region get data from niagara
 | 
				
			||||||
@ -117,8 +118,15 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                    foreach (var d in listDevicePoint)
 | 
					                    foreach (var d in listDevicePoint)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        string buildingTag = d.DeviceNumber.Split("_")[1];
 | 
					                        string buildingTag = d.DeviceNumber.Split("_")[1];
 | 
				
			||||||
                        var station = buildStation.Where(x => x.system_key == buildingTag).Select(x => x.system_value).FirstOrDefault();
 | 
					                        var station = backendRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{d.FullDeviceNumberPoint.Split("_")[1].Replace("$3", "")}' and 
 | 
				
			||||||
                        var archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{d.FullDeviceNumberPoint}/~historyRollup/");
 | 
					                                    device_system_tag = '{d.FullDeviceNumberPoint.Split("_")[2]}' and device_name_tag = '{d.FullDeviceNumberPoint.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{d.FullDeviceNumberPoint.Split("_")[4]}' and device_master_tag = '{d.FullDeviceNumberPoint.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{d.FullDeviceNumberPoint.Split("_")[6]}' and device_serial_tag = '{d.FullDeviceNumberPoint.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{d.FullDeviceNumberPoint.Split("_")[8]}'").Result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (!string.IsNullOrEmpty(station))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            var archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{d.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
 | 
				
			||||||
                            archiveRequest.Method = "POST";
 | 
					                            archiveRequest.Method = "POST";
 | 
				
			||||||
                            archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
					                            archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
				
			||||||
                            archiveRequest.PreAuthenticate = true;
 | 
					                            archiveRequest.PreAuthenticate = true;
 | 
				
			||||||
@ -148,6 +156,11 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                                jd.Add(jsonDevice);
 | 
					                                jd.Add(jsonDevice);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            Logger.LogError("【Device GetWay Error】, device_number: " + d.FullDeviceNumberPoint);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (jd != null && jd.Count > 0)
 | 
					                if (jd != null && jd.Count > 0)
 | 
				
			||||||
@ -162,7 +175,7 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                                HistoryExport hed = new HistoryExport();
 | 
					                                HistoryExport hed = new HistoryExport();
 | 
				
			||||||
                                hed.type = devicePoint.Where(x => x.device_building_tag == d.building_tag && x.points == ard["@point"].ToString()).Select(x => x.full_name).FirstOrDefault();
 | 
					                                hed.type = devicePoint.Where(x => x.device_building_tag == d.building_tag && x.points == ard["@point"].ToString()).Select(x => x.full_name).FirstOrDefault();
 | 
				
			||||||
                                hed.deviceName = device.Where(x => x.device_number == ard["@device_number"].ToString()).Select(x => x.full_name).FirstOrDefault();
 | 
					                                hed.deviceName = device.Where(x => x.device_number == ard["@device_number"].ToString()).Select(x => x.full_name).FirstOrDefault();
 | 
				
			||||||
                                hed.value = (double)((decimal)ard["@avg_rawdata"]);
 | 
					                                hed.value = ard["@avg_rawdata"].ToString() == "-1" ? "NaN" : Math.Round((decimal.Parse(ard["@avg_rawdata"].ToString(), System.Globalization.NumberStyles.Float)), 2).ToString();
 | 
				
			||||||
                                hed.timestamp = Convert.ToDateTime(ard["@start_timestamp"].ToString());
 | 
					                                hed.timestamp = Convert.ToDateTime(ard["@start_timestamp"].ToString());
 | 
				
			||||||
                                hed.building_tag = d.building_tag;
 | 
					                                hed.building_tag = d.building_tag;
 | 
				
			||||||
                                he.Add(hed);
 | 
					                                he.Add(hed);
 | 
				
			||||||
@ -173,12 +186,6 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                #endregion
 | 
					                #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                #region export file progress
 | 
					                #region export file progress
 | 
				
			||||||
                //var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "excel", "history");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                //if (!System.IO.Directory.Exists(filePath))
 | 
					 | 
				
			||||||
                //    System.IO.Directory.CreateDirectory(filePath);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                #region excel設定
 | 
					                #region excel設定
 | 
				
			||||||
                IFont font12 = workbook.CreateFont();
 | 
					                IFont font12 = workbook.CreateFont();
 | 
				
			||||||
                font12.FontName = "新細明體";
 | 
					                font12.FontName = "新細明體";
 | 
				
			||||||
@ -220,14 +227,16 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
					                stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
				
			||||||
                stylein12.WrapText = true;
 | 
					                stylein12.WrapText = true;
 | 
				
			||||||
                #endregion
 | 
					                #endregion
 | 
				
			||||||
 | 
					                var data = he.ToList();
 | 
				
			||||||
                foreach (var b in building)
 | 
					                if (data.Count > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var data = he.Where(x => x.building_tag == b.building_tag).ToList();
 | 
					                    string lastDeviceItem = string.Empty;
 | 
				
			||||||
                    ISheet sheet = workbook.CreateSheet($"{b.full_name}歷史資料");
 | 
					 | 
				
			||||||
                    int RowPosition = 0;
 | 
					                    int RowPosition = 0;
 | 
				
			||||||
 | 
					                    IRow row;
 | 
				
			||||||
 | 
					                    ISheet sheet;
 | 
				
			||||||
                    #region set cell
 | 
					                    #region set cell
 | 
				
			||||||
                    IRow row = sheet.CreateRow(RowPosition);
 | 
					                    sheet = workbook.CreateSheet($"{building.Where(x => x.building_tag == lhe.device_number.Split("_")[1]).Select(x => x.full_name).FirstOrDefault()}{"_" + data[0].type}");
 | 
				
			||||||
 | 
					                    row = sheet.CreateRow(RowPosition);
 | 
				
			||||||
                    sheet.SetColumnWidth(0, 4 * 160 * 12);
 | 
					                    sheet.SetColumnWidth(0, 4 * 160 * 12);
 | 
				
			||||||
                    sheet.SetColumnWidth(1, 4 * 160 * 12);
 | 
					                    sheet.SetColumnWidth(1, 4 * 160 * 12);
 | 
				
			||||||
                    sheet.SetColumnWidth(2, 4 * 160 * 12);
 | 
					                    sheet.SetColumnWidth(2, 4 * 160 * 12);
 | 
				
			||||||
@ -245,11 +254,40 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                    cell.CellStyle = styleLine12;
 | 
					                    cell.CellStyle = styleLine12;
 | 
				
			||||||
                    #endregion
 | 
					                    #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (data.Count > 0)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                    foreach (var d in data)
 | 
					                    foreach (var d in data)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
					                        if (RowPosition == 0 && lastDeviceItem == "")
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            lastDeviceItem = d.type; //第一次不用建立 sheet;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        if (d.type != lastDeviceItem)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            lastDeviceItem = d.type;
 | 
				
			||||||
 | 
					                            sheet = workbook.CreateSheet($"{building.Where(x => x.building_tag == lhe.device_number.Split("_")[1]).Select(x => x.full_name).FirstOrDefault()}{"_" + d.type}");
 | 
				
			||||||
 | 
					                            #region set cell
 | 
				
			||||||
 | 
					                            row = sheet.CreateRow(RowPosition);
 | 
				
			||||||
 | 
					                            sheet.SetColumnWidth(0, 4 * 160 * 12);
 | 
				
			||||||
 | 
					                            sheet.SetColumnWidth(1, 4 * 160 * 12);
 | 
				
			||||||
 | 
					                            sheet.SetColumnWidth(2, 4 * 160 * 12);
 | 
				
			||||||
 | 
					                            sheet.SetColumnWidth(3, 4 * 160 * 12);
 | 
				
			||||||
 | 
					                            cell = row.CreateCell(0);
 | 
				
			||||||
 | 
					                            cell.SetCellValue("類型");
 | 
				
			||||||
 | 
					                            cell.CellStyle = styleLine12;
 | 
				
			||||||
 | 
					                            cell = row.CreateCell(1);
 | 
				
			||||||
 | 
					                            cell.SetCellValue("設備名稱");
 | 
				
			||||||
 | 
					                            cell.CellStyle = styleLine12;
 | 
				
			||||||
 | 
					                            cell = row.CreateCell(2);
 | 
				
			||||||
 | 
					                            cell.SetCellValue("數值");
 | 
				
			||||||
 | 
					                            cell = row.CreateCell(3);
 | 
				
			||||||
 | 
					                            cell.SetCellValue("記錄時間");
 | 
				
			||||||
 | 
					                            cell.CellStyle = styleLine12;
 | 
				
			||||||
 | 
					                            #endregion
 | 
				
			||||||
 | 
					                            RowPosition = 0;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        else {
 | 
				
			||||||
                            RowPosition += 1;
 | 
					                            RowPosition += 1;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
                        row = sheet.CreateRow(RowPosition);
 | 
					                        row = sheet.CreateRow(RowPosition);
 | 
				
			||||||
                        for (var i = 0; i < 4; i++)
 | 
					                        for (var i = 0; i < 4; i++)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
@ -275,20 +313,7 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                //using (var fs = new FileStream(Path.Combine(filePath, fileName), FileMode.Create, FileAccess.Write))
 | 
					 | 
				
			||||||
                //{
 | 
					 | 
				
			||||||
                    //workbook.Write(fs);
 | 
					 | 
				
			||||||
                    
 | 
					 | 
				
			||||||
                //}
 | 
					 | 
				
			||||||
                #endregion
 | 
					                #endregion
 | 
				
			||||||
 | 
					 | 
				
			||||||
                //apiResult.Code = "0000";
 | 
					 | 
				
			||||||
                //apiResult.Data = "history/" + fileName;
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception exception)
 | 
					            catch (Exception exception)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -451,7 +476,7 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                List<DeviceItem> deviceItems = new List<DeviceItem>();
 | 
					                List<DeviceItem> deviceItems = new List<DeviceItem>();
 | 
				
			||||||
                var main_system_value = hf.device_number.Split('_')[2];
 | 
					                var main_system_value = hf.device_number.Split('_')[2];
 | 
				
			||||||
                var sub_system_value = hf.device_number.Split('_')[3];
 | 
					                var sub_system_value = hf.device_number.Split('_')[3];
 | 
				
			||||||
                var building_tag = hf.device_number.Split('_')[1];
 | 
					                var building_tag = char.IsDigit(hf.device_number.Split('_')[1][0]) ? "$3" + hf.device_number.Split('_')[1] : hf.device_number.Split('_')[1];
 | 
				
			||||||
                var sqlString = $@"select * from device_item where deleted = 0 and device_system_tag = @main_system_value and device_name_tag = @sub_system_value and is_show_history = 1 and device_building_tag = @building_tag";
 | 
					                var sqlString = $@"select * from device_item where deleted = 0 and device_system_tag = @main_system_value and device_name_tag = @sub_system_value and is_show_history = 1 and device_building_tag = @building_tag";
 | 
				
			||||||
                deviceItems = await frontendRepository.GetAllAsync<DeviceItem>(sqlString, new { @main_system_value = main_system_value, @sub_system_value = sub_system_value, building_tag = building_tag });
 | 
					                deviceItems = await frontendRepository.GetAllAsync<DeviceItem>(sqlString, new { @main_system_value = main_system_value, @sub_system_value = sub_system_value, building_tag = building_tag });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1391,19 +1416,19 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                                switch (name)
 | 
					                                switch (name)
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    case "min":
 | 
					                                    case "min":
 | 
				
			||||||
                                        var min = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                        var min = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@min_rawdata", min);
 | 
					                                        arrangeRawData.Add("@min_rawdata", min);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                    case "max":
 | 
					                                    case "max":
 | 
				
			||||||
                                        var max = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                        var max = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@max_rawdata", max);
 | 
					                                        arrangeRawData.Add("@max_rawdata", max);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                    case "avg":
 | 
					                                    case "avg":
 | 
				
			||||||
                                        var avg = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                        var avg = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@avg_rawdata", avg);
 | 
					                                        arrangeRawData.Add("@avg_rawdata", avg);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                    case "sum":
 | 
					                                    case "sum":
 | 
				
			||||||
                                        var sum = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
					                                        var sum = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                        arrangeRawData.Add("@sum_rawdata", sum);
 | 
					                                        arrangeRawData.Add("@sum_rawdata", sum);
 | 
				
			||||||
                                        break;
 | 
					                                        break;
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
@ -1459,19 +1484,19 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                            switch (name)
 | 
					                            switch (name)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                case "min":
 | 
					                                case "min":
 | 
				
			||||||
                                    var min = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                    var min = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                    arrangeRawData.Add("@min_rawdata", min);
 | 
					                                    arrangeRawData.Add("@min_rawdata", min);
 | 
				
			||||||
                                    break;
 | 
					                                    break;
 | 
				
			||||||
                                case "max":
 | 
					                                case "max":
 | 
				
			||||||
                                    var max = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                    var max = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                    arrangeRawData.Add("@max_rawdata", max);
 | 
					                                    arrangeRawData.Add("@max_rawdata", max);
 | 
				
			||||||
                                    break;
 | 
					                                    break;
 | 
				
			||||||
                                case "avg":
 | 
					                                case "avg":
 | 
				
			||||||
                                    var avg = Convert.ToDecimal(real["@val"].ToString());
 | 
					                                    var avg = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                    arrangeRawData.Add("@avg_rawdata", avg);
 | 
					                                    arrangeRawData.Add("@avg_rawdata", avg);
 | 
				
			||||||
                                    break;
 | 
					                                    break;
 | 
				
			||||||
                                case "sum":
 | 
					                                case "sum":
 | 
				
			||||||
                                    var sum = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
					                                    var sum = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
 | 
				
			||||||
                                    arrangeRawData.Add("@sum_rawdata", sum);
 | 
					                                    arrangeRawData.Add("@sum_rawdata", sum);
 | 
				
			||||||
                                    break;
 | 
					                                    break;
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
 | 
				
			|||||||
@ -117,7 +117,7 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                var aemmEndDate = input.tableType == "year" ? $"year(DATE_ADD(fd.date, INTERVAL +1 {input.tableType}))" : $"DATE_ADD(fd.date, INTERVAL +1 {input.tableType})";
 | 
					                var aemmEndDate = input.tableType == "year" ? $"year(DATE_ADD(fd.date, INTERVAL +1 {input.tableType}))" : $"DATE_ADD(fd.date, INTERVAL +1 {input.tableType})";
 | 
				
			||||||
                var aemmStaDate = input.tableType == "year" ? "year(fd.date)" : "fd.date";
 | 
					                var aemmStaDate = input.tableType == "year" ? "year(fd.date)" : "fd.date";
 | 
				
			||||||
                var sql = $@"set @i = -1;
 | 
					                var sql = $@"set @i = -1;
 | 
				
			||||||
                            select fd.device_number, aemm.avg_rawdata, DATE_FORMAT(fd.date, @dateFormat) as timestamp
 | 
					                            select fd.device_number, case when aemm.avg_rawdata = -1 then 'NaN' when aemm.avg_rawdata is null then 0.00 else aemm.avg_rawdata end as avg_rawdata, DATE_FORMAT(fd.date, @dateFormat) as timestamp
 | 
				
			||||||
                            from (
 | 
					                            from (
 | 
				
			||||||
	                            select *
 | 
						                            select *
 | 
				
			||||||
	                            from (
 | 
						                            from (
 | 
				
			||||||
@ -164,7 +164,7 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                foreach (var l in list)
 | 
					                foreach (var l in list)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    l.rawData = new List<HydroMeterRawDataOutput>();
 | 
					                    l.rawData = new List<HydroMeterRawDataOutput>();
 | 
				
			||||||
                    l.device_full_name = await backendRepository.GetOneAsync<string>($"select full_name from device where device_number = '{l.device_number}' and deleted = 0");
 | 
					                    l.device_full_name = await backendRepository.GetOneAsync<string>($"select full_name from device where device_number = '{l.device_number}'");
 | 
				
			||||||
                    if (tag_quantity == "5")
 | 
					                    if (tag_quantity == "5")
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        l.rawData.AddRange(
 | 
					                        l.rawData.AddRange(
 | 
				
			||||||
@ -179,7 +179,7 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    l.building_name = await backendRepository.GetOneAsync<string>("select full_name from building where building_tag = @building_tag and deleted = 0",
 | 
					                    l.building_name = await backendRepository.GetOneAsync<string>("select full_name from building where building_tag = @building_tag and deleted = 0",
 | 
				
			||||||
                                        new { building_tag = l.building_tag });
 | 
					                                        new { building_tag = l.building_tag });
 | 
				
			||||||
                    l.total = l.rawData.Sum(x => x.avg_rawdata).ToString();
 | 
					                    l.total = l.rawData.Where(x => x.avg_rawdata != "NaN").Sum(x => decimal.Parse(x.avg_rawdata ?? "0", System.Globalization.NumberStyles.Float)).ToString();
 | 
				
			||||||
                    l.price = input.price.HasValue 
 | 
					                    l.price = input.price.HasValue 
 | 
				
			||||||
                                ? (Math.Round(input.price.Value, 2)).ToString() 
 | 
					                                ? (Math.Round(input.price.Value, 2)).ToString() 
 | 
				
			||||||
                                : Math.Round((await backendRepository.GetOneAsync<decimal>("select system_value from variable where system_type = 'ElectricPrice' and deleted = 0")), 2).ToString();
 | 
					                                : Math.Round((await backendRepository.GetOneAsync<decimal>("select system_value from variable where system_type = 'ElectricPrice' and deleted = 0")), 2).ToString();
 | 
				
			||||||
@ -289,7 +289,7 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                var aemmEndDate = input.tableType == "year" ? $"year(DATE_ADD(fd.date, INTERVAL +1 {input.tableType}))" : $"DATE_ADD(fd.date, INTERVAL +1 {input.tableType})";
 | 
					                var aemmEndDate = input.tableType == "year" ? $"year(DATE_ADD(fd.date, INTERVAL +1 {input.tableType}))" : $"DATE_ADD(fd.date, INTERVAL +1 {input.tableType})";
 | 
				
			||||||
                var aemmStaDate = input.tableType == "year" ? "year(fd.date)" : "fd.date";
 | 
					                var aemmStaDate = input.tableType == "year" ? "year(fd.date)" : "fd.date";
 | 
				
			||||||
                var sql = $@"set @i = -1;
 | 
					                var sql = $@"set @i = -1;
 | 
				
			||||||
                            select fd.device_number, aemm.avg_rawdata, DATE_FORMAT(fd.date, @dateFormat) as timestamp
 | 
					                            select fd.device_number, case when aemm.avg_rawdata = -1 then 'NaN' when aemm.avg_rawdata is null then 0.00 else aemm.avg_rawdata end as avg_rawdata, DATE_FORMAT(fd.date, @dateFormat) as timestamp
 | 
				
			||||||
                            from (
 | 
					                            from (
 | 
				
			||||||
	                            select *
 | 
						                            select *
 | 
				
			||||||
	                            from (
 | 
						                            from (
 | 
				
			||||||
@ -337,7 +337,7 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                foreach (var l in list)
 | 
					                foreach (var l in list)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    l.rawData = new List<HydroMeterRawDataOutput>();
 | 
					                    l.rawData = new List<HydroMeterRawDataOutput>();
 | 
				
			||||||
                    l.device_full_name = await backendRepository.GetOneAsync<string>($"select full_name from device where device_number = '{l.device_number}' and deleted = 0");
 | 
					                    l.device_full_name = await backendRepository.GetOneAsync<string>($"select full_name from device where device_number = '{l.device_number}'");
 | 
				
			||||||
                    if (tag_quantity == "5")
 | 
					                    if (tag_quantity == "5")
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        l.rawData.AddRange(
 | 
					                        l.rawData.AddRange(
 | 
				
			||||||
@ -352,7 +352,7 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    l.building_name = await backendRepository.GetOneAsync<string>("select full_name from building where building_tag = @building_tag and deleted = 0",
 | 
					                    l.building_name = await backendRepository.GetOneAsync<string>("select full_name from building where building_tag = @building_tag and deleted = 0",
 | 
				
			||||||
                                        new { building_tag = l.building_tag });
 | 
					                                        new { building_tag = l.building_tag });
 | 
				
			||||||
                    l.total = l.rawData.Sum(x => x.avg_rawdata).ToString();
 | 
					                    l.total = l.rawData.Where(x => x.avg_rawdata != "NaN").Sum(x => decimal.Parse(x.avg_rawdata, System.Globalization.NumberStyles.Float)).ToString();
 | 
				
			||||||
                    l.price = input.price.HasValue
 | 
					                    l.price = input.price.HasValue
 | 
				
			||||||
                                ? (Math.Round(input.price.Value, 2)).ToString()
 | 
					                                ? (Math.Round(input.price.Value, 2)).ToString()
 | 
				
			||||||
                                : Math.Round((await backendRepository.GetOneAsync<decimal>("select system_value from variable where system_type = 'WaterPrice' and deleted = 0")), 2).ToString();
 | 
					                                : Math.Round((await backendRepository.GetOneAsync<decimal>("select system_value from variable where system_type = 'WaterPrice' and deleted = 0")), 2).ToString();
 | 
				
			||||||
 | 
				
			|||||||
@ -175,5 +175,47 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            return Ok(apiResult);
 | 
					            return Ok(apiResult);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [HttpPost]
 | 
				
			||||||
 | 
					        [Route("api/DevGetWay")]
 | 
				
			||||||
 | 
					        public async Task<ActionResult<ApiResult<string>>> GetDevGetWay([FromBody] DeviceGetWayInput input)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ApiResult<string> apiResult = new ApiResult<string>(jwt_str);
 | 
				
			||||||
 | 
					            //check input
 | 
				
			||||||
 | 
					            if (input == null || string.IsNullOrEmpty(input.device_number) || string.IsNullOrEmpty(input.device_point))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                apiResult.Code = "9998";
 | 
				
			||||||
 | 
					                apiResult.Msg = "資料輸入錯誤。";
 | 
				
			||||||
 | 
					                return Ok(apiResult);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var getWayStr = await backendRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{input.device_number.Split("_")[1]}'
 | 
				
			||||||
 | 
					                                    and device_system_tag = '{input.device_number.Split("_")[2]}' and device_name_tag = '{input.device_number.Split("_")[3]}' 
 | 
				
			||||||
 | 
					                                    and device_floor_tag = '{input.device_number.Split("_")[4]}' and device_master_tag = '{input.device_number.Split("_")[5]}' 
 | 
				
			||||||
 | 
					                                    and device_last_name_tag = '{input.device_number.Split("_")[6]}' and device_serial_tag = '{input.device_number.Split("_")[7]}'
 | 
				
			||||||
 | 
					                                    and device_point_name = '{input.device_point}'");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //check string 
 | 
				
			||||||
 | 
					                if (string.IsNullOrEmpty(getWayStr))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    apiResult.Code = "9997";
 | 
				
			||||||
 | 
					                    apiResult.Msg = "資料獲取錯誤。";
 | 
				
			||||||
 | 
					                    return Ok(apiResult);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                apiResult.Data = getWayStr;
 | 
				
			||||||
 | 
					                apiResult.Code = "0000";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception exception)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                apiResult.Code = "9999";
 | 
				
			||||||
 | 
					                apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
 | 
				
			||||||
 | 
					                Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
 | 
				
			||||||
 | 
					                return Ok(apiResult);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return Ok(apiResult);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -195,5 +195,9 @@ namespace FrontendWebApi.Models
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public class DeviceGetWayInput
 | 
				
			||||||
 | 
					    { 
 | 
				
			||||||
 | 
					        public string device_number { get; set; }
 | 
				
			||||||
 | 
					        public string device_point { get; set; }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -292,13 +292,14 @@ namespace FrontendWebApi.Models
 | 
				
			|||||||
    public class HistoryExport
 | 
					    public class HistoryExport
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public string deviceName { get; set; }
 | 
					        public string deviceName { get; set; }
 | 
				
			||||||
        public double value { get; set; }
 | 
					        public string value { get; set; }
 | 
				
			||||||
        public DateTime timestamp { get; set; }
 | 
					        public DateTime timestamp { get; set; }
 | 
				
			||||||
        public DateTime starttime { get; set; }
 | 
					        public DateTime starttime { get; set; }
 | 
				
			||||||
        public DateTime? endtime { get; set; }
 | 
					        public DateTime? endtime { get; set; }
 | 
				
			||||||
        public string dateType { get; set; }
 | 
					        public string dateType { get; set; }
 | 
				
			||||||
        public string type { get; set; }
 | 
					        public string type { get; set; }
 | 
				
			||||||
        public string building_tag { get; set; }
 | 
					        public string building_tag { get; set; }
 | 
				
			||||||
 | 
					        public string device_number { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public class History_Building
 | 
					    public class History_Building
 | 
				
			||||||
 | 
				
			|||||||
@ -37,7 +37,7 @@ namespace FrontendWebApi.Models
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        public string timeStamp { get; set; }
 | 
					        public string timeStamp { get; set; }
 | 
				
			||||||
        public string device_number { get; set; }
 | 
					        public string device_number { get; set; }
 | 
				
			||||||
        public decimal avg_rawdata { get; set; }
 | 
					        public string avg_rawdata { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public class HydroMeterPriceInput
 | 
					    public class HydroMeterPriceInput
 | 
				
			||||||
 | 
				
			|||||||
@ -183,27 +183,39 @@ namespace Repository.BackendRepository.Implement
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    try
 | 
					                    try
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        #region 刪除 import_niagara_item資料表中選取的棟別
 | 
					                        string sql = @" 
 | 
				
			||||||
                        foreach(var b in building)
 | 
					DROP TABLE IF EXISTS `import_niagara_item`;
 | 
				
			||||||
                        {
 | 
					CREATE TABLE `import_niagara_item`  (
 | 
				
			||||||
                            string sql = @"CREATE TABLE IF NOT EXISTS `import_niagara_item` (
 | 
					 | 
				
			||||||
  `id` int(11) NOT NULL AUTO_INCREMENT,
 | 
					  `id` int(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
                                  `device_area_tag` varchar(50) DEFAULT NULL,
 | 
					  `device_area_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
                                  `device_building_tag` varchar(50) DEFAULT NULL,
 | 
					  `device_building_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
                                  `device_system_tag` varchar(50) DEFAULT NULL,
 | 
					  `device_system_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
                                  `device_name_tag` varchar(50) DEFAULT NULL,
 | 
					  `device_name_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
                                  `device_point_name` varchar(50) DEFAULT NULL,
 | 
					  `device_floor_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
                                  `check_status` varchar(50) DEFAULT NULL,
 | 
					  `device_master_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
                                  `parent_path` varchar(50) DEFAULT NULL,
 | 
					  `device_last_name_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
                                  `full_name` varchar(50) DEFAULT NULL,
 | 
					  `device_serial_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
                                  PRIMARY KEY (`id`)
 | 
					  `device_point_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
                                ) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;";
 | 
					  `parent_path` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `is_history` bit(1) NULL DEFAULT b'0',
 | 
				
			||||||
 | 
					  `full_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `check_status` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 | 
				
			||||||
 | 
					  PRIMARY KEY (`id`) USING BTREE
 | 
				
			||||||
 | 
					) ENGINE = InnoDB AUTO_INCREMENT = 271 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 | 
				
			||||||
 | 
					 ";
 | 
				
			||||||
                        await conn.ExecuteAsync(sql);
 | 
					                        await conn.ExecuteAsync(sql);
 | 
				
			||||||
                            sql = "delete from import_niagara_item where device_building_tag = '" + b + "'";
 | 
					
 | 
				
			||||||
                            await conn.ExecuteAsync(sql);
 | 
					                        #region 刪除 import_niagara_item資料表中選取的棟別
 | 
				
			||||||
                        }
 | 
					                        //foreach(var b in building)
 | 
				
			||||||
 | 
					                        //{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        //    sql = "delete from import_niagara_item where device_building_tag = '" + b + "'";
 | 
				
			||||||
 | 
					                        //    await conn.ExecuteAsync(sql);
 | 
				
			||||||
 | 
					                        //}
 | 
				
			||||||
                        #endregion
 | 
					                        #endregion
 | 
				
			||||||
                        ds = ds.GroupBy(x => new {
 | 
					                        ds = ds.GroupBy(x => new
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
                            device_area_tag = x.device_area_tag,
 | 
					                            device_area_tag = x.device_area_tag,
 | 
				
			||||||
                            device_building_tag = x.device_building_tag,
 | 
					                            device_building_tag = x.device_building_tag,
 | 
				
			||||||
                            device_system_tag = x.device_system_tag,
 | 
					                            device_system_tag = x.device_system_tag,
 | 
				
			||||||
@ -229,17 +241,22 @@ namespace Repository.BackendRepository.Implement
 | 
				
			|||||||
                        #region 放入import_niagara_item資料表
 | 
					                        #region 放入import_niagara_item資料表
 | 
				
			||||||
                        foreach (var row in ds)
 | 
					                        foreach (var row in ds)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            sb.Append($@" insert import_niagara_item(device_area_tag, device_building_tag, device_system_tag, device_name_tag, device_point_name, parent_path, full_name, is_history)
 | 
					                            string ss = $@" insert import_niagara_item(device_area_tag, device_building_tag, device_system_tag, device_name_tag, 
 | 
				
			||||||
                                        values('"+
 | 
					                                                                       device_point_name, parent_path, full_name, is_history, created_at)
 | 
				
			||||||
 | 
					                                        values('" +
 | 
				
			||||||
                                            row.device_area_tag + "', '" +
 | 
					                                            row.device_area_tag + "', '" +
 | 
				
			||||||
                                            row.device_building_tag + "', '" +
 | 
					                                            row.device_building_tag + "', '" +
 | 
				
			||||||
                                            row.device_system_tag + "', '" +
 | 
					                                            row.device_system_tag + "', '" +
 | 
				
			||||||
                                            row.device_name_tag + "', '" +
 | 
					                                            row.device_name_tag + "', '" +
 | 
				
			||||||
 | 
					                                            //row.device_floor_tag + "', '" +
 | 
				
			||||||
 | 
					                                            //row.device_master_tag + "', '" +
 | 
				
			||||||
 | 
					                                            //row.device_last_name_tag + "', '" + 
 | 
				
			||||||
                                            row.device_point_name + "', '" +
 | 
					                                            row.device_point_name + "', '" +
 | 
				
			||||||
                                            row.parent_path + "', '" +
 | 
					                                            row.parent_path + "', '" +
 | 
				
			||||||
                                            row.full_name + "'," +
 | 
					                                            row.full_name + "'," +
 | 
				
			||||||
                                            row.isHistory +
 | 
					                                            row.isHistory + ", now() " +
 | 
				
			||||||
                                            ");");
 | 
					                                            ");";
 | 
				
			||||||
 | 
					                            sb.Append(ss);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        var isDome = await GetOneAsync<string>("select system_value from variable where deleted = 0 and system_type = 'project_name';");
 | 
					                        var isDome = await GetOneAsync<string>("select system_value from variable where deleted = 0 and system_type = 'project_name';");
 | 
				
			||||||
@ -270,6 +287,96 @@ namespace Repository.BackendRepository.Implement
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async Task InsertItemFromNiagara_History(List<ImpNiaItem> ds, List<string> building)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            using (IDbConnection conn = GetDbConnection())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                conn.Open();
 | 
				
			||||||
 | 
					                using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    try
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        //改成每次都新增 
 | 
				
			||||||
 | 
					                        string sql = @"SET NAMES utf8mb4;
 | 
				
			||||||
 | 
					SET FOREIGN_KEY_CHECKS = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- ----------------------------
 | 
				
			||||||
 | 
					-- Table structure for import_niagara_item_history
 | 
				
			||||||
 | 
					-- ----------------------------
 | 
				
			||||||
 | 
					DROP TABLE IF EXISTS `import_niagara_item_history`;
 | 
				
			||||||
 | 
					CREATE TABLE `import_niagara_item_history`  (
 | 
				
			||||||
 | 
					  `id` int(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
 | 
					  `device_area_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `device_building_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `device_system_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `device_name_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `device_floor_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `device_master_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `device_last_name_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `device_serial_tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `device_point_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `parent_path` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `is_history` bit(1) NULL DEFAULT b'0',
 | 
				
			||||||
 | 
					  `full_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `check_status` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 | 
				
			||||||
 | 
					  PRIMARY KEY (`id`) USING BTREE
 | 
				
			||||||
 | 
					) ENGINE = InnoDB AUTO_INCREMENT = 271 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SET FOREIGN_KEY_CHECKS = 1;";
 | 
				
			||||||
 | 
					                        await conn.ExecuteAsync(sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        #region 刪除 import_niagara_item資料表中選取的棟別
 | 
				
			||||||
 | 
					                        //foreach (var b in building)
 | 
				
			||||||
 | 
					                        //{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        //    sql = "delete from import_niagara_item_history where device_building_tag = '" + b + "'";
 | 
				
			||||||
 | 
					                        //    await conn.ExecuteAsync(sql);
 | 
				
			||||||
 | 
					                        //}
 | 
				
			||||||
 | 
					                        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        StringBuilder sb = new StringBuilder();
 | 
				
			||||||
 | 
					                        #region 放入import_niagara_item資料表
 | 
				
			||||||
 | 
					                        foreach (var row in ds)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            string ss = $@" insert import_niagara_item_history(device_area_tag, device_building_tag, device_system_tag, device_name_tag, 
 | 
				
			||||||
 | 
					device_floor_tag,  device_master_tag, device_last_name_tag, device_serial_tag, device_point_name, parent_path, full_name, is_history, created_at)
 | 
				
			||||||
 | 
					                                        values('" +
 | 
				
			||||||
 | 
					                                            row.device_area_tag + "', '" +
 | 
				
			||||||
 | 
					                                            row.device_building_tag + "', '" +
 | 
				
			||||||
 | 
					                                            row.device_system_tag + "', '" +
 | 
				
			||||||
 | 
					                                            row.device_name_tag + "', '" +
 | 
				
			||||||
 | 
					                                            row.device_floor_tag + "', '" +
 | 
				
			||||||
 | 
					                                            row.device_master_tag + "', '" +
 | 
				
			||||||
 | 
					                                            row.device_last_name_tag + "', '" +
 | 
				
			||||||
 | 
					                                            row.device_serial_tag + "', '" +
 | 
				
			||||||
 | 
					                                            row.device_point_name + "', '" +
 | 
				
			||||||
 | 
					                                            row.parent_path + "', '" +
 | 
				
			||||||
 | 
					                                            row.full_name + "'," +
 | 
				
			||||||
 | 
					                                            row.isHistory + ", now() " +
 | 
				
			||||||
 | 
					                                            ");";
 | 
				
			||||||
 | 
					                            sb.Append(ss);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        if (sb.Length > 0)
 | 
				
			||||||
 | 
					                        { 
 | 
				
			||||||
 | 
					                            await conn.ExecuteAsync(sb.ToString());
 | 
				
			||||||
 | 
					                            sb.Clear();
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        #endregion
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    catch (Exception exception)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        throw exception;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    finally
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        conn.Close();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 比對 device
 | 
					        /// 比對 device
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -28,6 +28,14 @@ namespace Repository.BackendRepository.Interface
 | 
				
			|||||||
        /// <param name="building"></param>
 | 
					        /// <param name="building"></param>
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        Task InsertItemFromNiagara(List<ImpNiaItem> ds, List<string> building);
 | 
					        Task InsertItemFromNiagara(List<ImpNiaItem> ds, List<string> building);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 同步N4至資料表 import_niagara_item_History
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="ds"></param>
 | 
				
			||||||
 | 
					        /// <param name="building"></param>
 | 
				
			||||||
 | 
					        /// <returns></returns>
 | 
				
			||||||
 | 
					        Task InsertItemFromNiagara_History(List<ImpNiaItem> ds, List<string> building);
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 比對 device
 | 
					        /// 比對 device
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -117,7 +117,12 @@ namespace Repository.Models
 | 
				
			|||||||
        public string device_system_tag { get; set; }
 | 
					        public string device_system_tag { get; set; }
 | 
				
			||||||
        public string device_name_tag { get; set; }
 | 
					        public string device_name_tag { get; set; }
 | 
				
			||||||
        public string device_point_name { get; set; }
 | 
					        public string device_point_name { get; set; }
 | 
				
			||||||
        public string device_floor_tag { get; set; }
 | 
					        public string device_floor_tag { get; set; } //add by jiahao 2023-07-23
 | 
				
			||||||
 | 
					        public string device_master_tag { get; set; } //add by jiahao 2023-07-23
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public string device_last_name_tag { get; set; }//add by jiahao 2023-07-23
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public string device_serial_tag { get; set; }//add by jiahao 2023-07-23
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public string parent_path { get; set; }
 | 
					        public string parent_path { get; set; }
 | 
				
			||||||
        public string check_status { get; set; }
 | 
					        public string check_status { get; set; }
 | 
				
			||||||
 | 
				
			|||||||
@ -18,8 +18,8 @@ namespace tpDomeWinAPP
 | 
				
			|||||||
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
 | 
					            Application.SetHighDpiMode(HighDpiMode.SystemAware);
 | 
				
			||||||
            Application.EnableVisualStyles();
 | 
					            Application.EnableVisualStyles();
 | 
				
			||||||
            Application.SetCompatibleTextRenderingDefault(false);
 | 
					            Application.SetCompatibleTextRenderingDefault(false);
 | 
				
			||||||
           // Application.Run(new fmCheckTagName());
 | 
					            Application.Run(new fmCheckTagName());
 | 
				
			||||||
            Application.Run(new fmDecrypt());
 | 
					            //Application.Run(new fmDecrypt());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user