using CapMachine.Core; using CapMachine.Model; using Prism.Commands; using Prism.Services.Dialogs; using System.Collections.ObjectModel; using System.Text; using System.Windows; namespace CapMachine.Wpf.ViewModels { public class ProConfigViewModel : NavigationViewModel { public ProConfigViewModel(IDialogService dialogService, IFreeSql freeSql) { //LogService = logService; FreeSql = freeSql; //MachineDataService = machineDataService; DialogService = dialogService; ListMeterSpeedItems = new ObservableCollection(); ListMeterPsItems = new ObservableCollection(); ListProStepDtoItems = new ObservableCollection(); ListProStep = new List(); ProSegListViewItems = new ObservableCollection(); RefreshProSeg(); //各个单独仪表的初始化 SelectedMeterSpeed = new MeterSpeed(); SelectedPs = new MeterPs(); } /// /// FreeSQL 实例函数 /// public IFreeSql FreeSql { get; } /// /// 弹窗服务 /// public IDialogService DialogService { get; } #region 速度表操作 private ObservableCollection _ListMeterSpeedItems; /// /// MeterSpeedp数据集合 /// public ObservableCollection ListMeterSpeedItems { get { return _ListMeterSpeedItems; } set { _ListMeterSpeedItems = value; RaisePropertyChanged(); } } /// /// MeterSpeed集合数据 /// public List ListMeterSpeed { get; set; } private MeterSpeed _SelectedMeterSpeed; /// /// 当前选中的程序速度 /// public MeterSpeed SelectedMeterSpeed { get { return _SelectedMeterSpeed; } set { _SelectedMeterSpeed = value; RaisePropertyChanged(); } } private DelegateCommand _MeterSpeedSelectedChangedCmd; /// /// 刷新数据命令 /// public DelegateCommand MeterSpeedSelectedChangedCmd { set { _MeterSpeedSelectedChangedCmd = value; } get { if (_MeterSpeedSelectedChangedCmd == null) { _MeterSpeedSelectedChangedCmd = new DelegateCommand((str) => MeterSpeedSelectedChangedCmdMethod(str)); } return _MeterSpeedSelectedChangedCmd; } } /// /// 速度表选中行的执行方法 /// /// /// private void MeterSpeedSelectedChangedCmdMethod(object par) { var SelectedData = par as MeterSpeed; if (SelectedData != null) { SelectedMeterSpeed = SelectedData; } } private DelegateCommand _ProStepSpeedAddCmd; /// /// 新增速度命令 /// public DelegateCommand ProStepSpeedAddCmd { set { _ProStepSpeedAddCmd = value; } get { if (_ProStepSpeedAddCmd == null) { _ProStepSpeedAddCmd = new DelegateCommand(() => ProStepSpeedAddCmdMethod()); } return _ProStepSpeedAddCmd; } } /// /// 新增速度命令执行方法 /// private void ProStepSpeedAddCmdMethod() { if (SelectedProStepDto == null) { MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); return; } //当前的速度表集合数据 var MeterSpeeds = ListMeterSpeedItems.ToList(); var MeterSpeedData = new MeterSpeed() { StartValue = SelectedMeterSpeed.StartValue, EndValue = SelectedMeterSpeed.EndValue, KeepTime = SelectedMeterSpeed.KeepTime, ProStepId = SelectedProStepDto.Id, StepNo = AutoGetMeterSpeedStepNo(), }; //增加数据 var getdata = FreeSql.Insert(MeterSpeedData).ExecuteIdentity(); //更新界面数据 ListProgramSeg = RefreshProSeg(); RefreshProStepData(); RefreshMeterSpeed(); } private DelegateCommand _ProStepSpeedEditCmd; /// /// 修改速度命令 /// public DelegateCommand ProStepSpeedEditCmd { set { _ProStepSpeedEditCmd = value; } get { if (_ProStepSpeedEditCmd == null) { _ProStepSpeedEditCmd = new DelegateCommand(() => ProStepSpeedEditCmdMethod()); } return _ProStepSpeedEditCmd; } } /// /// 新增速度命令执行方法 /// private void ProStepSpeedEditCmdMethod() { if (SelectedProStepDto == null || SelectedMeterSpeed == null) { MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); return; } FreeSql.Update() .Set(a => a.StartValue, SelectedMeterSpeed.StartValue) .Set(a => a.EndValue, SelectedMeterSpeed.EndValue) .Set(a => a.KeepTime, SelectedMeterSpeed.KeepTime) .Where(a => a.Id == SelectedMeterSpeed.Id) .ExecuteAffrows(); //更新界面数据 ListProgramSeg = RefreshProSeg(); RefreshProStepData(); RefreshMeterSpeed(); } private DelegateCommand _ProStepSpeedDeleteCmd; /// /// 修改速度命令 /// public DelegateCommand ProStepSpeedDeleteCmd { set { _ProStepSpeedDeleteCmd = value; } get { if (_ProStepSpeedDeleteCmd == null) { _ProStepSpeedDeleteCmd = new DelegateCommand(() => ProStepSpeedDeleteCmdMethod()); } return _ProStepSpeedDeleteCmd; } } /// /// 删除速度命令执行方法 /// private void ProStepSpeedDeleteCmdMethod() { if (SelectedProStepDto != null || SelectedMeterSpeed.Id != 0) { MessageBoxResult dialogResult = MessageBox.Show("你确定要删除当前的数据吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); if (dialogResult == MessageBoxResult.OK) { FreeSql.Delete(SelectedMeterSpeed.Id).ExecuteAffrows(); //更新界面数据 ListProgramSeg = RefreshProSeg(); RefreshProStepData(); RefreshMeterSpeed(); } } else { MessageBox.Show("未发现选中要删除的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); } } /// /// 更新速度表信息 /// private void RefreshMeterSpeed() { ListMeterSpeed = ListProgramSeg.Where(a => a.Id == SelectedProgramSeg.Id).FirstOrDefault()!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id)! .FirstOrDefault()!.MeterSpeeds!.ToList(); ListMeterSpeedItems.Clear(); ListMeterSpeedItems = new ObservableCollection(ListMeterSpeed!); } #endregion #region Ps表 private ObservableCollection _ListMeterPsItems; /// /// Meter Ps数据集合 /// public ObservableCollection ListMeterPsItems { get { return _ListMeterPsItems; } set { _ListMeterPsItems = value; RaisePropertyChanged(); } } /// /// MeterSpeed集合数据 /// public List ListMeterPs { get; set; } private MeterPs _SelectedPs; /// /// 当前选中的程序速度 /// public MeterPs SelectedPs { get { return _SelectedPs; } set { _SelectedPs = value; RaisePropertyChanged(); } } private DelegateCommand _MeterPsSelectedChangedCmd; /// /// 刷新数据命令 /// public DelegateCommand MeterPsSelectedChangedCmd { set { _MeterPsSelectedChangedCmd = value; } get { if (_MeterPsSelectedChangedCmd == null) { _MeterPsSelectedChangedCmd = new DelegateCommand((str) => MeterPsSelectedChangedCmdMethod(str)); } return _MeterPsSelectedChangedCmd; } } /// /// 速度表选中行的执行方法 /// /// /// private void MeterPsSelectedChangedCmdMethod(object par) { var SelectedData = par as MeterPs; if (SelectedData != null) { SelectedPs = SelectedData; } } private DelegateCommand _ProStepPsAddCmd; /// /// 新增PS命令 /// public DelegateCommand ProStepPsAddCmd { set { _ProStepPsAddCmd = value; } get { if (_ProStepPsAddCmd == null) { _ProStepPsAddCmd = new DelegateCommand(() => ProStepPsAddCmdMethod()); } return _ProStepPsAddCmd; } } /// /// 增加Ps命令执行方法 /// private void ProStepPsAddCmdMethod() { if (SelectedProStepDto == null) { MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); return; } //当前的速度表集合数据 var MeterPss = ListMeterPsItems.ToList(); var MeterPsData = new MeterPs() { StartValue = SelectedPs.StartValue, EndValue = SelectedPs.EndValue, KeepTime = SelectedPs.KeepTime, ProStepId = SelectedProStepDto.Id, StepNo = AutoGetMeterPsStepNo(), }; //增加数据 var getdata = FreeSql.Insert(MeterPsData).ExecuteIdentity(); //更新界面数据 ListProgramSeg = RefreshProSeg(); RefreshProStepData(); RefreshMeterPs(); } private DelegateCommand _ProStepPsEditCmd; /// /// 新增PS命令 /// public DelegateCommand ProStepPsEditCmd { set { _ProStepPsEditCmd = value; } get { if (_ProStepPsEditCmd == null) { _ProStepPsEditCmd = new DelegateCommand(() => ProStepPsEditCmdMethod()); } return _ProStepPsEditCmd; } } /// /// 编辑Ps命令执行方法 /// private void ProStepPsEditCmdMethod() { if (SelectedProStepDto == null || SelectedPs == null) { MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); return; } FreeSql.Update() .Set(a => a.StartValue, SelectedPs.StartValue) .Set(a => a.EndValue, SelectedPs.EndValue) .Set(a => a.KeepTime, SelectedPs.KeepTime) .Where(a => a.Id == SelectedPs.Id) .ExecuteAffrows(); //更新界面数据 ListProgramSeg = RefreshProSeg(); RefreshProStepData(); RefreshMeterPs(); } private DelegateCommand _ProStepPsDeleteCmd; /// /// 新增PS命令 /// public DelegateCommand ProStepPsDeleteCmd { set { _ProStepPsDeleteCmd = value; } get { if (_ProStepPsDeleteCmd == null) { _ProStepPsDeleteCmd = new DelegateCommand(() => ProStepPsDeleteCmdMethod()); } return _ProStepPsDeleteCmd; } } /// /// 增加Ps命令执行方法 /// private void ProStepPsDeleteCmdMethod() { if (SelectedProStepDto != null || SelectedPs.Id != 0) { MessageBoxResult dialogResult = MessageBox.Show("你确定要删除当前的数据吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); if (dialogResult == MessageBoxResult.OK) { FreeSql.Delete(SelectedPs.Id).ExecuteAffrows(); //更新界面数据 ListProgramSeg = RefreshProSeg(); RefreshProStepData(); RefreshMeterPs(); } } else { MessageBox.Show("未发现选中要删除的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); } } /// /// 更新速度表信息 /// private void RefreshMeterPs() { ListMeterPs = ListProgramSeg.Where(a => a.Id == SelectedProgramSeg.Id).FirstOrDefault()!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id)! .FirstOrDefault()!.MeterPss!.ToList(); ListMeterPsItems.Clear(); ListMeterPsItems = new ObservableCollection(ListMeterPs!); } #endregion #region ProStep操作 private int _ProStepCycleCount; /// /// ProStep 循环次数 /// public int ProStepCycleCount { get { return _ProStepCycleCount; } set { _ProStepCycleCount = value; RaisePropertyChanged(); } } private ProStepDto _SelectedProStepDto; /// /// 当前选中的程序步骤 /// public ProStepDto SelectedProStepDto { get { return _SelectedProStepDto; } set { _SelectedProStepDto = value; RaisePropertyChanged(); } } private ObservableCollection _ListProStepDtoItems; /// /// ProStep数据集合 /// public ObservableCollection ListProStepDtoItems { get { return _ListProStepDtoItems; } set { _ListProStepDtoItems = value; RaisePropertyChanged(); } } private List _ListProStep; /// /// ProStep数据集合 /// public List ListProStep { get { return _ListProStep; } set { _ListProStep = value; } } private string MeterSpeedToString(List data) { var strInfo = new StringBuilder(); var Count = data.Count; foreach (var item in data) { Count--; strInfo.Append(item.StartValue); strInfo.Append("-"); strInfo.Append(item.EndValue); strInfo.Append("-"); strInfo.Append(item.KeepTime); if (Count != 0) { strInfo.Append(Environment.NewLine); } } return strInfo.ToString(); //return @"< ASDFA-ADFA-FASD-ADF "+ Environment.NewLine+" ASDFA-ADFA-FASD-ADF ASDFA-ADFA-FASD-ADF "; } private DelegateCommand _GridSelectionChangedCmd; /// /// 刷新数据命令 /// public DelegateCommand GridSelectionChangedCmd { set { _GridSelectionChangedCmd = value; } get { if (_GridSelectionChangedCmd == null) { _GridSelectionChangedCmd = new DelegateCommand((par) => GridSelectionChangedCmdMethod(par)); } return _GridSelectionChangedCmd; } } private void GridSelectionChangedCmdMethod(object par) { //先判断是否是正确的集合数据,防止DataGrid的数据源刷新导致的触发事件 var Selecteddata = par as ProStepDto; //SelectedProStepDto = par as ProStepDto; if (Selecteddata != null) { SelectedProStepDto = Selecteddata; ProStepCycleCount = SelectedProStepDto.StepRepeat; ListMeterSpeed = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterSpeeds!.ToList(); ListMeterPs = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPss!.ToList(); ListMeterSpeedItems = new ObservableCollection(ListMeterSpeed); ListMeterPsItems = new ObservableCollection(ListMeterPs); } } private DelegateCommand _ProStepAddCmd; /// /// 新增命令 /// public DelegateCommand ProStepAddCmd { set { _ProStepAddCmd = value; } get { if (_ProStepAddCmd == null) { _ProStepAddCmd = new DelegateCommand(() => ProStepAddCmdMethod()); } return _ProStepAddCmd; } } /// /// 新增命令执行方法 /// private void ProStepAddCmdMethod() { //当前的速度表集合数据 var MeterSpeeds = ListMeterSpeedItems.ToList(); var NewData = new ProStep() { StepNo = AutoGetProStepNo(), StepRepeat = ProStepCycleCount, ProgramSegId = SelectedProgramSeg.Id, Remark = "", }; var getdata = FreeSql.Insert(NewData).ExecuteIdentity(); //var repo = FreeSql.GetRepository(); //var getdata = repo.Insert(NewData); //更新Id foreach (var item in MeterSpeeds) { item.ProStepId = getdata; } NewData.MeterSpeeds = MeterSpeeds; //repo.SaveMany(NewData, "MeterSpeeds"); FreeSql.Insert(MeterSpeeds).ExecuteAffrows(); //更新界面数据 ListProgramSeg = RefreshProSeg(); RefreshProStepData(); } private DelegateCommand _ProStepEditCmd; /// /// 编辑命令 /// public DelegateCommand ProStepEditCmd { set { _ProStepEditCmd = value; } get { if (_ProStepEditCmd == null) { _ProStepEditCmd = new DelegateCommand(() => ProStepEditCmdMethod()); } return _ProStepEditCmd; } } /// /// 编辑命令执行方法 /// private void ProStepEditCmdMethod() { if (SelectedProStepDto == null) { MessageBox.Show("请选择后再进行编辑"); return; } FreeSql.Update() .Set(a => a.StepRepeat, ProStepCycleCount) //.Set(a=>a.StepRepeat, ProStepCycleCount) .Where(a => a.Id == SelectedProStepDto.Id) .ExecuteAffrows(); //更新界面数据 ListProgramSeg = RefreshProSeg(); RefreshProStepData(); } private DelegateCommand _ProStepDeleteCmd; /// /// 删除命令 /// public DelegateCommand ProStepDeleteCmd { set { _ProStepDeleteCmd = value; } get { if (_ProStepDeleteCmd == null) { _ProStepDeleteCmd = new DelegateCommand(() => ProStepDeleteCmdMethod()); } return _ProStepDeleteCmd; } } /// /// 删除命令执行方法 /// private void ProStepDeleteCmdMethod() { if (SelectedProStepDto == null) { MessageBox.Show("请选择后再进行删除"); return; } MessageBoxResult dialogResult = MessageBox.Show("你确定要删除当前的数据吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); if (dialogResult == MessageBoxResult.OK) { FreeSql.Delete() .Where(a => a.Id == SelectedProStepDto.Id) .ExecuteAffrows(); //更新界面数据 ListProgramSeg = RefreshProSeg(); RefreshProStepData(); } } private void RefreshProStepData() { ListProStep = ListProgramSeg.Where(a => a.Id == SelectedProgramSeg.Id).FirstOrDefault()!.ProSteps!.ToList(); ListProStepDtoItems.Clear(); foreach (var item in ListProStep) { ListProStepDtoItems.Add(new ProStepDto() { Id = item.Id, StepNo = item.StepNo, StepRepeat = item.StepRepeat, SpeedInfo = MeterSpeedToString(item.MeterSpeeds!.ToList()) }); } } #endregion //private ObservableCollection GetProStep(List data) //{ //} #region ProgramSeg操作 private DelegateCommand _ProSelectedChangedCmd; /// /// 刷新数据命令 /// public DelegateCommand ProSelectedChangedCmd { set { _ProSelectedChangedCmd = value; } get { if (_ProSelectedChangedCmd == null) { _ProSelectedChangedCmd = new DelegateCommand((str) => ProListSelectionChangedCmdMethod(str)); } return _ProSelectedChangedCmd; } } /// /// 执行方法 /// /// /// private void ProListSelectionChangedCmdMethod(object par) { var data = par as ProgramSeg; //如果不是ProgramSeg则退出,因为刷新数据源的时候,会触发这个选择器 if (data == null) return; ListProStep = data!.ProSteps!.ToList(); SelectedProgramSeg = data; ListProStepDtoItems.Clear(); foreach (var item in ListProStep) { ListProStepDtoItems.Add(new ProStepDto() { Id = item.Id, StepNo = item.StepNo, StepRepeat = item.StepRepeat, SpeedInfo = MeterSpeedToString(item.MeterSpeeds!.ToList()) }); } } private ObservableCollection _ProSegListViewItems; /// /// ProgramSeg 数据集合 /// public ObservableCollection ProSegListViewItems { get { return _ProSegListViewItems; } set { _ProSegListViewItems = value; RaisePropertyChanged(); } } /// /// 程序集合数据 /// public List ListProgramSeg { get; set; } private ProgramSeg _SelectedProgramSeg; /// /// 当前选中的程序名称 /// public ProgramSeg SelectedProgramSeg { get { return _SelectedProgramSeg; } set { _SelectedProgramSeg = value; RaisePropertyChanged(); } } /// /// 加载最新的数据 /// /// private List RefreshProSeg() { ListProgramSeg = FreeSql.Select() .IncludeMany(a => a.ProSteps, then => then.IncludeMany(b => b.MeterSpeeds).IncludeMany(b => b.MeterPss).IncludeMany(b => b.MeterPds)).ToList(); ProSegListViewItems.Clear(); foreach (var item in ListProgramSeg) { ProSegListViewItems.Add(item); } return ListProgramSeg; } private DelegateCommand _ProAddCmd; /// /// 新增命令 /// public DelegateCommand ProAddCmd { set { _ProAddCmd = value; } get { if (_ProAddCmd == null) { _ProAddCmd = new DelegateCommand(() => ProAddCmdMethod()); } return _ProAddCmd; } } /// /// 新增命令执行方法 /// private void ProAddCmdMethod() { //弹窗 DialogService.ShowDialog("DialogCreateProView", new DialogParameters() { { "Name", "" } }, (par) => { if (par.Result == ButtonResult.OK) { //程序名称 var ReturnValue = par.Parameters.GetValue("Name"); //查询是否重复 var count = FreeSql.Select().Where(a => a.Name == ReturnValue).Count(); if (count > 0) { MessageBox.Show("名称已经存在了"); return; } //开始新增 var InsertedData = FreeSql.Insert(new ProgramSeg() { Name = ReturnValue, Remark = "", }).ExecuteAffrows(); //获取全部的数据 RefreshProSeg(); } else if (par.Result == ButtonResult.Cancel) { //取消 } }); } private DelegateCommand _ProEditCmd; /// /// 编辑命令 /// public DelegateCommand ProEditCmd { set { _ProEditCmd = value; } get { if (_ProEditCmd == null) { _ProEditCmd = new DelegateCommand(() => ProEditCmdMethod()); } return _ProEditCmd; } } /// /// 编辑命令执行方法 /// private void ProEditCmdMethod() { if (SelectedProgramSeg == null) { MessageBox.Show("未选中工况程序"); return; } //弹窗 DialogService.ShowDialog("DialogEditProView", new DialogParameters() { { "Name", SelectedProgramSeg.Name } }, (par) => { if (par.Result == ButtonResult.OK) { //程序名称 var ReturnValue = par.Parameters.GetValue("Name"); //查询是否重复 var count = FreeSql.Select().Where(a => a.Name == ReturnValue).Count(); if (count > 0) { MessageBox.Show("名称已经存在了"); return; } //开始修改 var InsertedData = FreeSql.Update() .Set(a => a.Name, ReturnValue) .Where(a => a.Id == SelectedProgramSeg.Id) .ExecuteAffrows(); //获取全部的数据 RefreshProSeg(); } else if (par.Result == ButtonResult.Cancel) { //取消 } }); } private DelegateCommand _ProDeleteCmd; /// /// 删除命令 /// public DelegateCommand ProDeleteCmd { set { _ProDeleteCmd = value; } get { if (_ProDeleteCmd == null) { _ProDeleteCmd = new DelegateCommand(() => ProDeleteCmdMethod()); } return _ProDeleteCmd; } } /// /// 删除命令执行方法 /// private void ProDeleteCmdMethod() { if (SelectedProgramSeg == null) { MessageBox.Show("未选中工况程序"); return; } MessageBoxResult dialogResult = MessageBox.Show("你确定要删除当前的数据吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); if (dialogResult == MessageBoxResult.OK) { //联级别删除 var repo = FreeSql.GetRepository(); repo.DbContextOptions.EnableCascadeSave = true; //关键设置 var data = repo.Select.Where(a => a.Id == SelectedProgramSeg.Id) .IncludeMany(a => a.ProSteps, then => then.IncludeMany(b => b.MeterSpeeds).IncludeMany(b => b.MeterPss).IncludeMany(b => b.MeterPds)) //.IncludeMany(a => a.QuickClutchStepCells) //.IncludeMany(a => a.QuickVoltageStepCells) .ToList(); repo.Delete(data); ////开始删除 //var InsertedData = FreeSql.Delete(SelectedProgramSeg.Id).ExecuteAffrows(); //获取全部的数据 RefreshProSeg(); } } #endregion #region 公共库 /// /// 获取当前的步骤的数据信息 /// private int AutoGetProStepNo() { var StepInfo = FreeSql.Select().Where(a => a.ProgramSegId == SelectedProgramSeg.Id).ToList(); if (StepInfo != null && StepInfo.Count > 0) { var MaxStep = StepInfo.Max(a => a.StepNo); return MaxStep + 1; } else { return 1; } } /// /// 获取MeterSpeed当前的步骤的数据信息 /// private int AutoGetMeterSpeedStepNo() { var StepInfo = FreeSql.Select().Where(a => a.ProStepId == SelectedProStepDto.Id).ToList(); if (StepInfo != null && StepInfo.Count > 0) { var MaxStep = StepInfo.Max(a => a.StepNo); return MaxStep + 1; } else { return 1; } } /// /// 获取MeterSpeed当前的步骤的数据信息 /// private int AutoGetMeterPsStepNo() { var StepInfo = FreeSql.Select().Where(a => a.ProStepId == SelectedProStepDto.Id).ToList(); if (StepInfo != null && StepInfo.Count > 0) { var MaxStep = StepInfo.Max(a => a.StepNo); return MaxStep + 1; } else { return 1; } } #endregion } }