EPLAN_PROD_Plugin/Sinvo.EplanHpD.Plugin.WPFUI/ViewModel/MainViewModel.Check.cs

390 lines
16 KiB
C#
Raw Normal View History

using EPLAN.Harness.Common.Extensions;
using Sinvo.EplanHpD.Plugin.WPFUI.Models;
2024-10-24 18:01:26 +08:00
using Sinvo.EplanHpD.Plugin.WPFUI.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Sinvo.EplanHpD.Plugin.WPFUI.ViewModel
{
public partial class MainViewModel
{
2024-10-26 13:59:13 +08:00
public void CheckAll(IEnumerable<StuffedDataModel> datas)
2024-10-24 18:01:26 +08:00
{
2024-10-26 13:59:13 +08:00
datas.AsParallel().WithDegreeOfParallelism(4).ForAll(item =>
2024-10-24 18:01:26 +08:00
{
if (item == null) return;
item.IsError = false;
item.ErrorCount = 0;
item.CheckedMsg = "";
ValidateItem(item);
item.IsChecked = true;
});
OnPropertyChanged(nameof(StuffedData));
}
private void ValidateItem(StuffedDataModel item)
{
更新多个文件,添加新功能和修复bug 在 `CheckTest.cs` 文件中,添加了三个新的测试方法:`CheckWireErpNrTest`、`ChecImprintTest` 和 `CheckSizeTest`。 在 `AssemblyInfo.cs` 文件中,将程序集版本和文件版本从 `1.0.0.5` 更新为 `1.0.0.6`。 在 `StuffTest.cs` 文件中,添加了一个新的断言 `Assert.IsTrue(result.Where(it => it.Imprint == "EC5L3").First().WireColor == "BK");`。 在 `LectotypeWindow.xaml` 文件中,添加了一个新的 `Window` 定义,包括资源字典、按钮和 `TabControl` 控件。 在 `LectotypeWindow.xaml.cs` 文件中,添加了 `LectotypeWindow` 类的定义和相关的事件处理方法。 在 `MainWindow.xaml` 文件中,移除了旧的样式定义,添加了新的资源字典引用,并更新了 `GroupBox` 为 `hc:Card` 控件,调整了按钮样式和 `DataGrid` 的样式。 在 `MainWindow.xaml` 文件中,更新了 `DataGrid` 的 `RowStyle` 和 `CellStyle`,并添加了新的触发器和样式设置。 在 `MainWindow.xaml` 文件中,更新了检查配置项的布局,使用 `hc:Card` 控件替换了 `GroupBox`,并调整了文本块的样式和布局。 在 `MainWindow.xaml.cs` 文件中: * 在 `MainWindow` 类中添加了对 `model.IsError` 的检查,如果为 `true`,则将 `model.IsIgnore` 设置为 `true`。 * 在 `Copy_Click` 方法中添加了 `try-catch` 块来捕获异常,并在捕获到异常时显示错误消息。 * 在 `GoToSource_Click` 方法中添加了 `try-catch` 块来捕获异常,并在捕获到异常时显示错误消息。 * 将 `Array.Empty<object>()` 替换为 `[]`。 在 `CheckedModel.cs` 文件中: * 注释掉了 `SetProperty` 方法中对 `Equals` 方法的检查。 在 `LectotypeModel.cs` 文件中: * 新增了 `LectotypeModel` 类,包含多个属性和相应的 `OnPropertyChanged` 调用。 在 `LineSegmentModel.cs` 文件中: * 新增了 `LineSegmentModel` 类,包含 `LineAxisNo`、`LineType` 和 `LineParagraph` 属性。 在 `AssemblyInfo.cs` 文件中: * 更新了程序集版本号,从 `1.0.0.5` 更新到 `1.0.0.6`。 在 `Sinvo.EplanHpD.Plugin.WPFUI.csproj` 文件中: * 添加了对 `EPLAN.Harness.MathLib` 的引用。 * 添加了 `LectotypeWindow.xaml` 和 `TestWindow.xaml` 及其对应的代码文件。 * 添加了 `HandyControl` 包的引用。 在 `TestWindow.xaml` 文件中: * 新增了 `TestWindow` 窗口的 XAML 定义,包含一个 `DataGrid` 控件。 在 `TestWindow.xaml.cs` 文件中: * 新增了 `TestWindow` 类,包含加载数据的方法。 在 `ExcelHelper.cs` 文件中: * 修改了 `GetWireTerminalMappingTable` 方法,使其在 `Prefix` 为 `null` 时也能匹配。 * 新增了 `GetWireInfo` 方法,用于获取线材信息。 在 `LectotypeViewModel.cs` 文件中: * 新增了 `LectotypeViewModel` 类,包含加载数据的方法和多个辅助方法。 在 `MainViewModel.Check.cs` 文件中: * 在 `ValidateItem` 方法中添加了对 `CheckWireErpNr` 方法的调用。 * 新增了 `CheckWireErpNr` 方法,用于检查线材料号。 * 在 `CheckNumberTube` 方法中添加了对 `item.Imprint` 是否为空的检查。 将 `data.AsParallel().WithDegreeOfParallelism(8).ForAll(entry =>` 修改为 `data.Where(it => it.OrigOcc == "OccWire" && !(it?.Properties["WireName"]?.GetDisplayValue()?.StartsWith("导线") ?? false)).AsParallel().WithDegreeOfParallelism(1).ForAll(entry =>`,以过滤出 `OrigOcc` 为 "OccWire" 且 `WireName` 不以 "导线" 开头的数据,并将并行度设置为 1。 将 `data.FrontTerminalModel = item.ConnectorFrom.Contains(":") ? item.ConnectorFrom.Split(':')[0] : item.ConnectorFrom;` 修改为 `data.FrontTerminalModel = item.ConnectorFrom?.Contains(":") ?? false ? item.ConnectorFrom.Split(':')[0] : item.ConnectorFrom ?? "";`,以处理 `ConnectorFrom` 可能为 null 的情况。 将 `data.RearTerminalModel = item.ConnectorTo.Contains(":") ? item.ConnectorTo.Split(':')[0] : item.ConnectorTo;` 修改为 `data.RearTerminalModel = item.ConnectorTo?.Contains(":") ?? false ? item.ConnectorTo.Split(':')[0] : item.ConnectorTo ?? "";`,以处理 `ConnectorTo` 可能为 null 的情况。 删除了 `if (insulationModels.Any()) { data.Insulation = insulationModels.First(); }` 语句块,简化了代码逻辑。 更新了 `GetWireColorCode` 方法中的注释,将原来的注释替换为更简洁的版本。
2024-11-07 12:14:44 +08:00
CheckWireErpNr(item);
2024-10-24 18:01:26 +08:00
CheckRequiredFields(item);
if (IsUseDiscoloration)
{
CheckImprint(item);
}
if (IsRequireCe)
{
CheckCeCompliance(item);
}
CheckNumberTube(item);
2024-10-24 18:01:26 +08:00
CheckInsulation(item);
CheckTerminals(item);
改进电缆数据处理和检查逻辑,更新版本号 在 `CheckTest.cs` 文件中,添加了多个测试方法,包括 `DPETerminalCheckTest`、`DPETerminalCrossSectionCheckTest` 和 `TerminalCheckTest`,用于检查不同端子的测试逻辑。 在 `AssemblyInfo.cs` 文件中,更新了程序集版本号和文件版本号。 在 `StuffTest.cs` 文件中,注释掉了一些断言语句,并添加了一个新的测试方法 `StuffedNameTubeTest`,用于测试号码管处理逻辑。 在 `LectotypeWindow.xaml` 文件中,添加了 `util` 命名空间引用,并定义了多个 `ControlTemplate` 模板和一个 `LectotypeLengthDataTemplateSelector` 模板选择器,用于根据线材类型选择不同的显示模板。同时,将 `DataGrid` 控件替换为 `ListView` 控件,并添加了上下文菜单和样式触发器。 在 `LectotypeWindow.xaml.cs` 文件中,添加了 `ToSourceMenuItem_Click` 方法,用于处理上下文菜单项的点击事件。 在 `MainWindow.xaml.cs` 文件中,重构了 `AddToDesignerSelectSet` 方法,添加了异常处理逻辑。 在 `Sinvo.EplanHpD.Plugin.WPFUI.csproj` 文件中,添加了 `LectotypeLengthDataTemplateSelector.cs` 文件的编译项。 在 `ExcelHelper.cs` 文件中,修改了 `GetWireTerminalMappingTable` 方法的过滤逻辑。 新增了 `LectotypeLengthDataTemplateSelector.cs` 文件,定义了 `LectotypeLengthDataTemplateSelector` 类,用于根据线材类型选择不同的数据模板。 在 `LectotypeViewModel.cs` 文件中: * 添加了对 `EPLAN.Harness.ProjectCore.Occurrences` 命名空间的引用。 * 添加了 `StuffedWires` 属性及其对应的私有字段 `_stuffedWires`。 * 在 `LoadData` 方法中,添加了对 `StuffData` 方法的调用,并将结果赋值给 `Wires`。 * 添加了 `StuffData` 方法,用于整理和合并电缆数据。 * 在 `ToSource` 方法中,添加了根据电缆名称获取设计器并设置可见性的逻辑。 * 修改了 `CableType` 的默认值从 "位置类型" 改为 "未知类型"。 在 `MainViewModel.Check.cs` 文件中: * 添加了 `CheckDPETerminals` 方法,用于检查地排端子。 * 修改了 `CheckTerminals` 方法,移除了对 `D-PE` 前缀的特殊处理逻辑。 * 修改了 `GetD_PECanUsedTerminal` 方法,注释掉了获取不包含前缀的端子的逻辑。 在 `DesignPluginEntry.cs` 文件中: * 注释掉了 `DesignPluginEntry` 类实现的 `IHpDPlugin` 接口。 在 `AssemblyInfo.cs` 文件中: * 更新了程序集版本号,从 `1.0.0.6` 更新到 `1.0.0.14`。
2024-11-08 08:34:20 +08:00
CheckDPETerminals(item);
2024-10-24 18:01:26 +08:00
CheckDuplicateModel(item);
}
改进电缆数据处理和检查逻辑,更新版本号 在 `CheckTest.cs` 文件中,添加了多个测试方法,包括 `DPETerminalCheckTest`、`DPETerminalCrossSectionCheckTest` 和 `TerminalCheckTest`,用于检查不同端子的测试逻辑。 在 `AssemblyInfo.cs` 文件中,更新了程序集版本号和文件版本号。 在 `StuffTest.cs` 文件中,注释掉了一些断言语句,并添加了一个新的测试方法 `StuffedNameTubeTest`,用于测试号码管处理逻辑。 在 `LectotypeWindow.xaml` 文件中,添加了 `util` 命名空间引用,并定义了多个 `ControlTemplate` 模板和一个 `LectotypeLengthDataTemplateSelector` 模板选择器,用于根据线材类型选择不同的显示模板。同时,将 `DataGrid` 控件替换为 `ListView` 控件,并添加了上下文菜单和样式触发器。 在 `LectotypeWindow.xaml.cs` 文件中,添加了 `ToSourceMenuItem_Click` 方法,用于处理上下文菜单项的点击事件。 在 `MainWindow.xaml.cs` 文件中,重构了 `AddToDesignerSelectSet` 方法,添加了异常处理逻辑。 在 `Sinvo.EplanHpD.Plugin.WPFUI.csproj` 文件中,添加了 `LectotypeLengthDataTemplateSelector.cs` 文件的编译项。 在 `ExcelHelper.cs` 文件中,修改了 `GetWireTerminalMappingTable` 方法的过滤逻辑。 新增了 `LectotypeLengthDataTemplateSelector.cs` 文件,定义了 `LectotypeLengthDataTemplateSelector` 类,用于根据线材类型选择不同的数据模板。 在 `LectotypeViewModel.cs` 文件中: * 添加了对 `EPLAN.Harness.ProjectCore.Occurrences` 命名空间的引用。 * 添加了 `StuffedWires` 属性及其对应的私有字段 `_stuffedWires`。 * 在 `LoadData` 方法中,添加了对 `StuffData` 方法的调用,并将结果赋值给 `Wires`。 * 添加了 `StuffData` 方法,用于整理和合并电缆数据。 * 在 `ToSource` 方法中,添加了根据电缆名称获取设计器并设置可见性的逻辑。 * 修改了 `CableType` 的默认值从 "位置类型" 改为 "未知类型"。 在 `MainViewModel.Check.cs` 文件中: * 添加了 `CheckDPETerminals` 方法,用于检查地排端子。 * 修改了 `CheckTerminals` 方法,移除了对 `D-PE` 前缀的特殊处理逻辑。 * 修改了 `GetD_PECanUsedTerminal` 方法,注释掉了获取不包含前缀的端子的逻辑。 在 `DesignPluginEntry.cs` 文件中: * 注释掉了 `DesignPluginEntry` 类实现的 `IHpDPlugin` 接口。 在 `AssemblyInfo.cs` 文件中: * 更新了程序集版本号,从 `1.0.0.6` 更新到 `1.0.0.14`。
2024-11-08 08:34:20 +08:00
public void CheckDPETerminals(StuffedDataModel item)
{
// 地排只检查4.0线径以下的
if (double.TryParse(item.CrossSection, out double crossSection))
if (item.Imprint.StartsWith("D-PE") && crossSection <= 4.0)
{
var D_PECanUsedTerminals = GetD_PECanUsedTerminal(item.WireModel);
if (D_PECanUsedTerminals.All(terminal =>
terminal.TerminalSpec != item.FrontTerminalModel
&& terminal.TerminalSpec != item.RearTerminalModel)
)
{
SetItemError(item, "D-PE线未匹配到正确的端子\r\n");
}
}
}
更新多个文件,添加新功能和修复bug 在 `CheckTest.cs` 文件中,添加了三个新的测试方法:`CheckWireErpNrTest`、`ChecImprintTest` 和 `CheckSizeTest`。 在 `AssemblyInfo.cs` 文件中,将程序集版本和文件版本从 `1.0.0.5` 更新为 `1.0.0.6`。 在 `StuffTest.cs` 文件中,添加了一个新的断言 `Assert.IsTrue(result.Where(it => it.Imprint == "EC5L3").First().WireColor == "BK");`。 在 `LectotypeWindow.xaml` 文件中,添加了一个新的 `Window` 定义,包括资源字典、按钮和 `TabControl` 控件。 在 `LectotypeWindow.xaml.cs` 文件中,添加了 `LectotypeWindow` 类的定义和相关的事件处理方法。 在 `MainWindow.xaml` 文件中,移除了旧的样式定义,添加了新的资源字典引用,并更新了 `GroupBox` 为 `hc:Card` 控件,调整了按钮样式和 `DataGrid` 的样式。 在 `MainWindow.xaml` 文件中,更新了 `DataGrid` 的 `RowStyle` 和 `CellStyle`,并添加了新的触发器和样式设置。 在 `MainWindow.xaml` 文件中,更新了检查配置项的布局,使用 `hc:Card` 控件替换了 `GroupBox`,并调整了文本块的样式和布局。 在 `MainWindow.xaml.cs` 文件中: * 在 `MainWindow` 类中添加了对 `model.IsError` 的检查,如果为 `true`,则将 `model.IsIgnore` 设置为 `true`。 * 在 `Copy_Click` 方法中添加了 `try-catch` 块来捕获异常,并在捕获到异常时显示错误消息。 * 在 `GoToSource_Click` 方法中添加了 `try-catch` 块来捕获异常,并在捕获到异常时显示错误消息。 * 将 `Array.Empty<object>()` 替换为 `[]`。 在 `CheckedModel.cs` 文件中: * 注释掉了 `SetProperty` 方法中对 `Equals` 方法的检查。 在 `LectotypeModel.cs` 文件中: * 新增了 `LectotypeModel` 类,包含多个属性和相应的 `OnPropertyChanged` 调用。 在 `LineSegmentModel.cs` 文件中: * 新增了 `LineSegmentModel` 类,包含 `LineAxisNo`、`LineType` 和 `LineParagraph` 属性。 在 `AssemblyInfo.cs` 文件中: * 更新了程序集版本号,从 `1.0.0.5` 更新到 `1.0.0.6`。 在 `Sinvo.EplanHpD.Plugin.WPFUI.csproj` 文件中: * 添加了对 `EPLAN.Harness.MathLib` 的引用。 * 添加了 `LectotypeWindow.xaml` 和 `TestWindow.xaml` 及其对应的代码文件。 * 添加了 `HandyControl` 包的引用。 在 `TestWindow.xaml` 文件中: * 新增了 `TestWindow` 窗口的 XAML 定义,包含一个 `DataGrid` 控件。 在 `TestWindow.xaml.cs` 文件中: * 新增了 `TestWindow` 类,包含加载数据的方法。 在 `ExcelHelper.cs` 文件中: * 修改了 `GetWireTerminalMappingTable` 方法,使其在 `Prefix` 为 `null` 时也能匹配。 * 新增了 `GetWireInfo` 方法,用于获取线材信息。 在 `LectotypeViewModel.cs` 文件中: * 新增了 `LectotypeViewModel` 类,包含加载数据的方法和多个辅助方法。 在 `MainViewModel.Check.cs` 文件中: * 在 `ValidateItem` 方法中添加了对 `CheckWireErpNr` 方法的调用。 * 新增了 `CheckWireErpNr` 方法,用于检查线材料号。 * 在 `CheckNumberTube` 方法中添加了对 `item.Imprint` 是否为空的检查。 将 `data.AsParallel().WithDegreeOfParallelism(8).ForAll(entry =>` 修改为 `data.Where(it => it.OrigOcc == "OccWire" && !(it?.Properties["WireName"]?.GetDisplayValue()?.StartsWith("导线") ?? false)).AsParallel().WithDegreeOfParallelism(1).ForAll(entry =>`,以过滤出 `OrigOcc` 为 "OccWire" 且 `WireName` 不以 "导线" 开头的数据,并将并行度设置为 1。 将 `data.FrontTerminalModel = item.ConnectorFrom.Contains(":") ? item.ConnectorFrom.Split(':')[0] : item.ConnectorFrom;` 修改为 `data.FrontTerminalModel = item.ConnectorFrom?.Contains(":") ?? false ? item.ConnectorFrom.Split(':')[0] : item.ConnectorFrom ?? "";`,以处理 `ConnectorFrom` 可能为 null 的情况。 将 `data.RearTerminalModel = item.ConnectorTo.Contains(":") ? item.ConnectorTo.Split(':')[0] : item.ConnectorTo;` 修改为 `data.RearTerminalModel = item.ConnectorTo?.Contains(":") ?? false ? item.ConnectorTo.Split(':')[0] : item.ConnectorTo ?? "";`,以处理 `ConnectorTo` 可能为 null 的情况。 删除了 `if (insulationModels.Any()) { data.Insulation = insulationModels.First(); }` 语句块,简化了代码逻辑。 更新了 `GetWireColorCode` 方法中的注释,将原来的注释替换为更简洁的版本。
2024-11-07 12:14:44 +08:00
public void CheckWireErpNr(StuffedDataModel item)
{
var wireInfos = ExcelHelper.GetWireInfo(item.WireModel);
if (wireInfos != null && wireInfos.Count() == 1)
{
var wireInfo = wireInfos.First();
if (wireInfo != null)
{
if (wireInfo.WireMaterialCode != item.WireCode)
{
SetItemError(item, "线材料号错误!\r\n");
}
}
}
else if (wireInfos.Count() > 1)
{
SetItemError(item, "该型号线材存在重复编码!\r\n");
}
else
{
SetItemError(item, "该型号线材不存在配对表中!\r\n");
}
}
private void CheckNumberTube(StuffedDataModel item)
{
if (string.IsNullOrEmpty(item.NumberTubeSpec))
{
SetItemError(item, "未匹配到正确的号码管!\r\n");
}
}
2024-10-24 18:01:26 +08:00
private void CheckRequiredFields(StuffedDataModel item)
{
if (string.IsNullOrEmpty(item.RearTerminalMaterialCode))
{
SetItemError(item, "后端子物料编码为空\r\n");
}
if (string.IsNullOrEmpty(item.FrontTerminalMaterialCode))
{
SetItemError(item, "前端子物料编码为空\r\n");
}
if (string.IsNullOrEmpty(item.WireColor))
{
SetItemError(item, "线色不符合规范\r\n");
}
if (string.IsNullOrEmpty(item.WireCode))
{
SetItemError(item, "线材编码为空\r\n");
}
更新多个文件,添加新功能和修复bug 在 `CheckTest.cs` 文件中,添加了三个新的测试方法:`CheckWireErpNrTest`、`ChecImprintTest` 和 `CheckSizeTest`。 在 `AssemblyInfo.cs` 文件中,将程序集版本和文件版本从 `1.0.0.5` 更新为 `1.0.0.6`。 在 `StuffTest.cs` 文件中,添加了一个新的断言 `Assert.IsTrue(result.Where(it => it.Imprint == "EC5L3").First().WireColor == "BK");`。 在 `LectotypeWindow.xaml` 文件中,添加了一个新的 `Window` 定义,包括资源字典、按钮和 `TabControl` 控件。 在 `LectotypeWindow.xaml.cs` 文件中,添加了 `LectotypeWindow` 类的定义和相关的事件处理方法。 在 `MainWindow.xaml` 文件中,移除了旧的样式定义,添加了新的资源字典引用,并更新了 `GroupBox` 为 `hc:Card` 控件,调整了按钮样式和 `DataGrid` 的样式。 在 `MainWindow.xaml` 文件中,更新了 `DataGrid` 的 `RowStyle` 和 `CellStyle`,并添加了新的触发器和样式设置。 在 `MainWindow.xaml` 文件中,更新了检查配置项的布局,使用 `hc:Card` 控件替换了 `GroupBox`,并调整了文本块的样式和布局。 在 `MainWindow.xaml.cs` 文件中: * 在 `MainWindow` 类中添加了对 `model.IsError` 的检查,如果为 `true`,则将 `model.IsIgnore` 设置为 `true`。 * 在 `Copy_Click` 方法中添加了 `try-catch` 块来捕获异常,并在捕获到异常时显示错误消息。 * 在 `GoToSource_Click` 方法中添加了 `try-catch` 块来捕获异常,并在捕获到异常时显示错误消息。 * 将 `Array.Empty<object>()` 替换为 `[]`。 在 `CheckedModel.cs` 文件中: * 注释掉了 `SetProperty` 方法中对 `Equals` 方法的检查。 在 `LectotypeModel.cs` 文件中: * 新增了 `LectotypeModel` 类,包含多个属性和相应的 `OnPropertyChanged` 调用。 在 `LineSegmentModel.cs` 文件中: * 新增了 `LineSegmentModel` 类,包含 `LineAxisNo`、`LineType` 和 `LineParagraph` 属性。 在 `AssemblyInfo.cs` 文件中: * 更新了程序集版本号,从 `1.0.0.5` 更新到 `1.0.0.6`。 在 `Sinvo.EplanHpD.Plugin.WPFUI.csproj` 文件中: * 添加了对 `EPLAN.Harness.MathLib` 的引用。 * 添加了 `LectotypeWindow.xaml` 和 `TestWindow.xaml` 及其对应的代码文件。 * 添加了 `HandyControl` 包的引用。 在 `TestWindow.xaml` 文件中: * 新增了 `TestWindow` 窗口的 XAML 定义,包含一个 `DataGrid` 控件。 在 `TestWindow.xaml.cs` 文件中: * 新增了 `TestWindow` 类,包含加载数据的方法。 在 `ExcelHelper.cs` 文件中: * 修改了 `GetWireTerminalMappingTable` 方法,使其在 `Prefix` 为 `null` 时也能匹配。 * 新增了 `GetWireInfo` 方法,用于获取线材信息。 在 `LectotypeViewModel.cs` 文件中: * 新增了 `LectotypeViewModel` 类,包含加载数据的方法和多个辅助方法。 在 `MainViewModel.Check.cs` 文件中: * 在 `ValidateItem` 方法中添加了对 `CheckWireErpNr` 方法的调用。 * 新增了 `CheckWireErpNr` 方法,用于检查线材料号。 * 在 `CheckNumberTube` 方法中添加了对 `item.Imprint` 是否为空的检查。 将 `data.AsParallel().WithDegreeOfParallelism(8).ForAll(entry =>` 修改为 `data.Where(it => it.OrigOcc == "OccWire" && !(it?.Properties["WireName"]?.GetDisplayValue()?.StartsWith("导线") ?? false)).AsParallel().WithDegreeOfParallelism(1).ForAll(entry =>`,以过滤出 `OrigOcc` 为 "OccWire" 且 `WireName` 不以 "导线" 开头的数据,并将并行度设置为 1。 将 `data.FrontTerminalModel = item.ConnectorFrom.Contains(":") ? item.ConnectorFrom.Split(':')[0] : item.ConnectorFrom;` 修改为 `data.FrontTerminalModel = item.ConnectorFrom?.Contains(":") ?? false ? item.ConnectorFrom.Split(':')[0] : item.ConnectorFrom ?? "";`,以处理 `ConnectorFrom` 可能为 null 的情况。 将 `data.RearTerminalModel = item.ConnectorTo.Contains(":") ? item.ConnectorTo.Split(':')[0] : item.ConnectorTo;` 修改为 `data.RearTerminalModel = item.ConnectorTo?.Contains(":") ?? false ? item.ConnectorTo.Split(':')[0] : item.ConnectorTo ?? "";`,以处理 `ConnectorTo` 可能为 null 的情况。 删除了 `if (insulationModels.Any()) { data.Insulation = insulationModels.First(); }` 语句块,简化了代码逻辑。 更新了 `GetWireColorCode` 方法中的注释,将原来的注释替换为更简洁的版本。
2024-11-07 12:14:44 +08:00
if (string.IsNullOrEmpty(item.Imprint))
{
SetItemError(item, "印记(线号)内容为空\r\n");
}
2024-10-24 18:01:26 +08:00
}
private void CheckCeCompliance(StuffedDataModel item)
{
if (item.WireModel.IndexOf("-CE", StringComparison.OrdinalIgnoreCase) < 0)
{
SetItemError(item, "未使用CE认证物料\r\n");
}
if (item.FrontTerminalModel.IndexOf("-CE", StringComparison.OrdinalIgnoreCase) < 0)
{
SetItemError(item, "前端子未使用CE认证端子\r\n");
}
if (item.RearTerminalModel.IndexOf("-CE", StringComparison.OrdinalIgnoreCase) < 0)
{
SetItemError(item, "后端子未使用CE认证端子\r\n");
}
}
2024-10-28 14:29:56 +08:00
public void CheckInsulation(StuffedDataModel item)
2024-10-24 18:01:26 +08:00
{
if (item.Insulation != null && item.Insulation.Specification != null)
{
var match = Consts.regex.Match(item.WireModel);
if (!string.IsNullOrEmpty(match?.Value) && match != null)
2024-10-24 18:01:26 +08:00
{
var itemWireDiameter = double.Parse(match.Value.Replace("RV", ""));
var insMatch = Consts.dRegex.Match(item.Insulation.Specification);
if (!string.IsNullOrEmpty(insMatch.Value))
{
if (itemWireDiameter < 1.5d)
{
if (insMatch.Value != "V-1.5")
2024-10-24 18:01:26 +08:00
{
SetItemError(item, "变色套(绝缘软套)大小与线径不匹配!");
2024-10-24 18:01:26 +08:00
}
}
else
{
var insDiameter = double.Parse(insMatch.Value.Replace("V-", ""));
if (Math.Abs(insDiameter - itemWireDiameter) > 0)
{
SetItemError(item, "变色套(绝缘软套)大小与线径不匹配!");
2024-10-24 18:01:26 +08:00
}
}
}
else
{
SetItemError(item, "变色套(绝缘软套)未匹配到大小!");
2024-10-24 18:01:26 +08:00
}
}
else
{
SetItemError(item, "未匹配到线材大小!");
2024-10-24 18:01:26 +08:00
}
}
}
2024-10-26 13:59:13 +08:00
/// <summary>
/// 检查引用的端子
/// </summary>
/// <param name="item"></param>
public void CheckTerminals(StuffedDataModel item)
2024-10-24 18:01:26 +08:00
{
改进电缆数据处理和检查逻辑,更新版本号 在 `CheckTest.cs` 文件中,添加了多个测试方法,包括 `DPETerminalCheckTest`、`DPETerminalCrossSectionCheckTest` 和 `TerminalCheckTest`,用于检查不同端子的测试逻辑。 在 `AssemblyInfo.cs` 文件中,更新了程序集版本号和文件版本号。 在 `StuffTest.cs` 文件中,注释掉了一些断言语句,并添加了一个新的测试方法 `StuffedNameTubeTest`,用于测试号码管处理逻辑。 在 `LectotypeWindow.xaml` 文件中,添加了 `util` 命名空间引用,并定义了多个 `ControlTemplate` 模板和一个 `LectotypeLengthDataTemplateSelector` 模板选择器,用于根据线材类型选择不同的显示模板。同时,将 `DataGrid` 控件替换为 `ListView` 控件,并添加了上下文菜单和样式触发器。 在 `LectotypeWindow.xaml.cs` 文件中,添加了 `ToSourceMenuItem_Click` 方法,用于处理上下文菜单项的点击事件。 在 `MainWindow.xaml.cs` 文件中,重构了 `AddToDesignerSelectSet` 方法,添加了异常处理逻辑。 在 `Sinvo.EplanHpD.Plugin.WPFUI.csproj` 文件中,添加了 `LectotypeLengthDataTemplateSelector.cs` 文件的编译项。 在 `ExcelHelper.cs` 文件中,修改了 `GetWireTerminalMappingTable` 方法的过滤逻辑。 新增了 `LectotypeLengthDataTemplateSelector.cs` 文件,定义了 `LectotypeLengthDataTemplateSelector` 类,用于根据线材类型选择不同的数据模板。 在 `LectotypeViewModel.cs` 文件中: * 添加了对 `EPLAN.Harness.ProjectCore.Occurrences` 命名空间的引用。 * 添加了 `StuffedWires` 属性及其对应的私有字段 `_stuffedWires`。 * 在 `LoadData` 方法中,添加了对 `StuffData` 方法的调用,并将结果赋值给 `Wires`。 * 添加了 `StuffData` 方法,用于整理和合并电缆数据。 * 在 `ToSource` 方法中,添加了根据电缆名称获取设计器并设置可见性的逻辑。 * 修改了 `CableType` 的默认值从 "位置类型" 改为 "未知类型"。 在 `MainViewModel.Check.cs` 文件中: * 添加了 `CheckDPETerminals` 方法,用于检查地排端子。 * 修改了 `CheckTerminals` 方法,移除了对 `D-PE` 前缀的特殊处理逻辑。 * 修改了 `GetD_PECanUsedTerminal` 方法,注释掉了获取不包含前缀的端子的逻辑。 在 `DesignPluginEntry.cs` 文件中: * 注释掉了 `DesignPluginEntry` 类实现的 `IHpDPlugin` 接口。 在 `AssemblyInfo.cs` 文件中: * 更新了程序集版本号,从 `1.0.0.6` 更新到 `1.0.0.14`。
2024-11-08 08:34:20 +08:00
var canUsedTerminals = GetCanUsedTerminal(item.WireModel);
2024-10-24 18:01:26 +08:00
if (canUsedTerminals != null && canUsedTerminals.Any())
{
var terminals = canUsedTerminals.Where(it => !string.IsNullOrEmpty(it.TerminalSpec) && !string.IsNullOrEmpty(it.TerminalMaterialCode));
if (terminals.All(it => it.TerminalSpec != item.FrontTerminalModel))
2024-10-24 18:01:26 +08:00
{
SetItemError(item, "前端子不在可选列表中!\r\n");
}
if (terminals.All(it => it.TerminalMaterialCode != item.FrontTerminalMaterialCode))
{
SetItemError(item, "前端子料号不正确,不在可选列表中!\r\n");
}
if (terminals.All(it => it.TerminalSpec != item.RearTerminalModel))
2024-10-24 18:01:26 +08:00
{
SetItemError(item, "后端子不在可选列表中!\r\n");
}
if (terminals.All(it => it.TerminalMaterialCode != item.RearTerminalMaterialCode))
{
SetItemError(item, "后端子料号不正确,不在可选列表中!\r\n");
}
2024-10-24 18:01:26 +08:00
}
else if (!string.IsNullOrEmpty(item.FrontTerminalModel) || !string.IsNullOrEmpty(item.RearTerminalModel))
{
SetItemError(item, "该型号无可用端子!\r\n");
}
}
private void CheckDuplicateModel(StuffedDataModel item)
{
if (StuffedData?.Count(it => it != null && it.Model == item.Model) > 1)
2024-10-24 18:01:26 +08:00
{
if (string.IsNullOrEmpty(item.WireLength))
{
SetItemError(item, $"线长度获取异常!\r\n");
}
else
{
var newModel = $"RV-{item.WireColor}-1x{item.CrossSection}-{item.WireLength + 5}-16×N2-{item.WireNumber}";
if (StuffedData.Any(it => it.Model == newModel))
{
2024-10-28 14:29:56 +08:00
var newModel2 = $"RV-{item.WireColor}-1x{item.CrossSection}-{item.WireLength + 10}-16×N2-{item.WireNumber}";
if (StuffedData.Any(it => it.Model == newModel2))
SetItemError(item, $"{item.Model} 该型号存在重复!\r\n");
else
{
item.WireLength += 10;
item.Model = newModel2;
}
}
else
{
item.WireLength += 5;
item.Model = newModel;
}
}
2024-10-24 18:01:26 +08:00
}
}
private void SetItemError(StuffedDataModel item, string errorMsg)
{
item.IsError = true;
item.ErrorCount += 1;
item.CheckedMsg += errorMsg;
}
private List<TerminalModel> GetCanUsedTerminal(string wireModel)
2024-10-24 18:01:26 +08:00
{
var result = ExcelHelper.GetWireTerminalMappingTable(wireModel);
var terminals = new List<TerminalModel>();
2024-10-24 18:01:26 +08:00
var excelModels = result as ExcelModel[] ?? result.ToArray();
if (!excelModels.Any()) return terminals;
foreach (var item in excelModels)
{
2024-10-25 08:37:28 +08:00
if (!string.IsNullOrEmpty(item.ForkTerminal))
terminals.Add(new TerminalModel
{
TerminalMaterialCode = item.ForkTerminalMaterialCode,
TerminalSpec = item.ForkTerminal
});
2024-10-24 18:01:26 +08:00
if (!string.IsNullOrEmpty(item.FlatTerminal))
terminals.Add(new TerminalModel
{
TerminalMaterialCode = item.FlatTerminalMaterialCode,
TerminalSpec = item.FlatTerminal
});
2024-10-24 18:01:26 +08:00
if (!string.IsNullOrEmpty(item.PinTerminal))
terminals.Add(new TerminalModel
{
TerminalMaterialCode = item.PinTerminalMaterialCode,
TerminalSpec = item.PinTerminal
});
2024-10-24 18:01:26 +08:00
if (!string.IsNullOrEmpty(item.OTypeTerminal))
terminals.Add(new TerminalModel
{
TerminalMaterialCode = item.OTypeTerminalMaterialCode,
TerminalSpec = item.OTypeTerminal
});
2024-10-26 13:59:13 +08:00
if (!string.IsNullOrEmpty(item.YTypeTerminal))
terminals.Add(new TerminalModel
{
TerminalMaterialCode = item.YTypeTerminalMaterialCode,
TerminalSpec = item.YTypeTerminal
});
2024-10-26 13:59:13 +08:00
}
return terminals;
}
/// <summary>
/// 检查地线可以用的端子
/// </summary>
/// <param name="wireModel"></param>
/// <returns></returns>
private List<TerminalModel> GetD_PECanUsedTerminal(string wireModel)
2024-10-26 13:59:13 +08:00
{
// 获取D-PE前缀的可用端子
var resultWithPrefix = ExcelHelper.GetWireTerminalMappingTable(wireModel, "D-PE");
// 获取不包含前缀的端子
改进电缆数据处理和检查逻辑,更新版本号 在 `CheckTest.cs` 文件中,添加了多个测试方法,包括 `DPETerminalCheckTest`、`DPETerminalCrossSectionCheckTest` 和 `TerminalCheckTest`,用于检查不同端子的测试逻辑。 在 `AssemblyInfo.cs` 文件中,更新了程序集版本号和文件版本号。 在 `StuffTest.cs` 文件中,注释掉了一些断言语句,并添加了一个新的测试方法 `StuffedNameTubeTest`,用于测试号码管处理逻辑。 在 `LectotypeWindow.xaml` 文件中,添加了 `util` 命名空间引用,并定义了多个 `ControlTemplate` 模板和一个 `LectotypeLengthDataTemplateSelector` 模板选择器,用于根据线材类型选择不同的显示模板。同时,将 `DataGrid` 控件替换为 `ListView` 控件,并添加了上下文菜单和样式触发器。 在 `LectotypeWindow.xaml.cs` 文件中,添加了 `ToSourceMenuItem_Click` 方法,用于处理上下文菜单项的点击事件。 在 `MainWindow.xaml.cs` 文件中,重构了 `AddToDesignerSelectSet` 方法,添加了异常处理逻辑。 在 `Sinvo.EplanHpD.Plugin.WPFUI.csproj` 文件中,添加了 `LectotypeLengthDataTemplateSelector.cs` 文件的编译项。 在 `ExcelHelper.cs` 文件中,修改了 `GetWireTerminalMappingTable` 方法的过滤逻辑。 新增了 `LectotypeLengthDataTemplateSelector.cs` 文件,定义了 `LectotypeLengthDataTemplateSelector` 类,用于根据线材类型选择不同的数据模板。 在 `LectotypeViewModel.cs` 文件中: * 添加了对 `EPLAN.Harness.ProjectCore.Occurrences` 命名空间的引用。 * 添加了 `StuffedWires` 属性及其对应的私有字段 `_stuffedWires`。 * 在 `LoadData` 方法中,添加了对 `StuffData` 方法的调用,并将结果赋值给 `Wires`。 * 添加了 `StuffData` 方法,用于整理和合并电缆数据。 * 在 `ToSource` 方法中,添加了根据电缆名称获取设计器并设置可见性的逻辑。 * 修改了 `CableType` 的默认值从 "位置类型" 改为 "未知类型"。 在 `MainViewModel.Check.cs` 文件中: * 添加了 `CheckDPETerminals` 方法,用于检查地排端子。 * 修改了 `CheckTerminals` 方法,移除了对 `D-PE` 前缀的特殊处理逻辑。 * 修改了 `GetD_PECanUsedTerminal` 方法,注释掉了获取不包含前缀的端子的逻辑。 在 `DesignPluginEntry.cs` 文件中: * 注释掉了 `DesignPluginEntry` 类实现的 `IHpDPlugin` 接口。 在 `AssemblyInfo.cs` 文件中: * 更新了程序集版本号,从 `1.0.0.6` 更新到 `1.0.0.14`。
2024-11-08 08:34:20 +08:00
//var resultWithoutPrefix = ExcelHelper.GetWireTerminalMappingTable(wireModel);
var terminals = new List<TerminalModel>();
2024-10-26 13:59:13 +08:00
// 转换
var withPrefixExcelModels = resultWithPrefix as List<ExcelModel> ?? resultWithPrefix.ToList();
改进电缆数据处理和检查逻辑,更新版本号 在 `CheckTest.cs` 文件中,添加了多个测试方法,包括 `DPETerminalCheckTest`、`DPETerminalCrossSectionCheckTest` 和 `TerminalCheckTest`,用于检查不同端子的测试逻辑。 在 `AssemblyInfo.cs` 文件中,更新了程序集版本号和文件版本号。 在 `StuffTest.cs` 文件中,注释掉了一些断言语句,并添加了一个新的测试方法 `StuffedNameTubeTest`,用于测试号码管处理逻辑。 在 `LectotypeWindow.xaml` 文件中,添加了 `util` 命名空间引用,并定义了多个 `ControlTemplate` 模板和一个 `LectotypeLengthDataTemplateSelector` 模板选择器,用于根据线材类型选择不同的显示模板。同时,将 `DataGrid` 控件替换为 `ListView` 控件,并添加了上下文菜单和样式触发器。 在 `LectotypeWindow.xaml.cs` 文件中,添加了 `ToSourceMenuItem_Click` 方法,用于处理上下文菜单项的点击事件。 在 `MainWindow.xaml.cs` 文件中,重构了 `AddToDesignerSelectSet` 方法,添加了异常处理逻辑。 在 `Sinvo.EplanHpD.Plugin.WPFUI.csproj` 文件中,添加了 `LectotypeLengthDataTemplateSelector.cs` 文件的编译项。 在 `ExcelHelper.cs` 文件中,修改了 `GetWireTerminalMappingTable` 方法的过滤逻辑。 新增了 `LectotypeLengthDataTemplateSelector.cs` 文件,定义了 `LectotypeLengthDataTemplateSelector` 类,用于根据线材类型选择不同的数据模板。 在 `LectotypeViewModel.cs` 文件中: * 添加了对 `EPLAN.Harness.ProjectCore.Occurrences` 命名空间的引用。 * 添加了 `StuffedWires` 属性及其对应的私有字段 `_stuffedWires`。 * 在 `LoadData` 方法中,添加了对 `StuffData` 方法的调用,并将结果赋值给 `Wires`。 * 添加了 `StuffData` 方法,用于整理和合并电缆数据。 * 在 `ToSource` 方法中,添加了根据电缆名称获取设计器并设置可见性的逻辑。 * 修改了 `CableType` 的默认值从 "位置类型" 改为 "未知类型"。 在 `MainViewModel.Check.cs` 文件中: * 添加了 `CheckDPETerminals` 方法,用于检查地排端子。 * 修改了 `CheckTerminals` 方法,移除了对 `D-PE` 前缀的特殊处理逻辑。 * 修改了 `GetD_PECanUsedTerminal` 方法,注释掉了获取不包含前缀的端子的逻辑。 在 `DesignPluginEntry.cs` 文件中: * 注释掉了 `DesignPluginEntry` 类实现的 `IHpDPlugin` 接口。 在 `AssemblyInfo.cs` 文件中: * 更新了程序集版本号,从 `1.0.0.6` 更新到 `1.0.0.14`。
2024-11-08 08:34:20 +08:00
List<ExcelModel> withoutPrefixExcelModels = [];//resultWithoutPrefix as List<ExcelModel> ?? resultWithoutPrefix.ToList();
2024-10-26 13:59:13 +08:00
// 合并
var excelModels = withPrefixExcelModels.Concat(withoutPrefixExcelModels);
if (!excelModels.Any()) return terminals;
foreach (var item in excelModels)
{
if (!string.IsNullOrEmpty(item.ForkTerminal))
terminals.Add(new TerminalModel
{
TerminalMaterialCode = item.ForkTerminalMaterialCode,
TerminalSpec = item.ForkTerminal
});
2024-10-26 13:59:13 +08:00
if (!string.IsNullOrEmpty(item.FlatTerminal))
terminals.Add(new TerminalModel
{
TerminalMaterialCode = item.FlatTerminalMaterialCode,
TerminalSpec = item.FlatTerminal
});
2024-10-26 13:59:13 +08:00
if (!string.IsNullOrEmpty(item.PinTerminal))
terminals.Add(new TerminalModel
{
TerminalMaterialCode = item.PinTerminalMaterialCode,
TerminalSpec = item.PinTerminal
});
2024-10-26 13:59:13 +08:00
if (!string.IsNullOrEmpty(item.OTypeTerminal))
terminals.Add(new TerminalModel
{
TerminalMaterialCode = item.OTypeTerminalMaterialCode,
TerminalSpec = item.OTypeTerminal
});
2024-10-24 18:01:26 +08:00
if (!string.IsNullOrEmpty(item.YTypeTerminal))
terminals.Add(new TerminalModel
{
TerminalMaterialCode = item.YTypeTerminalMaterialCode,
TerminalSpec = item.YTypeTerminal
});
2024-10-24 18:01:26 +08:00
}
return terminals;
}
private void CheckImprint(StuffedDataModel item)
{
var imprintConditions = new List<(string Prefix, WireFlagType? FlagType, string Color)>
{
("L1", WireFlagType.Dual, "褐色"),
("R", WireFlagType.Single, "褐色"),
("L1", WireFlagType.Mix, "褐色"),
("R", WireFlagType.Mix, "褐色"),
2024-10-25 08:37:28 +08:00
2024-10-24 18:01:26 +08:00
("L2", WireFlagType.Dual, "黑色"),
("S", WireFlagType.Single, "黑色"),
("L2", WireFlagType.Mix, "黑色"),
("S", WireFlagType.Mix, "黑色"),
2024-10-25 08:37:28 +08:00
2024-10-24 18:01:26 +08:00
("L3", WireFlagType.Dual, "灰色"),
("T", WireFlagType.Single, "灰色"),
("L3", WireFlagType.Mix, "灰色"),
("T", WireFlagType.Mix, "灰色"),
2024-10-25 08:37:28 +08:00
2024-10-24 18:01:26 +08:00
("PE", null, "绿色")
};
foreach (var condition in imprintConditions)
{
CheckImprintCondition(item, condition.Prefix, condition.FlagType, condition.Color);
}
}
private void CheckImprintCondition(StuffedDataModel item, string imprintPrefix, WireFlagType? flagType, string expectedColor)
{
if (item.Imprint.StartsWith(imprintPrefix) && (flagType == null || FlagType == flagType))
{
if (string.IsNullOrEmpty(item.DiscolorationDesc))
{
SetItemError(item, "变色管信息为空\r\n");
}
else if (!item.DiscolorationDesc.Contains(expectedColor))
{
SetItemError(item, $"变色管颜色有误,应该使用{expectedColor}\r\n");
}
}
}
}
}