using DW5S.Entity; using DW5S.Repostory; using DW5S.ViewModel; using DxHelper; using ExtensionsDev; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using XdCxRhDW5S.ViewModel; namespace DW5S.App.EditForms { public partial class StationEditor : DevExpress.XtraEditors.XtraForm { public AdCardViewModel info; public List AdChItems = new List(); public List DeleteChItems = new List(); private List infos; public StationEditor() { InitializeComponent(); this.layoutControl1.UseDefault(); this.Text = "添加采集"; info = new AdCardViewModel(); this.StartPosition = FormStartPosition.CenterParent; cbTriggerMode.Properties.AddEnum(); cbClockerType.Properties.AddEnum(); cbClockerType.EditValue = EnumAdClockType.In; cbTriggerMode.EditValue = EnumAdTriggerMode.In; this.txtClockFreq.EditValue = 100; this.txtDdcFreq.EditValue = 70; this.txtMutil.EditValue = 1; this.txtStorePath.EditValue = "E:\\data"; this.txtStationAddress.EditValue = "192.168.1.20:5001"; this.checkEnable.Checked = true; grdChannelList.UseDefault(AdChItems).UseEmptyText("请添加采集通道").UseEdit() .HideColumn(nameof(AdChannelViewModel.Id)) .UseBoolColumn(nameof(AdChannelViewModel.Enable), "启用", "禁用"); } public StationEditor(AdCardViewModel info) : this() { this.Text = "编辑采集"; this.info = info; this.AdChItems = info.AdChannels; } private async void CxEditor_Load(object sender, EventArgs e) { try { if (!this.DesignMode) { grdChannelList.UseSearchEditColumn(nameof(AdChannelViewModel.TxInfoID), GetAnts, displayField: nameof(RecTxViewModel.Name)) .UseSearchEditColumn(nameof(AdChannelViewModel.SatInfoID), GetSats, displayField: nameof(SatViewModel.Sat)); gvChannelList.Columns[nameof(AdChannelViewModel.ChNum)].OptionsColumn.AllowEdit = true; gvChannelList.Columns[nameof(AdChannelViewModel.CenterFreq)].OptionsColumn.AllowEdit = true; gvChannelList.Columns[nameof(AdChannelViewModel.SatInfoID)].OptionsColumn.AllowEdit = true; gvChannelList.Columns[nameof(AdChannelViewModel.TxInfoID)].OptionsColumn.AllowEdit = true; gvChannelList.Columns[nameof(AdChannelViewModel.Enable)].OptionsColumn.AllowEdit = true; gvChannelList.CellValueChanged += GvChannelList_CellValueChanged; } if (this.Text == "编辑采集" && info != null) { this.txtStationName.EditValue = info.Name; this.cbTriggerMode.EditValue = info.TriggerMode; this.cbTriggerMode.EditValue = info.TriggerMode; this.txtClockFreq.EditValue = info.ClockFreq; this.txtDdcFreq.EditValue = info.DdcFreq; this.txtMutil.EditValue = info.Mutil; this.txtStorePath.EditValue = info.StorePath; this.txtStationAddress.EditValue = info.Address; this.checkEnable.Checked = info.Enable; } var unitOfWork = IocContainer.UnitOfWork; infos = new List(); var repsCx = unitOfWork.Of(); var res = await repsCx.GetAllAsync(); infos.AddRange(res.To>()); this.grdChannelList.DataSource = AdChItems; this.gvChannelList.BestFitColumns(); } catch (Exception ex) { string msg = "查询采集信息异常"; IocContainer.Logger.Error(ex, msg); DxHelper.MsgBoxHelper.ShowError(msg); } } private void GvChannelList_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { if (e.Column.FieldName == nameof(AdChannelViewModel.ChNum)) { var ChNum = (int)e.Value; if (AdChItems.Count(i => i.ChNum == ChNum) > 1) { DxHelper.MsgBoxHelper.ShowError($"采集通道[{ChNum}]已经存在!"); return; } } } private async Task> GetAnts() { var unitOfWork = IocContainer.UnitOfWork; var repsRecTx = unitOfWork.Of(); var items = await repsRecTx.FindAsync(f => f.Enable == true, p => p.Name); var ss = items.To>(); return ss; } private async Task> GetSats() { var unitOfWork = IocContainer.UnitOfWork; var reps = unitOfWork.Of(); var res = await reps.GetAllAsync(); return res.OrderBy(s => s.SatName).To>(); } private void btnOk_Click(object sender, EventArgs e) { try { dxErrorProvider.ClearErrors(); if (string.IsNullOrEmpty(txtStationName.Text)) { dxErrorProvider.SetError(txtStationName, "采集名称不能为空"); return; } if (infos.Any(i => i.Id != info.Id && i.Name == txtStationName.Text)) { dxErrorProvider.SetError(txtStationName, $"采集[{txtStationName.Text}]已经存在!"); return; } if (cbTriggerMode.EditValue == null) { dxErrorProvider.SetError(cbTriggerMode, $"请选择触发模式!"); return; } if (cbClockerType.EditValue == null) { dxErrorProvider.SetError(cbClockerType, $"请选择时钟类型!"); return; } if (!double.TryParse(txtClockFreq.Text, out double clockFreqMHz)) { dxErrorProvider.SetError(txtClockFreq, $"时钟频率非有效数字!"); return; } if (!double.TryParse(txtDdcFreq.Text, out double ddcFreqMHz)) { dxErrorProvider.SetError(txtDdcFreq, $"DDC频率非有效数字!"); return; } if (!int.TryParse(txtMutil.Text, out int mutil)) { dxErrorProvider.SetError(txtMutil, $"抽取倍数非有效整形数字!"); return; } if (string.IsNullOrEmpty(txtStorePath.Text.Trim())) { dxErrorProvider.SetError(txtStorePath, "存储路径不能为空"); return; } if (string.IsNullOrEmpty(txtStationAddress.Text.Trim())) { dxErrorProvider.SetError(txtStationAddress, "采集服务地址不能为空"); return; } bool checkSucess = info.AdChannels.Count == 0 ? true : false; string msg = ""; foreach (var chitem in info.AdChannels) { if (chitem.ChNum == 0) { msg = $"采集通道号不能为空"; checkSucess = false; break; } if (chitem.SatInfoID == 0) { msg = $"采集通道号[{chitem.ChNum}]对应卫星不能为空"; checkSucess = false; break; } if (chitem.TxInfoID == 0) { msg = $"采集通道号[{chitem.ChNum}]对应天线不能为空"; checkSucess = false; break; } checkSucess = true; } if (!checkSucess) { DxHelper.MsgBoxHelper.ShowError(msg); return; } info.Name = txtStationName.Text; info.TriggerMode = (EnumAdTriggerMode)cbTriggerMode.EditValue; info.ClockerType = (EnumAdClockType)cbClockerType.EditValue; info.ClockFreq = clockFreqMHz; info.DdcFreq = ddcFreqMHz; info.Mutil = mutil; info.StorePath = txtStorePath.Text.Trim(); info.Address = txtStationAddress.Text.Trim(); info.Enable = checkEnable.Checked; this.DialogResult = DialogResult.OK; } catch (Exception ex) { string msg = "编辑站点信息出错"; IocContainer.Logger.Error(ex, msg); DxHelper.MsgBoxHelper.ShowError(msg); } } private void btnCancle_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } private void GroupChannel_CustomButtonClick(object sender, DevExpress.XtraBars.Docking2010.BaseButtonEventArgs e) { string caption = e.Button.Properties.Caption; switch (caption) { case "添加": AdChItems.Add(new AdChannelViewModel() { CreateTime = DateTime.Now, UpdateTime = DateTime.Now }); gvChannelList.RefreshData(); break; case "删除": try { if (MsgBoxHelper.ShowConfirm("确定删除选中的采集通道吗?")) { var deletes = gvChannelList.DeleteSelectedRows(); DeleteChItems.AddRange(deletes); } } catch (Exception ex) { string msg = "删除采集通道信息异常"; IocContainer.Logger.Error(ex, msg); DxHelper.MsgBoxHelper.ShowError(msg); } break; } } } }