2025-09-04 18:28:02 +08:00

700 lines
25 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using Telerik.Windows.Controls;
using Unity;
using System.Windows.Media;
using Prism.Ioc;
using SWS.CAD.CADFunc;
using SWS.CAD.Views;
using Prism.Events;
using SWS.CAD.Event;
using Prism.Services.Dialogs;
using SWS.Commons;
using SWS.Model;
using SWS.WPF.ViewModels;
using SWS.Service;
namespace SWS.CAD.ViewModels
{
public class DialogNewComponentViewModel : DialogBase, IDialogAware
{
#region
private ObservableCollection<Model.TreeModel> _TreeNodes;
/// <summary>
/// 左侧树形结构数据源
/// </summary>
public ObservableCollection<Model.TreeModel> TreeNodes
{
get { return _TreeNodes; }
set
{
_TreeNodes = value;
RaisePropertyChanged(nameof(TreeNodes));
}
}
private Model.TreeModel _SelectedTreeNode;
/// <summary>
/// 当前选中的树形节点
/// </summary>
public Model.TreeModel SelectedTreeNode
{
get { return _SelectedTreeNode; }
set
{
_SelectedTreeNode = value;
RaisePropertyChanged(nameof(SelectedTreeNode));
UpdateChannelInfos();
}
}
private ObservableCollection<propertyModel> _listShowProperty;
/// <summary>
/// 显示属性列表
/// </summary>
public ObservableCollection<propertyModel> listShowProperty
{
get { return _listShowProperty; }
set
{
_listShowProperty = value;
RaisePropertyChanged(nameof(listShowProperty));
}
}
private ObservableCollection<PropertyObjectModel> _listObjects;
/// <summary>
/// 属性列表
/// </summary>
public ObservableCollection<PropertyObjectModel> listObjects
{
get { return _listObjects; }
set
{
_listObjects = value;
RaisePropertyChanged(nameof(listObjects));
}
}
private PropertyObjectModel _SelectObject;
/// <summary>
/// 选中属性
/// </summary>
public PropertyObjectModel SelectObject
{
get { return _SelectObject; }
set
{
_SelectObject = value;
RaisePropertyChanged(nameof(SelectObject));
changeProObj(value);
}
}
private bool _isEnabledLock = false;
/// <summary>
/// 属性锁、查看属性历史 功能是否启用
/// </summary>
public bool isEnabledLock
{
get { return _isEnabledLock; }
set
{
_isEnabledLock = value;
RaisePropertyChanged(nameof(isEnabledLock));
}
}
private bool _isEnabledHistory = false;
/// <summary>
/// 查看属性历史 功能是否启用
/// </summary>
public bool isEnabledHistory
{
get { return _isEnabledHistory; }
set
{
_isEnabledHistory = value;
RaisePropertyChanged(nameof(isEnabledHistory));
}
}
private ImageSource _lockImage;
/// <summary>
/// 属性锁
/// </summary>
public ImageSource lockImage
{
get
{
return _lockImage;
}
set { _lockImage = value; RaisePropertyChanged(nameof(lockImage)); }
}
private ImageSource _lock2Image;
/// <summary>
/// 属性锁 Enable为false时灰色
/// </summary>
public ImageSource lock2Image
{
get
{
return _lock2Image;
}
set { _lock2Image = value; RaisePropertyChanged(nameof(lock2Image)); }
}
private ImageSource _historyImage;
/// <summary>
/// 历史属性
/// </summary>
public ImageSource historyImage
{
get
{
return _historyImage;
}
set { _historyImage = value; RaisePropertyChanged(nameof(historyImage)); }
}
private ImageSource _history2Image;
/// <summary>
/// 历史属性 Enable为false时灰色
/// </summary>
public ImageSource history2Image
{
get
{
return _history2Image;
}
set { _history2Image = value; RaisePropertyChanged(nameof(history2Image)); }
}
private ImageSource _qiehuanImage;
/// <summary>
/// 切换属性视图
/// </summary>
public ImageSource qiehuanImage
{
get
{
return _qiehuanImage;
}
set { _qiehuanImage = value; RaisePropertyChanged(nameof(qiehuanImage)); }
}
private string _lockTooltip = "属性未锁定";
/// <summary>
/// 属性锁提示文本
/// </summary>
public string lockTooltip
{
get { return _lockTooltip; }
set
{
_lockTooltip = value;
RaisePropertyChanged(nameof(lockTooltip));
}
}
/// <summary>
/// 下拉框选择不一样的元件类型
/// </summary>
private void changeProObj(PropertyObjectModel proObj)
{
if (proObj != null)
{
listShowProperty = proObj.listBasicTypeP;
}
}
private bool _isBasicGroup = true;
/// <summary>
/// 是否属性常用分组
/// </summary>
public bool isBasicGroup
{
get { return _isBasicGroup; }
set
{
_isBasicGroup = value;
RaisePropertyChanged(nameof(isBasicGroup));
}
}
private bool _isLocked;
/// <summary>
/// 是否锁定属性
/// </summary>
public bool isLocked
{
get { return _isLocked; }
set
{
isEnabledGridProterty = !value;
isEnabledHistory = !value;
_isLocked = value;
RaisePropertyChanged(nameof(isLocked));
}
}
private bool _isEnabledGridProterty = true;
/// <summary>
/// Grid是否启用
/// </summary>
public bool isEnabledGridProterty
{
get { return _isEnabledGridProterty; }
set
{
_isEnabledGridProterty = value;
RaisePropertyChanged(nameof(isEnabledGridProterty));
}
}
private string _CurrentPropertyName;
/// <summary>
/// 选中的属性名称
/// </summary>
public string CurrentPropertyName
{
get { return _CurrentPropertyName; }
set
{
_CurrentPropertyName = value;
RaisePropertyChanged(nameof(CurrentPropertyName));
}
}
private bool _IsEnableChangeEvent = false;
/// <summary>
/// 是否启动下拉选项改变事件
/// </summary>
public bool IsEnableChangeEvent
{
get { return _IsEnableChangeEvent; }
set
{
_IsEnableChangeEvent = value;
RaisePropertyChanged(nameof(IsEnableChangeEvent));
}
}
#endregion
//接口服务
ObjectTypeService _objectTypeService;
private EnginedataService _enginedataService;
private ImageSource lockImg;
private ImageSource unlockImg;
IEventAggregator eventAggregator;
public DialogNewComponentViewModel()
{
_objectTypeService = GlobalObject.container.Resolve<ObjectTypeService>();
_enginedataService = GlobalObject.container.Resolve<EnginedataService>();
listShowProperty = new ObservableCollection<propertyModel>();
qiehuanImage = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"SWS.CAD.Images.qiehuan.png");
historyImage = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"SWS.CAD.Images.history.png");
history2Image = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"SWS.CAD.Images.history2.png");
lockImg = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"SWS.CAD.Images.Lock.png");
lockImage = lockImg;
lock2Image = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"SWS.CAD.Images.Lock2.png");
Command_History = new DelegateCommand(onHistory);
Command_Lock = new DelegateCommand(onLock);
Command_Qiehuan = new DelegateCommand(onQiehuan);
eventAggregator = GlobalObject.container.Resolve<IEventAggregator>();
//_eventAggregator.GetEvent<SelectonChangeEvent>().Subscribe(SelecttionChange, ThreadOption.UIThread, true);
//订阅事件
eventAggregator.GetEvent<SelectionChangeEvent>().Subscribe(SelecttionChange, ThreadOption.UIThread, true);
eventAggregator.GetEvent<NewComponent_LostFocusEvent>().Subscribe(LostFocus, ThreadOption.UIThread, true);
}
public string Title => "";
public event Action<IDialogResult> RequestClose;
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
}
private List<ec_Cable> CablePreAssigns;
public async void OnDialogOpened(IDialogParameters parameters)
{
//title = parameters.GetValue<string>(GlobalObject.dialogPar.title.ToString());
title = "新增元件";
//获取左侧树形结构数据
TreeNodes = new ObservableCollection<Model.TreeModel>(GlobalObject.designTree.Where(t => t.Text.Equals("接线设备")));
IsEnableChangeEvent = parameters.GetValue<bool>(GlobalObject.dialogPar.info.ToString());
}
public override void ExecuteOKCommandAsync(object para)
{
//返回结果
IDialogParameters res = new Prism.Services.Dialogs.DialogParameters();
res.Add(GlobalObject.dialogPar.para1.ToString(), listShowProperty);
RequestClose.Invoke(new DialogResult(ButtonResult.Yes, res));
}
public override void ExecuteCloseCommand(object parameter)
{
if (parameter as string == "ClickNo")
{
DialogResult res = new DialogResult(ButtonResult.No);
RequestClose.Invoke(res);
}
else
{
RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
}
this.Dispose();
}
#region
#region
private async void SelecttionChange(propertyModel model)
{
if (model.DisplayText.Equals("位号") && !string.IsNullOrEmpty(model.PropertyValue))
{
//获取位号的电缆属性
var TagNumberBys = await _objectTypeService.GetEngineDataListByTags(model.PropertyValue);
foreach (var ShowProperty in listShowProperty)
{
if (TagNumberBys != null && TagNumberBys.Count() > 0)
{
if (TagNumberBys[0].EngineDataProperty.Any(e => e.PropertyName.Equals(ShowProperty.DisplayText)))
{
ShowProperty.PropertyValue = TagNumberBys[0].EngineDataProperty.Where(e => e.PropertyName.Equals(ShowProperty.DisplayText)).Select(e => e.PropertyValue).FirstOrDefault();
}
}
}
string oldTagNumber = model.OldValue;
string newTagNumber = model.PropertyValue;
//var IsRepeatByTagNumber = await _objectTypeService.IsRepeatByTagNumber(oldTagNumber, newTagNumber);
}
}
#endregion
#region
private async void LostFocus(propertyModel model)
{
string oldTagNumber = "";
string newTagNumber = "";
if (model.DisplayText.Equals("位号") && !string.IsNullOrEmpty(model.PropertyValue))
{
oldTagNumber = model.OldValue;
newTagNumber = model.PropertyValue;
}
else
{
oldTagNumber = listShowProperty.Where(e => e.DisplayText.Equals("位号")).FirstOrDefault().OldValue;
newTagNumber = listShowProperty.Where(e => e.DisplayText.Equals("位号")).FirstOrDefault().PropertyValue;
}
var IsRepeatByTagNumber = await _objectTypeService.IsRepeatByTagNumber(oldTagNumber, newTagNumber);
//if (string.IsNullOrEmpty(IsRepeatByTagNumber.TagNumber))
//{
//}
List<ec_enginedata> entitys = new List<ec_enginedata>();
ec_enginedata ent = new ec_enginedata();
ent.CaseID = TagNumberCaseID;
ent.ObjectTypeID = TagNumberObjectTypeID;
ent.TagNumber = newTagNumber;
ent.EngineDataProperty = new List<ec_enginedata_property>();
foreach (var item in listShowProperty)
{
ec_enginedata_property ec_Enginedata_Property = new ec_enginedata_property()
{
MeasuringUnit = item.Unit,
PropertyName = item.DisplayText,
PropertyValue = item.PropertyValue,
};
ent.EngineDataProperty.Add(ec_Enginedata_Property);
}
entitys.Add(ent);
var ResUpdatePixelAndPropBatch = await _objectTypeService.UpdatePixelAndPropBatch(entitys);
if (ResUpdatePixelAndPropBatch != "")
{
System.Windows.MessageBox.Show(ResUpdatePixelAndPropBatch, "KunHengCAD", MessageBoxButton.OK, MessageBoxImage.Warning); return;
}
}
#endregion
#region
private string TagNumberObjectTypeID;
private string TagNumberCaseID;
/// <summary>
/// 左侧树形结构选择节点改变时,更新通道信息列表
/// </summary>
private async void UpdateChannelInfos()
{
if (SelectedTreeNode != null)
{
var a = await _objectTypeService.GetObjectTypePById(SelectedTreeNode.ID);
var b = await _objectTypeService.GetLatestSerialNumber(SelectedTreeNode.ID);
var TagNumberLs = await _objectTypeService.GetTagNumberById(SelectedTreeNode.ID);
if (TagNumberLs != null && TagNumberLs.Count() > 0)
{
TagNumberObjectTypeID = TagNumberLs.FirstOrDefault().ObjectTypeID;
TagNumberCaseID = TagNumberLs.FirstOrDefault().CaseID;
}
onTypeChange(SelectedTreeNode);
}
}
/// <summary>
/// 左边列表选中元件类型,右边出现对应属性,左下方出现图元列表
/// </summary>
/// <param name="node"></param>
private async void onTypeChange(Model.TreeModel node)
{
if (node != null)
{
#region
listShowProperty.Clear();
var listBasic = new ObservableCollection<propertyModel>();
var res = await _objectTypeService.GetObjectTypePById(node.ID);
if (res == null || !res.Any())
{
listObjects = new ObservableCollection<PropertyObjectModel>()
{ new PropertyObjectModel(){
objectTypeName=node.Text,
listBasicTypeP=listBasic,
}
};
SelectObject = listObjects[0];
isEnabledLock = false;
return;
}
#region
//位号下拉列表
var listTag = await _objectTypeService.GetTagNumberById_Brief(node.ID);
var pro = new propertyModel()
{
DisplayText = "位号",
ControlTypeName = PROPERTYType.ComboBox,
IsEnable = true,
IsBasicGroup = true,
GroupName = res[0].PropertyGroupName,
IsReturnChanged = true,
WhichPage = "新增元件"
};
if (listTag.Any())
{
Dictionary<string, string> items = new Dictionary<string, string>();
foreach (var dto in listTag)
{
if (string.IsNullOrEmpty(dto.Text))
{ continue; }
if (items.ContainsKey(dto.Text))
{ continue; }
items.Add(dto.Text, dto.Text);
}
pro.Item = items;
listBasic.Add(pro);
}
#endregion
//添加属性
foreach (var p in res)
{
var model = new propertyModel()
{
Id = p.PropertyID,
DisplayText = p.PropertyNameEN,
PropertyValue = p.DefaultValue,
Unit = p.DefaultUnitName,
UnitId = p.DefaultUnit,
UnitTypeId = p.MeasuringUnitTypeID,
IsBasicGroup = p.BasicGroup,
GroupName = p.PropertyGroupName,
ControlTypeName = PROPERTYType.TextBox,
IsReturnChanged = true,
WhichPage = "新增元件"
};
switch (p.PropertyType)
{
case "00001"://字符
case "00004"://扩展程序
model.ControlTypeName = PROPERTYType.TextBox;
break;
case "00002"://数字(含小数、负数)
model.ControlTypeName = PROPERTYType.Number;
break;
case "00005"://uom 单位类型 10 A
model.UnitTypeId = p.MeasuringUnitTypeID;
model.ControlTypeName = PROPERTYType.Folder;
break;
case "00003"://单选下拉框
model.ControlTypeName = PROPERTYType.ComboBox;
if (!string.IsNullOrEmpty(p.EnumDataCode))
{
var data = p.EnumDataCode.Split(',');
Dictionary<string, string> items = new Dictionary<string, string>();
foreach (var e in data)
{
items.Add(e, e);
}
model.Item = items;
}
break;
case "00006"://多选下拉框
model.ControlTypeName = PROPERTYType.MultiSelectComboBox;
if (!string.IsNullOrEmpty(p.EnumDataCode))
{
var dataMult = p.EnumDataCode.Split(',');
Dictionary<string, string> itemsMult = new Dictionary<string, string>();
foreach (var e in dataMult)
{
itemsMult.Add(e, e);
}
model.Item = itemsMult;
}
break;
}
listBasic.Add(model);
}
listObjects = new ObservableCollection<PropertyObjectModel>()
{ new PropertyObjectModel(){
objectTypeName=node.Text,
listBasicTypeP=listBasic,
}
};
SelectObject = listObjects[0];
isEnabledLock = false;
#endregion
}
}
#endregion
#region
/// <summary>
/// 历史属性
/// </summary>
public ICommand Command_History { get; }
/// <summary>
/// 历史属性
/// </summary>
private void onHistory(object obj)
{
if (SelectObject == null || string.IsNullOrEmpty(SelectObject.tagNumber))
{ return; }
if (string.IsNullOrEmpty(CurrentPropertyName))
{ return; }
IDialogParameters x = new Prism.Services.Dialogs.DialogParameters();
x.Add(GlobalObject.dialogPar.para1.ToString(), SelectObject.tagNumber);
x.Add(GlobalObject.dialogPar.para2.ToString(), CurrentPropertyName);
var _dialogService = GlobalObject._prismContainer.Resolve<IDialogService>();
_dialogService.ShowDialog(nameof(DialogPropertyHistory), x, (RES) =>
{
});
}
#endregion
#region
/// <summary>
/// 属性锁
/// </summary>
public ICommand Command_Lock { get; }
/// <summary>
/// 属性锁
/// </summary>
private async void onLock(object obj)
{
if (SelectObject == null)
{ return; }
if (SelectObject.CreateUserID.ToLower() != GlobalObject.userInfo.userId.ToLower())
{
MessageBox.Show("抱歉,非元件创建者您没有该元件锁定与解锁权限!", "警告", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (isLocked)
{
//进行解锁
var msg = await _enginedataService.LockTag(SelectObject.EngineDataID, "0");
if (string.IsNullOrEmpty(msg))
{
changeLocked(false);
General.SendMessage($"元件:{SelectObject.objectTypeName},已解锁!");
}
else { MessageBox.Show(msg); }
}
else
{
//进行锁定属性
var msg = await _enginedataService.LockTag(SelectObject.EngineDataID, "1");
if (string.IsNullOrEmpty(msg))
{
changeLocked(true, GlobalObject.userInfo.userId);
General.SendMessage($"元件:{SelectObject.objectTypeName},已被【{GlobalObject.userInfo.userId}】锁定!");
}
else { MessageBox.Show(msg); }
}
}
/// <summary>
/// 改变属性锁状态
/// </summary>
/// <param name="flag">是否锁定</param>
/// <param name="userId">锁定属性的用户id</param>
private void changeLocked(bool flag, string userId = "")
{
if (flag)
{
isLocked = true;
lockTooltip = $"属性被({userId})锁定";
lockImage = lockImg;
}
else
{
isLocked = false;
lockTooltip = "属性未锁定";
lockImage = unlockImg;
}
}
#endregion
#region
/// <summary>
/// 切换属性视图
/// </summary>
public ICommand Command_Qiehuan { get; }
/// <summary>
/// 历史属性
/// </summary>
private void onQiehuan(object obj)
{
if (listShowProperty.Any())
{
isBasicGroup = !isBasicGroup;
}
}
#endregion
#region
public ICommand EditEndCmd => new DelegateCommand(EditEnd);
/// <summary>
/// 编辑结束事件
/// </summary>
/// <param name="parameter"></param>
public virtual void EditEnd(object parameter)
{
//做个标记表示该项修改过
}
#endregion
#endregion
}
}