CAN/LIN 导入和导出功能
This commit is contained in:
377
CapMachine.Wpf/ViewModels/DialogCANFdSchConfigViewModel.cs
Normal file
377
CapMachine.Wpf/ViewModels/DialogCANFdSchConfigViewModel.cs
Normal file
@@ -0,0 +1,377 @@
|
||||
using AutoMapper;
|
||||
using CapMachine.Core;
|
||||
using CapMachine.Model.CANLIN;
|
||||
using CapMachine.Wpf.Dtos;
|
||||
using Prism.Commands;
|
||||
using Prism.Services.Dialogs;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
||||
namespace CapMachine.Wpf.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// CAN Fd 调度表配置
|
||||
/// </summary>
|
||||
public class DialogCANFdSchConfigViewModel : DialogViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// 构造函数
|
||||
/// </summary>
|
||||
public DialogCANFdSchConfigViewModel(IFreeSql freeSql, IMapper mapper)
|
||||
{
|
||||
Title = "调度表 CAN 配置";
|
||||
FreeSql = freeSql;
|
||||
Mapper = mapper;
|
||||
|
||||
|
||||
SendOrderCbxItems = new ObservableCollection<CbxItems>()
|
||||
{
|
||||
new CbxItems(){
|
||||
Key="0",
|
||||
Text="并行",
|
||||
},
|
||||
new CbxItems(){
|
||||
Key="1",
|
||||
Text="顺序",
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
//默认只能用1号调度器
|
||||
SchTabIndexCbxItems = new ObservableCollection<CbxItems>()
|
||||
{
|
||||
new CbxItems(){
|
||||
Key="0",
|
||||
Text="0",
|
||||
},
|
||||
//new CbxItems(){
|
||||
// Key="1",
|
||||
// Text="1",
|
||||
//},
|
||||
//new CbxItems(){
|
||||
// Key="2",
|
||||
// Text="2",
|
||||
//},
|
||||
//new CbxItems(){
|
||||
// Key="3",
|
||||
// Text="3",
|
||||
//},
|
||||
//new CbxItems(){
|
||||
// Key="4",
|
||||
// Text="4",
|
||||
//},
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
public IFreeSql FreeSql { get; }
|
||||
public IMapper Mapper { get; }
|
||||
|
||||
private string name;
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get { return name; }
|
||||
set { name = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
private ObservableCollection<CANFdScheduleConfigDto> _ListCANFdScheduleConfigDto = new ObservableCollection<CANFdScheduleConfigDto>();
|
||||
/// <summary>
|
||||
/// CAN 调度表数据集合
|
||||
/// </summary>
|
||||
public ObservableCollection<CANFdScheduleConfigDto> ListCANFdScheduleConfigDto
|
||||
{
|
||||
get { return _ListCANFdScheduleConfigDto; }
|
||||
set { _ListCANFdScheduleConfigDto = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 消息/帧报文信息集合
|
||||
/// </summary>
|
||||
public List<string> ListMsg { get; set; }
|
||||
|
||||
private ObservableCollection<CbxItems> _MsgCbxItems;
|
||||
/// <summary>
|
||||
/// 消息名称 集合信息
|
||||
/// </summary>
|
||||
public ObservableCollection<CbxItems> MsgCbxItems
|
||||
{
|
||||
get { return _MsgCbxItems; }
|
||||
set { _MsgCbxItems = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 选中的程序的Id
|
||||
/// </summary>
|
||||
public long SelectCanLinConfigProId { get; set; }
|
||||
|
||||
private ObservableCollection<CbxItems> _SendOrderCbxItems;
|
||||
/// <summary>
|
||||
/// 发送方式 集合信息
|
||||
/// </summary>
|
||||
public ObservableCollection<CbxItems> SendOrderCbxItems
|
||||
{
|
||||
get { return _SendOrderCbxItems; }
|
||||
set { _SendOrderCbxItems = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
|
||||
private string? _CurSendOrder;
|
||||
/// <summary>
|
||||
/// 当前发送方式
|
||||
/// </summary>
|
||||
public string? CurSendOrder
|
||||
{
|
||||
get { return _CurSendOrder; }
|
||||
set { _CurSendOrder = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
|
||||
private ObservableCollection<CbxItems> _SchTabIndexCbxItems;
|
||||
/// <summary>
|
||||
/// 调度器序号 集合信息
|
||||
/// </summary>
|
||||
public ObservableCollection<CbxItems> SchTabIndexCbxItems
|
||||
{
|
||||
get { return _SchTabIndexCbxItems; }
|
||||
set { _SchTabIndexCbxItems = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
private CANFdScheduleConfigDto _CurSelectedItem;
|
||||
/// <summary>
|
||||
/// 选中的数据
|
||||
/// </summary>
|
||||
public CANFdScheduleConfigDto CurSelectedItem
|
||||
{
|
||||
get { return _CurSelectedItem; }
|
||||
set { _CurSelectedItem = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
|
||||
private DelegateCommand<object> _GridSelectionChangedCmd;
|
||||
/// <summary>
|
||||
/// 选中行数据命令
|
||||
/// </summary>
|
||||
public DelegateCommand<object> GridSelectionChangedCmd
|
||||
{
|
||||
set
|
||||
{
|
||||
_GridSelectionChangedCmd = value;
|
||||
}
|
||||
get
|
||||
{
|
||||
if (_GridSelectionChangedCmd == null)
|
||||
{
|
||||
_GridSelectionChangedCmd = new DelegateCommand<object>((par) => GridSelectionChangedCmdMethod(par));
|
||||
}
|
||||
return _GridSelectionChangedCmd;
|
||||
}
|
||||
}
|
||||
private void GridSelectionChangedCmdMethod(object par)
|
||||
{
|
||||
//先判断是否是正确的集合数据,防止DataGrid的数据源刷新导致的触发事件
|
||||
var Selecteddata = par as CANFdScheduleConfigDto;
|
||||
|
||||
if (Selecteddata != null)
|
||||
{
|
||||
CurSelectedItem = Selecteddata;
|
||||
}
|
||||
}
|
||||
|
||||
//OpCmd
|
||||
private DelegateCommand<string> _OpCmd;
|
||||
/// <summary>
|
||||
/// 增加方法命令
|
||||
/// </summary>
|
||||
public DelegateCommand<string> OpCmd
|
||||
{
|
||||
set
|
||||
{
|
||||
_OpCmd = value;
|
||||
}
|
||||
get
|
||||
{
|
||||
if (_OpCmd == null)
|
||||
{
|
||||
_OpCmd = new DelegateCommand<string>((Par) => OpCmdCall(Par));
|
||||
}
|
||||
return _OpCmd;
|
||||
}
|
||||
}
|
||||
|
||||
private void OpCmdCall(string Par)
|
||||
{
|
||||
switch (Par)
|
||||
{
|
||||
case "Add":
|
||||
ListCANFdScheduleConfigDto.Add(new CANFdScheduleConfigDto
|
||||
{
|
||||
CanLinConfigProId = SelectCanLinConfigProId,
|
||||
Cycle = 100,
|
||||
SchTabIndex = 0,
|
||||
OrderSend = 1,
|
||||
});
|
||||
break;
|
||||
case "Delete":
|
||||
if (CurSelectedItem != null)
|
||||
{
|
||||
//直接删除掉,如果没有ID的话,这就不需要删除了
|
||||
FreeSql.Delete<CANFdScheduleConfig>(CurSelectedItem.Id).ExecuteAffrows();
|
||||
ListCANFdScheduleConfigDto.Remove(CurSelectedItem);
|
||||
|
||||
CurSelectedItem = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("请选中后再进行【删除】操作?", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private DelegateCommand saveCmd;
|
||||
/// <summary>
|
||||
/// 保存命令
|
||||
/// </summary>
|
||||
public DelegateCommand SaveCmd
|
||||
{
|
||||
set
|
||||
{
|
||||
saveCmd = value;
|
||||
}
|
||||
get
|
||||
{
|
||||
if (saveCmd == null)
|
||||
{
|
||||
saveCmd = new DelegateCommand(() => SaveCmdMethod());
|
||||
}
|
||||
return saveCmd;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存命令方法
|
||||
/// </summary>
|
||||
/// <exception cref="NotImplementedException"></exception>
|
||||
private void SaveCmdMethod()
|
||||
{
|
||||
//检查空的数据
|
||||
foreach (var item in ListCANFdScheduleConfigDto)
|
||||
{
|
||||
//整个的发送方式赋值给每个子项
|
||||
item.OrderSend = CurSendOrder == "0" ? 0 : 1;
|
||||
|
||||
if (string.IsNullOrEmpty(item.MsgName))
|
||||
{
|
||||
MessageBox.Show("请确认消息名称是否正确", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
|
||||
return;
|
||||
}
|
||||
if (item.Cycle == 0)
|
||||
{
|
||||
MessageBox.Show("请确认周期是否正确", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
|
||||
return;
|
||||
}
|
||||
if (item.OrderSend >= 2)
|
||||
{
|
||||
MessageBox.Show("请确认发送方式是否正确", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//发送的控制帧都放到同一个调度表中,不需要检查了
|
||||
////检查重复设置问题
|
||||
//bool isRepeat = ListCANScheduleConfigDto.GroupBy(i => i.MsgName).Any(g => g.Count() > 1);
|
||||
//if (isRepeat)
|
||||
//{
|
||||
// MessageBox.Show("请确认是否重复设置", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
|
||||
// return;
|
||||
//}
|
||||
|
||||
//检查数据是否正常
|
||||
foreach (var item in ListCANFdScheduleConfigDto)
|
||||
{
|
||||
FreeSql.InsertOrUpdate<CANFdScheduleConfig>()
|
||||
.SetSource(Mapper.Map<CANFdScheduleConfig>(item)).
|
||||
ExecuteAffrows();
|
||||
}
|
||||
|
||||
ListCANFdScheduleConfigDto = new ObservableCollection<CANFdScheduleConfigDto>(Mapper.Map<List<CANFdScheduleConfigDto>>(FreeSql.Select<CANFdScheduleConfig>().Where(a => a.CanLinConfigProId == SelectCanLinConfigProId).ToList()));
|
||||
|
||||
DialogParameters pars = new DialogParameters
|
||||
{
|
||||
{ "ReturnValue", ListCANFdScheduleConfigDto }
|
||||
};
|
||||
|
||||
RaiseRequestClose(new DialogResult(ButtonResult.OK, pars));
|
||||
}
|
||||
|
||||
private DelegateCommand cancelCmd;
|
||||
/// <summary>
|
||||
/// 保存命令
|
||||
/// </summary>
|
||||
public DelegateCommand CancelCmd
|
||||
{
|
||||
set
|
||||
{
|
||||
cancelCmd = value;
|
||||
}
|
||||
get
|
||||
{
|
||||
if (cancelCmd == null)
|
||||
{
|
||||
cancelCmd = new DelegateCommand(() => CancelCmdMethod());
|
||||
}
|
||||
return cancelCmd;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 取消命令方法
|
||||
/// </summary>
|
||||
/// <exception cref="NotImplementedException"></exception>
|
||||
private void CancelCmdMethod()
|
||||
{
|
||||
RaiseRequestClose(new DialogResult(ButtonResult.Cancel));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 窗口打开时的传递的参数
|
||||
/// </summary>
|
||||
/// <param name="parameters"></param>
|
||||
public override void OnDialogOpened(IDialogParameters parameters)
|
||||
{
|
||||
ListMsg = parameters.GetValue<List<string>>("ListMsg");
|
||||
// 转换为CbxItems集合,都是文本内容
|
||||
MsgCbxItems = new ObservableCollection<CbxItems>(
|
||||
ListMsg.Select(value => new CbxItems
|
||||
{
|
||||
Key = value,
|
||||
Text = value
|
||||
}));
|
||||
|
||||
ListCANFdScheduleConfigDto = parameters.GetValue<ObservableCollection<CANFdScheduleConfigDto>>("ListCANFdScheduleConfigDto");
|
||||
//防止返回的数据为空,就无法增加了
|
||||
if (ListCANFdScheduleConfigDto == null) ListCANFdScheduleConfigDto = new ObservableCollection<CANFdScheduleConfigDto>();
|
||||
//Name = parameters.GetValue<string>("Name");
|
||||
if (ListCANFdScheduleConfigDto.Count > 0)
|
||||
{
|
||||
CurSendOrder = ListCANFdScheduleConfigDto.FirstOrDefault()!.OrderSend.ToString();
|
||||
}
|
||||
|
||||
SelectCanLinConfigProId = parameters.GetValue<long>("SelectCanLinConfigProId");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user