9744ea469e
device和import_niagara_tag比對,並更新/新增資料至device。 device_item和import_niagara_item比對, 並更新/新增資料至device_item。
492 lines
20 KiB
C#
492 lines
20 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.Text;
|
||
using System.Windows.Forms;
|
||
using tpDomeWinAPP.Service;
|
||
using tpDomeWinAPP.Models;
|
||
using System.Linq;
|
||
using System.Collections;
|
||
|
||
namespace tpDomeWinAPP
|
||
{
|
||
public partial class fmCheckTagName : Form
|
||
{
|
||
string url_slot = string.Empty;
|
||
public string building { get; set; }
|
||
string top100 = " top 100 ";
|
||
List<device_value2> ds;
|
||
List<NiagaraTags> ds2;
|
||
procCompare svcCompare = new procCompare();
|
||
public fmCheckTagName()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
|
||
|
||
private void fmCheckTagName_Load(object sender, EventArgs e)
|
||
{
|
||
// MessageBox.Show(tabControl1.TabPages[2].Text);
|
||
#region 載入 DB -> Niagara
|
||
fmDB2Niagara f2 = new fmDB2Niagara();
|
||
f2.TopLevel = false;
|
||
f2.Parent = tabControl1.TabPages[2];
|
||
f2.FormBorderStyle = FormBorderStyle.None;
|
||
f2.Dock = DockStyle.Fill;
|
||
f2.Show();
|
||
#endregion
|
||
|
||
#region 載入 匯入Excel
|
||
fmImportXls f3 = new fmImportXls();
|
||
f3.TopLevel = false;
|
||
f3.Parent = tabControl1.TabPages[3];
|
||
f3.FormBorderStyle = FormBorderStyle.None;
|
||
f3.Dock = DockStyle.Fill;
|
||
f3.Show();
|
||
#endregion
|
||
|
||
#region 載入即時狀態
|
||
fmObixStatus f4 = new fmObixStatus();
|
||
f4.TopLevel = false;
|
||
f4.Parent = tabControl1.TabPages[4];
|
||
f4.FormBorderStyle = FormBorderStyle.None;
|
||
f4.Dock = DockStyle.Fill;
|
||
f4.Show();
|
||
#endregion
|
||
|
||
}
|
||
|
||
async private void btLoad_Click(object sender, EventArgs e)
|
||
{
|
||
ds = null;
|
||
dataGridView1.DataSource = null;
|
||
|
||
loadData();
|
||
|
||
//load form
|
||
//var tab = tabControl1.TabPages[2];
|
||
//tabControl1.TabPages[2].Controls.
|
||
|
||
|
||
|
||
//if (dsDevice.Count == 0) loadData();
|
||
|
||
//var ds = from data in dsDevice
|
||
// where data.kind == 4
|
||
// select data;
|
||
//if (ds.Count() > 0)
|
||
// dataGridView1.DataSource = ds.ToList();
|
||
|
||
//getFireAsync(1, ds, dataGridView1);
|
||
}
|
||
|
||
async private void rbM_CheckedChanged(object sender, EventArgs e)
|
||
{
|
||
RadioButton rb = (sender as RadioButton);
|
||
if (rb.Checked)
|
||
{
|
||
switch (rb.Name)
|
||
{
|
||
case "rbH": url_slot = "slot:/Arena/H|"; break;
|
||
case "rbOffice": url_slot = "slot:/Arena/O|"; break;
|
||
case "rbCinema": url_slot = "slot:/Arena/C|"; break;
|
||
case "rbDome2": url_slot = "slot:/Arena/D2|"; break;
|
||
case "rbDome3": url_slot = "slot:/Arena/D3|"; break;
|
||
case "rbM": url_slot = "slot:/Arena/M|"; break;
|
||
}
|
||
building = rb.Tag.ToString();
|
||
// DB -> Niagara form
|
||
//tabControl1.TabPages[2].Controls[0]
|
||
//btLoad.PerformClick();
|
||
}
|
||
}
|
||
|
||
|
||
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
|
||
{
|
||
int index = 0;
|
||
int spliteCell = 1;//每三行換一個顏色
|
||
DataGridView dg = (sender as DataGridView);
|
||
//foreach (DataGridViewRow dgv in dataGridView1.Rows)
|
||
foreach (DataGridViewRow dgv in dg.Rows)
|
||
{
|
||
if (index % 2 == 0)
|
||
dgv.DefaultCellStyle.BackColor = SystemColors.GradientActiveCaption; //改row的顏色
|
||
else
|
||
dgv.DefaultCellStyle.BackColor = Color.White; //改row的顏色
|
||
|
||
index++;
|
||
}
|
||
}
|
||
|
||
|
||
private void rb100_CheckedChanged(object sender, EventArgs e)
|
||
{
|
||
RadioButton rb = (sender as RadioButton);
|
||
if (rb.Checked)
|
||
{
|
||
switch (rb.Name)
|
||
{
|
||
case "rb100": top100 = " top 100 "; break;
|
||
default : top100 = ""; break;
|
||
}
|
||
//btLoad.PerformClick();
|
||
}
|
||
}
|
||
|
||
private void btTagCompare_Click(object sender, EventArgs e)
|
||
{
|
||
|
||
if (ds != null && ds.Count > 0)
|
||
{
|
||
svcCompare.InsertNiagaraTagList(ds, building);
|
||
lbMsg2.Text = "Done!" + Environment.NewLine + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
}
|
||
else
|
||
MessageBox.Show("查無資料 無法比對!");
|
||
}
|
||
|
||
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
|
||
{
|
||
//switch ((sender as TabControl).SelectedIndex)
|
||
//{
|
||
// case 0:
|
||
// break;
|
||
// case 1:
|
||
// break;
|
||
//}
|
||
}
|
||
|
||
public void loadData()
|
||
{
|
||
lbMsg.Text = "Loading ...";
|
||
|
||
if (tabControl1.SelectedIndex == 0)
|
||
{
|
||
webRequestSvc svc = new webRequestSvc();
|
||
string bql = url_slot + "bql:select " + top100 + " * from control:ControlPoint ";
|
||
//ds = svc.obixQuery("http://60.251.164.125:8080/obix/config/Arena/Program/ObixQuery/query/", bql);//原本的
|
||
ds = svc.obixQuery("http://localhost:8080/obix/config/Program/ObixQuery/query/", bql);
|
||
|
||
|
||
dataGridView1.DataSource = ds;
|
||
dataGridView1.Columns[0].Visible = false;
|
||
dataGridView1.Columns[1].Width = 400;
|
||
dataGridView1.Columns[2].Width = 200;
|
||
lbMsg.Text = "共 " + ds.Count.ToString() + " 筆資料 " + Environment.NewLine + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
}
|
||
else if (tabControl1.SelectedIndex == 1)
|
||
{
|
||
ds2 = null;
|
||
dataGridView2.DataSource = null;
|
||
//procCompare svc = new procCompare();
|
||
ds2 = svcCompare.GetNiagaraTags(building);
|
||
dataGridView2.DataSource = ds2;
|
||
dataGridView2.Columns[0].Visible = false;
|
||
dataGridView2.Columns[1].Width = 200;
|
||
dataGridView2.Columns[2].Width = 200;
|
||
dataGridView2.Columns[3].Width = 150;
|
||
lbMsg2.Text = "Done!" + Environment.NewLine + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
}
|
||
else if (tabControl1.SelectedIndex == 2)
|
||
{
|
||
//procCompare svc = new procCompare();
|
||
// ref https://stackoverflow.com/questions/3419159/how-to-get-all-child-controls-of-a-windows-forms-form-of-a-specific-type-button?noredirect=1&lq=1
|
||
var dgs = GetAll(tabControl1.TabPages[2].Controls[0], typeof(DataGridView));
|
||
DataGridView grid = (DataGridView)dgs.Where(x => x.Name == "dataGridView2").FirstOrDefault();
|
||
grid.DataSource = null;
|
||
var dt = svcCompare.SearchDBTags(building);
|
||
|
||
//Set AutoGenerateColumns False
|
||
grid.AutoGenerateColumns = false;
|
||
grid.EnableHeadersVisualStyles = true;
|
||
|
||
//Set Columns Count
|
||
grid.ColumnCount = 12;
|
||
grid.AllowUserToOrderColumns = true;
|
||
|
||
#region Grid column Setting
|
||
grid.Columns[0].Name = "Device_guid";
|
||
grid.Columns[0].HeaderText = "Device_guid";
|
||
grid.Columns[0].DataPropertyName = "Device_guid";
|
||
|
||
grid.Columns[1].Name = "device_name";
|
||
grid.Columns[1].HeaderText = "device_name";
|
||
grid.Columns[1].DataPropertyName = "full_name";
|
||
|
||
grid.Columns[2].Name = "db_tag";
|
||
grid.Columns[2].HeaderText = "db_tag";
|
||
grid.Columns[2].DataPropertyName = "device_number";
|
||
grid.Columns[2].Width = 200;
|
||
|
||
grid.Columns[3].Name = "niagaraTag";
|
||
grid.Columns[3].HeaderText = "Niagara Tag";
|
||
grid.Columns[3].DataPropertyName = "niagaraTag";
|
||
grid.Columns[3].Width = 200;
|
||
|
||
//grid.Columns[4].Name = "db_tag_old";
|
||
//grid.Columns[4].HeaderText = "db_tag_old";
|
||
//grid.Columns[4].DataPropertyName = "device_number_old";
|
||
|
||
grid.Columns[4].Name = "building";
|
||
grid.Columns[4].HeaderText = "building";
|
||
grid.Columns[4].DataPropertyName = "device_building_tag";
|
||
grid.Columns[4].Width = 80;
|
||
|
||
grid.Columns[5].Name = "system_code1";
|
||
grid.Columns[5].HeaderText = "system_code1";
|
||
grid.Columns[5].DataPropertyName = "device_system_tag";
|
||
grid.Columns[5].Width = 100;
|
||
|
||
grid.Columns[6].Name = "old_system";
|
||
grid.Columns[6].HeaderText = "old_system_code1";
|
||
grid.Columns[6].DataPropertyName = "device_system_tag_old";
|
||
grid.Columns[6].Width = 100;
|
||
|
||
grid.Columns[7].Name = "floor";
|
||
grid.Columns[7].HeaderText = "floor";
|
||
grid.Columns[7].DataPropertyName = "device_floor_tag";
|
||
grid.Columns[7].Width = 80;
|
||
|
||
grid.Columns[8].Name = "system_code2";
|
||
grid.Columns[8].HeaderText = "system_code2";
|
||
grid.Columns[8].DataPropertyName = "device_name_tag";
|
||
grid.Columns[8].Width = 80;
|
||
|
||
grid.Columns[9].Name = "serial";
|
||
grid.Columns[9].HeaderText = "serial";
|
||
grid.Columns[9].DataPropertyName = "device_serial_tag";
|
||
grid.Columns[9].Width = 80;
|
||
|
||
grid.Columns[10].Name = "coordinate";
|
||
grid.Columns[10].HeaderText = "coordinate";
|
||
grid.Columns[10].DataPropertyName = "device_coordinate";
|
||
grid.Columns[10].Width = 80;
|
||
|
||
grid.Columns[11].Name = "atDateTime";
|
||
grid.Columns[11].HeaderText = "atDateTime";
|
||
grid.Columns[11].DataPropertyName = "atDateTime";
|
||
grid.Columns[11].Width = 100;
|
||
|
||
grid.DataBindingComplete += dataGridView1_DataBindingComplete;
|
||
grid.DataSource = dt;
|
||
#endregion
|
||
|
||
var labels = GetAll(tabControl1.TabPages[2].Controls[0], typeof(Label));
|
||
Label lbMsg2 = (Label)labels.Where(x => x.Name == "lbMsg").FirstOrDefault();
|
||
lbMsg2.Text = "共 " + dt.Count.ToString() + " 筆資料 " + Environment.NewLine + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
}
|
||
else if (tabControl1.SelectedIndex == 4)
|
||
{ // 取得即時狀態
|
||
var dgs = GetAll(tabControl1.TabPages[4].Controls[0], typeof(DataGridView));
|
||
DataGridView grid = (DataGridView)dgs.Where(x => x.Name == "dgv").FirstOrDefault();
|
||
grid.DataSource = null;
|
||
var dt = svcCompare.SearchDBTags(building);
|
||
|
||
//Set AutoGenerateColumns False
|
||
grid.AutoGenerateColumns = false;
|
||
grid.EnableHeadersVisualStyles = true;
|
||
|
||
//Set Columns Count
|
||
grid.ColumnCount = 2;
|
||
grid.AllowUserToOrderColumns = true;
|
||
|
||
#region Grid column Setting
|
||
//grid.Columns[0].Name = "Device_guid";
|
||
//grid.Columns[0].HeaderText = "Device_guid";
|
||
//grid.Columns[0].DataPropertyName = "Device_guid";
|
||
|
||
grid.Columns[0].Name = "device_name";
|
||
grid.Columns[0].HeaderText = "device_name";
|
||
grid.Columns[0].DataPropertyName = "full_name";
|
||
|
||
grid.Columns[1].Name = "db_tag";
|
||
grid.Columns[1].HeaderText = "db_tag";
|
||
grid.Columns[1].DataPropertyName = "device_number";
|
||
grid.Columns[1].Width = 200;
|
||
|
||
//grid.Columns[3].Name = "niagaraTag";
|
||
//grid.Columns[3].HeaderText = "Niagara Tag";
|
||
//grid.Columns[3].DataPropertyName = "niagaraTag";
|
||
//grid.Columns[3].Width = 200;
|
||
|
||
//grid.Columns[4].Name = "db_tag_old";
|
||
//grid.Columns[4].HeaderText = "db_tag_old";
|
||
//grid.Columns[4].DataPropertyName = "device_number_old";
|
||
|
||
//grid.Columns[4].Name = "building";
|
||
//grid.Columns[4].HeaderText = "building";
|
||
//grid.Columns[4].DataPropertyName = "device_building_tag";
|
||
//grid.Columns[4].Width = 80;
|
||
|
||
//grid.Columns[5].Name = "system_code1";
|
||
//grid.Columns[5].HeaderText = "system_code1";
|
||
//grid.Columns[5].DataPropertyName = "device_system_tag";
|
||
//grid.Columns[5].Width = 100;
|
||
|
||
//grid.Columns[6].Name = "old_system";
|
||
//grid.Columns[6].HeaderText = "old_system_code1";
|
||
//grid.Columns[6].DataPropertyName = "device_system_tag_old";
|
||
//grid.Columns[6].Width = 100;
|
||
|
||
//grid.Columns[7].Name = "floor";
|
||
//grid.Columns[7].HeaderText = "floor";
|
||
//grid.Columns[7].DataPropertyName = "device_floor_tag";
|
||
//grid.Columns[7].Width = 80;
|
||
|
||
//grid.Columns[8].Name = "system_code2";
|
||
//grid.Columns[8].HeaderText = "system_code2";
|
||
//grid.Columns[8].DataPropertyName = "device_name_tag";
|
||
//grid.Columns[8].Width = 80;
|
||
|
||
//grid.Columns[9].Name = "serial";
|
||
//grid.Columns[9].HeaderText = "serial";
|
||
//grid.Columns[9].DataPropertyName = "device_serial_tag";
|
||
//grid.Columns[9].Width = 80;
|
||
|
||
//grid.Columns[10].Name = "coordinate";
|
||
//grid.Columns[10].HeaderText = "coordinate";
|
||
//grid.Columns[10].DataPropertyName = "device_coordinate";
|
||
//grid.Columns[10].Width = 80;
|
||
|
||
//grid.Columns[11].Name = "atDateTime";
|
||
//grid.Columns[11].HeaderText = "atDateTime";
|
||
//grid.Columns[11].DataPropertyName = "atDateTime";
|
||
//grid.Columns[11].Width = 100;
|
||
|
||
grid.DataBindingComplete += dataGridView1_DataBindingComplete;
|
||
grid.DataSource = dt;
|
||
#endregion
|
||
|
||
var labels = GetAll(tabControl1.TabPages[4].Controls[0], typeof(Label));
|
||
Label lbMsg2 = (Label)labels.Where(x => x.Name == "lbMsg").FirstOrDefault();
|
||
lbMsg2.Text = "共 " + dt.Count.ToString() + " 筆資料 " + Environment.NewLine + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
}
|
||
}
|
||
|
||
public IEnumerable<Control> GetAll(Control control, Type type)
|
||
{
|
||
var controls = control.Controls.Cast<Control>();
|
||
|
||
return controls.SelectMany(ctrl => GetAll(ctrl, type))
|
||
.Concat(controls)
|
||
.Where(c => c.GetType() == type);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Niagara tag vs DB tag
|
||
/// 僅顯示 DBtag 缺失部分
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void cbShowEmpty_CheckedChanged(object sender, EventArgs e)
|
||
{
|
||
//if (cbShowEmpty.Checked)
|
||
//{
|
||
// if (ds2.Count > 0)
|
||
// {
|
||
// var dds2 = ds2.Where(x => string.IsNullOrEmpty(x.db_tags));
|
||
// dataGridView2.DataSource = dds2;
|
||
// lbMsg2.Text = "共 " + dds2.Count().ToString() + " 筆資料 " + Environment.NewLine + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
// }
|
||
//}
|
||
}
|
||
|
||
//enum tag_sec
|
||
//{
|
||
// building = 1,
|
||
// system1
|
||
//}
|
||
/// <summary>
|
||
/// Niagara tag vs DB tag
|
||
/// 查詢 2, 3, 4, 5碼 關鍵字
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void btSearch_N4vsDB_Click(object sender, EventArgs e)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
foreach (Control c in tableLayoutPanel1.Controls)
|
||
{
|
||
if (c is TextBox)
|
||
{
|
||
if (c.Text.Trim().Length > 0)
|
||
{
|
||
string num = c.Name.Substring(c.Name.Length - 1, 1);//取出最後的數字
|
||
switch (num)
|
||
{
|
||
//case "1": sb.Append($@" and building like '%{c.Text.Trim()}%' "); break;
|
||
case "2": sb.Append($@" and system_code1 like '%{c.Text.Trim()}%' "); break;
|
||
case "3": sb.Append($@" and [floor] like '%{c.Text.Trim()}%' "); break;
|
||
case "4": sb.Append($@" and system_code2 like '%{c.Text.Trim()}%' "); break;
|
||
case "5": sb.Append($@" and device_serial like '%{c.Text.Trim()}%' "); break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
sb.Insert(0, $@"select * from import_niagara_tag where building = '{building}' ");
|
||
if (cbShowEmpty.Checked)
|
||
{
|
||
sb.Append( $@" and db_tags is null;");
|
||
}
|
||
//procCompare svc = new procCompare();
|
||
ds2 = svcCompare.SearchNiagaraTags(sb.ToString());
|
||
dataGridView2.DataSource = ds2;
|
||
lbMsg2.Text = "共 " + ds2.Count().ToString() + " 筆資料 " + Environment.NewLine + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
|
||
}
|
||
|
||
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||
{
|
||
|
||
}
|
||
|
||
//public async void getFireAsync(int deviceKind, IEnumerable<device> ds, DataGridView gv)
|
||
//{
|
||
// ///消防設備一次報警1http://greencloud.fic.com.tw:8080/obix/config/NHI/Taipei/Fire/Fire1Level1/out
|
||
// //消防設備一次報警2 http://greencloud.fic.com.tw:8080/obix/config/NHI/Taipei/Fire/Fire2Level1/out
|
||
// //消防設備二次報警1 http://greencloud.fic.com.tw:8080/obix/config/NHI/Taipei/Fire/Fire1Level2/out
|
||
// //消防設備二次報警2 http://greencloud.fic.com.tw:8080/obix/config/NHI/Taipei/Fire/Fire2Level2/out
|
||
// //消防設備故障報警1 http://greencloud.fic.com.tw:8080/obix/config/NHI/Taipei/Fire/Fire1Trouble/out
|
||
// //消防設備故障報警2 http://greencloud.fic.com.tw:8080/obix/config/NHI/Taipei/Fire/Fire2Trouble/out
|
||
// string url; //http://greencloud.fic.com.tw:8080/obix/config/NHI/Taipei/Fire/ Fire1Level1/out
|
||
// url = (rbTest.Checked) ? "http://greencloud.fic.com.tw:8080/obix/config/NHI/Taipei/Fire/" : "http://192.168.10.6:8081/obix/config/NHI/Taipei/Fire/";
|
||
|
||
// // List<string> urls = new List<string>();
|
||
// List<device_value> device = new List<device_value>();
|
||
// for (int i = 0; i <= 5; i++)
|
||
// {
|
||
// string ss = string.Empty;
|
||
// switch (i)
|
||
// {
|
||
// case 0: ss = url + "Fire1Level1/out"; break;
|
||
// case 1: ss = url + "Fire2Level1/out"; break;
|
||
// case 2: ss = url + "Fire1Level2/out"; break;
|
||
// case 3: ss = url + "Fire2Level2/out"; break;
|
||
// case 4: ss = url + "Fire1Trouble/out"; break;
|
||
// case 5: ss = url + "Fire2Trouble/out"; break;
|
||
// }
|
||
// //urls.Add(ss);
|
||
// int itemNo = ((i + 1) % 2 == 1) ? 1 : 2;
|
||
// await proc.GetIotData(ss, device, "FireNo" + itemNo.ToString());
|
||
// }
|
||
// gv.DataSource = device;
|
||
// //return device;
|
||
//}
|
||
|
||
//public async void getAPIResultAsync(int deviceKind, IEnumerable<device> ds, DataGridView gv)
|
||
//{
|
||
|
||
// List<device_value> device = new List<device_value>();
|
||
// foreach (var item in ds)
|
||
// {
|
||
// await proc.GetIotData(item.API_URL, device, item.device_name);
|
||
// }
|
||
// gv.DataSource = device;
|
||
//}
|
||
|
||
}
|
||
}
|