|  |  |  | 
|---|
|  |  |  | "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\", | 
|---|
|  |  |  | "Documents": [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.main\\constant\\pluginconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\constant\\pluginconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\commonsettingcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\commonsettingcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\entity\\pdm\\pdmbom.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\entity\\pdm\\pdmbom.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\util\\pdm\\bomtreereader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\util\\pdm\\bomtreereader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\bominiter\\ywtbominiter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\bominiter\\ywtbominiter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{3AEC586C-B22A-4ADB-B4AB-10AA660F79EC}|Md5Reader\\Md5Reader.csproj|D:\\Workspace\\PdmSwPlugin2\\md5reader\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{3AEC586C-B22A-4ADB-B4AB-10AA660F79EC}|Md5Reader\\Md5Reader.csproj|solutionrelative:md5reader\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\maincontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\maincontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{CB3551F6-0C4A-4537-9A04-1E40CD475479}|SolidWorksListener\\SolidWorksListener.csproj|D:\\Workspace\\PdmSwPlugin2\\solidworkslistener\\listener.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{CB3551F6-0C4A-4537-9A04-1E40CD475479}|SolidWorksListener\\SolidWorksListener.csproj|solutionrelative:solidworkslistener\\listener.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|D:\\Workspace\\PdmSwPlugin2\\wpfui\\asyncattacher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|solutionrelative:wpfui\\asyncattacher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|solutionrelative:pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}" | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ], | 
|---|
|  |  |  | "DocumentGroupContainers": [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "Orientation": 0, | 
|---|
|  |  |  | "Orientation": 1, | 
|---|
|  |  |  | "VerticalTabListWidth": 256, | 
|---|
|  |  |  | "DocumentGroups": [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "DockedWidth": 200, | 
|---|
|  |  |  | "SelectedChildIndex": 4, | 
|---|
|  |  |  | "DockedHeight": 530, | 
|---|
|  |  |  | "SelectedChildIndex": 1, | 
|---|
|  |  |  | "Children": [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 5, | 
|---|
|  |  |  | "Title": "YwtBomIniter.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\BomIniter\\YwtBomIniter.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.Common\\BomIniter\\YwtBomIniter.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\BomIniter\\YwtBomIniter.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.Common\\BomIniter\\YwtBomIniter.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAEEAAAAAAAAAAAAUwBIAAAAXAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-31T09:13:45.395Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 3, | 
|---|
|  |  |  | "Title": "PdmControl.xaml", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-31T09:12:36.773Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 1, | 
|---|
|  |  |  | "Title": "PdmControl.xaml.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml.cs", | 
|---|
|  |  |  | "ViewState": "AgIAALUEAAAAAAAAAAAuwMUEAABAAAAAAAAAAA==", | 
|---|
|  |  |  | "Title": "CommonSettingControl.xaml.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAAoBAAAAAAAAAAD4vx0BAAAgAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-31T08:50:14.505Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 4, | 
|---|
|  |  |  | "Title": "BomTreeReader.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAPsAAAAAAAAAAAAUwBABAAAgAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-31T08:33:38.547Z" | 
|---|
|  |  |  | "WhenOpened": "2025-01-02T06:15:07.965Z", | 
|---|
|  |  |  | "EditorCaption": "" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 0, | 
|---|
|  |  |  | "Title": "PluginConst.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\Constant\\PluginConst.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.Main\\Constant\\PluginConst.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\Constant\\PluginConst.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.Main\\Constant\\PluginConst.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==", | 
|---|
|  |  |  | "Title": "JgjPartPanel.xaml.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAF4BAAAAAAAAAAAQwIABAABGAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-14T04:01:41.756Z", | 
|---|
|  |  |  | "WhenOpened": "2025-01-02T06:10:11.494Z", | 
|---|
|  |  |  | "EditorCaption": "" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 2, | 
|---|
|  |  |  | "Title": "PdmBom.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Entity\\Pdm\\PdmBom.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Entity\\Pdm\\PdmBom.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Entity\\Pdm\\PdmBom.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.Common\\Entity\\Pdm\\PdmBom.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAIgAAAAAAAAAAAA+wJYAAAAdAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-31T08:32:38.632Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 6, | 
|---|
|  |  |  | "Title": "MainWindow.xaml.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\Md5Reader\\MainWindow.xaml.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "Md5Reader\\MainWindow.xaml.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\Md5Reader\\MainWindow.xaml.cs", | 
|---|
|  |  |  | "RelativeToolTip": "Md5Reader\\MainWindow.xaml.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAABDAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-30T02:39:22.183Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 7, | 
|---|
|  |  |  | "Title": "MainControl.xaml.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.Main\\MainControl.xaml.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.Main\\MainControl.xaml.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAMAAAAAAAAAAAAAYwMoAAAAAAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-14T04:24:56.766Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 8, | 
|---|
|  |  |  | "Title": "Listener.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\SolidWorksListener\\Listener.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "SolidWorksListener\\Listener.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\SolidWorksListener\\Listener.cs", | 
|---|
|  |  |  | "RelativeToolTip": "SolidWorksListener\\Listener.cs", | 
|---|
|  |  |  | "ViewState": "AgIAANAAAAAAAAAAAADwv90AAAAiAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-14T03:42:50.289Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 9, | 
|---|
|  |  |  | "Title": "AsyncAttacher.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\AsyncAttacher.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "WpfUI\\AsyncAttacher.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\AsyncAttacher.cs", | 
|---|
|  |  |  | "RelativeToolTip": "WpfUI\\AsyncAttacher.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAJAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-14T03:36:12.415Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 10, | 
|---|
|  |  |  | "Title": "SwAddin.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSw\\SwAddin.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSw\\SwAddin.cs", | 
|---|
|  |  |  | "ViewState": "AgIAABMBAAAAAAAAAAAkwCYBAAAkAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-14T01:09:55.509Z" | 
|---|
|  |  |  | "Title": "JgjPartPanel.xaml", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|", | 
|---|
|  |  |  | "WhenOpened": "2025-01-02T06:07:52.955Z", | 
|---|
|  |  |  | "EditorCaption": "" | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\", | 
|---|
|  |  |  | "Documents": [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.main\\constant\\pluginconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\constant\\pluginconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\commonsettingcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\commonsettingcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\entity\\pdm\\pdmbom.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\entity\\pdm\\pdmbom.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\util\\pdm\\bomtreereader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\util\\pdm\\bomtreereader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\bominiter\\ywtbominiter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\bominiter\\ywtbominiter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{3AEC586C-B22A-4ADB-B4AB-10AA660F79EC}|Md5Reader\\Md5Reader.csproj|D:\\Workspace\\PdmSwPlugin2\\md5reader\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{3AEC586C-B22A-4ADB-B4AB-10AA660F79EC}|Md5Reader\\Md5Reader.csproj|solutionrelative:md5reader\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\maincontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\maincontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{CB3551F6-0C4A-4537-9A04-1E40CD475479}|SolidWorksListener\\SolidWorksListener.csproj|D:\\Workspace\\PdmSwPlugin2\\solidworkslistener\\listener.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{CB3551F6-0C4A-4537-9A04-1E40CD475479}|SolidWorksListener\\SolidWorksListener.csproj|solutionrelative:solidworkslistener\\listener.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|D:\\Workspace\\PdmSwPlugin2\\wpfui\\asyncattacher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|solutionrelative:wpfui\\asyncattacher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|solutionrelative:pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" | 
|---|
|  |  |  | "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}", | 
|---|
|  |  |  | "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}" | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ], | 
|---|
|  |  |  | "DocumentGroupContainers": [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "Orientation": 0, | 
|---|
|  |  |  | "Orientation": 1, | 
|---|
|  |  |  | "VerticalTabListWidth": 256, | 
|---|
|  |  |  | "DocumentGroups": [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "DockedWidth": 200, | 
|---|
|  |  |  | "SelectedChildIndex": 4, | 
|---|
|  |  |  | "DockedHeight": 530, | 
|---|
|  |  |  | "SelectedChildIndex": 1, | 
|---|
|  |  |  | "Children": [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 5, | 
|---|
|  |  |  | "Title": "YwtBomIniter.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\BomIniter\\YwtBomIniter.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.Common\\BomIniter\\YwtBomIniter.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\BomIniter\\YwtBomIniter.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.Common\\BomIniter\\YwtBomIniter.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAEEAAAAAAAAAAAAUwBIAAAAXAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-31T09:13:45.395Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 3, | 
|---|
|  |  |  | "Title": "PdmControl.xaml", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-31T09:12:36.773Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 1, | 
|---|
|  |  |  | "Title": "PdmControl.xaml.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml.cs", | 
|---|
|  |  |  | "ViewState": "AgIAALUEAAAAAAAAAAAuwMUEAABAAAAAAAAAAA==", | 
|---|
|  |  |  | "Title": "CommonSettingControl.xaml.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAAoBAAAAAAAAAAD4vx0BAAAgAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-31T08:50:14.505Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 4, | 
|---|
|  |  |  | "Title": "BomTreeReader.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAPsAAAAAAAAAAAAUwBABAAAgAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-31T08:33:38.547Z" | 
|---|
|  |  |  | "WhenOpened": "2025-01-02T06:15:07.965Z", | 
|---|
|  |  |  | "EditorCaption": "" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 0, | 
|---|
|  |  |  | "Title": "PluginConst.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\Constant\\PluginConst.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.Main\\Constant\\PluginConst.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\Constant\\PluginConst.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.Main\\Constant\\PluginConst.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==", | 
|---|
|  |  |  | "Title": "JgjPartPanel.xaml.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAF4BAAAAAAAAAAAQwIABAABGAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-14T04:01:41.756Z", | 
|---|
|  |  |  | "WhenOpened": "2025-01-02T06:10:11.494Z", | 
|---|
|  |  |  | "EditorCaption": "" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 2, | 
|---|
|  |  |  | "Title": "PdmBom.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Entity\\Pdm\\PdmBom.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Entity\\Pdm\\PdmBom.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Entity\\Pdm\\PdmBom.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.Common\\Entity\\Pdm\\PdmBom.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAIgAAAAAAAAAAAA+wJYAAAAdAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-31T08:32:38.632Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 6, | 
|---|
|  |  |  | "Title": "MainWindow.xaml.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\Md5Reader\\MainWindow.xaml.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "Md5Reader\\MainWindow.xaml.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\Md5Reader\\MainWindow.xaml.cs", | 
|---|
|  |  |  | "RelativeToolTip": "Md5Reader\\MainWindow.xaml.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAABDAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-30T02:39:22.183Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 7, | 
|---|
|  |  |  | "Title": "MainControl.xaml.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.Main\\MainControl.xaml.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.Main\\MainControl.xaml.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAMAAAAAAAAAAAAAYwMoAAAAAAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-14T04:24:56.766Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 8, | 
|---|
|  |  |  | "Title": "Listener.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\SolidWorksListener\\Listener.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "SolidWorksListener\\Listener.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\SolidWorksListener\\Listener.cs", | 
|---|
|  |  |  | "RelativeToolTip": "SolidWorksListener\\Listener.cs", | 
|---|
|  |  |  | "ViewState": "AgIAANAAAAAAAAAAAADwv90AAAAiAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-14T03:42:50.289Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 9, | 
|---|
|  |  |  | "Title": "AsyncAttacher.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\AsyncAttacher.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "WpfUI\\AsyncAttacher.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\AsyncAttacher.cs", | 
|---|
|  |  |  | "RelativeToolTip": "WpfUI\\AsyncAttacher.cs", | 
|---|
|  |  |  | "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAJAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-14T03:36:12.415Z" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "$type": "Document", | 
|---|
|  |  |  | "DocumentIndex": 10, | 
|---|
|  |  |  | "Title": "SwAddin.cs", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSw\\SwAddin.cs", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSw\\SwAddin.cs", | 
|---|
|  |  |  | "ViewState": "AgIAABMBAAAAAAAAAAAkwCYBAAAkAAAAAAAAAA==", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", | 
|---|
|  |  |  | "WhenOpened": "2024-10-14T01:09:55.509Z" | 
|---|
|  |  |  | "Title": "JgjPartPanel.xaml", | 
|---|
|  |  |  | "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml", | 
|---|
|  |  |  | "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml", | 
|---|
|  |  |  | "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml", | 
|---|
|  |  |  | "RelativeToolTip": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml", | 
|---|
|  |  |  | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|", | 
|---|
|  |  |  | "WhenOpened": "2025-01-02T06:07:52.955Z", | 
|---|
|  |  |  | "EditorCaption": "" | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | ; 自动更新程序路径 | 
|---|
|  |  |  | #define AutoUpdaterDir = "D:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Release\AutoUpdater\" | 
|---|
|  |  |  | ; 版本 | 
|---|
|  |  |  | #define Version = "_0.0.0.43_改" | 
|---|
|  |  |  | #define Version = "_0.0.0.45_审核质量" | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ; 生成的Installer存放路径 | 
|---|
|  |  |  | #define OutPutDir = "Z:\Output" | 
|---|
|  |  |  | 
|---|
|  |  |  | KeyPreview = true, | 
|---|
|  |  |  | Dock = DockStyle.Fill | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | mainForm.FormClosed += MainForm_FormClosed; | 
|---|
|  |  |  | mainForm.Controls.Add(host); | 
|---|
|  |  |  | IntPtr ptr = mainForm.Handle; | 
|---|
|  |  |  | // IntPtr ptr = WindowIntPtrUtil.FindWindow(null, "Window1"); | 
|---|
|  |  |  | 
|---|
|  |  |  | mainForm.WindowState = FormWindowState.Maximized; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void MainForm_FormClosed(object sender, FormClosedEventArgs e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | /// 关闭时先执行DeActiveHandler,然后执行这个 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void LoadPlugins() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 读图,估计是panel的图标 | 
|---|
|  |  |  | 
|---|
|  |  |  | using PdmSwPlugin.Common.Setting; | 
|---|
|  |  |  | using System; | 
|---|
|  |  |  | using System.Text.RegularExpressions; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | namespace PdmSwPlugin.Common | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | string jgjNameRegx = CustomerSetting.Instance["jgjNameRegx"]; | 
|---|
|  |  |  | string standardNameRegx = CustomerSetting.Instance["standardNameRegx"]; | 
|---|
|  |  |  | string specialJgjRegx = CustomerSetting.Instance["specialJgjRegx"]; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Regex.IsMatch(childName, jgjNameRegx)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (bom._drawInfo != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | bom._drawInfo.HistoryData = NameUtil.IsHistoryDoc(childName); | 
|---|
|  |  |  | bom._drawInfo.isSpecial = Regex.IsMatch(childName, specialJgjRegx); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | string docType = bom.properties.Get("文件格式"); | 
|---|
|  |  |  | 
|---|
|  |  |  | InitializeComponent(); | 
|---|
|  |  |  | this.title = title; | 
|---|
|  |  |  | DataContext = this; | 
|---|
|  |  |  | if (hisList == null) | 
|---|
|  |  |  | if (hisList == null || hisList.Count <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | this.HisList = new ObservableCollection<DrawAuditHis>(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | set => RaiseAndSetIfChanged(ref _status, value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private bool? _inKeeDeeDb; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public bool? inKeeDeeDb | 
|---|
|  |  |  | { | 
|---|
|  |  |  | get => _inKeeDeeDb; | 
|---|
|  |  |  | set => RaiseAndSetIfChanged(ref _inKeeDeeDb, value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private string _auditId; | 
|---|
|  |  |  | public string auditId | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | public class DrawInfo : NotifyBase | 
|---|
|  |  |  | { | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// true说明没有工程图 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | public bool _noDrw = false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public bool noDrw | 
|---|
|  |  |  | { | 
|---|
|  |  |  | get => _noDrw; | 
|---|
|  |  |  | set => RaiseAndSetIfChanged(ref _noDrw, value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public bool _inKeeDeeDb = false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private bool _isSpecial; | 
|---|
|  |  |  | public bool isSpecial | 
|---|
|  |  |  | { | 
|---|
|  |  |  | get => _isSpecial; | 
|---|
|  |  |  | set => RaiseAndSetIfChanged(ref _isSpecial, value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 3Dmd5 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | public List<string> errMessages { get; set; } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public Dictionary<string, string> allProperties { get; set; } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 为True说明没有工程图 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | [Serializable] | 
|---|
|  |  |  | 
|---|
|  |  |  | set => RaiseAndSetIfChanged(ref _treeId, value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// true说明没有工程图 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | public bool noDrw => (_drawInfo?.noDrw == true); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public string id => BomInfo?.id; | 
|---|
|  |  |  | public string name => BomInfo?.name; | 
|---|
|  |  |  | public string partNo => BomInfo?.partNo; | 
|---|
|  |  |  | 
|---|
|  |  |  | public string checkUserId => BomInfo?.checkUserId; | 
|---|
|  |  |  | public string checkUserName => BomInfo?.checkUserName; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 规则检查相关字段 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 图纸审核相关字段 | 
|---|
|  |  |  | public string drawStatus => BomInfo?.status; | 
|---|
|  |  |  | public string requestUserId => BomInfo?.requestUserId; | 
|---|
|  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 图纸是否发生变更 非历史图纸看2D图MD5 历史图纸看一致性检查没通过 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | public bool localDocChanged => (!IsHistoryData && localD2Md5 != _drawInfo?.d2Md5) | 
|---|
|  |  |  | || (IsHistoryData && _drawInfo?.checkRuleResult == 2); //localD3Md5 != _drawInfo?.d3Md5; | 
|---|
|  |  |  | public bool localDocChanged | 
|---|
|  |  |  | { | 
|---|
|  |  |  | get | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //if (!IsHistoryData) return localD2Md5 != _drawInfo?.d2Md5; //(!IsHistoryData && localD2Md5 != _drawInfo?.d2Md5) | 
|---|
|  |  |  | //return (IsHistoryData && _drawInfo?.checkRuleResult == 2); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 规则检查结果 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 找不到文档的不审核 | 
|---|
|  |  |  | if (lost) return false; | 
|---|
|  |  |  | // 不在物料明细表中不审核 | 
|---|
|  |  |  | if (ExcludeFromBOM) return false; | 
|---|
|  |  |  | // 模组不审核 | 
|---|
|  |  |  | if (produceWay == "模组") return false; | 
|---|
|  |  |  | // 跳过检查的不审 | 
|---|
|  |  |  | if (skipCheck) return false; | 
|---|
|  |  |  | // 进入系统的不审核 | 
|---|
|  |  |  | if (BomInfo.inKeeDeeDb == true) return false; | 
|---|
|  |  |  | //if (_drawInfo.isSpecial) return false; | 
|---|
|  |  |  | // 待审核的不重复提交 | 
|---|
|  |  |  | if (drawStatus == "submitted" || drawStatus == "resubmitted") return false; | 
|---|
|  |  |  | if (IsHistoryData) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 历史图纸只审核一致性不通过的 和被驳回的 | 
|---|
|  |  |  | return _drawInfo.checkRuleResult == 2 || drawStatus == "rejected"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 非历史图纸只审核 允许审核的加工件 | 
|---|
|  |  |  | return produceWay == "加工件" | 
|---|
|  |  |  | && (drawStatus != "submitted" && drawStatus != "resubmitted") | 
|---|
|  |  |  | && (drawStatus != "completed" || localDocChanged); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return produceWay == "加工件" && (drawStatus != "submitted" && drawStatus != "resubmitted") | 
|---|
|  |  |  | && (drawStatus != "completed"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// 以前还要分图纸变更,现在不弄了 | 
|---|
|  |  |  | //if (IsHistoryData) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    // 历史图纸只审核一致性不通过的 和被驳回的 | 
|---|
|  |  |  | //    return _drawInfo.checkRuleResult == 2 || drawStatus == "rejected"; | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | //else | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    // 非历史图纸只审核 允许审核的加工件 | 
|---|
|  |  |  | //    return produceWay == "加工件" | 
|---|
|  |  |  | //            && (drawStatus != "submitted" && drawStatus != "resubmitted") | 
|---|
|  |  |  | //            && (drawStatus != "completed" || localDocChanged); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public string NeedStopCheckIn() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (produceWay == "模组") return null; | 
|---|
|  |  |  | if (ExcludeFromBOM) return null; | 
|---|
|  |  |  | if (skipCheck) return null; | 
|---|
|  |  |  | if (BomInfo.inKeeDeeDb == true) return null; | 
|---|
|  |  |  | if (IsHistoryData) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | bool err = false; | 
|---|
|  |  |  | string msg = $"历史图纸【{partModel}】"; | 
|---|
|  |  |  | if (localDocChanged) | 
|---|
|  |  |  | if (localDocChanged && !noDrw) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | err = true; | 
|---|
|  |  |  | msg += "变更后未重新审核;"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (drawStatus == "rejected" || drawStatus == "submitted" || drawStatus == "resubmitted") | 
|---|
|  |  |  | if ((drawStatus == "rejected" || drawStatus == "submitted" || drawStatus == "resubmitted") && BomInfo.inKeeDeeDb != true) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | err = true; | 
|---|
|  |  |  | msg += "未通过审核"; | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | err = true; | 
|---|
|  |  |  | msg += "被隐藏;"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (noDrw) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | err = true; | 
|---|
|  |  |  | msg += "未找到工程图"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return err ? msg : null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | error = true; | 
|---|
|  |  |  | msg += "被隐藏;"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (produceWay == "加工件" && drawStatus != "completed") | 
|---|
|  |  |  | if (produceWay == "加工件" && drawStatus != "completed" && BomInfo.inKeeDeeDb != true) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | error = true; | 
|---|
|  |  |  | msg += "未通过审核;"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (produceWay == "加工件" && drawStatus == "completed" && localDocChanged) | 
|---|
|  |  |  | if (produceWay == "加工件" && drawStatus == "completed" && localDocChanged && !noDrw) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | error = true; | 
|---|
|  |  |  | msg += "图纸变更后未重新审核"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (noDrw) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | error = true; | 
|---|
|  |  |  | msg += "未找到工程图"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return error ? msg : null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="doc"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public static bool ClearAllCustomProperties(ModelDoc2 doc) | 
|---|
|  |  |  | public static bool ClearAllCustomProperties(ModelDoc2 doc, out bool needSave) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | needSave = false; | 
|---|
|  |  |  | if (doc == null) return false; | 
|---|
|  |  |  | Configuration activeConfig = doc.GetActiveConfiguration() as Configuration; | 
|---|
|  |  |  | if (activeConfig == null) | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | foreach (var name in names) | 
|---|
|  |  |  | { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | cpm.Delete2(name); | 
|---|
|  |  |  | needSave = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | public class OpenDocContext | 
|---|
|  |  |  | { | 
|---|
|  |  |  | public static readonly Hashtable OpenDocs = new Hashtable(); | 
|---|
|  |  |  | public static readonly Hashtable OpenDocs = Hashtable.Synchronized(new Hashtable()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void AddDoc(ModelDoc2 doc, object handler) { | 
|---|
|  |  |  | public static void AddDoc(ModelDoc2 doc, object handler) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | OpenDocs.Add(doc, handler); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static bool IsOpenDoc(ModelDoc2 doc) { | 
|---|
|  |  |  | public static bool IsOpenDoc(ModelDoc2 doc) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return OpenDocs.ContainsKey(doc); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private int bomOrder = 0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public ConcurrentQueue<string> needSaveList { get; set; } = new ConcurrentQueue<string>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 多线程从打开的根文档中读取BOM信息 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | CustomPropertyUtil.ClearAllCustomProperties(sldDoc); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Component2 rootComponent = activeConfiguration.GetRootComponent3(false); | 
|---|
|  |  |  | string path = rootComponent.GetPathName(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CustomPropertyUtil.ClearAllCustomProperties(sldDoc, out bool needSave); | 
|---|
|  |  |  | if (needSave) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | int err = 0, warn = 0; | 
|---|
|  |  |  | if (sldDoc.Save3((int)swSaveAsOptions_e.swSaveAsOptions_AvoidRebuildOnSave, ref err, ref warn)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | needSaveList.Enqueue(path); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | needSaveList.Enqueue($"{path}自动保存失败,异常代码:{err}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BomInfo bomInfo = GetBomInfoFromDoc(rootComponent); | 
|---|
|  |  |  | PdmBom bom = ConcatCacheBom(bomInfo, 0, null, rootComponent); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Component2 childComponent = child as Component2; | 
|---|
|  |  |  | ModelDoc2 childDoc = childComponent.GetModelDoc2(); | 
|---|
|  |  |  | // 清楚格式不对的属性 | 
|---|
|  |  |  | CustomPropertyUtil.ClearAllCustomProperties(childDoc); | 
|---|
|  |  |  | string childPath = childComponent.GetPathName(); | 
|---|
|  |  |  | // 清除格式不对的属性 | 
|---|
|  |  |  | CustomPropertyUtil.ClearAllCustomProperties(childDoc, out bool needSave); | 
|---|
|  |  |  | if (needSave) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | int err = 0, warn = 0; | 
|---|
|  |  |  | if (childDoc.Save3((int)swSaveAsOptions_e.swSaveAsOptions_AvoidRebuildOnSave, ref err, ref warn)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | needSaveList.Enqueue(childPath); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | needSaveList.Enqueue($"{childPath}自动保存失败,异常代码:{err}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | PdmBom bom = null; | 
|---|
|  |  |  | if (BomInfoCache.ContainsKey(childPath)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | CacheList = new ConcurrentQueue<PdmBom>(); | 
|---|
|  |  |  | TreeList = new ConcurrentQueue<PdmBom>(); | 
|---|
|  |  |  | BomInfoCache = new ConcurrentDictionary<string, BomInfo>(); | 
|---|
|  |  |  | needSaveList = new ConcurrentQueue<string>(); | 
|---|
|  |  |  | GetBomsFromDocAsync(doc); | 
|---|
|  |  |  | return TreeList.OrderBy(e => e.name).ToList(); ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | ModelDoc2 doc = component.GetModelDoc2(); | 
|---|
|  |  |  | // 直接用文件名,以免 SolidWorks 因为有多个相同文件而把 Name2 加了 -N 的后缀名 | 
|---|
|  |  |  | string childPath = component.GetPathName(); | 
|---|
|  |  |  | string childName = Path.GetFileNameWithoutExtension(childPath); | 
|---|
|  |  |  | string childName = System.IO.Path.GetFileNameWithoutExtension(childPath); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (ModelUtil.Is_Mn(childName)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | set => RaiseAndSetIfChanged(ref _title, value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private string _header; | 
|---|
|  |  |  | public string header | 
|---|
|  |  |  | { | 
|---|
|  |  |  | get => _header; | 
|---|
|  |  |  | set => RaiseAndSetIfChanged(ref _header, value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private ObservableCollection<string> _exceptions; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public ObservableCollection<string> exceptions | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public MultiExWindow(DependencyObject parent, string title, List<string> exceptions) | 
|---|
|  |  |  | public MultiExWindow(DependencyObject parent, string title, List<string> exceptions,string header = "异常信息") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | this.title = title; | 
|---|
|  |  |  | this.header = header; | 
|---|
|  |  |  | InitializeComponent(); | 
|---|
|  |  |  | DataContext = this; | 
|---|
|  |  |  | table.Columns[0].Header = header; | 
|---|
|  |  |  | if (exceptions == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | this.exceptions = new ObservableCollection<string>(); | 
|---|
|  |  |  | 
|---|
|  |  |  | this.Error($"服务器中未找到图纸文件,路径:{filePath}"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | double[] massData = SwDMUtil.GetMassProperty(filePath, out string errMsg); | 
|---|
|  |  |  | if (massData == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | this.Error($"获取图纸一致性数据失败!{errMsg}"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | //this.Error($"获取图纸一致性数据失败!{errMsg}"); | 
|---|
|  |  |  | //return; | 
|---|
|  |  |  | throw new Exception(errMsg); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | da.fileName = Path.GetFileName(filePath); | 
|---|
|  |  |  | da.volume = NumberUtil.HandleMass(massData[3]); | 
|---|
|  |  |  | da.surfaceArea = NumberUtil.HandleMass(massData[4]); | 
|---|
|  |  |  | da.mass = NumberUtil.HandleMass(massData[5]); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Logger.Warn("Get Doc Mass Data Failed.", ex); | 
|---|
|  |  |  | da.fileName = Path.GetFileName(filePath); | 
|---|
|  |  |  | da.volume = 0; | 
|---|
|  |  |  | da.surfaceArea = 0; | 
|---|
|  |  |  | da.mass = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | da.pass = true; | 
|---|
|  |  |  | Result<object> res = Client.PostSyncAction<object>(da, "drawAudit/complete"); | 
|---|
|  |  |  | object obj = res.HandleResult(); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void OnSwActiveDocChange(ModelDoc2 oldDoc, ModelDoc2 newDoc, Component2 comp) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | long start = DateTime.Now.Millisecond; | 
|---|
|  |  |  | Logger.Debug("Find Open Doc Start..."); | 
|---|
|  |  |  | string path = newDoc.GetPathName(); | 
|---|
|  |  |  | Uri fileName; | 
|---|
|  |  |  | if (string.IsNullOrEmpty(path)) | 
|---|
|  |  |  | 
|---|
|  |  |  | var d3Path = new Uri(GetRealFilePath(e.d3RelativePath)); | 
|---|
|  |  |  | e.IsOpening = fileName == d2Path || fileName == d3Path; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Logger.Debug($"Find Open Doc {path} End {DateTime.Now.Millisecond - start}ms."); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void OnSwActiveDocSaved(ModelDoc2 doc, Component2 comp) | 
|---|
|  |  |  | 
|---|
|  |  |  | public class PluginConst | 
|---|
|  |  |  | { | 
|---|
|  |  |  | public static readonly string AppId = "DF23E96F-A469-4302-8367-7FA2F798CD09"; | 
|---|
|  |  |  | public static readonly string Version = "0.0.0.44"; | 
|---|
|  |  |  | public static readonly string Version = "0.0.0.45"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | using SolidWorks.Interop.swconst; | 
|---|
|  |  |  | using System; | 
|---|
|  |  |  | using System.Collections; | 
|---|
|  |  |  | using System.Threading.Tasks; | 
|---|
|  |  |  | using System.Windows.Controls; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | namespace PdmSwPlugin.Main.EventHandler | 
|---|
|  |  |  | { | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 事件附加器 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | public class BaseAttacher : IEventAttacher, IDocEventHandler | 
|---|
|  |  |  | { | 
|---|
|  |  |  | public static ILog Logger { get; } = LogManager.GetLogger("SwAddin"); | 
|---|
|  |  |  | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public virtual bool AttachEventHandlers() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 添加应用事件监听 | 
|---|
|  |  |  | AttachSwEvents(); | 
|---|
|  |  |  | //Listen for events on all currently open docs | 
|---|
|  |  |  | // 添加文档事件监听 | 
|---|
|  |  |  | AttachEventsToAllDocuments(); | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private bool AttachEventsToAllDocuments() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | ModelDoc2 modDoc = (ModelDoc2)SwApp.GetFirstDocument(); | 
|---|
|  |  |  | while (modDoc != null) | 
|---|
|  |  |  | //ModelDoc2 modDoc = (ModelDoc2)SwApp.GetFirstDocument(); | 
|---|
|  |  |  | //while (modDoc != null) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    if (!OpenDocContext.IsOpenDoc(modDoc)) | 
|---|
|  |  |  | //    { | 
|---|
|  |  |  | //        AttachModelDocEventHandler(modDoc); | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | //    modDoc = (ModelDoc2)modDoc.GetNext(); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// 试一下异步附加事件 | 
|---|
|  |  |  | var objs = SwApp.GetDocuments(); | 
|---|
|  |  |  | if (objs != null && objs.Length > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Task[] tasks = new Task[objs.Length]; | 
|---|
|  |  |  | for (int i = 0; i < objs.Length; i++) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var obj = objs[i]; | 
|---|
|  |  |  | if (obj is ModelDoc2 modDoc) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | tasks[i] = Task.Run(() => | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (!OpenDocContext.IsOpenDoc(modDoc)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | AttachModelDocEventHandler(modDoc); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | modDoc = (ModelDoc2)modDoc.GetNext(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Task.WaitAll(tasks); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private bool AttachEventsToAllDocuments(ModelDoc2 modDoc) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (!OpenDocContext.IsOpenDoc(modDoc)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | AttachModelDocEventHandler(modDoc); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private bool AttachEventsToAllDocuments(string fileName) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | ModelDoc2 modDoc = SwApp.GetOpenDocument(fileName); | 
|---|
|  |  |  | if (!OpenDocContext.IsOpenDoc(modDoc)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | AttachModelDocEventHandler(modDoc); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public int OnFileNew(object newDoc, int docType, string templateName) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | AttachEventsToAllDocuments(); | 
|---|
|  |  |  | AttachEventsToAllDocuments((ModelDoc2)newDoc); | 
|---|
|  |  |  | return 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | return 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public int FileOpenPostNotify(string FileName) | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// Post-notifies an application when a file has been opened. | 
|---|
|  |  |  | /// 在打开文件时 Post-通知应用程序。 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="FileName"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public int FileOpenPostNotify(string filePath) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | AttachEventsToAllDocuments(); | 
|---|
|  |  |  | return 0; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void DeActiveHandler() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (mainTab?.tabControl != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (TabItem item in mainTab.tabControl.Items) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 向主Control注册事件 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | PluginInfos.Clear(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Logger.Error("DeActiveHandler Failed.", ex); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 连接到SolidWorks之后,激活中的文档自定义属性变更的操作 | 
|---|
|  |  |  | 
|---|
|  |  |  | public ObservableCollection<PdmBom> BomTree | 
|---|
|  |  |  | { | 
|---|
|  |  |  | get => _bomTree; | 
|---|
|  |  |  | set { | 
|---|
|  |  |  | set | 
|---|
|  |  |  | { | 
|---|
|  |  |  | RaiseAndSetIfChanged(ref _bomTree, value); | 
|---|
|  |  |  | int count = CacheList != null ? CacheList.Count : 0; | 
|---|
|  |  |  | AllBomCount = $"共 {count} 条"; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void RefreshSelectedBomCount() { | 
|---|
|  |  |  | public void RefreshSelectedBomCount() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | int count = CacheList != null ? CacheList.Where(e=>e.selected).Count() : 0; | 
|---|
|  |  |  | SelectedBomCount = $"已选中 {count} 条"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | private Dictionary<string, BomInfo> GetBomsFromWeb(HttpClient Client, PdmBomParam param) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Result<Dictionary<string, BomInfo>> result = | 
|---|
|  |  |  | Client.PostSyncAction<Dictionary<string, BomInfo>>(param, "wpf/bom/openApi/bomInfo2"); | 
|---|
|  |  |  | Client.PostSyncAction<Dictionary<string, BomInfo>>(param, "wpf/bom/openApi/bomInfo3"); | 
|---|
|  |  |  | Dictionary<string, BomInfo> bomInfo = result.HandleResult(); | 
|---|
|  |  |  | return bomInfo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | allModels = models | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | Result<Dictionary<string, BomInfo>> result = | 
|---|
|  |  |  | Client.PostSyncAction<Dictionary<string, BomInfo>>(param, "wpf/bom/openApi/bomInfo2"); | 
|---|
|  |  |  | Client.PostSyncAction<Dictionary<string, BomInfo>>(param, "wpf/bom/openApi/bomInfo3"); | 
|---|
|  |  |  | Dictionary<string, BomInfo> bomInfos = result.HandleResult(); | 
|---|
|  |  |  | Dictionary<string, DrawInfo> drawInfos = new Dictionary<string, DrawInfo>(); | 
|---|
|  |  |  | FillBomInfo(BomTree.ToList(), bomInfos, drawInfos); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | info = bomInfos[partModel]; | 
|---|
|  |  |  | bom.inDb = true; | 
|---|
|  |  |  | if (!string.IsNullOrEmpty(info.id)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //bom.BomInfo = info; | 
|---|
|  |  |  | bom.BomInfo.id = info.id; | 
|---|
|  |  |  | bom.BomInfo.bomVersion = info.bomVersion; | 
|---|
|  |  |  | 
|---|
|  |  |  | bom.BomInfo.requestUser = info.requestUser; | 
|---|
|  |  |  | bom.BomInfo.auditUserId = info.auditUserId; | 
|---|
|  |  |  | bom.BomInfo.auditUser = info.auditUser; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | bom.BomInfo.inKeeDeeDb = info.inKeeDeeDb; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Gray"/> | 
|---|
|  |  |  | </DataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <DataTrigger Binding="{Binding drawInfo.noDrw}" Value="true"> | 
|---|
|  |  |  | <Setter Property="Text" Value="未通过"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Red"/> | 
|---|
|  |  |  | </DataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <DataTrigger Binding="{Binding skipCheck}" Value="true"> | 
|---|
|  |  |  | <Setter Property="Text" Value="无需检查"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Gray"/> | 
|---|
|  |  |  | </DataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <!--<MultiDataTrigger> | 
|---|
|  |  |  | <MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Condition Binding="{Binding IsHistoryData}" Value="true"/> | 
|---|
|  |  |  | <Condition Binding="{Binding drawInfo.noDrw}" Value="false"/> | 
|---|
|  |  |  | </MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Setter Property="Text" Value="无需检查"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Gray"/> | 
|---|
|  |  |  | </MultiDataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <MultiDataTrigger> | 
|---|
|  |  |  | <MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Condition Binding="{Binding IsHistoryData}" Value="true"/> | 
|---|
|  |  |  | <Condition Binding="{Binding drawInfo.noDrw}" Value="true"/> | 
|---|
|  |  |  | </MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Setter Property="Text" Value="未通过"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Red"/> | 
|---|
|  |  |  | </MultiDataTrigger>--> | 
|---|
|  |  |  | <MultiDataTrigger> | 
|---|
|  |  |  | <MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Condition Binding="{Binding BomInfo.inKeeDeeDb}" Value="true"/> | 
|---|
|  |  |  | <Condition Binding="{Binding drawInfo.noDrw}" Value="false"/> | 
|---|
|  |  |  | </MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Setter Property="Text" Value="已入系统"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="DarkGreen"/> | 
|---|
|  |  |  | </MultiDataTrigger> | 
|---|
|  |  |  | </Style.Triggers> | 
|---|
|  |  |  | </Style> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | <Setter Property="Foreground" Value="Black"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="White"/> | 
|---|
|  |  |  | <Style.Triggers> | 
|---|
|  |  |  | <DataTrigger Binding="{Binding produceWay}" Value="模组"> | 
|---|
|  |  |  | <DataTrigger Binding="{Binding skipCheck}" Value="true"> | 
|---|
|  |  |  | <Setter Property="Text" Value="无需审核"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Gray"/> | 
|---|
|  |  |  | 
|---|
|  |  |  | <Setter Property="Background" Value="Gray"/> | 
|---|
|  |  |  | </DataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <MultiDataTrigger> | 
|---|
|  |  |  | <DataTrigger Binding="{Binding drawInfo.isSpecial}" Value="True"> | 
|---|
|  |  |  | <Setter Property="Text" Value="无需审核"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Gray"/> | 
|---|
|  |  |  | </DataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <!--<MultiDataTrigger> | 
|---|
|  |  |  | <MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Condition Binding="{Binding drawInfo.HistoryData}" Value="true"/> | 
|---|
|  |  |  | <Condition Binding="{Binding localDocChanged}" Value="false"/> | 
|---|
|  |  |  | 
|---|
|  |  |  | <Setter Property="Text" Value="无需审核"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Gray"/> | 
|---|
|  |  |  | </MultiDataTrigger> | 
|---|
|  |  |  | </MultiDataTrigger>--> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <MultiDataTrigger> | 
|---|
|  |  |  | <MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Condition Binding="{Binding drawInfo.HistoryData}" Value="true"/> | 
|---|
|  |  |  | <Condition Binding="{Binding localDocChanged}" Value="true"/> | 
|---|
|  |  |  | <Condition Binding="{Binding drawInfo.noDrw}" Value="false"/> | 
|---|
|  |  |  | <Condition Binding="{Binding skipCheck}" Value="false"/> | 
|---|
|  |  |  | </MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Setter Property="Text" Value="历史图纸变更"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Blue"/> | 
|---|
|  |  |  | </MultiDataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <MultiDataTrigger> | 
|---|
|  |  |  | <MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Condition Binding="{Binding BomInfo.status}" Value="completed"/> | 
|---|
|  |  |  | <Condition Binding="{Binding localDocChanged}" Value="true"/> | 
|---|
|  |  |  | <Condition Binding="{Binding drawInfo.noDrw}" Value="false"/> | 
|---|
|  |  |  | <Condition Binding="{Binding skipCheck}" Value="false"/> | 
|---|
|  |  |  | </MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Setter Property="Text" Value="文档变更"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Blue"/> | 
|---|
|  |  |  | </MultiDataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <MultiDataTrigger> | 
|---|
|  |  |  | <MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Condition Binding="{Binding skipCheck}" Value="false"/> | 
|---|
|  |  |  | <Condition Binding="{Binding drawInfo.noDrw}" Value="true"/> | 
|---|
|  |  |  | </MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Setter Property="Text" Value="未找到工程图"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Red"/> | 
|---|
|  |  |  | </MultiDataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <MultiDataTrigger> | 
|---|
|  |  |  | 
|---|
|  |  |  | <Setter Property="Text" Value="已通过"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Green"/> | 
|---|
|  |  |  | </MultiDataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <MultiDataTrigger> | 
|---|
|  |  |  | <MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Condition Binding="{Binding BomInfo.status}" Value="completed"/> | 
|---|
|  |  |  | <Condition Binding="{Binding localDocChanged}" Value="true"/> | 
|---|
|  |  |  | </MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Setter Property="Text" Value="文档变更"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Blue"/> | 
|---|
|  |  |  | </MultiDataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <DataTrigger Binding="{Binding BomInfo.status}" Value="submitted"> | 
|---|
|  |  |  | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="Red"/> | 
|---|
|  |  |  | </DataTrigger> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <MultiDataTrigger> | 
|---|
|  |  |  | <MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Condition Binding="{Binding BomInfo.inKeeDeeDb}" Value="true"/> | 
|---|
|  |  |  | <Condition Binding="{Binding drawInfo.noDrw}" Value="false"/> | 
|---|
|  |  |  | </MultiDataTrigger.Conditions> | 
|---|
|  |  |  | <Setter Property="Text" Value="已入系统"/> | 
|---|
|  |  |  | <Setter Property="Foreground" Value="White"/> | 
|---|
|  |  |  | <Setter Property="Background" Value="DarkGreen"/> | 
|---|
|  |  |  | </MultiDataTrigger> | 
|---|
|  |  |  | </Style.Triggers> | 
|---|
|  |  |  | </Style> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | using PdmSwPlugin.Common.Interface; | 
|---|
|  |  |  | using SolidWorks.Interop.sldworks; | 
|---|
|  |  |  | using System.Collections.Generic; | 
|---|
|  |  |  | using System.Linq; | 
|---|
|  |  |  | using System.Windows.Controls; | 
|---|
|  |  |  | using PdmSwPlugin.Common; | 
|---|
|  |  |  | using System.Collections.ObjectModel; | 
|---|
|  |  |  | using System.Net.Http; | 
|---|
|  |  |  | using System.Threading.Tasks; | 
|---|
|  |  |  | using System.Windows; | 
|---|
|  |  |  | using System; | 
|---|
|  |  |  | using NPOI.SS.UserModel; | 
|---|
|  |  |  | using NPOI.XSSF.UserModel; | 
|---|
|  |  |  | using System.IO; | 
|---|
|  |  |  | using log4net; | 
|---|
|  |  |  | using Microsoft.Win32; | 
|---|
|  |  |  | using NPOI.SS.UserModel; | 
|---|
|  |  |  | using NPOI.Util; | 
|---|
|  |  |  | using NPOI.XSSF.UserModel; | 
|---|
|  |  |  | using PdmSwPlugin.Commmon.Control; | 
|---|
|  |  |  | using PdmSwPlugin.Commmon.Util.UI; | 
|---|
|  |  |  | using PdmSwPlugin.Common; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Constants; | 
|---|
|  |  |  | using System.Threading; | 
|---|
|  |  |  | using log4net; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Control.TreeGrid; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Entity.DrawAudit; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Entity.Pdm; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Entity.System; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Interface; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Setting; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Util; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Util.Http; | 
|---|
|  |  |  | using PdmSwPlugin.Commmon.Util.UI; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Entity.Pdm; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Control.TreeGrid; | 
|---|
|  |  |  | using System.Windows.Data; | 
|---|
|  |  |  | using SolidWorks.Interop.swconst; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Entity.DrawAudit; | 
|---|
|  |  |  | using System.Collections.Concurrent; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Util.UI; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Setting; | 
|---|
|  |  |  | using PdmSwPlugin.PDM.Model; | 
|---|
|  |  |  | using System.Diagnostics; | 
|---|
|  |  |  | using PdmSwPlugin.PDM.Constant; | 
|---|
|  |  |  | using static PdmSwPlugin.PDM.Event.PdmEvent; | 
|---|
|  |  |  | using PdmSwPlugin.PDM.Model; | 
|---|
|  |  |  | using SolidWorks.Interop.sldworks; | 
|---|
|  |  |  | using SolidWorks.Interop.swconst; | 
|---|
|  |  |  | using System; | 
|---|
|  |  |  | using System.Collections.Concurrent; | 
|---|
|  |  |  | using System.Collections.Generic; | 
|---|
|  |  |  | using System.Collections.ObjectModel; | 
|---|
|  |  |  | using System.Diagnostics; | 
|---|
|  |  |  | using System.IO; | 
|---|
|  |  |  | using System.Linq; | 
|---|
|  |  |  | using System.Net.Http; | 
|---|
|  |  |  | using System.Threading; | 
|---|
|  |  |  | using System.Threading.Tasks; | 
|---|
|  |  |  | using System.Windows; | 
|---|
|  |  |  | using System.Windows.Controls; | 
|---|
|  |  |  | using System.Windows.Data; | 
|---|
|  |  |  | using System.Windows.Interop; | 
|---|
|  |  |  | using PdmSwPlugin.Commmon.Control; | 
|---|
|  |  |  | using PdmSwPlugin.Common.Entity.System; | 
|---|
|  |  |  | using System.Windows.Documents; | 
|---|
|  |  |  | using System.Windows.Input; | 
|---|
|  |  |  | using NPOI.POIFS.Properties; | 
|---|
|  |  |  | using NPOI.POIFS.Crypt; | 
|---|
|  |  |  | using System.Threading.Tasks.Schedulers; | 
|---|
|  |  |  | using static PdmSwPlugin.PDM.Event.PdmEvent; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | namespace PdmSwPlugin.PDM | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void AutoSaveAlert(List<string> msgs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //Dispatcher.Invoke(() => | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    MultiExWindow exWin = new MultiExWindow(this, "以下文档因删除特定配置而被保存", msgs, "文件路径"); | 
|---|
|  |  |  | //    ShowExWindow(exWin); | 
|---|
|  |  |  | //}); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 刷新按钮 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | await Task.Run(() => | 
|---|
|  |  |  | { | 
|---|
|  |  |  | RefreshBomList(SwApp.IActiveDoc2); | 
|---|
|  |  |  | if (model.bomTreeReader.needSaveList.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<string> msgs = new List<string>(model.bomTreeReader.needSaveList); | 
|---|
|  |  |  | AutoSaveAlert(msgs); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | Logger.Debug("PDM插件,列表刷新完成!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | bool drawExists = File.Exists(drawFilePath); | 
|---|
|  |  |  | // 工程图一致性检查 | 
|---|
|  |  |  | allProperties["工程图是否存在"] = drawExists.ToString(); | 
|---|
|  |  |  | // 不跳过检查的加工件,如果工程图不存在,设置noDrw为true | 
|---|
|  |  |  | if (!drawExists && !bom.skipCheck && bom.produceWay == "加工件") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | drawInfo.noDrw = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | allProperties["md5"] = bom.localD3Md5; | 
|---|
|  |  |  | if (bom.lost || bom.BomInfo.isHidden || sldDoc == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!bom.skipCheck) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | result[filepath] = GetSingleDrawInfo(bom); | 
|---|
|  |  |  | if (bom.BomInfo.inKeeDeeDb == true) result[filepath]._inKeeDeeDb = true; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ObservableCollection<PdmBom> children = bom.modules; | 
|---|
|  |  |  | if (children != null) | 
|---|
|  |  |  | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Logger.Error($"{key} checking rule..."); | 
|---|
|  |  |  | DrawInfo checkResult; | 
|---|
|  |  |  | Result<DrawInfo> result = Client.PostSyncAction<DrawInfo>(property.Value, "wpf/bom/openApi/checkRuleSingle"); | 
|---|
|  |  |  | DrawInfo checkResult = result.HandleResult(); | 
|---|
|  |  |  | checkResult = result.HandleResult(); | 
|---|
|  |  |  | properties[key].checkRuleResult = checkResult.checkRuleResult; | 
|---|
|  |  |  | properties[key].errMessages = checkResult.errMessages; | 
|---|
|  |  |  | var msgs = checkResult.errMessages; | 
|---|
|  |  |  | if (!properties[key].HistoryData && (!checkResult.checkRuleOk||property.Value.isHidden)) | 
|---|
|  |  |  | if (property.Value.noDrw || property.Value.isHidden || (!properties[key].HistoryData && (!checkResult.checkRuleOk))) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | allSuccess = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!properties[key].HistoryData) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | lock (temp) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (property.Value.isHidden) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | temp.Add($"物料【{key}】被设置为隐藏!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (property.Value.noDrw && property.Value.HistoryData) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | temp.Add($"物料【{key}】未找到工程图!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!properties[key].HistoryData) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (msgs != null && msgs.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (string msg in msgs) | 
|---|
|  |  |  | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | RefreshBomList(SwApp.IActiveDoc2); | 
|---|
|  |  |  | if (model.bomTreeReader.needSaveList.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<string> infos = new List<string>(model.bomTreeReader.needSaveList); | 
|---|
|  |  |  | AutoSaveAlert(infos); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!DoCheckRuleAsync(out List<string> msgs)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dispatcher.Invoke(() => | 
|---|
|  |  |  | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 对所有的BOM做规则检查 | 
|---|
|  |  |  | bool allSuccess = DoCheckRule(out _); | 
|---|
|  |  |  | bool allSuccess = DoCheckRuleAsync(out _); | 
|---|
|  |  |  | // 先获取所有的BOM | 
|---|
|  |  |  | HashSet<string> cache = new HashSet<string>(); | 
|---|
|  |  |  | // 然后筛选选中的BOM | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!allSuccess) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 如果有未通过的图纸,需要提示 | 
|---|
|  |  |  | var err = boms.Where(b => !b.IsHistoryData && !b.checkRuleOk).ToList(); | 
|---|
|  |  |  | var err = boms.Where(b => b.noDrw || b.isHidden || (!b.IsHistoryData && (!b.checkRuleOk))).ToList(); | 
|---|
|  |  |  | if (err != null && err.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<string> msgs = new List<string>(); | 
|---|
|  |  |  | foreach (var ee in err) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (ee.noDrw && ee.IsHistoryData) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | msgs.Add($"物料【{ee.partNo}】未通过规则检查!未找到工程图"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (ee.drawInfo.isHidden) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | msgs.Add($"物料【{ee.partNo}】未通过规则检查!被设为隐藏"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (ee.drawInfo.errMessages == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | msgs.Add($"物料【{ee.partNo}】未通过规则检查!"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 都通过了,再进行审批 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 筛选非特殊的审核 | 
|---|
|  |  |  | boms = boms.Where(b => !b._drawInfo.isSpecial).ToList(); | 
|---|
|  |  |  | if (boms == null || boms.Count <= 0) return; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 先申请单号 | 
|---|
|  |  |  | DrawAuditOrder daOrder = new DrawAuditOrder | 
|---|
|  |  |  | 
|---|
|  |  |  | /// <param name="e"></param> | 
|---|
|  |  |  | private void TextBox_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 检查是否是双击 | 
|---|
|  |  |  | if (e.ClickCount == 2) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | this.Warning("该图纸还未检查"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (bom.checkRuleResult == 3) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<string> errs = new List<string>(); | 
|---|
|  |  |  | if (bom.noDrw && bom.IsHistoryData) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | errs.Add("工程图不存在 "); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (bom.isHidden) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | errs.Add("文档被设置为隐藏"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (bom.drawInfo.errMessages != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | errs.AddRange(bom.drawInfo.errMessages); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (errs.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | MultiExWindow exWin = new MultiExWindow(this, "检查结果", errs); | 
|---|
|  |  |  | exWin.ShowDialog(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (bom.checkRuleResult == 3) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string title = string.Empty; | 
|---|
|  |  |  | if (bom.IsHistoryData) | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | title = "虚拟件无需检查"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | title = "无需检查"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.Info(title); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (bom.checkRuleOk && !bom.isHidden) | 
|---|
|  |  |  | else if (bom.checkRuleOk && !bom.isHidden) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | this.Show("规则检查通过"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<string> errs = new List<string>(); | 
|---|
|  |  |  | if (bom.isHidden) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | errs.Add("文档被设置为隐藏"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | errs.AddRange(bom.drawInfo.errMessages); | 
|---|
|  |  |  | MultiExWindow exWin = new MultiExWindow(this, "检查结果", errs); | 
|---|
|  |  |  | exWin.ShowDialog(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Logger.Error("Double Click CheckRule Exception.", ex); | 
|---|
|  |  |  | this.Error($"未知异常:{ex.Message}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | /// <param name="e"></param> | 
|---|
|  |  |  | private void AuditTextBox_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 检查是否是双击 | 
|---|
|  |  |  | if (e.ClickCount == 2) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | TextBlock textBlock = sender as TextBlock; | 
|---|
|  |  |  | PdmBom bom = textBlock.DataContext as PdmBom; | 
|---|
|  |  |  | if (bom._drawInfo.isSpecial) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | this.Info("无需审核"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (bom.BomInfo.inKeeDeeDb == true) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | this.Info("已入系统"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (string.IsNullOrEmpty(bom.BomInfo.status)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (bom.produceWay == "模组" || bom.produceWay == "标准件") | 
|---|
|  |  |  | 
|---|
|  |  |  | MaskAdorner.HideMask(content); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Logger.Error("Double Click Audit Status Exception.", ex); | 
|---|
|  |  |  | this.Error($"未知异常:{ex.Message}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new CantCheckInException(new List<string> { "请打开一张图纸" }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (model.bomTreeReader.needSaveList.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<string> infos = new List<string>(model.bomTreeReader.needSaveList); | 
|---|
|  |  |  | AutoSaveAlert(infos); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DoCheckRuleAsync(out _); | 
|---|
|  |  |  | // 筛选所有在物料明细表中,不跳过检查并且检查未通过的,类型是加工件的未通过审核的,加工件审核通过的但图纸变更的 | 
|---|
|  |  |  | List<string> errs = model.bomTreeReader.CacheList.Select(b => b.NeedStopCheckIn()) | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void InitPropertyData() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (Client == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Client = clientCreator.GetClient(); | 
|---|
|  |  |  | 
|---|
|  |  |  | controlCache.Add("standardModule", stModule); | 
|---|
|  |  |  | LoadComboxItemSource(); | 
|---|
|  |  |  | Refresh_Click(null, null); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Logger.Error($"PropertySetting Init Error!", ex); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void Jgj_SinglePropertyChanged(object sender, string name, object value) | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void UpdateActiveDoc() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | long start = DateTime.Now.Millisecond; | 
|---|
|  |  |  | Logger.Debug("UpdateActiveDoc Start..."); | 
|---|
|  |  |  | if (activeDoc != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | DetachDocNotify(activeDoc); | 
|---|
|  |  |  | 
|---|
|  |  |  | activeDoc.ClearSelection2(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Logger.Debug($"UpdateActiveDoc End {activeDoc?.GetPathName()} {DateTime.Now.Millisecond - start}ms."); | 
|---|
|  |  |  | start = DateTime.Now.Millisecond; | 
|---|
|  |  |  | Logger.Debug("UpdateUI Start..."); | 
|---|
|  |  |  | UpdateUI(activeDoc); | 
|---|
|  |  |  | Logger.Debug($"UpdateUI End {activeDoc?.GetPathName()} {DateTime.Now.Millisecond - start}ms."); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | ReadDoc = doc; | 
|---|
|  |  |  | Dispatcher.Invoke(() => | 
|---|
|  |  |  | { | 
|---|
|  |  |  | SwitchVisiable(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // LoadDocProperties(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | SwitchVisiable(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private int Ass_UserSelectionPostNotify() | 
|---|
|  |  |  | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | private void SwitchVisiable() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var start = DateTime.Now.Millisecond; | 
|---|
|  |  |  | Logger.Debug("SwitchVisiable Start..."); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | HashSet<string> skipName = new HashSet<string> { | 
|---|
|  |  |  | NameConstant.materialCode | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | 
|---|
|  |  |  | last = null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ActiveOpter = control; | 
|---|
|  |  |  | contentPanel.Children.Clear(); | 
|---|
|  |  |  | newOne.UpdateProperty += Jgj_SinglePropertyChanged; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Dispatcher.Invoke(() => | 
|---|
|  |  |  | { | 
|---|
|  |  |  | contentPanel.Children.Clear(); | 
|---|
|  |  |  | contentPanel.Children.Add(control); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Logger.Debug($"SwitchVisiable End {activeDoc?.GetPathName()} {DateTime.Now.Millisecond - start}ms."); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void SaveButton_Click(object sender, RoutedEventArgs e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (ReadDoc == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | SaveDoc(false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Logger.Error($"Property Setting Save Doc Error!", ex); | 
|---|
|  |  |  | this.Error($"保存失败!{ex.Message}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void RefreshData() | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void OnCustomPropertyChange(string propName, string Configuration, string oldValue, string NewValue, int valueType) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (oldValue == NewValue) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | IPropertyOpt opt = ActiveOpter as IPropertyOpt; | 
|---|
|  |  |  | opt.UpdateSingleProperty(propName, NewValue); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Logger.Error("Property Setting OnCustomPropertyChange Error!", ex); | 
|---|
|  |  |  | this.Error($"属性变更异常!{ex.Message}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void OnDocDestroy(ModelDoc2 doc) | 
|---|
|  |  |  | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | public void AlertSaveWindow() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var start = DateTime.Now.Millisecond; | 
|---|
|  |  |  | Logger.Debug("AlertSaveWindow Start..."); | 
|---|
|  |  |  | IPropertyOpt opt = ActiveOpter as IPropertyOpt; | 
|---|
|  |  |  | if (opt != null && opt.GetDocChanged()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | opt.ResetProperty(out string errMsg); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Logger.Debug($"AlertSaveWindow End {activeDoc?.GetPathName()} {DateTime.Now.Millisecond - start}ms."); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void OnTabControlSelectionChange(object sender, SelectionChangedEventArgs e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (e.RemovedItems == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Logger.Error($"Property Setting OnTabControlSelectionChange Error!", ex); | 
|---|
|  |  |  | this.Error($"{ex.Message}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|