using System; using System.Collections.Generic; using System.Text; using System.Configuration; using tpDomeWinAPP.Models; using System.Data; using System.Data.SqlClient; using MySql.Data.MySqlClient; using Repository.Helper; using Repository.BackendRepository.Interface; using Dapper; using System.Linq; namespace tpDomeWinAPP.Service { public class procCompare { string Connection1 = ConfigurationManager.ConnectionStrings["dbConStr"].ConnectionString; protected readonly IDatabaseHelper _databaseHelper; protected string UseDB; protected IDbConnection con; private readonly IBackendRepository backendRepository; public bool InsertNiagaraTagList(List dt, string building ) { bool result = false; var ds2 = dt.GroupBy(x => new { tag_name2 = x.tag_name }).Select( x => new device_value2 { tag_name = x.Key.tag_name2 }); using (SqlConnection conn = new SqlConnection(Connection1)) { //CONCAT('{baseURL}', '{deviceKindFilePath}', dk.device_image) AS device_image_url, conn.Open(); #region 不存在就 Create table string ss = @"IF (not EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'importTag')) BEGIN CREATE TABLE [dbo].[importTag]( [id] [int] IDENTITY(1,1) NOT NULL, [db_tags] [varchar](50) NULL, [niagara_tags] [varchar](50) NULL, [building] [varchar](10) NULL, [system_code1] [varchar](10) NULL, [floor] [varchar](10) NULL, [system_code2] [varchar](10) NULL, [device_serial] [varchar](10) NULL, [atDateTime] [smalldatetime] NULL, CONSTRAINT [PK_importTag] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]; END"; conn.Execute(ss.ToString()); ss = "delete from importTag where building = '" + building + "'"; conn.Execute(ss.ToString()); #endregion StringBuilder sb = new StringBuilder(); int i = 0; foreach (var row in ds2) { if (string.IsNullOrEmpty(row.tag_name)) continue; sb.Append($@" insert importTag(niagara_tags, building, atDateTime) values('" + row.tag_name + "', '" + building + "', getDate());"); i++; try { if (i >= 100) { conn.Execute(sb.ToString()); sb.Clear(); i = 0; } } catch (Exception ex) { throw ex; } } if (sb.Length > 0) { conn.Execute(sb.ToString()); } #region update 其餘 4段 tag sb.Clear(); sb.Append($@"update importTag set importTag.system_code1 = b.tagName from ( select niagara_tags, building, serial, tagName from dbo.importTag a CROSS APPLY [Func_StringSplit](a.niagara_tags, '_') where serial = 2 and building = '{building}' ) b where importTag.niagara_tags = b.niagara_tags and importTag.building = '{building}'; update importTag set importTag.floor = b.tagName from ( select niagara_tags, building, serial, tagName from dbo.importTag a CROSS APPLY [Func_StringSplit](a.niagara_tags, '_') where serial = 3 and building = '{building}' ) b where importTag.niagara_tags = b.niagara_tags and importTag.building = '{building}'; update importTag set importTag.system_code2 = b.tagName from ( select niagara_tags, building, serial, tagName from dbo.importTag a CROSS APPLY [Func_StringSplit](a.niagara_tags, '_') where serial = 4 and building = '{building}' ) b where importTag.niagara_tags = b.niagara_tags and importTag.building = '{building}'; update importTag set importTag.device_serial = b.tagName from ( select niagara_tags, building, serial, tagName from dbo.importTag a CROSS APPLY [Func_StringSplit](a.niagara_tags, '_') where serial = 5 and building = '{building}' ) b where importTag.niagara_tags = b.niagara_tags and importTag.building = '{building}'; update importTag set db_tags = b.device_number from dbo.device b where niagara_tags = b.device_number and importTag.building = '{building}' "); conn.Execute(sb.ToString()); #endregion } return result; } public bool InsertDbTagList(List dt, string building) { bool result = false; var ds2 = dt.GroupBy(x => new { tag_name2 = x.tag_name }).Select(x => new device_value2 { tag_name = x.Key.tag_name2 }); using (SqlConnection conn = new SqlConnection(Connection1)) { //CONCAT('{baseURL}', '{deviceKindFilePath}', dk.device_image) AS device_image_url, conn.Open(); #region 判斷 table 是否存在 string ss = @"IF (not EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'import_dbTag_niagaraTag')) BEGIN CREATE TABLE [dbo].[import_dbTag_niagaraTag]( [device_guid] [varchar](36) NOT NULL, [full_name] [varchar](50) NOT NULL, [device_number] [varchar](50) NOT NULL, [niagaraTag] [varchar](50) NOT NULL, [device_coordinate] [varchar](50) NULL, [device_number_old] [varchar](50) NULL, [device_building_tag] [varchar](50) NOT NULL, [device_system_tag] [varchar](50) NOT NULL, [device_system_tag_old] [varchar](50) NULL, [device_floor_tag] [varchar](50) NOT NULL, [device_name_tag] [varchar](50) NOT NULL, [device_serial_tag] [varchar](50) NOT NULL, [atDateTime] [smalldatetime] NULL, CONSTRAINT [PK_import_dbTag_niagaraTag] PRIMARY KEY CLUSTERED ( [device_guid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]; END"; conn.Execute(ss.ToString()); //ss = "delete from importTag where building = '" + building + "'"; //conn.Execute(ss.ToString()); #endregion StringBuilder sb = new StringBuilder(); int i = 0; sb.Append($@" insert import_dbTag_niagaraTag(device_guid, full_name, device_number, niagaraTag, device_coordinate, device_number_old, device_building_tag, device_system_tag, device_system_tag_old, device_floor_tag, device_name_tag, device_serial_tag, atDateTime) select device_guid, full_name, device_number, '', device_coordinate, device_number_old, device_building_tag, device_system_tag, device_system_tag_old, device_floor_tag, device_name_tag, device_serial_tag, getDate() from device where deleted = 0;"); conn.Execute(sb.ToString()); sb.Clear(); #region update niagara_tags sb.Clear(); sb.Append($@"update import_dbTag_niagaraTag set niagaraTag = b.niagara_tags from [dbo].[importTag] b where import_dbTag_niagaraTag.device_number = b.niagara_tags "); conn.Execute(sb.ToString()); #endregion } return result; } public List GetNiagaraTags(string building) { List result; using (SqlConnection conn = new SqlConnection(Connection1)) { //CONCAT('{baseURL}', '{deviceKindFilePath}', dk.device_image) AS device_image_url, conn.Open(); StringBuilder sb = new StringBuilder(); sb.Append($@" select * from importTag where building = '{building}'"); result = conn.Query(sb.ToString()).ToList(); } return result; } public List SearchNiagaraTags(string sql) { List result; using (SqlConnection conn = new SqlConnection(Connection1)) { //CONCAT('{baseURL}', '{deviceKindFilePath}', dk.device_image) AS device_image_url, conn.Open(); StringBuilder sb = new StringBuilder(); sb.Append(sql); result = conn.Query(sb.ToString()).ToList(); } return result; } public List SearchDBTags(string building) { List result; using (SqlConnection conn = new SqlConnection(Connection1)) { //CONCAT('{baseURL}', '{deviceKindFilePath}', dk.device_image) AS device_image_url, conn.Open(); StringBuilder sb = new StringBuilder(); if (string.IsNullOrEmpty(building)) { sb.Append("select * from import_dbTag_niagaraTag order by device_number"); } else { sb.Append($@"select * from import_dbTag_niagaraTag where device_building_tag = '{building}' order by device_number"); } result = conn.Query(sb.ToString()).ToList(); } return result; } public List filterDBTags(string sql) { List result; using (SqlConnection conn = new SqlConnection(Connection1)) { //CONCAT('{baseURL}', '{deviceKindFilePath}', dk.device_image) AS device_image_url, conn.Open(); StringBuilder sb = new StringBuilder(); sb.Append(sql); result = conn.Query(sb.ToString()).ToList(); } return result; } /// /// 更新 DbTag 中的 Niagara tag 欄位 /// /// /// public int updateNiagaraTag_forDBTags(string bilding) { int i = -1; using (SqlConnection conn = new SqlConnection(Connection1)) { //CONCAT('{baseURL}', '{deviceKindFilePath}', dk.device_image) AS device_image_url, conn.Open(); StringBuilder sb = new StringBuilder(); try { #region 更新該棟的 DB data sb.Append($@"delete import_dbTag_niagaraTag where device_building_tag = '{bilding}'"); conn.Execute(sb.ToString()); sb.Clear(); sb.Append($@" insert import_dbTag_niagaraTag(device_guid, full_name, device_number, niagaraTag, device_coordinate, device_number_old, device_building_tag, device_system_tag, device_system_tag_old, device_floor_tag, device_name_tag, device_serial_tag, atDateTime) select device_guid, full_name, device_number, '', device_coordinate, device_number_old, device_building_tag, device_system_tag, device_system_tag_old, device_floor_tag, device_name_tag, device_serial_tag, getDate() from device where deleted = 0 and device_building_tag = '{bilding}';"); conn.Execute(sb.ToString()); sb.Clear(); #endregion sb.Append($@"update import_dbTag_niagaraTag set niagaraTag = b.niagara_tags from [dbo].[importTag] b where import_dbTag_niagaraTag.device_number = b.niagara_tags and import_dbTag_niagaraTag.device_building_tag = '{bilding}'"); i = conn.Execute(sb.ToString()); sb.Clear(); } catch (Exception ex) { throw ex; } } return i; } } }