using DevExpress.XtraEditors; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.SS.Util; using PBS.Model; using PBS.Vmo; using System.IO; using Yw; using Yw.WinFrmUI; namespace IBox.WinFrmUI { public partial class IBoxFormRule : DocumentPage { private string startCode = "[&start&]"; private string endCode = "[&end&]"; private string paramCode = "[¶m&]"; private string getrulesCode = "getrules"; private string saverulesCode = "saverules"; private string addsignalCode = "addsignal"; private string deletesignalCode = "deletesignal"; private string addMonitorgroupCode = "addmonitorgroup"; private string deletemonitorgroupCode = "deletemonitorgroup"; FacilityVmo _facilities; public IBoxFormRule(FacilityVmo facilities = null) { this.PageTitle.Caption = "规则配置"; if (facilities == null) { facilities = new FacilityVmo() { ID = 1, Name = "临时设施" }; } _facilities = facilities; InitializeComponent(); SetDataType(); WaitFormHelper.ShowWaitForm(); } private List signalTypes; private List monitorPoints; private void SetDataType() { var dics = new dModbus().ModbusDataType(); foreach (var d in dics) { repositoryItemImageComboBox1.Items.Add(d.Value, d.Key, -1); } var adcDics = new dModbus().AdcType(); foreach (var adc in adcDics) { repositoryItemImageComboBox3.Items.Add(adc.Value, adc.Key, -1); } var operDics = new dModbus().OperType(); foreach (var oper in operDics) { repositoryItemImageComboBox2.Items.Add(oper.Value, oper.Key, -1); } } public void SetSignalType(List list) { this.signalTypes = list; } public void SetMonitorPoint(List list) { this.monitorPoints = list; } public event EventHandler SendData; private void SendText(string content) { //BluetoothHelper.GetInstance().SendData(content); SendData?.Invoke(null, content); } private void EboxFormRule_Load(object sender, EventArgs e) { Thread.Sleep(500); SendText(startCode + getrulesCode + paramCode + endCode); //BluetoothHelper.GetInstance().SMR -= null; //BluetoothHelper.GetInstance().SMR += new BluetoothHelper.ShowMessReturn(GetReceive); } public void GetReceive(string msg) { if (!this.IsHandleCreated || this.IsDisposed || string.IsNullOrEmpty(msg)) return; if (msg.StartsWith("error:") && msg.Contains("目标主机坏了")) { MessageBoxHelper.ShowError("r 蓝牙设备连接失败,请重试!"); return; } if (!string.IsNullOrEmpty(msg) && msg.Contains(startCode)) { var order = msg.Replace(endCode, "").Replace(startCode, "").Trim(); SetOrder(order); } else MessageBoxHelper.ShowError("r 蓝牙设备连接失败!"); } private List dataList = null; private List stationMonitorLists; private List dataGridMonitorViewModels = new List(); public void BindGrid(List list, bool isBlue = true) { stationMonitorLists = list; dataList = new List(); foreach (var item in list) { foreach (var ml in item.MonitorList) { dataList.Add(new DataGridMonitorViewModel() { GroupID = item.ID, GroupName = item.Name, MonitorName = ml.Name, SignalID = ml.SignalID, UnitName = ml.UnitName, BusAddress = ml.BusAddress, BusType = ml.BusType, IsEnable = ml.IsEnable, Operator = ml.Operator, Operands = ml.Operands, Accuracy = ml.Accuracy, AdcType = ml.AdcType, UpperRange = ml.UpperRange, LowerRange = ml.LowerRange, Flags = ml.Flags, SignalName = ml.Name, Description = ml.Description, SignalTypeID = ml.SignalTypeID, }); } } if (isBlue) { this.Invoke(new Action(() => { dataGridMonitorViewModels = dataList; this.dataGridMonitorViewModelBindingSource.DataSource = dataGridMonitorViewModels; })); } else { dataGridMonitorViewModels = dataList; this.dataGridMonitorViewModelBindingSource.DataSource = dataGridMonitorViewModels; } WaitFormHelper.HideWaitForm(); } public void SetOrder(string order) { var smsg = order.Split(new string[] { paramCode }, StringSplitOptions.RemoveEmptyEntries); if (smsg.Length < 2) { return; } switch (smsg[0].Trim()) { case "getrules": var getbaselist = JsonHelper.Json2Object>(smsg[1].Trim()); stationMonitorLists = getbaselist; BindGrid(getbaselist); break; } } private void simpleButton1_Click(object sender, EventArgs e) { stationMonitorLists.ForEach(list => { list.MonitorList.ForEach(monitor => { var s = dataGridMonitorViewModels.FirstOrDefault(d => d.SignalID == monitor.SignalID); if (s != null) { monitor.BusAddress = s.BusAddress; monitor.BusType = s.BusType; monitor.IsEnable = s.IsEnable; monitor.Operator = s.Operator; monitor.Operands = s.Operands; monitor.Accuracy = s.Accuracy; monitor.AdcType = s.AdcType; monitor.UpperRange = s.UpperRange; monitor.LowerRange = s.LowerRange; } }); }); SendText(startCode + saverulesCode + paramCode + JsonHelper.Object2Json(stationMonitorLists) + endCode); MessageBoxHelper.ShowInfo("数据保存成功!"); } private void simpleButton5_Click(object sender, EventArgs e) { //删除测点 var m = this.gridView1.GetRow(this.gridView1.FocusedRowHandle) as DataGridMonitorViewModel; if (MessageBox.Show("确认删除测点 " + m.SignalName + " 吗?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) { var md = new GeneralViewModel() { ID = m.SignalID }; SendText(startCode + deletesignalCode + paramCode + JsonHelper.Object2Json(md) + endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(startCode + getrulesCode + paramCode + endCode); } } private void simpleButton4_Click(object sender, EventArgs e) { //修改测点 var m = this.gridView1.GetRow(this.gridView1.FocusedRowHandle) as DataGridMonitorViewModel; var s = new Signal() { BusAddress = m.BusAddress, Accuracy = m.Accuracy, AdcType = m.AdcType, BusType = m.BusType, Description = m.Description, Flags = m.Flags?.Split(',').ToList(), IsEnable = m.IsEnable, GroupID = m.GroupID, ID = m.SignalID, LowerRange = m.LowerRange, MonitorPointID = m.MonitorID, Name = m.SignalName, Operands = m.Operands, Operator = m.Operator.Value, SignalTypeID = m.SignalTypeID, UpperRange = m.UpperRange, }; var dlg = new SignalEditForm(this.signalTypes, this.monitorPoints, s); if (dlg.ShowDialog(this) == DialogResult.OK) { var signal = dlg.signal; SendText(startCode + addsignalCode + paramCode + JsonHelper.Object2Json(signal) + endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(startCode + getrulesCode + paramCode + endCode); } } private void simpleButton3_Click(object sender, EventArgs e) { //新增测点 var m = this.gridView1.GetRow(this.gridView1.FocusedRowHandle) as DataGridMonitorViewModel; var dlg = new SignalEditForm(this.signalTypes, this.monitorPoints, null); if (dlg.ShowDialog(this) == DialogResult.OK) { var signal = dlg.signal; SendText(startCode + addsignalCode + paramCode + JsonHelper.Object2Json(signal) + endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(startCode + getrulesCode + paramCode + endCode); } } private void simpleButton7_Click(object sender, EventArgs e) { //删除机组 var m = this.gridView1.GetRow(this.gridView1.FocusedRowHandle) as DataGridMonitorViewModel; if (MessageBox.Show("删除机组会同时删除机组绑定的所有测点,确认删除机组 " + m.GroupName + " 吗?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) { var md = new GeneralViewModel() { ID = m.GroupID }; SendText(startCode + deletemonitorgroupCode + paramCode + JsonHelper.Object2Json(md) + endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(startCode + getrulesCode + paramCode + endCode); } } private void simpleButton6_Click(object sender, EventArgs e) { //编辑机组 var m = this.gridView1.GetRow(this.gridView1.FocusedRowHandle) as DataGridMonitorViewModel; var g = new IBox.WinFrmUI.MonitorPointGroup() { ID = m.GroupID, Name = m.GroupName }; var dlg = new MonitorGroupEditForm(g); if (dlg.ShowDialog() == DialogResult.OK) { var group = dlg.group; SendText(startCode + addMonitorgroupCode + paramCode + JsonHelper.Object2Json(group) + endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(startCode + getrulesCode + paramCode + endCode); } } private void simpleButton2_Click(object sender, EventArgs e) { //新增机组 var dlg = new MonitorGroupEditForm(null); if (dlg.ShowDialog() == DialogResult.OK) { var group = dlg.group; SendText(startCode + addMonitorgroupCode + paramCode + JsonHelper.Object2Json(group) + endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(startCode + getrulesCode + paramCode + endCode); } } /// /// 导出 /// /// /// private void simpleButton8_Click(object sender, EventArgs e) { ExportXLS(); } public void ExportXLS() { try { if (dataGridMonitorViewModels == null || dataGridMonitorViewModels.Count == 0) { XtraMessageBox.Show("没有可导出的数据!"); return; } var dlg = new SaveFileDialog(); dlg.Filter = "EXCEL 文件(*.xls)|*.xls"; if (dlg.ShowDialog() != DialogResult.OK) return; HSSFWorkbook theBook = new HSSFWorkbook(); var theSheet1 = theBook.CreateSheet("Sheet1"); IRow rowHead = theSheet1.CreateRow(0); rowHead.CreateCell(0).SetCellValue(_facilities.ID + "," + _facilities.Name); CellRangeAddress region = new CellRangeAddress(0, 0, 0, 3); theSheet1.AddMergedRegion(region); IRow rowTile = theSheet1.CreateRow(1); rowTile.CreateCell(0).SetCellValue("机组ID"); rowTile.CreateCell(1).SetCellValue("机组名称"); rowTile.CreateCell(2).SetCellValue("测点ID"); rowTile.CreateCell(3).SetCellValue("测点名称"); for (int rowIndex = 2; rowIndex <= dataGridMonitorViewModels.Count + 1; rowIndex++) { int col = 0; IRow row = theSheet1.CreateRow(rowIndex); row.CreateCell(col).SetCellValue(dataGridMonitorViewModels[rowIndex - 2].GroupID.ToString()); col++; row.CreateCell(col).SetCellValue(dataGridMonitorViewModels[rowIndex - 2].GroupName); col++; row.CreateCell(col).SetCellValue(dataGridMonitorViewModels[rowIndex - 2].SignalID.ToString()); col++; row.CreateCell(col).SetCellValue(dataGridMonitorViewModels[rowIndex - 2].SignalName); col++; } //强制Excel在打开时重新计算所有公式 theSheet1.ForceFormulaRecalculation = true; using (FileStream fs = File.OpenWrite(dlg.FileName)) { theBook.Write(fs); } XtraMessageBox.Show("导出成功"); } catch (Exception ex) { XtraMessageBox.Show(ex.ToString()); } } } }