using DevExpress.Utils.Extensions; using DevExpress.XtraBars; using InTheHand.Net; using InTheHand.Net.Bluetooth; using InTheHand.Net.Sockets; using System.Data; using System.IO; using System.Net.Http; using System.Text; using Yw.WinFrmUI; using Yw; using PBS.Model; namespace IBox.WinFrmUI { public partial class IBoxForm : DocumentPage { private Facility _facilities; private BluetoothRadio radio = null;//蓝牙适配器 private string sendFileName = null;//发送文件名 private BluetoothAddress sendAddress = null;//发送目的地址 //private ObexListener listener = null;//监听器 private Thread listenThread, sendThread;//发送/接收线程 private BluetoothClient myClient = null; private string startCode = "[&start&]"; private string endCode = "[&end&]"; private string paramCode = "[¶m&]"; private string getbaseCode = "getbase"; private string getrealrecordCode = "getrealrecord"; private string gethistoryrecordCode = "gethistoryrecord"; private string getalarmbydayCode = "getalarmbyday"; private string getbysignalidofdayrangeCode = "getbysignalidofdayrange"; private string getmonitorCode = "getmonitor"; private string getsignaltypeCode = "getsignaltype"; private string getMonitorgroupCode = "getmonitorgroup"; private BluetoothDeviceInfo curLanYa = null; private List LstBluetooth = null; //Stopwatch sw = new Stopwatch(); //string swstr=string.Empty; private List monitorValueAlarmRecords = null; private List dataGridMonitorViewModels = null; private List pumpRunStatusModels = null; private List pumpEnergyViewModels = null; /// /// 搜索 /// /// /// private void barButtonItem1_ItemClick_1(object sender, ItemClickEventArgs e) { //this.repCmbBlue.Items.Add(); //this.barBtnBlue.EditValue; WaitFormHelper.ShowWaitForm(this); repCmbBlue.Items.Clear(); LstBluetooth = BluetoothHelper.GetInstance().SearchBluetooth(); if (null == LstBluetooth || LstBluetooth.Count < 1) return; foreach (var itm in LstBluetooth) repCmbBlue.Items.Add(itm.DeviceName); var f = LstBluetooth.FirstOrDefault(b => b.DeviceName.Contains("ebox")); if (f != null) { this.barBtnBlue.EditValue = f.DeviceName; barButtonItem3.Enabled = true; } WaitFormHelper.HideWaitForm(this); } /// /// 连接 /// /// /// private void barButtonItem3_ItemClick(object sender, ItemClickEventArgs e) { WaitFormHelper.ShowWaitForm(); var f = LstBluetooth.First(b => b.DeviceName.Contains(this.barBtnBlue.EditValue.ToString())); if (f != null) { BluetoothHelper.GetInstance().SetBluetoothByName(f.DeviceName); BluetoothHelper.GetInstance().ListenerData(); ConnectedEve(); Thread.Sleep(500); WaitFormHelper.HideWaitForm(this); } } private void ConnectedEve() { barButtonItem2.Enabled = barButtonItem3.Enabled = barButtonItem14.Enabled = barButtonItem11.Enabled = barButtonItem12.Enabled = barButtonItem4.Enabled = barButtonItem5.Enabled = barButtonItem6.Enabled = barButtonItem7.Enabled = barButtonItem8.Enabled = barButtonItem9.Enabled = barButtonItem13.Enabled = true; barButtonItemConnected.Enabled = false; barButtonItemClose.Enabled = true; } private void ClosedEve() { barButtonItem2.Enabled = barButtonItem3.Enabled = barButtonItem14.Enabled = barButtonItem11.Enabled = barButtonItem12.Enabled = barButtonItem4.Enabled = barButtonItem5.Enabled = barButtonItem6.Enabled = barButtonItem7.Enabled = barButtonItem8.Enabled = barButtonItem9.Enabled = barButtonItem13.Enabled = false; barButtonItemConnected.Enabled = true; barButtonItemClose.Enabled = false; } /// /// 断开 /// /// /// private void barButtonItemClose_ItemClick(object sender, ItemClickEventArgs e) { BluetoothHelper.GetInstance().Close(); ClosedEve(); } private void AddControl(DocumentPage page) { //if (dockPanel1.Controls.Count > 0) //{ // dockPanel1.Controls.RemoveAt(0); //} //dockPanel1.Controls.Add(page); //WaitFormHelper.HideWaitForm(); } private void InitControl() { IBoxFormOverview = new IBoxFormOverview(); IBoxFormOverview.Dock = DockStyle.Fill; IBoxFormOverview.SendData += SendText; xtraTabPage2.Controls.Add(IBoxFormOverview); IBoxFormMonitor = new IBoxFormMonitor(); IBoxFormMonitor.Dock = DockStyle.Fill; IBoxFormMonitor.SendData += SendText; xtraTabPage1.Controls.Add(IBoxFormMonitor); //IBoxFormControll = new IBoxFormControll(_facilities); //IBoxFormControll.Dock = DockStyle.Fill; //IBoxFormControll.SendData += SendText; //xtraTabPage7.Controls.Add(IBoxFormControll); IBoxFormParams = new IBoxFormParams(); IBoxFormParams.Dock = DockStyle.Fill; IBoxFormParams.SendData += SendText; xtraTabPage5.Controls.Add(IBoxFormParams); IBoxFormLog = new IBoxFormLog(); IBoxFormLog.Dock = DockStyle.Fill; IBoxFormLog.SendData += SendText; xtraTabPage8.Controls.Add(IBoxFormLog); IBoxFormProtocol = new IBoxFormProtocol(); IBoxFormProtocol.Dock = DockStyle.Fill; IBoxFormProtocol.SendData += SendText; xtraTabPage3.Controls.Add(IBoxFormProtocol); IBoxFormRule = new IBoxFormRule(_facilities); IBoxFormRule.Dock = DockStyle.Fill; IBoxFormRule.SendData += SendText; xtraTabPage4.Controls.Add(IBoxFormRule); _SelectedBuild = new Build() { factoryName = _facilities.Name, 系统最大流量 = _facilities.MaxWaterDemand.Value, Type = 二供分区Type.加压供水, ID = _facilities.ID.ToString(), 用户压力需求 = int.Parse(_facilities.TerminalPressure.ToString()), 层数 = double.Parse(_facilities.Floor.ToString()), 层高 = double.Parse(_facilities.FloorHeight.ToString()), 每层户数 = double.Parse(_facilities.Households.ToString()) }; //ShowChart(); var simuCalcViewModel = new SimuViewModel(); simuCalcViewModel.CurrentBuild = _SelectedBuild; simuCalcViewModel.Facilities = _facilities; //IBoxFormScheme = new IBoxFormScheme(simuCalcViewModel); //IBoxFormScheme.Dock = DockStyle.Fill; //IBoxFormScheme.SendData += SendText; //xtraTabPage6.Controls.Add(IBoxFormScheme); } private void barButtonItem6_ItemClick(object sender, ItemClickEventArgs e) { //IBoxFormMonitor = null; //IBoxFormOverview = new IBoxFormOverview(); //IBoxFormOverview.Dock = DockStyle.Fill; //IBoxFormOverview.SendData += SendText; //AddControl(IBoxFormOverview); HideAll(); IBoxFormOverview = new IBoxFormOverview(); IBoxFormOverview.Dock = DockStyle.Fill; IBoxFormOverview.SendData += SendText; xtraTabPage2.Controls.Add(IBoxFormOverview); xtraTabPage2.PageVisible = true; } private void HideAll() { xtraTabControl1.TabPages.ForEach(b => { if (b.Controls.Count > 0) { b.Controls.RemoveAt(0); } b.PageVisible = false; }); } private void barButtonItem2_ItemClick(object sender, ItemClickEventArgs e) { //IBoxFormOverview = null; //IBoxFormMonitor = new IBoxFormMonitor(); //IBoxFormMonitor.Dock = DockStyle.Fill; //IBoxFormMonitor.SendData += SendText; //AddControl(IBoxFormMonitor); HideAll(); IBoxFormMonitor = new IBoxFormMonitor(); IBoxFormMonitor.Dock = DockStyle.Fill; IBoxFormMonitor.SendData += SendText; xtraTabPage1.Controls.Add(IBoxFormMonitor); xtraTabPage1.PageVisible = true; } private void barButtonItem5_ItemClick(object sender, ItemClickEventArgs e) { //IBoxFormControll = new IBoxFormControll(_facilities); //IBoxFormControll.Dock = DockStyle.Fill; //IBoxFormControll.SendData += SendText; //AddControl(IBoxFormControll); HideAll(); //IBoxFormControll = new IBoxFormControll(_facilities); //IBoxFormControll.Dock = DockStyle.Fill; //IBoxFormControll.SendData += SendText; //xtraTabPage7.Controls.Add(IBoxFormControll); xtraTabPage7.PageVisible = true; } private void barButtonItem3_ItemClick_1(object sender, ItemClickEventArgs e) { //IBoxFormParams = new IBoxFormParams(); //IBoxFormParams.Dock = DockStyle.Fill; //IBoxFormParams.SendData += SendText; //AddControl(IBoxFormParams); HideAll(); IBoxFormParams = new IBoxFormParams(); IBoxFormParams.Dock = DockStyle.Fill; IBoxFormParams.SendData += SendText; xtraTabPage5.Controls.Add(IBoxFormParams); xtraTabPage5.PageVisible = true; } private void barButtonItem4_ItemClick(object sender, ItemClickEventArgs e) { //IBoxFormLog = new IBoxFormLog(); //IBoxFormLog.Dock = DockStyle.Fill; //IBoxFormLog.SendData += SendText; //AddControl(IBoxFormLog); HideAll(); IBoxFormLog = new IBoxFormLog(); IBoxFormLog.Dock = DockStyle.Fill; IBoxFormLog.SendData += SendText; xtraTabPage8.Controls.Add(IBoxFormLog); xtraTabPage8.PageVisible = true; } private void barButtonItem7_ItemClick(object sender, ItemClickEventArgs e) { //IBoxFormProtocol = new IBoxFormProtocol(); //IBoxFormProtocol.Dock = DockStyle.Fill; //IBoxFormProtocol.SendData += SendText; //AddControl(IBoxFormProtocol); HideAll(); IBoxFormProtocol = new IBoxFormProtocol(); IBoxFormProtocol.Dock = DockStyle.Fill; IBoxFormProtocol.SendData += SendText; xtraTabPage3.Controls.Add(IBoxFormProtocol); xtraTabPage3.PageVisible = true; } private void barButtonItem8_ItemClick(object sender, ItemClickEventArgs e) { //IBoxFormRule = new IBoxFormRule(); //IBoxFormRule.Dock = DockStyle.Fill; //IBoxFormRule.SendData += SendText; //AddControl(IBoxFormRule); HideAll(); IBoxFormRule = new IBoxFormRule(_facilities); IBoxFormRule.Dock = DockStyle.Fill; IBoxFormRule.SendData += SendText; xtraTabPage4.Controls.Add(IBoxFormRule); xtraTabPage4.PageVisible = true; } IBoxFormOverview IBoxFormOverview; IBoxFormMonitor IBoxFormMonitor; //IBoxFormControll IBoxFormControll; IBoxFormParams IBoxFormParams; IBoxFormLog IBoxFormLog; IBoxFormProtocol IBoxFormProtocol; IBoxFormRule IBoxFormRule; //IBoxFormScheme IBoxFormScheme; IBoxFormSystemInfo IBoxFormSystemInfo; IBoxFormDataFilter IBoxFormDataFilter; IBoxFormEnergyAnalysis IBoxFormEnergyAnalysis; private void IBoxForm_Load(object sender, EventArgs e) { BluetoothHelper.GetInstance().SMR += new BluetoothHelper.ShowMessReturn(GetReceive); barEditItem2.EditValue = "2"; //InitControl(); } public void GetReceive(string msg) { if (!this.IsHandleCreated || this.IsDisposed || string.IsNullOrEmpty(msg)) return; if (msg.StartsWith("error:") && msg.Contains("目标主机坏了")) { WaitFormHelper.HideWaitForm(); MessageBoxHelper.ShowError("蓝牙设备连接失败,请重试!"); return; } if (!string.IsNullOrEmpty(msg) && msg.Contains(startCode)) { var order = msg.Replace(endCode, "").Replace(startCode, "").Trim(); SetOrder(order); } else { WaitFormHelper.HideWaitForm(); //MessageBoxHelper.ShowError("蓝牙设备连接失败"); } } private List stationMonitors; private void SetOrder(string order) { var smsg = order.Split(new string[] { paramCode }, StringSplitOptions.RemoveEmptyEntries); if (smsg.Length < 2) { return; } switch (smsg[0].Trim()) { case "getlog": var getloglist = JsonHelper.Json2Object>(smsg[1].Trim()); IBoxFormLog.BindData(getloglist, ConnectType == 1 ? true : false); break; case "getbase": var getbaselist = JsonHelper.Json2Object>(smsg[1].Trim()); if (IBoxFormOverview != null) { IBoxFormOverview.BindGrid(getbaselist, ConnectType == 1 ? true : false); IBoxFormOverview.TestData(ConnectType == 1 ? true : false); } stationMonitors = getbaselist; //else if (IBoxFormMonitor != null) IBoxFormMonitor.BindGrid(getbaselist, ConnectType == 1 ? true : false); WaitFormHelper.HideWaitForm(); break; case "gethistoryrecord": var b = smsg[1].Trim(); var gethistoryrecordlist = new List(); if (!string.IsNullOrEmpty(b)) { var c = b.Split('|'); foreach (var item in c) { var m = new MonitorRecord().FromString(item); gethistoryrecordlist.Add(m); } } IBoxFormMonitor.SetChartData(gethistoryrecordlist, ConnectType == 1 ? true : false); break; case "getalarmbyday": var l = smsg[1].Trim(); IBoxFormMonitor.SetAlarmByDay(l, ConnectType == 1 ? true : false); break; case "getbysignalidofdayrange": var getbysignalidofdayrangelist = JsonHelper.Json2Object>(smsg[1].Trim()); break; case "getrealrecord": var getrealrecordlist = JsonHelper.Json2Object>(smsg[1].Trim()); if (IBoxFormMonitor != null) IBoxFormMonitor.SetRealRecord(getrealrecordlist, ConnectType == 1 ? true : false); break; case "getparams": var model = JsonHelper.Json2Object(smsg[1].Trim()); IBoxFormParams.BindData(model, ConnectType == 1 ? true : false); break; case "getprotocol": { var pmodel = JsonHelper.Json2Object(smsg[1].Trim()); IBoxFormProtocol.BindData(pmodel, ConnectType == 1 ? true : false); break; } case "getrules": { var rgetbaselist = JsonHelper.Json2Object>(smsg[1].Trim()); IBoxFormRule.BindGrid(rgetbaselist, ConnectType == 1 ? true : false); SendText(null, startCode + getsignaltypeCode + paramCode + endCode); break; } case "getcalvalue": { var getcalvaluelist = JsonHelper.Json2Object>(smsg[1].Trim()); //IBoxFormScheme.BindData(getcalvaluelist, stationMonitors, ConnectType == 1 ? true : false); break; } case "getstore": { var pmodel = JsonHelper.Json2Object(smsg[1].Trim()); IBoxFormSystemInfo.BindData(pmodel, ConnectType == 1 ? true : false); break; } case "getfilter": { var pmodel = JsonHelper.Json2Object(smsg[1].Trim()); IBoxFormDataFilter.BindData(pmodel, ConnectType == 1 ? true : false); break; } case "getsignaltype": { var list = JsonHelper.Json2Object>(smsg[1].Trim()); IBoxFormRule.SetSignalType(list); SendText(null, startCode + getMonitorgroupCode + paramCode + endCode); break; } case "getmonitorgroup": { var list = JsonHelper.Json2Object>(smsg[1].Trim()); IBoxFormRule.SetMonitorPoint(list); break; } case "getenergyanaly": { var list = JsonHelper.Json2Object>(smsg[1].Trim()); IBoxFormEnergyAnalysis.BindData(list); break; } } } public Build _SelectedBuild; //private List _res; private string filePath = "Data\\AnalyData_{0}.json"; //private void ShowChart() //{ // var file = string.Format(filePath, _facilities.ID.ToString()); // var path = Path.Combine(Directory.GetCurrentDirectory(), file); // if (!File.Exists(path)) // { // MessageBoxHelper.ShowInfo("请先进行系统曲线操作!"); // return; // } // else // { // SetResult(path); // } //} //private void SetResult(string path) //{ // var content = new Eventech.Common.FileHelper().ReadFile(path); // var result = JsonHelper.Json2Object>(content); // AddPoints(result); //} //public void AddPoints(List res) //{ // _res = res; // List nums = res.Select(o => new PointF((float)o.Demand, (float)o.ObjFunctionValue)).ToList(); // var chartDatas = nums.Select(p => new PointF(p.X, p.Y + _SelectedBuild.用户压力需求)).ToList(); // if (chartDatas == null || chartDatas.Count == 0) return; // // 计算多项式在点 x 处的取值 // // 计算拟合曲线上的点 // var curve = new CurveFitHelper(chartDatas, 2); // //List fitPoints = curve.GetFitCurve(100); // List> confidencePoints = curve.GetConfidenceCurve(100); // //_SelectedPump.流量压降平均.Data = fitPoints; // //_SelectedBuild.流量压降曲线.Data = chartDatas; // _SelectedBuild.Datasets.Clear(); // _SelectedBuild.流量压降曲线.Data = chartDatas; // _SelectedBuild.流量压降下限.Data = confidencePoints[0]; // _SelectedBuild.流量压降上限.Data = confidencePoints[1]; //} private void barButtonItem9_ItemClick(object sender, ItemClickEventArgs e) { HideAll(); _SelectedBuild = new Build() { factoryName = _facilities.Name, 系统最大流量 = _facilities.MaxWaterDemand.Value, Type = 二供分区Type.加压供水, ID = _facilities.ID.ToString(), 用户压力需求 = int.Parse(_facilities.TerminalPressure.ToString()), 层数 = double.Parse(_facilities.Floor.ToString()), 层高 = double.Parse(_facilities.FloorHeight.ToString()), 每层户数 = double.Parse(_facilities.Households.ToString()) }; //ShowChart(); var simuCalcViewModel = new SimuViewModel(); simuCalcViewModel.CurrentBuild = _SelectedBuild; simuCalcViewModel.Facilities = _facilities; //IBoxFormScheme = new IBoxFormScheme(simuCalcViewModel); //IBoxFormScheme.Dock = DockStyle.Fill; //IBoxFormScheme.SendData += SendText; //xtraTabPage6.Controls.Add(IBoxFormScheme); //xtraTabPage6.PageVisible = true; } private int ConnectType = 1;//1:蓝牙连接,2:网络连接 private string HttpGet(string content) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var param = System.Web.HttpUtility.UrlEncode(content, System.Text.Encoding.UTF8); var url = IP + ":8011/datahave/GetData?msg="; var result = Yw.Untity.HttpRequestHelper.Get(url + param); return result; } private string HttpPost(string content) { var param = content;// System.Web.HttpUtility.UrlEncode(content, System.Text.Encoding.GetEncoding("GB2312")); var url = IP + ":8011/datahave/PostData"; var m = new PostViewModel() { msg = param }; var datastr = JsonHelper.Object2Json(m); var result = Yw.Untity.HttpRequestHelper.Post(url, datastr); return result; } private List splitCode = new List() { "saverules", "saveprotocol", "datadownload", "saveparams", "addmonitorgroup", "addsignal" }; private void SendText(object sender, string content) { switch (ConnectType) { case 1: BluetoothHelper.GetInstance().SendData(content); break; case 2: var result = ""; if (!splitCode.Any(s => content.Contains(s))) { result = HttpGet(content); } else { result = HttpPost(content); } SetOrder(result); break; } } private string IP; private void barButtonItem10_ItemClick(object sender, ItemClickEventArgs e) { if (barEditItem2.EditValue.ToString() == "2") { IP = "http://" + barEditItem3.EditValue.ToString(); var param = IP + ":8011/ping"; var result = Yw.Untity.HttpRequestHelper.Get(param); if (result == "true") { SendText(null, startCode + getbaseCode + paramCode + endCode); ConnectedEve(); MessageBoxHelper.ShowSuccess("连接成功!"); } else { ClosedEve(); MessageBoxHelper.ShowError(result); } } } private void barEditItem2_EditValueChanged(object sender, EventArgs e) { switch (barEditItem2.EditValue.ToString()) { case "1": ConnectType = 1; barButtonItem10.Visibility = barEditItem3.Visibility = BarItemVisibility.Never; barBtnBlue.Visibility = barButtonItemNoConnect.Visibility = barButtonItemConnected.Visibility = barButtonItemClose.Visibility = BarItemVisibility.Always; break; case "2": ConnectType = 2; barButtonItem10.Visibility = barEditItem3.Visibility = BarItemVisibility.Always; barBtnBlue.Visibility = barButtonItemNoConnect.Visibility = barButtonItemConnected.Visibility = barButtonItemClose.Visibility = BarItemVisibility.Never; break; } } private async void barButtonItem11_ItemClick(object sender, ItemClickEventArgs e) { var dlg = new OpenFileDialog() { Filter = "压缩文件.rar|*.rar", Title = "请选择要更新的服务文件" }; IP = "http://" + barEditItem3.EditValue.ToString(); var param = IP + ":8010/OTA/Post"; if (dlg.ShowDialog() == DialogResult.OK) { var st = dlg.OpenFile(); using (var client = new HttpClient()) { using (var content = new MultipartFormDataContent()) { var streamContent = new StreamContent(st); var fileContent = new ByteArrayContent(await streamContent.ReadAsByteArrayAsync()); fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("multipart/form-data"); content.Add(fileContent, "file", dlg.FileName); var response = await client.PostAsync(param, content); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadAsStringAsync(); if (!string.IsNullOrEmpty(result) && result == "OK") { MessageBoxHelper.ShowSuccess("服务上传升级成功!"); } else MessageBoxHelper.ShowError(result); } } } } private void barButtonItem12_ItemClick(object sender, ItemClickEventArgs e) { HideAll(); IBoxFormSystemInfo = new IBoxFormSystemInfo(); IBoxFormSystemInfo.Dock = DockStyle.Fill; IBoxFormSystemInfo.SendData += SendText; xtraTabPage9.Controls.Add(IBoxFormSystemInfo); xtraTabPage9.PageVisible = true; } private void barButtonItem13_ItemClick(object sender, ItemClickEventArgs e) { HideAll(); IBoxFormDataFilter = new IBoxFormDataFilter(); IBoxFormDataFilter.Dock = DockStyle.Fill; IBoxFormDataFilter.SendData += SendText; xtraTabPage10.Controls.Add(IBoxFormDataFilter); xtraTabPage10.PageVisible = true; } private void barButtonItem14_ItemClick(object sender, ItemClickEventArgs e) { HideAll(); IBoxFormEnergyAnalysis = new IBoxFormEnergyAnalysis(); IBoxFormEnergyAnalysis.Dock = DockStyle.Fill; IBoxFormEnergyAnalysis.SendData += SendText; xtraTabPage11.Controls.Add(IBoxFormEnergyAnalysis); xtraTabPage11.PageVisible = true; } public IBoxForm(Facility facilities = null) { InitializeComponent(); this.PageTitle.Caption = "智能盒子"; if (facilities != null) { _facilities = facilities; } else { barButtonItem5.Visibility = BarItemVisibility.Never; } radio = BluetoothRadio.Default;//获取当前PC的蓝牙适配器 CheckForIllegalCrossThreadCalls = false;//不检查跨线程调用 //this.gridView1.SetNormalView(); if (radio == null)//检查该电脑蓝牙是否可用 { MessageBoxHelper.ShowInfo("这个电脑蓝牙不可用!"); } } } }