using CompressorXN.Untils; using CompressorXN_Common; using CompressorXN_Communication.TuMos; using CompressorXN_ControlLib; using CompressorXN_Model; using CompressorXN_Model.Enums; using CompressorXN_Model.ViewModel.Response; using CompressorXN_Service; using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace CompressorXN { public partial class FrmRecipe : Form { private static readonly ProductTypeService _productTypeService = new ProductTypeService(); private static readonly AgreementMsgService _agreementMsgService = new AgreementMsgService(); private static readonly ParaService _paraService = new ParaService(); private static EventParaVM eventParaVM = new EventParaVM(); public FrmRecipe() { InitializeComponent(); //锁定控件 LockControl(); } private void FrmRecipe_Load(object sender, EventArgs e) { Loading.ShowWaitForm(); BindGrid(); //加载测试项数据 LoadParaItem(); Loading.CloseWaitForm(); } /// /// Grid绑定数据源 /// private void BindGrid() { var list = _productTypeService.QueryProductTypes().OrderBy(m => m.ProductTypeIndex).ToList(); this.grid_Receipe.DataSource = list; //取消GirdView默认选中第一行 gridView_Receipe.FocusInvalidRow(); //使用中机种 var model = list.FirstOrDefault(m => m.IsUsed); if (model != null) { txt_UsingRecipeName.Text = model.ProductTypeName; txt_RecipeName.Text = model.ProductTypeName; lbl_Id.Text = model.Id; lbl_IsUsing.Text = model.IsUsed.ToString(); ComboBox cmbStartType = myParaItem.Controls.Find("cmb_StartType", true)[0] as ComboBox; cmbStartType.SelectedItem = model.StartType; ComboBox cmbAgreement = myParaItem.Controls.Find("cmb_Agreement", true)[0] as ComboBox; cmbAgreement.SelectedValue = model.AgreementName; } } /// /// 添加机种 /// /// /// private void btn_AddRecipe_Click(object sender, EventArgs e) { string recipeName = txt_RecipeName.Text; if (string.IsNullOrEmpty(recipeName)) { new FrmDialog("机种名称不能为空!").ShowDialog(); return; } if (!_productTypeService.CheckIsExistProductTypeByProductName(recipeName)) { new FrmDialog("机种已存在!").ShowDialog(); return; } ComboBox cmbStartType = myParaItem.Controls.Find("cmb_StartType", true)[0] as ComboBox; ComboBox cmbAgreement = myParaItem.Controls.Find("cmb_Agreement", true)[0] as ComboBox; string startType = cmbStartType.SelectedItem.ToString(); string agreementName = cmbAgreement.SelectedItem.ToString(); if (string.IsNullOrEmpty(startType)) { new FrmDialog("请选择启动方式!").ShowDialog(); return; } if (string.IsNullOrEmpty(agreementName)) { new FrmDialog("请选择控制协议!").ShowDialog(); return; } if (new FrmAckDialog($"确认添加【{recipeName}】机种?").ShowDialog() == DialogResult.OK) { Loading.ShowWaitForm(); int maxSortIndex = _productTypeService.GetMaxSortIndex(); T_ProductType productType = new T_ProductType { ProductTypeName = txt_RecipeName.Text, StartType = startType, AgreementName = agreementName, IsUsed = false, ProductTypeIndex = maxSortIndex + 1 }; int row = _productTypeService.AddProductType(productType); bool saveResult = SaveParaItem(); //生成启动压缩机的报文 bool generateResult = AgteementHelper.GenerateAgreement(recipeName, agreementName); if (row > 0 && saveResult && generateResult) { //重新加载数据 BindGrid(); //加载测试项数据 LoadParaItem(); Loading.CloseWaitForm(); new FrmDialog("操作成功!").ShowDialog(); //if (sendFormNameEvent != null) //{ // eventParaVM.formNameEnum = FormNameEnum.协议配置; // eventParaVM.AgreementName = productType.AgreementName; // sendFormNameEvent(eventParaVM); //} } else { Loading.CloseWaitForm(); new FrmDialog("操作失败!").ShowDialog(); } } } /// /// 修改机种 /// /// /// private void btn_ModifyRecipe_Click(object sender, EventArgs e) { string id = lbl_Id.Text; if (string.IsNullOrEmpty(id)) { new FrmDialog("请选择要修改的记录行!").ShowDialog(); return; } string recipeName = txt_RecipeName.Text; if (string.IsNullOrEmpty(recipeName)) { new FrmDialog("机种名称不能为空!").ShowDialog(); return; } if (!_productTypeService.CheckIsExistProductTypeByProductName(recipeName, id)) { new FrmDialog("机种已存在!").ShowDialog(); return; } ComboBox cmbStartType = myParaItem.Controls.Find("cmb_StartType", true)[0] as ComboBox; ComboBox cmbAgreement = myParaItem.Controls.Find("cmb_Agreement", true)[0] as ComboBox; string startType = cmbStartType.SelectedItem.ToString(); string agreementName = cmbAgreement.SelectedItem.ToString(); if (string.IsNullOrEmpty(startType)) { new FrmDialog("请选择启动方式!").ShowDialog(); return; } if (string.IsNullOrEmpty(agreementName)) { new FrmDialog("请选择控制协议!").ShowDialog(); return; } if (new FrmAckDialog($"确认修改【{recipeName}】机种?").ShowDialog() == DialogResult.OK) { Loading.ShowWaitForm(); bool updateResult = _productTypeService.UpdateProductTypeById(id, recipeName, startType, agreementName); bool saveResult = SaveParaItem(); //生成启动压缩机的报文 bool generateResult = AgteementHelper.GenerateAgreement(recipeName, agreementName); if (updateResult && saveResult && generateResult) { //重新加载数据 BindGrid(); //加载测试项数据 LoadParaItem(); Loading.CloseWaitForm(); new FrmDialog("操作成功!").ShowDialog(); //if (sendFormNameEvent != null) //{ // eventParaVM.formNameEnum = FormNameEnum.协议配置; // eventParaVM.AgreementName = agreementName; // sendFormNameEvent(eventParaVM); //} } else { Loading.CloseWaitForm(); new FrmDialog("操作失败!").ShowDialog(); } } } /// /// 复制参数 /// /// /// private void btn_CopyPara_Click(object sender, EventArgs e) { FrmCopyPara frm = new FrmCopyPara(); DialogResult dialogResult = frm.ShowDialog(); if (dialogResult == DialogResult.Yes) { new FrmDialog("操作成功!").ShowDialog(); } else if (dialogResult == DialogResult.No) { new FrmDialog("操作失败!").ShowDialog(); } } /// /// 删除机种 /// /// /// private void btn_DelRecipe_Click(object sender, EventArgs e) { string id = lbl_Id.Text; if (string.IsNullOrEmpty(id)) { new FrmDialog("请选择要修改的记录行!").ShowDialog(); return; } if (new FrmAckDialog("确认删除选中机种?").ShowDialog() == DialogResult.OK) { Loading.ShowWaitForm(); var delResult = _productTypeService.DelProductTypeByProductTypeName(txt_RecipeName.Text); if (delResult) { //重新加载数据 BindGrid(); Loading.CloseWaitForm(); new FrmDialog("操作成功,请重新启动上位机软件!").ShowDialog(); } else { Loading.CloseWaitForm(); new FrmDialog("操作失败!").ShowDialog(); } } } /// /// 点击解锁按钮 /// /// /// private void btn_Unlock_Click(object sender, EventArgs e) { FrmUnlock frmUnlock = new FrmUnlock(); DialogResult dialogResult = frmUnlock.ShowDialog(); if (dialogResult == DialogResult.OK) { LockControl(false); } } public delegate void SenFormName(EventParaVM eventParaVM); public event SenFormName sendFormNameEvent; /// /// 应用机种 /// /// /// private void btn_UseRecipe_Click(object sender, EventArgs e) { string id = lbl_Id.Text; if (string.IsNullOrEmpty(id)) { new FrmDialog("请选择要应用的记录行!").ShowDialog(); return; } string productTypeName = txt_RecipeName.Text; if (new FrmAckDialog($"确认应用【{productTypeName}】机种?").ShowDialog() == DialogResult.OK) { Loading.ShowWaitForm(); bool updateResult = _productTypeService.UpdateProductTypeIsUsedById(id); if (!updateResult) { Loading.CloseWaitForm(); new FrmDialog("操作失败!").ShowDialog(); return; } ComboBox cmbAgreement = myParaItem.Controls.Find("cmb_Agreement", true)[0] as ComboBox; string agreementName = cmbAgreement.SelectedItem.ToString(); //生成启动压缩机的报文 bool generateResult = AgteementHelper.GenerateAgreement(productTypeName, agreementName); if (!generateResult) { Loading.CloseWaitForm(); new FrmDialog($"生成【{productTypeName}】机种的压缩机的报文失败!").ShowDialog(); return; } T_ProductType t_ProductType = _productTypeService.QueryUsedProductType(); txt_UsingRecipeName.Text = t_ProductType?.ProductTypeName; GlobalVar.ProductTypeName = t_ProductType?.ProductTypeName; GlobalVar.ProductTypeIndex = t_ProductType == null ? 0 : t_ProductType.ProductTypeIndex; GlobalVar.agreementMsgVM = _agreementMsgService.GetAgreementMsgByProductTypeName(GlobalVar.ProductTypeName); GlobalVar.StartType = GlobalVar.agreementMsgVM.StartType; //参数写入PLC var (isOk, msg) = WriteToPlcHelper.WriteParaToPlc(GlobalVar.ProductTypeName); if (!isOk) { Loading.CloseWaitForm(); new FrmDialog(msg).ShowDialog(); return; } Loading.CloseWaitForm(); new FrmDialog("操作成功!").ShowDialog(); switch (t_ProductType.StartType) { case "CAN": TMSCANHelper.CanInit((uint)GlobalVar.agreementMsgVM.Bps); break; case "LIN": TMSLINHelper.LinInit(GlobalVar.agreementMsgVM.Bps); break; case "CANFD": TMSCANFDHelper.CANFDInit(5000000, (uint)GlobalVar.agreementMsgVM.Bps); break; case "PWM": break; } if (sendFormNameEvent != null) { //eventParaVM.formNameEnum = FormNameEnum.协议配置; //eventParaVM.AgreementName = t_ProductType.AgreementName; //sendFormNameEvent(eventParaVM); EventParaVM eventParaVM = new EventParaVM { formNameEnum = FormNameEnum.集中监控 }; sendFormNameEvent(eventParaVM); } } } /// /// Grid行点击事件 /// /// /// private void gridView_Receipe_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) { Loading.ShowWaitForm(); var model = gridView_Receipe.GetRow(e.RowHandle) as T_ProductType; if (model != null) { lbl_Id.Text = model.Id; txt_RecipeName.Text = model.ProductTypeName; ComboBox cmbStartType = myParaItem.Controls.Find("cmb_StartType", true)[0] as ComboBox; cmbStartType.SelectedItem = model.StartType; ComboBox cmbAgreement = myParaItem.Controls.Find("cmb_Agreement", true)[0] as ComboBox; if (string.IsNullOrEmpty(model.AgreementName)) { cmbAgreement.SelectedValue = ""; } else { cmbAgreement.SelectedValue = model.AgreementName; } } //加载测试项数据 LoadParaItem(); Loading.CloseWaitForm(); } /// /// 加载测试项数据 /// private void LoadParaItem() { ClearControlVal(); List paraList = _paraService.QueryParaByProductTypeName(txt_RecipeName.Text).ToList(); if (paraList != null && paraList.Count > 0) { List groupBoxList = myParaItem.Controls.OfType().ToList(); for (int i = 0; i < groupBoxList.Count; i++) { //查询当前类型的测试项 List myParaList = paraList.Where(m => m.ParaType == groupBoxList[i].Text).ToList(); List myParaControlList = groupBoxList[i].Controls.OfType().ToList(); for (int j = 0; j < myParaControlList.Count; j++) { T_Para para = myParaList.FirstOrDefault(m => m.ParaName == myParaControlList[j].LblItemText); if (para != null) { myParaControlList[j].TargetText = para.TargetVal?.ToString(); myParaControlList[j].MinText = para.MinVal?.ToString(); myParaControlList[j].MaxText = para.MaxVal?.ToString(); myParaControlList[j].CkIsActiveChecked = para.IsCheck; } } } } } /// /// 保存测试项 /// private bool SaveParaItem() { List paraList = new List(); string productTypeName = txt_RecipeName.Text; List groupBoxList = myParaItem.Controls.OfType().ToList(); for (int i = 0; i < groupBoxList.Count; i++) { List myParaControlList = groupBoxList[i].Controls.OfType().ToList(); for (int j = 0; j < myParaControlList.Count; j++) { T_Para t_Para = new T_Para { ParaType = groupBoxList[i].Text, ProductTypeName = productTypeName, ParaName = myParaControlList[j].LblItemText }; string targetText = myParaControlList[j].TargetText; if (!string.IsNullOrEmpty(targetText)) { decimal.TryParse(targetText, out decimal targetVal); t_Para.TargetVal = targetVal; } string minText = myParaControlList[j].MinText; if (!string.IsNullOrEmpty(minText)) { decimal.TryParse(minText, out decimal minVal); t_Para.MinVal = minVal; } string maxText = myParaControlList[j].MaxText; if (!string.IsNullOrEmpty(maxText)) { decimal.TryParse(maxText, out decimal maxVal); t_Para.MaxVal = maxVal; } t_Para.IsCheck = myParaControlList[j].CkIsActiveChecked; paraList.Add(t_Para); } } return _paraService.SavePara(paraList, productTypeName); } /// /// 锁定控件 /// /// 是否只读 private void LockControl(bool isReadOnly = true) { btn_AddRecipe.Enabled = !isReadOnly; btn_ModifyRecipe.Enabled = !isReadOnly; btn_DelRecipe.Enabled = !isReadOnly; btn_CopyPara.Enabled = !isReadOnly; myParaItem.IsReadOnly = isReadOnly; } /// /// 清空控件值 /// private void ClearControlVal() { List groupBoxList = myParaItem.Controls.OfType().ToList(); for (int i = 0; i < groupBoxList.Count; i++) { List myParaControlList = groupBoxList[i].Controls.OfType().ToList(); for (int j = 0; j < myParaControlList.Count; j++) { myParaControlList[j].TargetText = string.Empty; myParaControlList[j].MinText = string.Empty; myParaControlList[j].MaxText = string.Empty; myParaControlList[j].CkIsActiveChecked = false; } } } } }