From ec2fcc75d3cbf8d0fe6377c24ceec739261c326e Mon Sep 17 00:00:00 2001 From: Diego <2248356998@qq.com> Date: Thu, 12 Jun 2025 20:21:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Startup.cs | 2 +- .../Configuration/App.Development.json | 1 + .../Configuration/App.json | 1 + .../Program/SingleFilePublish.cs | 1 + .../Program/Startup.cs | 10 +- .../SqlSugar/CodeFirstUtils.cs | 3 +- src/Admin/ThingsGateway.DB/Startup.cs | 3 +- .../Internal/Penetrates.cs | 14 +- src/Admin/ThingsGateway.Razor/Startup.cs | 2 +- .../Sugar/IntegrationServices/CacheService.cs | 2 +- .../Core/Anchors/Anchor.cs | 0 .../Core/Anchors/DynamicAnchor.cs | 0 .../Core/Anchors/LinkAnchor.cs | 0 .../Core/Anchors/PositionAnchor.cs | 0 .../Core/Anchors/ShapeIntersectionAnchor.cs | 0 .../Core/Anchors/SinglePortAnchor.cs | 0 .../Core/Behavior.cs | 0 .../Core/Behaviors/DebugEventsBehavior.cs | 0 .../Core/Behaviors/DragMovablesBehavior.cs | 0 .../Core/Behaviors/DragNewLinkBehavior.cs | 0 .../Core/Behaviors/EventsBehavior.cs | 0 .../Behaviors/KeyboardShortcutsBehavior.cs | 0 .../Behaviors/KeyboardShortcutsDefaults.cs | 0 .../Core/Behaviors/PanBehavior.cs | 0 .../Core/Behaviors/SelectionBehavior.cs | 0 .../Core/Behaviors/VirtualizationBehavior.cs | 0 .../Core/Behaviors/ZoomBehavior.cs | 0 .../Core/Controls/Control.cs | 0 .../Core/Controls/ControlsBehavior.cs | 0 .../Core/Controls/ControlsContainer.cs | 0 .../Core/Controls/ControlsLayer.cs | 0 .../Core/Controls/ControlsType.cs | 0 .../Core/Controls/Default/ArrowHeadControl.cs | 0 .../Core/Controls/Default/BoundaryControl.cs | 0 .../Controls/Default/DragNewLinkControl.cs | 0 .../Core/Controls/Default/RemoveControl.cs | 0 .../Core/Controls/ExecutableControl.cs | 0 .../Core/Delegates.cs | 0 .../Core/Diagram.cs | 4 - .../Core/DiagramsException.cs | 0 .../Core/Events/KeyboardEventArgs.cs | 0 .../Core/Events/MouseEventArgs.cs | 0 .../Core/Events/PointerEventArgs.cs | 0 .../Core/Events/TouchEventArgs.cs | 0 .../Core/Events/WheelEventArgs.cs | 0 .../Core/Extensions/DiagramExtensions.cs | 0 .../Core/Extensions/DoubleExtensions.cs | 0 .../Core/Extensions/NumberExtensions.cs | 0 .../Core/Geometry/BezierSpline.cs | 0 .../Core/Geometry/Ellipse.cs | 0 .../Core/Geometry/IShape.cs | 0 .../Core/Geometry/Line.cs | 0 .../Core/Geometry/Point.cs | 0 .../Core/Geometry/Rectangle.cs | 0 .../Core/Geometry/Shapes.cs | 0 .../Core/Geometry/Size.cs | 0 .../Core/Layers/BaseLayer.cs | 0 .../Core/Layers/GroupLayer.cs | 0 .../Core/Layers/LinkLayer.cs | 0 .../Core/Layers/NodeLayer.cs | 0 .../Core/LinksReconnectionAlgorithms.cs | 0 .../Core/Models/Base/BaseLinkModel.cs | 0 .../Core/Models/Base/IHasBounds.cs | 0 .../Core/Models/Base/IHasShape.cs | 0 .../Core/Models/Base/ILinkable.cs | 0 .../Core/Models/Base/Model.cs | 0 .../Core/Models/Base/MovableModel.cs | 0 .../Core/Models/Base/SelectableModel.cs | 0 .../Core/Models/GroupModel.cs | 0 .../Core/Models/LinkLabelModel.cs | 0 .../Core/Models/LinkMarker.cs | 0 .../Core/Models/LinkModel.cs | 0 .../Core/Models/LinkVertexModel.cs | 0 .../Core/Models/NodeModel.cs | 0 .../Core/Models/PortAlignment.cs | 0 .../Core/Models/PortModel.cs | 0 .../Core/MouseEventButton.cs | 0 .../Core/Options/DiagramConstraintsOptions.cs | 0 .../Core/Options/DiagramGroupOptions.cs | 0 .../Core/Options/DiagramLinkOptions.cs | 0 .../Core/Options/DiagramOptions.cs | 0 .../Options/DiagramVirtualizationOptions.cs | 0 .../Core/Options/DiagramZoomOptions.cs | 0 .../Core/PathGenerators/PathGenerator.cs | 0 .../PathGenerators/PathGeneratorResult.cs | 0 .../PathGenerators/SmoothPathGenerator.cs | 0 .../PathGenerators/StraightPathGenerator.cs | 0 .../Positions/BoundsBasedPositionProvider.cs | 0 .../Core/Positions/IPositionProvider.cs | 0 .../Positions/LinkPathPositionProvider.cs | 0 .../Positions/ShapeAnglePositionProvider.cs | 0 .../Core/Routers/NormalRouter.cs | 0 .../Core/Routers/OrthogonalRouter.cs | 0 .../Core/Routers/Router.cs | 0 .../Core/Utils/KeysUtils.cs | 0 .../GlobalUsings.cs | 3 - .../README.md | 1 + .../README.zh-CN.md | 1 + .../SvgPathProperties/ArcCommand.cs | 0 .../SvgPathProperties/ArcUtils.cs | 0 .../SvgPathProperties/Base/ICommand.cs | 0 .../SvgPathProperties/Base/PartProperties.cs | 0 .../SvgPathProperties/Base/Point.cs | 0 .../SvgPathProperties/Base/PointProperties.cs | 0 .../SvgPathProperties/Base/Rect.cs | 0 .../SvgPathProperties/BezierCommand.cs | 0 .../SvgPathProperties/BezierFunctions.cs | 0 .../SvgPathProperties/BezierValues.cs | 0 .../SvgPathProperties/CurveMinMax.cs | 0 .../SvgPathProperties/LineCommand.cs | 0 .../SvgPathProperties/MoveCommand.cs | 0 .../SvgPathProperties/Parser.cs | 0 .../SvgPathProperties/SvgPath.cs | 0 .../ThingsGateway.Blazor.Diagrams.Core.csproj | 18 + .../_Imports.razor | 23 + .../ThingsGateway.Blazor.Diagrams.csproj | 3 + .../Controller}/AutoUpdateController.cs | 0 .../Job/LogJob.cs | 11 + .../Locales/AppResource.cs | 6 + .../Locales/en-US.json | 114 +++++ .../Locales/zh-CN.json | 113 +++++ .../SeedData/Management/seed_sys_dict.json | 0 .../Management/seed_sys_resource.json | 0 .../RulesEngine/seed_sys_resource.json | 0 .../SeedData/SysDictSeedData.cs | 0 .../SeedData/SysResourceSeedData.cs | 13 +- .../Management}/Helper/DeviceDataWithValue.cs | 0 .../Helper/VariableDataWithValue.cs | 0 .../Management/GatewayRedundantSerivce.cs | 0 .../Management/IRedundancyHostedService.cs | 2 +- .../Management/IRedundancyService.cs | 2 +- .../Management/RedundancyHostedService.cs | 1 + .../Management/RedundancyOptions.cs | 0 .../Management/RedundancyService.cs | 0 .../Management/ReverseCallbackServer.cs | 0 .../Update/Services/IUpdateZipFileService.cs | 0 .../Services/UpdateZipFileHostedService.cs | 1 + .../Update/Services/UpgradeRpcServer.cs | 0 .../Update/Util/RestartServerHelper.cs | 0 .../RulesEngine}/Attributes/CategoryNode.cs | 8 +- .../RulesEngine}/Attributes/ModelValue.cs | 2 +- .../Services/RulesEngine}/Entity/Rules.cs | 8 +- .../RulesEngine}/Helps/RuleHelpers.cs | 61 ++- .../Node/Actuator/ExecuteScriptNode.cs | 9 +- .../Node/Actuator/VariableRpcNode.cs | 9 +- .../Services/RulesEngine}/Node/BaseNode.cs | 5 +- .../Node/Expression/ConditionNode.cs | 7 +- .../RulesEngine}/Node/Expression/DataNode.cs | 5 +- .../RulesEngine}/Node/Expression/DelayNode.cs | 10 +- .../Services/RulesEngine}/Node/INode.cs | 2 +- .../Services/RulesEngine/Node/IStartNode.cs | 5 + .../Services/RulesEngine}/Node/NodeInput.cs | 2 +- .../Services/RulesEngine}/Node/NodeOutput.cs | 2 +- .../Services/RulesEngine/Node/NumberNode.cs | 15 + .../RulesEngine/Node/PlaceholderNode.cs | 13 + .../RulesEngine/Node/Start/StartNode.cs | 14 + .../Services/RulesEngine/Node/TextNode.cs | 15 + .../Node/Trigger/AlarmChangedTriggerNode.cs | 6 +- .../Node/Trigger/DeviceChangedTriggerNode.cs | 6 +- .../Node/Trigger/TimeIntervalTriggerNode.cs | 9 +- .../Node/Trigger/ValueChangedTriggerNode.cs | 9 +- .../RulesEngine}/Node/VariableNode.cs | 5 +- .../RulesEngine/Services/DefaultDiagram.cs | 17 + .../Services/IRulesEngineHostedService.cs | 6 +- .../RulesEngine}/Services/IRulesService.cs | 4 +- .../Services/RulesEngineHostedService.cs | 34 +- .../RulesEngine}/Services/RulesService.cs | 4 +- .../Startup.cs | 23 +- .../ThingsGateway.Gateway.Application.csproj | 27 +- .../Locales/en-US.json | 42 ++ .../Locales/zh-CN.json | 42 ++ .../Pages/Management}/Authentication.razor | 0 .../Pages/Management}/Authentication.razor.cs | 0 .../Management}/RedundancyOptionsHeader.razor | 0 .../RedundancyOptionsHeader.razor.cs | 0 .../Management}/RedundancyOptionsPage.razor | 0 .../RedundancyOptionsPage.razor.cs | 4 +- .../RedundancyOptionsPage.razor.css | 0 .../Pages/Management}/SystemConfigPage.razor | 8 +- .../Management}/SystemConfigPage.razor.cs | 4 +- .../Management}/SystemConfigPage.razor.css | 0 .../Pages/Management}/UpdateZipFileInfo.razor | 4 +- .../Management}/UpdateZipFileInfo.razor.cs | 8 +- .../Pages/Management}/UpdateZipFilePage.razor | 2 +- .../Management}/UpdateZipFilePage.razor.cs | 4 +- .../Component/CSharpScriptWidget.razor | 2 +- .../Component/CSharpScriptWidget.razor.cs | 4 +- .../Component/DefaultWidget.razor | 5 +- .../RulesEngine}/Component/DeviceWidget.razor | 4 +- .../Component/DragComponent.razor | 2 +- .../RulesEngine}/Component/NumberWidget.razor | 4 +- .../RulesEngine}/Component/ScriptEdit.razor | 2 +- .../Component/ScriptEdit.razor.cs | 4 +- .../RulesEngine}/Component/TextWidget.razor | 4 +- .../Component/VariableWidget.razor | 2 +- .../Component/VariableWidget.razor.cs | 4 +- .../Pages/RulesEngine}/DragAndDrop.razor | 8 +- .../Pages/RulesEngine}/DragAndDrop.razor.cs | 13 +- .../Pages/RulesEngine}/DragAndDrop.razor.css | 0 .../Pages/RulesEngine}/RulesPage.razor | 6 +- .../Pages/RulesEngine}/RulesPage.razor.cs | 4 +- .../Pages/RulesEngine}/RulesPage.razor.js | 0 .../Pages/RulesEngine}/RulesStatus.razor | 2 +- .../Pages/RulesEngine}/RulesStatus.razor.cs | 4 +- .../Pages/RulesEngine}/RulesStatus.razor.css | 0 .../ThingsGateway.Gateway.Razor.csproj | 1 + .../_Imports.razor.cs | 1 + .../wwwroot/img/CSharpScript.svg | 0 .../wwwroot/img/Delay.svg | 0 .../wwwroot/img/Rpc.svg | 0 .../wwwroot/img/Start.svg | 0 .../wwwroot/img/TimeInterval.svg | 0 .../wwwroot/img/ValueChanged.svg | 0 .../ThingsGateway.Management/FodyWeavers.xml | 3 - .../Locales/en-US.json | 70 --- .../Locales/zh-CN.json | 70 --- .../SeedData/SysResourceSeedData.cs | 28 -- .../ThingsGateway.Management/Startup.cs | 54 -- .../ThingsGateway.Management.csproj | 44 -- .../ThingsGateway.Management/_Imports.razor | 19 - .../_Imports.razor.cs | 18 - .../Component/PlaceholderModel.cs | 11 - .../ThingsGatewayRulesEngineComponentBase.cs | 21 - .../ThingsGateway.RulesEngine/FodyWeavers.xml | 3 - .../ThingsGateway.RulesEngine/Job/LogJob.cs | 67 --- .../Locales/AppResource.cs | 29 -- .../Locales/en-US.json | 51 -- .../Locales/zh-CN.json | 51 -- .../Node/NumberNode.cs | 14 - .../Node/Start/EndNode.cs | 12 - .../Node/Start/StartNode.cs | 11 - .../Node/TextNode.cs | 12 - .../SeedData/SysResourceSeedData.cs | 30 -- .../ThingsGateway.RulesEngine/Startup.cs | 51 -- .../ThingsGateway.RulesEngine.csproj | 33 -- .../ThingsGateway.RulesEngine/_Imports.razor | 24 - .../_Imports.razor.cs | 9 - .../wwwroot/img/End.svg | 1 - .../ThingsGateway.Debug.Razor/Startup.cs | 2 +- .../OpcUaMaster/OpcUaMaster.cs | 2 +- .../GlobalUsings.cs | 9 +- src/ThingsGateway.OnlyApi/Program.cs | 105 ++++ .../Properties/launchSettings.json | 47 ++ src/ThingsGateway.OnlyApi/Startup.cs | 464 ++++++++++++++++++ .../ThingsGateway.OnlyApi.csproj | 116 +++++ src/ThingsGateway.OnlyApi/favicon.ico | Bin 0 -> 4286 bytes src/ThingsGateway.Photino/Startup.cs | 10 +- .../ThingsGateway.Photino.csproj | 2 - .../Configuration/App.Development.json | 1 + .../Configuration/App.json | 1 + src/ThingsGateway.Server/Program/Program.cs | 4 +- .../Program/SingleFilePublish.cs | 1 + src/ThingsGateway.Server/Program/Startup.cs | 10 +- .../ThingsGateway.Server.csproj | 4 - .../targets/Gateway.targets | 78 +-- .../targets/GatewayOther.targets | 71 --- .../Model/UpdateZipFile.cs | 4 +- src/Upgrade/ThingsGateway.Upgrade/Startup.cs | 3 +- .../Program/Startup.cs | 10 +- 259 files changed, 1523 insertions(+), 1048 deletions(-) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Anchors/Anchor.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Anchors/DynamicAnchor.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Anchors/LinkAnchor.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Anchors/PositionAnchor.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Anchors/ShapeIntersectionAnchor.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Anchors/SinglePortAnchor.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behaviors/DebugEventsBehavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behaviors/DragMovablesBehavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behaviors/DragNewLinkBehavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behaviors/EventsBehavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behaviors/KeyboardShortcutsBehavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behaviors/KeyboardShortcutsDefaults.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behaviors/PanBehavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behaviors/SelectionBehavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behaviors/VirtualizationBehavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Behaviors/ZoomBehavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Controls/Control.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Controls/ControlsBehavior.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Controls/ControlsContainer.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Controls/ControlsLayer.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Controls/ControlsType.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Controls/Default/ArrowHeadControl.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Controls/Default/BoundaryControl.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Controls/Default/DragNewLinkControl.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Controls/Default/RemoveControl.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Controls/ExecutableControl.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Delegates.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Diagram.cs (98%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/DiagramsException.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Events/KeyboardEventArgs.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Events/MouseEventArgs.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Events/PointerEventArgs.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Events/TouchEventArgs.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Events/WheelEventArgs.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Extensions/DiagramExtensions.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Extensions/DoubleExtensions.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Extensions/NumberExtensions.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Geometry/BezierSpline.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Geometry/Ellipse.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Geometry/IShape.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Geometry/Line.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Geometry/Point.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Geometry/Rectangle.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Geometry/Shapes.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Geometry/Size.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Layers/BaseLayer.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Layers/GroupLayer.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Layers/LinkLayer.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Layers/NodeLayer.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/LinksReconnectionAlgorithms.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/Base/BaseLinkModel.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/Base/IHasBounds.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/Base/IHasShape.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/Base/ILinkable.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/Base/Model.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/Base/MovableModel.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/Base/SelectableModel.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/GroupModel.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/LinkLabelModel.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/LinkMarker.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/LinkModel.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/LinkVertexModel.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/NodeModel.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/PortAlignment.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Models/PortModel.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/MouseEventButton.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Options/DiagramConstraintsOptions.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Options/DiagramGroupOptions.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Options/DiagramLinkOptions.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Options/DiagramOptions.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Options/DiagramVirtualizationOptions.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Options/DiagramZoomOptions.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/PathGenerators/PathGenerator.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/PathGenerators/PathGeneratorResult.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/PathGenerators/SmoothPathGenerator.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/PathGenerators/StraightPathGenerator.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Positions/BoundsBasedPositionProvider.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Positions/IPositionProvider.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Positions/LinkPathPositionProvider.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Positions/ShapeAnglePositionProvider.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Routers/NormalRouter.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Routers/OrthogonalRouter.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Routers/Router.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/Core/Utils/KeysUtils.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Blazor.Diagrams.Core}/GlobalUsings.cs (81%) create mode 100644 src/Gateway/ThingsGateway.Blazor.Diagrams.Core/README.md create mode 100644 src/Gateway/ThingsGateway.Blazor.Diagrams.Core/README.zh-CN.md rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/ArcCommand.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/ArcUtils.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/Base/ICommand.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/Base/PartProperties.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/Base/Point.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/Base/PointProperties.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/Base/Rect.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/BezierCommand.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/BezierFunctions.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/BezierValues.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/CurveMinMax.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/LineCommand.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/MoveCommand.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/Parser.cs (100%) rename src/Gateway/{ThingsGateway.Blazor.Diagrams => ThingsGateway.Blazor.Diagrams.Core}/SvgPathProperties/SvgPath.cs (100%) create mode 100644 src/Gateway/ThingsGateway.Blazor.Diagrams.Core/ThingsGateway.Blazor.Diagrams.Core.csproj create mode 100644 src/Gateway/ThingsGateway.Blazor.Diagrams.Core/_Imports.razor rename src/Gateway/{ThingsGateway.Management/Controler => ThingsGateway.Gateway.Application/Controller}/AutoUpdateController.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application}/SeedData/Management/seed_sys_dict.json (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application}/SeedData/Management/seed_sys_resource.json (100%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application}/SeedData/RulesEngine/seed_sys_resource.json (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application}/SeedData/SysDictSeedData.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Helper/DeviceDataWithValue.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Helper/VariableDataWithValue.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Management/GatewayRedundantSerivce.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Management/IRedundancyHostedService.cs (93%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Management/IRedundancyService.cs (96%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Management/RedundancyHostedService.cs (99%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Management/RedundancyOptions.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Management/RedundancyService.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Management/ReverseCallbackServer.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Update/Services/IUpdateZipFileService.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Update/Services/UpdateZipFileHostedService.cs (99%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Update/Services/UpgradeRpcServer.cs (100%) rename src/Gateway/{ThingsGateway.Management => ThingsGateway.Gateway.Application/Services/Management}/Update/Util/RestartServerHelper.cs (100%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Attributes/CategoryNode.cs (55%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Attributes/ModelValue.cs (50%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Entity/Rules.cs (88%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Helps/RuleHelpers.cs (76%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/Actuator/ExecuteScriptNode.cs (90%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/Actuator/VariableRpcNode.cs (74%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/BaseNode.cs (63%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/Expression/ConditionNode.cs (64%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/Expression/DataNode.cs (70%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/Expression/DelayNode.cs (57%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/INode.cs (94%) create mode 100644 src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/IStartNode.cs rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/NodeInput.cs (88%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/NodeOutput.cs (88%) create mode 100644 src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/NumberNode.cs create mode 100644 src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/PlaceholderNode.cs create mode 100644 src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Start/StartNode.cs create mode 100644 src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/TextNode.cs rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/Trigger/AlarmChangedTriggerNode.cs (91%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/Trigger/DeviceChangedTriggerNode.cs (89%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/Trigger/TimeIntervalTriggerNode.cs (78%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/Trigger/ValueChangedTriggerNode.cs (90%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Node/VariableNode.cs (70%) create mode 100644 src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/DefaultDiagram.cs rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Services/IRulesEngineHostedService.cs (84%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Services/IRulesService.cs (95%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Services/RulesEngineHostedService.cs (89%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Application/Services/RulesEngine}/Services/RulesService.cs (98%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/Authentication.razor (100%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/Authentication.razor.cs (100%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/RedundancyOptionsHeader.razor (100%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/RedundancyOptionsHeader.razor.cs (100%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/RedundancyOptionsPage.razor (100%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/RedundancyOptionsPage.razor.cs (95%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/RedundancyOptionsPage.razor.css (100%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/SystemConfigPage.razor (84%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/SystemConfigPage.razor.cs (93%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/SystemConfigPage.razor.css (100%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/UpdateZipFileInfo.razor (90%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/UpdateZipFileInfo.razor.cs (89%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/UpdateZipFilePage.razor (91%) rename src/Gateway/{ThingsGateway.Management/Pages => ThingsGateway.Gateway.Razor/Pages/Management}/UpdateZipFilePage.razor.cs (94%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/CSharpScriptWidget.razor (94%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/CSharpScriptWidget.razor.cs (95%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/DefaultWidget.razor (75%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/DeviceWidget.razor (93%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/DragComponent.razor (92%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/NumberWidget.razor (87%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/ScriptEdit.razor (97%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/ScriptEdit.razor.cs (92%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/TextWidget.razor (87%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/VariableWidget.razor (97%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/Component/VariableWidget.razor.cs (95%) rename src/Gateway/{ThingsGateway.RulesEngine/Page => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/DragAndDrop.razor (86%) rename src/Gateway/{ThingsGateway.RulesEngine/Page => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/DragAndDrop.razor.cs (87%) rename src/Gateway/{ThingsGateway.RulesEngine/Page => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/DragAndDrop.razor.css (100%) rename src/Gateway/{ThingsGateway.RulesEngine/Page => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/RulesPage.razor (94%) rename src/Gateway/{ThingsGateway.RulesEngine/Page => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/RulesPage.razor.cs (97%) rename src/Gateway/{ThingsGateway.RulesEngine/Page => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/RulesPage.razor.js (100%) rename src/Gateway/{ThingsGateway.RulesEngine/Page => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/RulesStatus.razor (90%) rename src/Gateway/{ThingsGateway.RulesEngine/Page => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/RulesStatus.razor.cs (87%) rename src/Gateway/{ThingsGateway.RulesEngine/Page => ThingsGateway.Gateway.Razor/Pages/RulesEngine}/RulesStatus.razor.css (100%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor}/wwwroot/img/CSharpScript.svg (100%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor}/wwwroot/img/Delay.svg (100%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor}/wwwroot/img/Rpc.svg (100%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor}/wwwroot/img/Start.svg (100%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor}/wwwroot/img/TimeInterval.svg (100%) rename src/Gateway/{ThingsGateway.RulesEngine => ThingsGateway.Gateway.Razor}/wwwroot/img/ValueChanged.svg (100%) delete mode 100644 src/Gateway/ThingsGateway.Management/FodyWeavers.xml delete mode 100644 src/Gateway/ThingsGateway.Management/Locales/en-US.json delete mode 100644 src/Gateway/ThingsGateway.Management/Locales/zh-CN.json delete mode 100644 src/Gateway/ThingsGateway.Management/SeedData/SysResourceSeedData.cs delete mode 100644 src/Gateway/ThingsGateway.Management/Startup.cs delete mode 100644 src/Gateway/ThingsGateway.Management/ThingsGateway.Management.csproj delete mode 100644 src/Gateway/ThingsGateway.Management/_Imports.razor delete mode 100644 src/Gateway/ThingsGateway.Management/_Imports.razor.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Component/PlaceholderModel.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Component/ThingsGatewayRulesEngineComponentBase.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/FodyWeavers.xml delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Job/LogJob.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Locales/AppResource.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Locales/en-US.json delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Locales/zh-CN.json delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Node/NumberNode.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Node/Start/EndNode.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Node/Start/StartNode.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Node/TextNode.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/SeedData/SysResourceSeedData.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/Startup.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/ThingsGateway.RulesEngine.csproj delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/_Imports.razor delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/_Imports.razor.cs delete mode 100644 src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/End.svg rename src/{Gateway/ThingsGateway.RulesEngine => ThingsGateway.OnlyApi}/GlobalUsings.cs (74%) create mode 100644 src/ThingsGateway.OnlyApi/Program.cs create mode 100644 src/ThingsGateway.OnlyApi/Properties/launchSettings.json create mode 100644 src/ThingsGateway.OnlyApi/Startup.cs create mode 100644 src/ThingsGateway.OnlyApi/ThingsGateway.OnlyApi.csproj create mode 100644 src/ThingsGateway.OnlyApi/favicon.ico delete mode 100644 src/ThingsGateway.Server/targets/GatewayOther.targets diff --git a/src/Admin/ThingsGateway.Admin.Application/Startup.cs b/src/Admin/ThingsGateway.Admin.Application/Startup.cs index 4ecf81220..1993635eb 100644 --- a/src/Admin/ThingsGateway.Admin.Application/Startup.cs +++ b/src/Admin/ThingsGateway.Admin.Application/Startup.cs @@ -67,7 +67,7 @@ public class Startup : AppStartup } - public void Use(IApplicationBuilder applicationBuilder) + public void Use(IServiceProvider serviceProvider) { //检查ConfigId var configIdGroup = DbContext.DbConfigs.GroupBy(it => it.ConfigId); diff --git a/src/Admin/ThingsGateway.AdminServer/Configuration/App.Development.json b/src/Admin/ThingsGateway.AdminServer/Configuration/App.Development.json index 8a4828cb5..1a7f4775e 100644 --- a/src/Admin/ThingsGateway.AdminServer/Configuration/App.Development.json +++ b/src/Admin/ThingsGateway.AdminServer/Configuration/App.Development.json @@ -14,6 +14,7 @@ "ThingsGateway.SqlSugar", "ThingsGateway.Admin.Application", "ThingsGateway.Admin.Razor", + "ThingsGateway.DB", "ThingsGateway.Razor" ] }, diff --git a/src/Admin/ThingsGateway.AdminServer/Configuration/App.json b/src/Admin/ThingsGateway.AdminServer/Configuration/App.json index 726a2e208..0beae8fbc 100644 --- a/src/Admin/ThingsGateway.AdminServer/Configuration/App.json +++ b/src/Admin/ThingsGateway.AdminServer/Configuration/App.json @@ -14,6 +14,7 @@ "ThingsGateway.SqlSugar", "ThingsGateway.Admin.Application", "ThingsGateway.Admin.Razor", + "ThingsGateway.DB", "ThingsGateway.Razor" ] }, diff --git a/src/Admin/ThingsGateway.AdminServer/Program/SingleFilePublish.cs b/src/Admin/ThingsGateway.AdminServer/Program/SingleFilePublish.cs index 6eb6612d9..362c88bfb 100644 --- a/src/Admin/ThingsGateway.AdminServer/Program/SingleFilePublish.cs +++ b/src/Admin/ThingsGateway.AdminServer/Program/SingleFilePublish.cs @@ -40,6 +40,7 @@ public class SingleFilePublish : ISingleFilePublish "ThingsGateway.NewLife.X", "ThingsGateway.Razor", "ThingsGateway.Admin.Razor" , + "ThingsGateway.DB", "ThingsGateway.Admin.Application", "ThingsGateway.SqlSugar", ]; diff --git a/src/Admin/ThingsGateway.AdminServer/Program/Startup.cs b/src/Admin/ThingsGateway.AdminServer/Program/Startup.cs index a43f901f7..092778b22 100644 --- a/src/Admin/ThingsGateway.AdminServer/Program/Startup.cs +++ b/src/Admin/ThingsGateway.AdminServer/Program/Startup.cs @@ -48,11 +48,11 @@ public class Startup : AppStartup }); - // 事件总线 - services.AddEventBus(options => - { + //// 事件总线 + //services.AddEventBus(options => + //{ - }); + //}); // 任务调度 services.AddSchedule(options => @@ -151,8 +151,6 @@ public class Startup : AppStartup }); - services.AddHealthChecks(); - #region 控制台美化 diff --git a/src/Admin/ThingsGateway.DB/SqlSugar/CodeFirstUtils.cs b/src/Admin/ThingsGateway.DB/SqlSugar/CodeFirstUtils.cs index 5036b7a40..7f9bb0018 100644 --- a/src/Admin/ThingsGateway.DB/SqlSugar/CodeFirstUtils.cs +++ b/src/Admin/ThingsGateway.DB/SqlSugar/CodeFirstUtils.cs @@ -66,7 +66,8 @@ public static class CodeFirstUtils { // 按主键进行批量增加和更新 var storage = db.StorageableByObject(seedData.ToList()).ToStorage(); - if (ignoreAdd == null) storage.AsInsertable.ExecuteCommand();//执行插入 + if (ignoreAdd == null) + storage.AsInsertable.ExecuteCommand();//执行插入 if (ignoreUpdate == null && config.IsUpdateSeedData) storage.AsUpdateable.ExecuteCommand();//只有没有忽略更新的特性才执行更新 } else// 没有主键或者不是预定义的主键(有重复的可能) diff --git a/src/Admin/ThingsGateway.DB/Startup.cs b/src/Admin/ThingsGateway.DB/Startup.cs index fe9d1f7bd..e36848e17 100644 --- a/src/Admin/ThingsGateway.DB/Startup.cs +++ b/src/Admin/ThingsGateway.DB/Startup.cs @@ -32,11 +32,10 @@ public class Startup : AppStartup StaticConfig.EnableAllWhereIF = true; - services.AddSingleton(); } - public void Use(IApplicationBuilder applicationBuilder) + public void Use(IServiceProvider serviceProvider) { diff --git a/src/Admin/ThingsGateway.Furion/DynamicApiController/Internal/Penetrates.cs b/src/Admin/ThingsGateway.Furion/DynamicApiController/Internal/Penetrates.cs index d6c873123..f918dd928 100644 --- a/src/Admin/ThingsGateway.Furion/DynamicApiController/Internal/Penetrates.cs +++ b/src/Admin/ThingsGateway.Furion/DynamicApiController/Internal/Penetrates.cs @@ -67,13 +67,13 @@ internal static class Penetrates ["patch"] = "PATCH" }; - IsApiControllerCached = new ConcurrentDictionary(); + //IsApiControllerCached = new ConcurrentDictionary(); } - /// - /// 缓存集合 - /// - private static readonly ConcurrentDictionary IsApiControllerCached; + ///// + ///// 缓存集合 + ///// + //private static readonly ConcurrentDictionary IsApiControllerCached; /// /// 是否是Api控制器 @@ -82,8 +82,8 @@ internal static class Penetrates /// internal static bool IsApiController(Type type) { - return IsApiControllerCached.GetOrAdd(type, Function); - + //return IsApiControllerCached.GetOrAdd(type, Function); + return Function(type); // 本地静态方法 static bool Function(Type type) { diff --git a/src/Admin/ThingsGateway.Razor/Startup.cs b/src/Admin/ThingsGateway.Razor/Startup.cs index 3fdacb32e..715e985e1 100644 --- a/src/Admin/ThingsGateway.Razor/Startup.cs +++ b/src/Admin/ThingsGateway.Razor/Startup.cs @@ -59,7 +59,7 @@ public class Startup : AppStartup } /// - public void Use(IApplicationBuilder applicationBuilder) + public void Use(IServiceProvider serviceProvider) { } } diff --git a/src/Admin/ThingsGateway.SqlSugar/Sugar/IntegrationServices/CacheService.cs b/src/Admin/ThingsGateway.SqlSugar/Sugar/IntegrationServices/CacheService.cs index 2512fff31..966da1e0b 100644 --- a/src/Admin/ThingsGateway.SqlSugar/Sugar/IntegrationServices/CacheService.cs +++ b/src/Admin/ThingsGateway.SqlSugar/Sugar/IntegrationServices/CacheService.cs @@ -117,7 +117,7 @@ } } } - internal static class ReflectionInoHelper + public static class ReflectionInoHelper { private static List removeActions = new List(); internal static void AddRemoveFunc(Action removeAction) diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/Anchor.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/Anchor.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/Anchor.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/Anchor.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/DynamicAnchor.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/DynamicAnchor.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/DynamicAnchor.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/DynamicAnchor.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/LinkAnchor.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/LinkAnchor.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/LinkAnchor.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/LinkAnchor.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/PositionAnchor.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/PositionAnchor.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/PositionAnchor.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/PositionAnchor.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/ShapeIntersectionAnchor.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/ShapeIntersectionAnchor.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/ShapeIntersectionAnchor.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/ShapeIntersectionAnchor.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/SinglePortAnchor.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/SinglePortAnchor.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Anchors/SinglePortAnchor.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Anchors/SinglePortAnchor.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/DebugEventsBehavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/DebugEventsBehavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/DebugEventsBehavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/DebugEventsBehavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/DragMovablesBehavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/DragMovablesBehavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/DragMovablesBehavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/DragMovablesBehavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/DragNewLinkBehavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/DragNewLinkBehavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/DragNewLinkBehavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/DragNewLinkBehavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/EventsBehavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/EventsBehavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/EventsBehavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/EventsBehavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/KeyboardShortcutsBehavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/KeyboardShortcutsBehavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/KeyboardShortcutsBehavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/KeyboardShortcutsBehavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/KeyboardShortcutsDefaults.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/KeyboardShortcutsDefaults.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/KeyboardShortcutsDefaults.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/KeyboardShortcutsDefaults.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/PanBehavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/PanBehavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/PanBehavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/PanBehavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/SelectionBehavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/SelectionBehavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/SelectionBehavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/SelectionBehavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/VirtualizationBehavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/VirtualizationBehavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/VirtualizationBehavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/VirtualizationBehavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/ZoomBehavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/ZoomBehavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Behaviors/ZoomBehavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Behaviors/ZoomBehavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/Control.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/Control.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/Control.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/Control.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/ControlsBehavior.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/ControlsBehavior.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/ControlsBehavior.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/ControlsBehavior.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/ControlsContainer.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/ControlsContainer.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/ControlsContainer.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/ControlsContainer.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/ControlsLayer.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/ControlsLayer.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/ControlsLayer.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/ControlsLayer.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/ControlsType.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/ControlsType.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/ControlsType.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/ControlsType.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/Default/ArrowHeadControl.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/Default/ArrowHeadControl.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/Default/ArrowHeadControl.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/Default/ArrowHeadControl.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/Default/BoundaryControl.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/Default/BoundaryControl.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/Default/BoundaryControl.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/Default/BoundaryControl.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/Default/DragNewLinkControl.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/Default/DragNewLinkControl.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/Default/DragNewLinkControl.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/Default/DragNewLinkControl.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/Default/RemoveControl.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/Default/RemoveControl.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/Default/RemoveControl.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/Default/RemoveControl.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/ExecutableControl.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/ExecutableControl.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Controls/ExecutableControl.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Controls/ExecutableControl.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Delegates.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Delegates.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Delegates.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Delegates.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Diagram.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Diagram.cs similarity index 98% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Diagram.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Diagram.cs index ad0e4e12b..6ca53abfa 100644 --- a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Diagram.cs +++ b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Diagram.cs @@ -9,10 +9,6 @@ using ThingsGateway.Blazor.Diagrams.Core.Layers; using ThingsGateway.Blazor.Diagrams.Core.Models.Base; using ThingsGateway.Blazor.Diagrams.Core.Options; -[assembly: InternalsVisibleTo("ThingsGateway.Blazor.Diagrams")] -[assembly: InternalsVisibleTo("ThingsGateway.Blazor.Diagrams.Tests")] -[assembly: InternalsVisibleTo("ThingsGateway.Blazor.Diagrams.Core.Tests")] - namespace ThingsGateway.Blazor.Diagrams.Core; public abstract class Diagram diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/DiagramsException.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/DiagramsException.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/DiagramsException.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/DiagramsException.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Events/KeyboardEventArgs.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Events/KeyboardEventArgs.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Events/KeyboardEventArgs.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Events/KeyboardEventArgs.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Events/MouseEventArgs.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Events/MouseEventArgs.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Events/MouseEventArgs.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Events/MouseEventArgs.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Events/PointerEventArgs.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Events/PointerEventArgs.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Events/PointerEventArgs.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Events/PointerEventArgs.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Events/TouchEventArgs.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Events/TouchEventArgs.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Events/TouchEventArgs.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Events/TouchEventArgs.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Events/WheelEventArgs.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Events/WheelEventArgs.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Events/WheelEventArgs.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Events/WheelEventArgs.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Extensions/DiagramExtensions.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Extensions/DiagramExtensions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Extensions/DiagramExtensions.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Extensions/DiagramExtensions.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Extensions/DoubleExtensions.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Extensions/DoubleExtensions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Extensions/DoubleExtensions.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Extensions/DoubleExtensions.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Extensions/NumberExtensions.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Extensions/NumberExtensions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Extensions/NumberExtensions.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Extensions/NumberExtensions.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/BezierSpline.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/BezierSpline.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/BezierSpline.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/BezierSpline.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Ellipse.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Ellipse.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Ellipse.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Ellipse.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/IShape.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/IShape.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/IShape.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/IShape.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Line.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Line.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Line.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Line.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Point.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Point.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Point.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Point.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Rectangle.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Rectangle.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Rectangle.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Rectangle.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Shapes.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Shapes.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Shapes.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Shapes.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Size.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Size.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Geometry/Size.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Geometry/Size.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Layers/BaseLayer.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Layers/BaseLayer.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Layers/BaseLayer.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Layers/BaseLayer.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Layers/GroupLayer.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Layers/GroupLayer.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Layers/GroupLayer.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Layers/GroupLayer.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Layers/LinkLayer.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Layers/LinkLayer.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Layers/LinkLayer.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Layers/LinkLayer.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Layers/NodeLayer.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Layers/NodeLayer.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Layers/NodeLayer.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Layers/NodeLayer.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/LinksReconnectionAlgorithms.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/LinksReconnectionAlgorithms.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/LinksReconnectionAlgorithms.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/LinksReconnectionAlgorithms.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/BaseLinkModel.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/BaseLinkModel.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/BaseLinkModel.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/BaseLinkModel.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/IHasBounds.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/IHasBounds.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/IHasBounds.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/IHasBounds.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/IHasShape.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/IHasShape.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/IHasShape.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/IHasShape.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/ILinkable.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/ILinkable.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/ILinkable.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/ILinkable.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/Model.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/Model.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/Model.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/Model.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/MovableModel.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/MovableModel.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/MovableModel.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/MovableModel.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/SelectableModel.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/SelectableModel.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/Base/SelectableModel.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/Base/SelectableModel.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/GroupModel.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/GroupModel.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/GroupModel.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/GroupModel.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/LinkLabelModel.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/LinkLabelModel.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/LinkLabelModel.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/LinkLabelModel.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/LinkMarker.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/LinkMarker.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/LinkMarker.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/LinkMarker.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/LinkModel.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/LinkModel.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/LinkModel.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/LinkModel.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/LinkVertexModel.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/LinkVertexModel.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/LinkVertexModel.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/LinkVertexModel.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/NodeModel.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/NodeModel.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/NodeModel.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/NodeModel.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/PortAlignment.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/PortAlignment.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/PortAlignment.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/PortAlignment.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/PortModel.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/PortModel.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Models/PortModel.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Models/PortModel.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/MouseEventButton.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/MouseEventButton.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/MouseEventButton.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/MouseEventButton.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramConstraintsOptions.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramConstraintsOptions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramConstraintsOptions.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramConstraintsOptions.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramGroupOptions.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramGroupOptions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramGroupOptions.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramGroupOptions.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramLinkOptions.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramLinkOptions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramLinkOptions.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramLinkOptions.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramOptions.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramOptions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramOptions.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramOptions.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramVirtualizationOptions.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramVirtualizationOptions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramVirtualizationOptions.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramVirtualizationOptions.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramZoomOptions.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramZoomOptions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Options/DiagramZoomOptions.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Options/DiagramZoomOptions.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/PathGenerators/PathGenerator.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/PathGenerators/PathGenerator.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/PathGenerators/PathGenerator.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/PathGenerators/PathGenerator.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/PathGenerators/PathGeneratorResult.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/PathGenerators/PathGeneratorResult.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/PathGenerators/PathGeneratorResult.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/PathGenerators/PathGeneratorResult.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/PathGenerators/SmoothPathGenerator.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/PathGenerators/SmoothPathGenerator.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/PathGenerators/SmoothPathGenerator.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/PathGenerators/SmoothPathGenerator.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/PathGenerators/StraightPathGenerator.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/PathGenerators/StraightPathGenerator.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/PathGenerators/StraightPathGenerator.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/PathGenerators/StraightPathGenerator.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Positions/BoundsBasedPositionProvider.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Positions/BoundsBasedPositionProvider.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Positions/BoundsBasedPositionProvider.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Positions/BoundsBasedPositionProvider.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Positions/IPositionProvider.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Positions/IPositionProvider.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Positions/IPositionProvider.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Positions/IPositionProvider.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Positions/LinkPathPositionProvider.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Positions/LinkPathPositionProvider.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Positions/LinkPathPositionProvider.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Positions/LinkPathPositionProvider.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Positions/ShapeAnglePositionProvider.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Positions/ShapeAnglePositionProvider.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Positions/ShapeAnglePositionProvider.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Positions/ShapeAnglePositionProvider.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Routers/NormalRouter.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Routers/NormalRouter.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Routers/NormalRouter.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Routers/NormalRouter.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Routers/OrthogonalRouter.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Routers/OrthogonalRouter.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Routers/OrthogonalRouter.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Routers/OrthogonalRouter.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Routers/Router.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Routers/Router.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Routers/Router.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Routers/Router.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Utils/KeysUtils.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Utils/KeysUtils.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/Core/Utils/KeysUtils.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/Core/Utils/KeysUtils.cs diff --git a/src/Gateway/ThingsGateway.Management/GlobalUsings.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/GlobalUsings.cs similarity index 81% rename from src/Gateway/ThingsGateway.Management/GlobalUsings.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/GlobalUsings.cs index 97615e340..9f73fcc29 100644 --- a/src/Gateway/ThingsGateway.Management/GlobalUsings.cs +++ b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/GlobalUsings.cs @@ -8,7 +8,4 @@ // QQ群:605534569 //------------------------------------------------------------------------------ -global using Microsoft.Extensions.DependencyInjection; -global using ThingsGateway.Admin.Application; -global using ThingsGateway.Foundation; diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/README.md b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/README.md new file mode 100644 index 000000000..4621325fa --- /dev/null +++ b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/README.md @@ -0,0 +1 @@ +https://github.com/Blazor-Diagrams/Blazor.Diagrams diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/README.zh-CN.md b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/README.zh-CN.md new file mode 100644 index 000000000..ba92d97dd --- /dev/null +++ b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/README.zh-CN.md @@ -0,0 +1 @@ +代码来自 https://github.com/Blazor-Diagrams/Blazor.Diagrams diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/ArcCommand.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/ArcCommand.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/ArcCommand.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/ArcCommand.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/ArcUtils.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/ArcUtils.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/ArcUtils.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/ArcUtils.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Base/ICommand.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Base/ICommand.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Base/ICommand.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Base/ICommand.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Base/PartProperties.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Base/PartProperties.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Base/PartProperties.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Base/PartProperties.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Base/Point.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Base/Point.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Base/Point.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Base/Point.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Base/PointProperties.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Base/PointProperties.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Base/PointProperties.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Base/PointProperties.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Base/Rect.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Base/Rect.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Base/Rect.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Base/Rect.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/BezierCommand.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/BezierCommand.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/BezierCommand.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/BezierCommand.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/BezierFunctions.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/BezierFunctions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/BezierFunctions.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/BezierFunctions.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/BezierValues.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/BezierValues.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/BezierValues.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/BezierValues.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/CurveMinMax.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/CurveMinMax.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/CurveMinMax.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/CurveMinMax.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/LineCommand.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/LineCommand.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/LineCommand.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/LineCommand.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/MoveCommand.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/MoveCommand.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/MoveCommand.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/MoveCommand.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Parser.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Parser.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/Parser.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/Parser.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/SvgPath.cs b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/SvgPath.cs similarity index 100% rename from src/Gateway/ThingsGateway.Blazor.Diagrams/SvgPathProperties/SvgPath.cs rename to src/Gateway/ThingsGateway.Blazor.Diagrams.Core/SvgPathProperties/SvgPath.cs diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/ThingsGateway.Blazor.Diagrams.Core.csproj b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/ThingsGateway.Blazor.Diagrams.Core.csproj new file mode 100644 index 000000000..da4e6d80c --- /dev/null +++ b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/ThingsGateway.Blazor.Diagrams.Core.csproj @@ -0,0 +1,18 @@ + + + + + + net8.0;net9.0 + + + + + + + + + + + + diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/_Imports.razor b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/_Imports.razor new file mode 100644 index 000000000..a1de88f40 --- /dev/null +++ b/src/Gateway/ThingsGateway.Blazor.Diagrams.Core/_Imports.razor @@ -0,0 +1,23 @@ + +@using System.Net.Http +@using System.Net.Http.Json +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop +@using Microsoft.AspNetCore.Authorization +@using System.ComponentModel +@using System.ComponentModel.DataAnnotations + +@using ThingsGateway.Blazor.Diagrams.Core; +@using ThingsGateway.Blazor.Diagrams.Core.Extensions; +@using ThingsGateway.Blazor.Diagrams.Core.Models; +@using ThingsGateway.Blazor.Diagrams.Core.Models.Base; +@using ThingsGateway.Blazor.Diagrams.Components.Renderers +@using ThingsGateway.Blazor.Diagrams.Core.Geometry; +@using ThingsGateway.Blazor.Diagrams.Models; +@using ThingsGateway.Blazor.Diagrams.Components.Controls; +@using ThingsGateway.Blazor.Diagrams.Core.Controls; +@using ThingsGateway.Blazor.Diagrams.Core.Controls.Default; +@using ThingsGateway.Blazor.Diagrams.Extensions; diff --git a/src/Gateway/ThingsGateway.Blazor.Diagrams/ThingsGateway.Blazor.Diagrams.csproj b/src/Gateway/ThingsGateway.Blazor.Diagrams/ThingsGateway.Blazor.Diagrams.csproj index 28ce3cabc..1dd6aa0e9 100644 --- a/src/Gateway/ThingsGateway.Blazor.Diagrams/ThingsGateway.Blazor.Diagrams.csproj +++ b/src/Gateway/ThingsGateway.Blazor.Diagrams/ThingsGateway.Blazor.Diagrams.csproj @@ -25,6 +25,9 @@ + + + diff --git a/src/Gateway/ThingsGateway.Management/Controler/AutoUpdateController.cs b/src/Gateway/ThingsGateway.Gateway.Application/Controller/AutoUpdateController.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Controler/AutoUpdateController.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Controller/AutoUpdateController.cs diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Job/LogJob.cs b/src/Gateway/ThingsGateway.Gateway.Application/Job/LogJob.cs index 6973d857b..b62836d7d 100644 --- a/src/Gateway/ThingsGateway.Gateway.Application/Job/LogJob.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Job/LogJob.cs @@ -63,6 +63,17 @@ public class LogJob : IJob Delete(deviceBaseDir, deviceNames, stoppingToken); + + //网关通道日志以通道id命名 + var rulesService = App.RootServices.GetService(); + var ruleNames = (await rulesService.GetAllAsync().ConfigureAwait(false)).Select(a => a.Name.ToString()).ToHashSet(); + var ruleBaseDir = RulesEngineHostedService.LogDir; + Directory.CreateDirectory(ruleBaseDir); + + Delete(ruleBaseDir, ruleNames, stoppingToken); + + + //底层调试 var debugDir = LoggerExtensions.GetDebugLogBasePath(); Directory.CreateDirectory(debugDir); diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Locales/AppResource.cs b/src/Gateway/ThingsGateway.Gateway.Application/Locales/AppResource.cs index 0adb62f5d..6a4205ec1 100644 --- a/src/Gateway/ThingsGateway.Gateway.Application/Locales/AppResource.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Locales/AppResource.cs @@ -12,6 +12,9 @@ namespace ThingsGateway.Gateway.Application; public static class AppResource { + + public static string RulesEngineTaskStart => ThingsGateway.Foundation.AppResource.Lang == Language.Chinese ? ChineseResource.RulesEngineTaskStart : EnglishResource.RulesEngineTaskStart; + public static string RealAlarmTaskStart => ThingsGateway.Foundation.AppResource.Lang == Language.Chinese ? ChineseResource.RealAlarmTaskStart : EnglishResource.RealAlarmTaskStart; public static string IntervalInsertAlarmFail => ThingsGateway.Foundation.AppResource.Lang == Language.Chinese ? ChineseResource.IntervalInsertAlarmFail : EnglishResource.IntervalInsertAlarmFail; public static string IntervalInsertDeviceFail => ThingsGateway.Foundation.AppResource.Lang == Language.Chinese ? ChineseResource.IntervalInsertDeviceFail : EnglishResource.IntervalInsertDeviceFail; @@ -44,6 +47,7 @@ public static class AppResource public static class ChineseResource { + public const string RulesEngineTaskStart = "规则引擎线程启动"; public const string RealAlarmTaskStart = "实时报警服务启动"; public const string IntervalInsertAlarmFail = "间隔上传报警失败"; @@ -80,6 +84,8 @@ public static class ChineseResource public static class EnglishResource { + public const string RulesEngineTaskStart = "Rules engine service started"; + public const string RealAlarmTaskStart = "Real-time alarm service started"; public const string IntervalInsertAlarmFail = "Failed to upload alarms periodically"; public const string IntervalInsertDeviceFail = "Failed to upload device data periodically"; diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Locales/en-US.json b/src/Gateway/ThingsGateway.Gateway.Application/Locales/en-US.json index c4a359b39..b66540069 100644 --- a/src/Gateway/ThingsGateway.Gateway.Application/Locales/en-US.json +++ b/src/Gateway/ThingsGateway.Gateway.Application/Locales/en-US.json @@ -1,4 +1,118 @@ { + + "ThingsGateway.Gateway.Application.DefaultDiagram": { + + "Actuator": "Actuator", + "AlarmChangedTriggerNode": "AlarmStateTrigger", + "BusinessNode": "BusinessDeviceExecution", + "BusinessNode.Placeholder": "BusinessDeviceName", + "Cancel": "Cancel", + "Clear": "Clear", + "ConditionNode": "Condition", + "ConditionNode.Placeholder": "Calculation returns boolean", + "DataNode": "DataScript", + "DelayNode": "Delay", + "DelayNode.Placeholder": "Interval Time (ms)", + "Design": "Design", + "Device.Placeholder": "DeviceName", + "DeviceChangedTriggerNode": "DeviceStateTrigger", + "Download": "Download JSON", + "End": "End", + "EndNode": "End", + "ExecuteScriptNode": "CustomExecution", + "Expression": "Script", + "Load": "Load JSON", + "Other": "Other", + "Save": "Save", + "Start": "Start", + "Start/End": "Start/End", + "StartNode": "Start", + "TimeIntervalTriggerNode": "IntervalExecutionTrigger", + "TimeIntervalTriggerNode.Placeholder": "IntervalTime (ms)", + "Trigger": "Trigger", + "ValueChangedTriggerNode": "VariableStateTrigger", + "Variable.Placeholder": "VariableName", + "VariableRpcNode": "VariableRpc", + "VariableRpcNode.Placeholder": "VariableName", + "ZoomToFit": "ZoomToFit" + + }, + + "ThingsGateway.Gateway.Application.Rules": { + "ClearRules": "ClearRules", + "DeleteRules": "DeleteRules", + "Name": "Name", + "SaveRules": "SaveRules", + "SortCode": "SortCode", + "Status": "Status" + }, + + "ThingsGateway.Gateway.Application.RulesStatus": { + "LogConsole": "Log", + "RulesId": "Name" + }, + + "ThingsGateway.Management.Authentication": { + "AuthName": "AuthName", + "Authorized": "Authorized", + "ExpireTime": "ExpireTime", + "Password": "Password", + "Register": "Register", + "RegisterStatus": "RegisterStatus", + "Unauthorized": "Unauthorized", + "Unregister": "Unregister", + "UUID": "UUID" + }, + "ThingsGateway.Management.AutoUpdateController": { + "AutoUpdateController": "AutoUpdate", + "Update": "Update" + }, + "ThingsGateway.Management.RedundancyHostedService": { + "ErrorSynchronizingData": "Synchronize data to standby site error", + "RedundancyDisable": "Redundant gateway site not enabled", + "RedundancyDup": "Redundant station settings duplicated", + "Start": "Gateway management service started", + "Stop": "Gateway management service stopped", + "SwitchMasterState": "Cannot connect to redundant site, local machine will switch to normal state", + "SwitchNormalState": "Local machine (primary site) will switch to normal state", + "SwitchSlaveState": "Master site has recovered, local machine (standby) will switch to standby state" + }, + "ThingsGateway.Management.RedundancyOptions": { + "Confirm": "Confirm switching to redundant state", + "Enable": "Enable Dual-Machine Redundancy", + "ForcedSync": "Forced Synchronous", + "ForcedSyncWarning": "Forcing synchronization will generate database configuration information.Are you sure you want to continue?", + "HeartbeatInterval": "Heartbeat Interval", + "IsMaster": "IsMaster", + "IsStartBusinessDevice": "Enable Business Device in Slave Site", + "Master": "Active Node", + "MasterUri": "Master Node URL", + "MaxErrorCount": "Maximum Error Count", + "RedundancyOptions": "Dual-Machine Redundancy", + "Restart": "The redundant service will be restarted soon", + "Slave": "Slave Node", + "Status": "Current Site Status", + "Switch": "Switch", + "SyncInterval": "Data Synchronization Interval", + "VerifyToken": "Verification Token" + }, + "ThingsGateway.Management.RedundancyService": { + "EditRedundancyOption": "EditRedundancyOption" + }, + "ThingsGateway.Management.UpdateZipFileHostedService": { + "Update": "New version detected" + }, + "ThingsGateway.Upgrade.UpdateZipFile": { + "AppName": "AppName", + "Architecture": "Architecture", + "DotNetVersion": "DotNetVersion", + "FilePath": "FilePath", + "FileSize": "FileSize", + "MinimumCompatibleVersion": "MinimumCompatibleVersion", + "OSPlatform": "OSPlatform", + "Version": "Version" + }, + "ThingsGateway.Gateway.Application.AlarmVariable": { "AlarmCode": "AlarmCode", "AlarmDelay": "AlarmDelay", diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Locales/zh-CN.json b/src/Gateway/ThingsGateway.Gateway.Application/Locales/zh-CN.json index 30f4b1a10..f96c74e37 100644 --- a/src/Gateway/ThingsGateway.Gateway.Application/Locales/zh-CN.json +++ b/src/Gateway/ThingsGateway.Gateway.Application/Locales/zh-CN.json @@ -1,4 +1,117 @@ { + + "ThingsGateway.Gateway.Application.DefaultDiagram": { + + "Actuator": "执行", + "AlarmChangedTriggerNode": "报警状态触发器", + "BusinessNode": "业务设备执行", + "BusinessNode.Placeholder": "设备名称", + "Cancel": "取消", + "Clear": "清空", + "ConditionNode": "条件", + "ConditionNode.Placeholder": "计算返回boolean", + "DataNode": "数据脚本", + "DelayNode": "延时", + "DelayNode.Placeholder": "间隔时间(ms)", + "Design": "设计", + "Device.Placeholder": "设备名称", + "DeviceChangedTriggerNode": "设备状态触发器", + "Download": "下载Json", + "End": "结束", + "EndNode": "结束", + "ExecuteScriptNode": "自定义执行", + "Expression": "脚本", + "Load": "加载Json", + "Other": "其他", + "Save": "保存", + "Start": "开始", + "Start/End": "开始/结束", + "StartNode": "开始", + "TimeIntervalTriggerNode": "间隔执行触发器", + "TimeIntervalTriggerNode.Placeholder": "间隔时间(ms)", + "Trigger": "触发器", + "ValueChangedTriggerNode": "变量状态触发器", + "Variable.Placeholder": "变量名称", + "VariableRpcNode": "RPC写入", + "VariableRpcNode.Placeholder": "变量名称", + "ZoomToFit": "自适应" + + }, + "ThingsGateway.Gateway.Application.Rules": { + "ClearRules": "清空规则", + "DeleteRules": "删除规则", + "Name": "名称", + "SaveRules": "保存规则", + "SortCode": "排序", + "Status": "状态" + }, + + "ThingsGateway.Gateway.Application.RulesStatus": { + "LogConsole": "日志", + "RulesId": "名称" + }, + "ThingsGateway.Management.Authentication": { + "AuthName": "公司名称", + "Authorized": "已授权", + "ExpireTime": "过期时间", + "Password": "注册码", + "Register": "注册", + "RegisterStatus": "注册状态", + "Unauthorized": "未授权", + "Unregister": "取消注册", + "UUID": "唯一编码" + }, + "ThingsGateway.Management.AutoUpdateController": { + "AutoUpdateController": "程序更新", + "Update": "更新" + }, + "ThingsGateway.Management.RedundancyHostedService": { + "ErrorSynchronizingData": "同步数据到从站错误", + "RedundancyDisable": "不启用网关冗余站点", + "RedundancyDup": "主备站设置重复", + "Start": "网关管理服务启动", + "Stop": "网关管理服务停止", + "SwitchMasterState": "无法连接冗余站点,本机将切换到正常状态", + "SwitchNormalState": "本机(主站)将切换到正常状态", + "SwitchSlaveState": "主站已恢复,本机(从站)将切换到备用状态" + }, + "ThingsGateway.Management.RedundancyOptions": { + "Confirm": "确认切换冗余状态", + "Enable": "启用双机冗余", + "ForcedSync": "强制同步", + "ForcedSyncWarning": "强制同步会生成数据库配置信息,是否继续?", + "HeartbeatInterval": "心跳间隔", + "IsMaster": "是否为主站", + "IsStartBusinessDevice": "备用站点启用业务设备", + "Master": "激活站", + "MasterUri": "主站Url", + "MaxErrorCount": "错误最大次数", + "RedundancyOptions": "双机冗余", + "Restart": "即将重新启动冗余服务", + "Slave": "备用站", + "Status": "当前站点状态", + "Switch": "切换", + "SyncInterval": "数据同步间隔", + "VerifyToken": "Token" + }, + "ThingsGateway.Management.RedundancyService": { + "EditRedundancyOption": "修改网关冗余配置" + }, + "ThingsGateway.Management.UpdateZipFileHostedService": { + "Update": "检测到新版本" + }, + "ThingsGateway.Upgrade.UpdateZipFile": { + "AppName": "名称", + "Architecture": "架构", + "DotNetVersion": ".net版本", + "FilePath": "文件路径", + "FileSize": "文件大小", + "MinimumCompatibleVersion": "最小兼容版本", + "OSPlatform": "系统版本", + "Version": "版本" + }, + + "ThingsGateway.Gateway.Application.AlarmVariable": { "AlarmCode": "报警值", "AlarmDelay": "报警延时", diff --git a/src/Gateway/ThingsGateway.Management/SeedData/Management/seed_sys_dict.json b/src/Gateway/ThingsGateway.Gateway.Application/SeedData/Management/seed_sys_dict.json similarity index 100% rename from src/Gateway/ThingsGateway.Management/SeedData/Management/seed_sys_dict.json rename to src/Gateway/ThingsGateway.Gateway.Application/SeedData/Management/seed_sys_dict.json diff --git a/src/Gateway/ThingsGateway.Management/SeedData/Management/seed_sys_resource.json b/src/Gateway/ThingsGateway.Gateway.Application/SeedData/Management/seed_sys_resource.json similarity index 100% rename from src/Gateway/ThingsGateway.Management/SeedData/Management/seed_sys_resource.json rename to src/Gateway/ThingsGateway.Gateway.Application/SeedData/Management/seed_sys_resource.json diff --git a/src/Gateway/ThingsGateway.RulesEngine/SeedData/RulesEngine/seed_sys_resource.json b/src/Gateway/ThingsGateway.Gateway.Application/SeedData/RulesEngine/seed_sys_resource.json similarity index 100% rename from src/Gateway/ThingsGateway.RulesEngine/SeedData/RulesEngine/seed_sys_resource.json rename to src/Gateway/ThingsGateway.Gateway.Application/SeedData/RulesEngine/seed_sys_resource.json diff --git a/src/Gateway/ThingsGateway.Management/SeedData/SysDictSeedData.cs b/src/Gateway/ThingsGateway.Gateway.Application/SeedData/SysDictSeedData.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/SeedData/SysDictSeedData.cs rename to src/Gateway/ThingsGateway.Gateway.Application/SeedData/SysDictSeedData.cs diff --git a/src/Gateway/ThingsGateway.Gateway.Application/SeedData/SysResourceSeedData.cs b/src/Gateway/ThingsGateway.Gateway.Application/SeedData/SysResourceSeedData.cs index 279e42c08..a3871dd27 100644 --- a/src/Gateway/ThingsGateway.Gateway.Application/SeedData/SysResourceSeedData.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/SeedData/SysResourceSeedData.cs @@ -18,9 +18,18 @@ public class SysResourceSeedData : ISqlSugarEntitySeedData /// public IEnumerable SeedData() { - var data1 = SeedDataUtil.GetSeedData(PathExtensions.CombinePathWithOs("SeedData", "Gateway", "seed_gateway_resource.json")); var assembly = GetType().Assembly; - return SeedDataUtil.GetSeedDataByJson(SeedDataUtil.GetManifestResourceStream(assembly, "SeedData.Gateway.seed_gateway_resource.json")).Concat(data1); + + var data1 = SeedDataUtil.GetSeedData(PathExtensions.CombinePathWithOs("SeedData", "Gateway", "seed_gateway_resource.json")); + + var data2 = SeedDataUtil.GetSeedData(PathExtensions.CombinePathWithOs("SeedData", "Management", "seed_sys_resource.json")); + var data3 = SeedDataUtil.GetSeedData(PathExtensions.CombinePathWithOs("SeedData", "Management", "seed_sys_resourcebutton.json")); + + + var data4 = SeedDataUtil.GetSeedData(PathExtensions.CombinePathWithOs("SeedData", "RulesEngine", "seed_sys_resource.json")); + var data5 = SeedDataUtil.GetSeedData(PathExtensions.CombinePathWithOs("SeedData", "RulesEngine", "seed_sys_resourcebutton.json")); + + return SeedDataUtil.GetSeedDataByJson(SeedDataUtil.GetManifestResourceStream(assembly, "SeedData.RulesEngine.seed_sys_resource.json")).Concat(SeedDataUtil.GetSeedDataByJson(SeedDataUtil.GetManifestResourceStream(assembly, "SeedData.RulesEngine.seed_sys_resourcebutton.json"))).Concat(data4).Concat(data5).Concat(SeedDataUtil.GetSeedDataByJson(SeedDataUtil.GetManifestResourceStream(assembly, "SeedData.Gateway.seed_gateway_resource.json"))).Concat(data1).Concat(SeedDataUtil.GetSeedDataByJson(SeedDataUtil.GetManifestResourceStream(assembly, "SeedData.Management.seed_sys_resource.json"))).Concat(SeedDataUtil.GetSeedDataByJson(SeedDataUtil.GetManifestResourceStream(assembly, "SeedData.Management.seed_sys_resourcebutton.json"))).Concat(data2).Concat(data3); } } diff --git a/src/Gateway/ThingsGateway.Management/Helper/DeviceDataWithValue.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Helper/DeviceDataWithValue.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Helper/DeviceDataWithValue.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Helper/DeviceDataWithValue.cs diff --git a/src/Gateway/ThingsGateway.Management/Helper/VariableDataWithValue.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Helper/VariableDataWithValue.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Helper/VariableDataWithValue.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Helper/VariableDataWithValue.cs diff --git a/src/Gateway/ThingsGateway.Management/Management/GatewayRedundantSerivce.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/GatewayRedundantSerivce.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Management/GatewayRedundantSerivce.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/GatewayRedundantSerivce.cs diff --git a/src/Gateway/ThingsGateway.Management/Management/IRedundancyHostedService.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/IRedundancyHostedService.cs similarity index 93% rename from src/Gateway/ThingsGateway.Management/Management/IRedundancyHostedService.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/IRedundancyHostedService.cs index 03cd5533b..2b91e4549 100644 --- a/src/Gateway/ThingsGateway.Management/Management/IRedundancyHostedService.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/IRedundancyHostedService.cs @@ -13,7 +13,7 @@ using Microsoft.Extensions.Hosting; namespace ThingsGateway.Management; -internal interface IRedundancyHostedService : IHostedService +public interface IRedundancyHostedService : IHostedService { Task StartRedundancyTaskAsync(); Task StopRedundancyTaskAsync(); diff --git a/src/Gateway/ThingsGateway.Management/Management/IRedundancyService.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/IRedundancyService.cs similarity index 96% rename from src/Gateway/ThingsGateway.Management/Management/IRedundancyService.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/IRedundancyService.cs index e1efd73e9..c69ca28e6 100644 --- a/src/Gateway/ThingsGateway.Management/Management/IRedundancyService.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/IRedundancyService.cs @@ -10,7 +10,7 @@ namespace ThingsGateway.Management; -internal interface IRedundancyService +public interface IRedundancyService { /// /// 修改冗余设置 diff --git a/src/Gateway/ThingsGateway.Management/Management/RedundancyHostedService.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/RedundancyHostedService.cs similarity index 99% rename from src/Gateway/ThingsGateway.Management/Management/RedundancyHostedService.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/RedundancyHostedService.cs index 85697e75a..58a29bac7 100644 --- a/src/Gateway/ThingsGateway.Management/Management/RedundancyHostedService.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/RedundancyHostedService.cs @@ -11,6 +11,7 @@ using Mapster; using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; using Newtonsoft.Json.Linq; diff --git a/src/Gateway/ThingsGateway.Management/Management/RedundancyOptions.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/RedundancyOptions.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Management/RedundancyOptions.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/RedundancyOptions.cs diff --git a/src/Gateway/ThingsGateway.Management/Management/RedundancyService.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/RedundancyService.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Management/RedundancyService.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/RedundancyService.cs diff --git a/src/Gateway/ThingsGateway.Management/Management/ReverseCallbackServer.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/ReverseCallbackServer.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Management/ReverseCallbackServer.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Management/ReverseCallbackServer.cs diff --git a/src/Gateway/ThingsGateway.Management/Update/Services/IUpdateZipFileService.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Update/Services/IUpdateZipFileService.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Update/Services/IUpdateZipFileService.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Update/Services/IUpdateZipFileService.cs diff --git a/src/Gateway/ThingsGateway.Management/Update/Services/UpdateZipFileHostedService.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Update/Services/UpdateZipFileHostedService.cs similarity index 99% rename from src/Gateway/ThingsGateway.Management/Update/Services/UpdateZipFileHostedService.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Update/Services/UpdateZipFileHostedService.cs index 0f3311e90..a0dd6e579 100644 --- a/src/Gateway/ThingsGateway.Management/Update/Services/UpdateZipFileHostedService.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Update/Services/UpdateZipFileHostedService.cs @@ -9,6 +9,7 @@ //------------------------------------------------------------------------------ using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; using System.Reflection; diff --git a/src/Gateway/ThingsGateway.Management/Update/Services/UpgradeRpcServer.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Update/Services/UpgradeRpcServer.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Update/Services/UpgradeRpcServer.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Update/Services/UpgradeRpcServer.cs diff --git a/src/Gateway/ThingsGateway.Management/Update/Util/RestartServerHelper.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Update/Util/RestartServerHelper.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Update/Util/RestartServerHelper.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/Management/Update/Util/RestartServerHelper.cs diff --git a/src/Gateway/ThingsGateway.RulesEngine/Attributes/CategoryNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Attributes/CategoryNode.cs similarity index 55% rename from src/Gateway/ThingsGateway.RulesEngine/Attributes/CategoryNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Attributes/CategoryNode.cs index e02f7664a..4c0445ab0 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Attributes/CategoryNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Attributes/CategoryNode.cs @@ -1,11 +1,13 @@ -namespace ThingsGateway.RulesEngine; +using Microsoft.Extensions.Localization; + +namespace ThingsGateway.Gateway.Application; public sealed class CategoryNode : Attribute { - public Type WidgetType { get; set; } = typeof(DefaultWidget); + public string WidgetType { get; set; } public string ImgUrl { get; set; } = "ImgUrl"; public string Desc { get; set; } = "Desc"; public string Category { get; set; } = "Other"; - public Type LocalizerType { get; set; } = typeof(ThingsGateway.RulesEngine._Imports); + public Type LocalizerType { get; set; } public IStringLocalizer StringLocalizer; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Attributes/ModelValue.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Attributes/ModelValue.cs similarity index 50% rename from src/Gateway/ThingsGateway.RulesEngine/Attributes/ModelValue.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Attributes/ModelValue.cs index 37c98ab52..9bf734efa 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Attributes/ModelValue.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Attributes/ModelValue.cs @@ -1,4 +1,4 @@ -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; public sealed class ModelValue : Attribute { diff --git a/src/Gateway/ThingsGateway.RulesEngine/Entity/Rules.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Entity/Rules.cs similarity index 88% rename from src/Gateway/ThingsGateway.RulesEngine/Entity/Rules.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Entity/Rules.cs index cfedbae23..cd9525bd1 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Entity/Rules.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Entity/Rules.cs @@ -1,11 +1,15 @@ -using Newtonsoft.Json.Linq; +using BootstrapBlazor.Components; + +using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; using ThingsGateway.Admin.Application; +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; using ThingsGateway.SqlSugar; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; [SugarTable("rules", TableDescription = "规则引擎")] [SugarIndex("unique_rules_name", nameof(Rules.Name), OrderByType.Asc, true)] diff --git a/src/Gateway/ThingsGateway.RulesEngine/Helps/RuleHelpers.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Helps/RuleHelpers.cs similarity index 76% rename from src/Gateway/ThingsGateway.RulesEngine/Helps/RuleHelpers.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Helps/RuleHelpers.cs index 11acaf490..2f5d6658c 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Helps/RuleHelpers.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Helps/RuleHelpers.cs @@ -8,15 +8,22 @@ // QQ群:605534569 // ------------------------------------------------------------------------------ +using BootstrapBlazor.Components; + using Newtonsoft.Json.Linq; using System.Reflection; +using ThingsGateway.Blazor.Diagrams.Core; using ThingsGateway.Blazor.Diagrams.Core.Anchors; +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; -namespace ThingsGateway.RulesEngine; +using static Dm.net.buffer.ByteArrayBuffer; -internal static class RuleHelpers +namespace ThingsGateway.Gateway.Application; + +public static class RuleHelpers { /// /// 构造选择项,ID/Name @@ -54,42 +61,31 @@ internal static class RuleHelpers CategoryNodeGroups = RuleHelpers.CategoryNodeDict.GroupBy(a => a.Value.Category).ToList(); } - internal static NodeModel GetNodeModel(string key, string id, Point point) + public static NodeModel GetNodeModel(string key, string id, Point point) { - var type = Type.GetType(key.Contains('.') ? key : - $"ThingsGateway.RulesEngine.{key}"); + var type = Type.GetType(key.Contains('.') ? key : $"ThingsGateway.Gateway.Application.{key}"); if (type != null) { - switch (key) + var node = Activator.CreateInstance(type, id, point) as NodeModel; + if (node is IStartNode) { - case "ThingsGateway.RulesEngine.StartNode": - { - var node = new StartNode(id, point); - node.AddPort(PortAlignment.Bottom); - return node; - } - case "ThingsGateway.RulesEngine.EndNode": - { - var node = new EndNode(id, point); - node.AddPort(PortAlignment.Top); - return node; - } - default: - { - var node = Activator.CreateInstance(type, id, point) as NodeModel; - node.AddPort(PortAlignment.Top); - node.AddPort(PortAlignment.Bottom); - return node; - - } + node.AddPort(PortAlignment.Bottom); } + else + { + node.AddPort(PortAlignment.Top); + node.AddPort(PortAlignment.Bottom); + + } + return node; + } else { return null; } } - internal static Dictionary GetModelValue(NodeModel nodeModel) + public static Dictionary GetModelValue(NodeModel nodeModel) { Dictionary jtokens = new(); var propertyInfos = nodeModel.GetType().GetRuntimeProperties().Where(a => a.GetCustomAttribute() != null); @@ -99,7 +95,7 @@ internal static class RuleHelpers } return jtokens; } - internal static void SetModelValue(NodeModel nodeModel, JObject jobject) + public static void SetModelValue(NodeModel nodeModel, JObject jobject) { if (nodeModel == null) return; @@ -116,21 +112,22 @@ internal static class RuleHelpers } - internal static NodeModel OnNodeJson(BlazorDiagram blazorDiagram, string draggedType, string id, Point point) + public static NodeModel OnNodeJson(Diagram blazorDiagram, string draggedType, string id, Point point) { NodeModel node = RuleHelpers.GetNodeModel(draggedType, id, point); if (node != null) blazorDiagram.Nodes.Add(node); return node; } - internal static RulesJson Save(BlazorDiagram blazorDiagram) + + public static RulesJson Save(Diagram blazorDiagram) { var rules = new RulesJson(); foreach (var item in blazorDiagram.Nodes) { NodeJson nodeJson = new(); rules.NodeJsons.Add(nodeJson); - nodeJson.DraggedType = item.GetType().FullName; + nodeJson.DraggedType = $"{item.GetType().FullName},{item.GetType().Assembly.GetName().Name}"; nodeJson.Point = item.Position; nodeJson.Id = item.Id; foreach (var keyValuePair in GetModelValue(item)) @@ -151,7 +148,7 @@ internal static class RuleHelpers return rules; } - internal static void Load(BlazorDiagram blazorDiagram, RulesJson rules) + public static void Load(Diagram blazorDiagram, RulesJson rules) { blazorDiagram.Nodes.Clear(); blazorDiagram.Links.Clear(); diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Actuator/ExecuteScriptNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Actuator/ExecuteScriptNode.cs similarity index 90% rename from src/Gateway/ThingsGateway.RulesEngine/Node/Actuator/ExecuteScriptNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Actuator/ExecuteScriptNode.cs index f38dcac4b..e8d978a65 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Actuator/ExecuteScriptNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Actuator/ExecuteScriptNode.cs @@ -1,12 +1,15 @@  + +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; using ThingsGateway.Gateway.Application; using ThingsGateway.NewLife; using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; -[CategoryNode(Category = "Actuator", ImgUrl = "_content/ThingsGateway.RulesEngine/img/CSharpScript.svg", Desc = nameof(ExecuteScriptNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(CSharpScriptWidget))] +[CategoryNode(Category = "Actuator", ImgUrl = "_content/ThingsGateway.Gateway.Razor/img/CSharpScript.svg", Desc = nameof(ExecuteScriptNode), LocalizerType = typeof(ThingsGateway.Gateway.Application.DefaultDiagram), WidgetType = "ThingsGateway.Gateway.Razor.CSharpScriptWidget,ThingsGateway.Gateway.Razor")] public class ExecuteScriptNode : TextNode, IActuatorNode, IExexcuteExpressionsBase, IDisposable { public ExecuteScriptNode(string id, Point? position = null) : base(id, position) @@ -19,7 +22,7 @@ public class ExecuteScriptNode : TextNode, IActuatorNode, IExexcuteExpressionsBa using System.Text; using ThingsGateway.Gateway.Application; - using ThingsGateway.RulesEngine; + using ThingsGateway.Gateway.Razor; public class TestExexcuteExpressions : IExexcuteExpressions diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Actuator/VariableRpcNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Actuator/VariableRpcNode.cs similarity index 74% rename from src/Gateway/ThingsGateway.RulesEngine/Node/Actuator/VariableRpcNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Actuator/VariableRpcNode.cs index 3cf3d7975..759c7d201 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Actuator/VariableRpcNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Actuator/VariableRpcNode.cs @@ -1,10 +1,13 @@ -using ThingsGateway.Gateway.Application; + +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; +using ThingsGateway.Gateway.Application; using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; -[CategoryNode(Category = "Actuator", ImgUrl = "_content/ThingsGateway.RulesEngine/img/Rpc.svg", Desc = nameof(VariableRpcNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(VariableWidget))] +[CategoryNode(Category = "Actuator", ImgUrl = "_content/ThingsGateway.Gateway.Razor/img/Rpc.svg", Desc = nameof(VariableRpcNode), LocalizerType = typeof(ThingsGateway.Gateway.Application.DefaultDiagram), WidgetType = "ThingsGateway.Gateway.Razor.VariableWidget,ThingsGateway.Gateway.Razor")] public class VariableRpcNode : VariableNode, IActuatorNode { diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/BaseNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/BaseNode.cs similarity index 63% rename from src/Gateway/ThingsGateway.RulesEngine/Node/BaseNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/BaseNode.cs index 07a372b37..97bf84615 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/BaseNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/BaseNode.cs @@ -1,7 +1,10 @@  +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; + using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; public abstract class BaseNode : NodeModel, INode { diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Expression/ConditionNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Expression/ConditionNode.cs similarity index 64% rename from src/Gateway/ThingsGateway.RulesEngine/Node/Expression/ConditionNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Expression/ConditionNode.cs index ff8cb52df..98aedcb34 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Expression/ConditionNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Expression/ConditionNode.cs @@ -1,4 +1,7 @@  +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; +using ThingsGateway.Gateway.Application; using ThingsGateway.Gateway.Application.Extensions; using ThingsGateway.NewLife.Extension; @@ -6,9 +9,9 @@ using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; -[CategoryNode(Category = "Expression", ImgUrl = "_content/ThingsGateway.RulesEngine/img/CSharpScript.svg", Desc = nameof(ConditionNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(CSharpScriptWidget))] +[CategoryNode(Category = "Expression", ImgUrl = "_content/ThingsGateway.Gateway.Razor/img/CSharpScript.svg", Desc = nameof(ConditionNode), LocalizerType = typeof(ThingsGateway.Gateway.Application.DefaultDiagram), WidgetType = "ThingsGateway.Gateway.Razor.CSharpScriptWidget,ThingsGateway.Gateway.Razor")] public class ConditionNode : TextNode, IConditionNode { public ConditionNode(string id, Point? position = null) : base(id, position) diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Expression/DataNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Expression/DataNode.cs similarity index 70% rename from src/Gateway/ThingsGateway.RulesEngine/Node/Expression/DataNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Expression/DataNode.cs index 2498335a6..a2a000637 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Expression/DataNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Expression/DataNode.cs @@ -1,11 +1,12 @@  +using ThingsGateway.Blazor.Diagrams.Core.Geometry; using ThingsGateway.Gateway.Application.Extensions; using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; -[CategoryNode(Category = "Expression", ImgUrl = "_content/ThingsGateway.RulesEngine/img/CSharpScript.svg", Desc = nameof(DataNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(CSharpScriptWidget))] +[CategoryNode(Category = "Expression", ImgUrl = "_content/ThingsGateway.Gateway.Razor/img/CSharpScript.svg", Desc = nameof(DataNode), LocalizerType = typeof(ThingsGateway.Gateway.Application.DefaultDiagram), WidgetType = "ThingsGateway.Gateway.Razor.CSharpScriptWidget,ThingsGateway.Gateway.Razor")] public class DataNode : TextNode, IExpressionNode { public DataNode(string id, Point? position = null) : base(id, position) diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Expression/DelayNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Expression/DelayNode.cs similarity index 57% rename from src/Gateway/ThingsGateway.RulesEngine/Node/Expression/DelayNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Expression/DelayNode.cs index 38972e461..fe1ef5380 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Expression/DelayNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Expression/DelayNode.cs @@ -1,8 +1,12 @@ -using TouchSocket.Core; + +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; -namespace ThingsGateway.RulesEngine; +using TouchSocket.Core; -[CategoryNode(Category = "Expression", ImgUrl = "_content/ThingsGateway.RulesEngine/img/Delay.svg", Desc = nameof(DelayNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(NumberWidget))] +namespace ThingsGateway.Gateway.Application; + +[CategoryNode(Category = "Expression", ImgUrl = "_content/ThingsGateway.Gateway.Razor/img/Delay.svg", Desc = nameof(DelayNode), LocalizerType = typeof(ThingsGateway.Gateway.Application.DefaultDiagram), WidgetType = "ThingsGateway.Gateway.Razor.NumberWidget,ThingsGateway.Gateway.Razor")] public class DelayNode : NumberNode, IExpressionNode { public DelayNode(string id, Point? position = null) : base(id, position) { Title = "DelayNode"; Placeholder = "DelayNode.Placeholder"; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/INode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/INode.cs similarity index 94% rename from src/Gateway/ThingsGateway.RulesEngine/Node/INode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/INode.cs index e062ec295..85e1c204b 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/INode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/INode.cs @@ -1,4 +1,4 @@ -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; public interface INode { diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/IStartNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/IStartNode.cs new file mode 100644 index 000000000..82b2e946b --- /dev/null +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/IStartNode.cs @@ -0,0 +1,5 @@ +namespace ThingsGateway.Gateway.Application; + +public interface IStartNode +{ +} \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/NodeInput.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/NodeInput.cs similarity index 88% rename from src/Gateway/ThingsGateway.RulesEngine/Node/NodeInput.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/NodeInput.cs index e0acbd8a9..24e5823f1 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/NodeInput.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/NodeInput.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json.Linq; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; public class NodeInput { diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/NodeOutput.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/NodeOutput.cs similarity index 88% rename from src/Gateway/ThingsGateway.RulesEngine/Node/NodeOutput.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/NodeOutput.cs index 7c4587d1f..9fc7942cd 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/NodeOutput.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/NodeOutput.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json.Linq; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; public class NodeOutput { diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/NumberNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/NumberNode.cs new file mode 100644 index 000000000..8719347f2 --- /dev/null +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/NumberNode.cs @@ -0,0 +1,15 @@ +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; +namespace ThingsGateway.Gateway.Application; + +public abstract class NumberNode : PlaceholderNode +{ + + public NumberNode(string id, Point? position = null) : base(id, position) + { + } + [ModelValue] + public int? Number { get; set; } + + +} diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/PlaceholderNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/PlaceholderNode.cs new file mode 100644 index 000000000..b8bb57c6c --- /dev/null +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/PlaceholderNode.cs @@ -0,0 +1,13 @@ +using ThingsGateway.Blazor.Diagrams.Core.Geometry; + +namespace ThingsGateway.Gateway.Application; + +public abstract class PlaceholderNode : BaseNode +{ + + protected PlaceholderNode(string id, Point? position = null) : base(id, position) + { + } + + public string Placeholder { get; set; } +} \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Start/StartNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Start/StartNode.cs new file mode 100644 index 000000000..22201e7a7 --- /dev/null +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Start/StartNode.cs @@ -0,0 +1,14 @@ + +using ThingsGateway.Blazor.Diagrams.Core.Geometry; + +namespace ThingsGateway.Gateway.Application; + +[CategoryNode(Category = "Start/End", ImgUrl = "_content/ThingsGateway.Gateway.Razor/img/Start.svg", Desc = nameof(StartNode), LocalizerType = typeof(ThingsGateway.Gateway.Application.DefaultDiagram), WidgetType = "ThingsGateway.Gateway.Razor.DefaultWidget,ThingsGateway.Gateway.Razor")] +public class StartNode : BaseNode, IStartNode +{ + + public StartNode(string id, Point? position = null) : base(id, position) + { Title = "Start"; } + + +} diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/TextNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/TextNode.cs new file mode 100644 index 000000000..8ee7f3203 --- /dev/null +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/TextNode.cs @@ -0,0 +1,15 @@ + +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; +namespace ThingsGateway.Gateway.Application; + +public abstract class TextNode : PlaceholderNode +{ + + public TextNode(string id, Point? position = null) : base(id, position) + { + } + + [ModelValue] + public virtual string Text { get; set; } +} diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/AlarmChangedTriggerNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/AlarmChangedTriggerNode.cs similarity index 91% rename from src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/AlarmChangedTriggerNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/AlarmChangedTriggerNode.cs index be665acdc..1da869675 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/AlarmChangedTriggerNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/AlarmChangedTriggerNode.cs @@ -1,4 +1,6 @@  +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; using System.Collections.Concurrent; @@ -7,9 +9,9 @@ using ThingsGateway.Gateway.Application; using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; -[CategoryNode(Category = "Trigger", ImgUrl = "_content/ThingsGateway.RulesEngine/img/ValueChanged.svg", Desc = nameof(AlarmChangedTriggerNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(VariableWidget))] +[CategoryNode(Category = "Trigger", ImgUrl = "_content/ThingsGateway.Gateway.Razor/img/ValueChanged.svg", Desc = nameof(AlarmChangedTriggerNode), LocalizerType = typeof(ThingsGateway.Gateway.Application.DefaultDiagram), WidgetType = "ThingsGateway.Gateway.Razor.VariableWidget,ThingsGateway.Gateway.Razor")] public class AlarmChangedTriggerNode : VariableNode, ITriggerNode, IDisposable { public AlarmChangedTriggerNode(string id, Point? position = null) : base(id, position) { Title = "AlarmChangedTriggerNode"; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/DeviceChangedTriggerNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/DeviceChangedTriggerNode.cs similarity index 89% rename from src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/DeviceChangedTriggerNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/DeviceChangedTriggerNode.cs index 299f6e365..6da2197e7 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/DeviceChangedTriggerNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/DeviceChangedTriggerNode.cs @@ -1,4 +1,6 @@  +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; using System.Collections.Concurrent; using ThingsGateway.Foundation; @@ -6,9 +8,9 @@ using ThingsGateway.Gateway.Application; using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; -[CategoryNode(Category = "Trigger", ImgUrl = "_content/ThingsGateway.RulesEngine/img/ValueChanged.svg", Desc = nameof(DeviceChangedTriggerNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(DeviceWidget))] +[CategoryNode(Category = "Trigger", ImgUrl = "_content/ThingsGateway.Gateway.Razor/img/ValueChanged.svg", Desc = nameof(DeviceChangedTriggerNode), LocalizerType = typeof(ThingsGateway.Gateway.Application.DefaultDiagram), WidgetType = "ThingsGateway.Gateway.Razor.DeviceWidget,ThingsGateway.Gateway.Razor")] public class DeviceChangedTriggerNode : TextNode, ITriggerNode, IDisposable { public DeviceChangedTriggerNode(string id, Point? position = null) : base(id, position) { Title = "DeviceChangedTriggerNode"; Placeholder = "Device.Placeholder"; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/TimeIntervalTriggerNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/TimeIntervalTriggerNode.cs similarity index 78% rename from src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/TimeIntervalTriggerNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/TimeIntervalTriggerNode.cs index 7089a82a8..325840544 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/TimeIntervalTriggerNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/TimeIntervalTriggerNode.cs @@ -1,11 +1,14 @@ -using ThingsGateway.Foundation; + +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; +using ThingsGateway.Foundation; using ThingsGateway.NewLife; using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; -[CategoryNode(Category = "Trigger", ImgUrl = "_content/ThingsGateway.RulesEngine/img/TimeInterval.svg", Desc = nameof(TimeIntervalTriggerNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(TextWidget))] +[CategoryNode(Category = "Trigger", ImgUrl = "_content/ThingsGateway.Gateway.Razor/img/TimeInterval.svg", Desc = nameof(TimeIntervalTriggerNode), LocalizerType = typeof(ThingsGateway.Gateway.Application.DefaultDiagram), WidgetType = "ThingsGateway.Gateway.Razor.TextWidget,ThingsGateway.Gateway.Razor")] public class TimeIntervalTriggerNode : TextNode, ITriggerNode, IDisposable { public TimeIntervalTriggerNode(string id, Point? position = null) : base(id, position) { Title = "TimeIntervalTriggerNode"; Placeholder = "TimeIntervalTriggerNode.Placeholder"; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/ValueChangedTriggerNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/ValueChangedTriggerNode.cs similarity index 90% rename from src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/ValueChangedTriggerNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/ValueChangedTriggerNode.cs index 483a95433..2ae6083d2 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Trigger/ValueChangedTriggerNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/Trigger/ValueChangedTriggerNode.cs @@ -1,13 +1,16 @@ -using System.Collections.Concurrent; + +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; +using System.Collections.Concurrent; using ThingsGateway.Foundation; using ThingsGateway.Gateway.Application; using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; -[CategoryNode(Category = "Trigger", ImgUrl = "_content/ThingsGateway.RulesEngine/img/ValueChanged.svg", Desc = nameof(ValueChangedTriggerNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(VariableWidget))] +[CategoryNode(Category = "Trigger", ImgUrl = "_content/ThingsGateway.Gateway.Razor/img/ValueChanged.svg", Desc = nameof(ValueChangedTriggerNode), LocalizerType = typeof(ThingsGateway.Gateway.Application.DefaultDiagram), WidgetType = "ThingsGateway.Gateway.Razor.VariableWidget,ThingsGateway.Gateway.Razor")] public class ValueChangedTriggerNode : VariableNode, ITriggerNode, IDisposable { public ValueChangedTriggerNode(string id, Point? position = null) : base(id, position) { Title = "ValueChangedTriggerNode"; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/VariableNode.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/VariableNode.cs similarity index 70% rename from src/Gateway/ThingsGateway.RulesEngine/Node/VariableNode.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/VariableNode.cs index 4055f1a6d..18286ae1b 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/VariableNode.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Node/VariableNode.cs @@ -1,4 +1,7 @@ -namespace ThingsGateway.RulesEngine; + +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; +namespace ThingsGateway.Gateway.Application; public abstract class VariableNode : TextNode { diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/DefaultDiagram.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/DefaultDiagram.cs new file mode 100644 index 000000000..7d0e52379 --- /dev/null +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/DefaultDiagram.cs @@ -0,0 +1,17 @@ +using ThingsGateway.Blazor.Diagrams.Core; +using ThingsGateway.Blazor.Diagrams.Core.Controls.Default; +using ThingsGateway.Blazor.Diagrams.Core.Models.Base; +using ThingsGateway.Blazor.Diagrams.Core.Options; + +namespace ThingsGateway.Gateway.Application; + +internal class DefaultDiagram : Diagram +{ + public override DiagramOptions Options { get; } + + public DefaultDiagram() + { + Options = new(); + } + +} \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.RulesEngine/Services/IRulesEngineHostedService.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/IRulesEngineHostedService.cs similarity index 84% rename from src/Gateway/ThingsGateway.RulesEngine/Services/IRulesEngineHostedService.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/IRulesEngineHostedService.cs index d94d8bd98..24b7522b1 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Services/IRulesEngineHostedService.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/IRulesEngineHostedService.cs @@ -10,11 +10,13 @@ using Microsoft.Extensions.Hosting; -namespace ThingsGateway.RulesEngine; +using ThingsGateway.Blazor.Diagrams.Core; + +namespace ThingsGateway.Gateway.Application; public interface IRulesEngineHostedService : IHostedService { - Dictionary BlazorDiagrams { get; } + Dictionary Diagrams { get; } Task Delete(IEnumerable ids); Task Edit(Rules rules); } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Services/IRulesService.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/IRulesService.cs similarity index 95% rename from src/Gateway/ThingsGateway.RulesEngine/Services/IRulesService.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/IRulesService.cs index 6d5fda356..46b6c6b70 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Services/IRulesService.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/IRulesService.cs @@ -8,7 +8,9 @@ // QQ群:605534569 //------------------------------------------------------------------------------ -namespace ThingsGateway.RulesEngine; +using BootstrapBlazor.Components; + +namespace ThingsGateway.Gateway.Application; public interface IRulesService diff --git a/src/Gateway/ThingsGateway.RulesEngine/Services/RulesEngineHostedService.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/RulesEngineHostedService.cs similarity index 89% rename from src/Gateway/ThingsGateway.RulesEngine/Services/RulesEngineHostedService.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/RulesEngineHostedService.cs index c8dbe032c..a32775b82 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Services/RulesEngineHostedService.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/RulesEngineHostedService.cs @@ -8,16 +8,20 @@ // QQ群:605534569 //------------------------------------------------------------------------------ +using BootstrapBlazor.Components; + using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; -using ThingsGateway.Foundation; +using ThingsGateway.Blazor.Diagrams.Core; +using ThingsGateway.Blazor.Diagrams.Core.Models; using ThingsGateway.Gateway.Application; using ThingsGateway.NewLife; using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; public class RulesLog { public RulesLog(Rules rules, TextFileLogger log) @@ -52,7 +56,7 @@ internal sealed class RulesEngineHostedService : BackgroundService, IRulesEngine /// private WaitLock RestartLock { get; } = new(); private List Rules { get; set; } = new(); - public Dictionary BlazorDiagrams { get; private set; } = new(); + public Dictionary Diagrams { get; private set; } = new(); public async Task Edit(Rules rules) { @@ -78,7 +82,7 @@ internal sealed class RulesEngineHostedService : BackgroundService, IRulesEngine { await RestartLock.WaitAsync().ConfigureAwait(false); // 等待获取锁,以确保只有一个线程可以执行以下代码 - var dels = BlazorDiagrams.Where(a => ids.Contains(a.Key.Rules.Id)).ToArray(); + var dels = Diagrams.Where(a => ids.Contains(a.Key.Rules.Id)).ToArray(); foreach (var del in dels) { if (del.Value != null) @@ -88,7 +92,7 @@ internal sealed class RulesEngineHostedService : BackgroundService, IRulesEngine nodeModel.TryDispose(); } del.Value.TryDispose(); - BlazorDiagrams.Remove(del.Key); + Diagrams.Remove(del.Key); } } dispatchService.Dispatch(null); @@ -99,23 +103,23 @@ internal sealed class RulesEngineHostedService : BackgroundService, IRulesEngine } } - private (RulesLog rulesLog, BlazorDiagram blazorDiagram) Init(Rules rules) + private (RulesLog rulesLog, DefaultDiagram blazorDiagram) Init(Rules rules) { #pragma warning disable CA1863 var log = TextFileLogger.GetMultipleFileLogger(string.Format(LogPathFormat, rules.Name)); #pragma warning restore CA1863 log.LogLevel = TouchSocket.Core.LogLevel.Trace; - BlazorDiagram blazorDiagram = new(); + DefaultDiagram blazorDiagram = new(); RuleHelpers.Load(blazorDiagram, rules.RulesJson); var result = (new RulesLog(rules, log), blazorDiagram); - BlazorDiagrams.Add(result.Item1, blazorDiagram); + Diagrams.Add(result.Item1, blazorDiagram); return result; } - private static Task Start(RulesLog rulesLog, BlazorDiagram item, CancellationToken cancellationToken) + private static Task Start(RulesLog rulesLog, DefaultDiagram item, CancellationToken cancellationToken) { rulesLog.Log.Trace("Start"); - var startNodes = item.Nodes.Where(a => a is StartNode); + var startNodes = item.Nodes.Where(a => a is IStartNode); foreach (var link in startNodes.SelectMany(a => a.PortLinks)) { _ = Analysis((link.Target.Model as PortModel)?.Parent, new NodeInput(), rulesLog, cancellationToken); @@ -193,7 +197,7 @@ internal sealed class RulesEngineHostedService : BackgroundService, IRulesEngine Clear(); Rules = await App.GetService().GetAllAsync().ConfigureAwait(false); - BlazorDiagrams = new(); + Diagrams = new(); foreach (var rules in Rules.Where(a => a.Status)) { var item = Init(rules); @@ -206,7 +210,7 @@ internal sealed class RulesEngineHostedService : BackgroundService, IRulesEngine { while (!cancellationToken.IsCancellationRequested) { - foreach (var item in BlazorDiagrams?.Values?.SelectMany(a => a.Nodes) ?? new List()) + foreach (var item in Diagrams?.Values?.SelectMany(a => a.Nodes) ?? new List()) { if (item is IExexcuteExpressionsBase) { @@ -231,7 +235,7 @@ internal sealed class RulesEngineHostedService : BackgroundService, IRulesEngine await RestartLock.WaitAsync().ConfigureAwait(false); // 等待获取锁,以确保只有一个线程可以执行以下代码 TokenSource ??= new CancellationTokenSource(); await StartAll(TokenSource.Token).ConfigureAwait(false); - _logger.LogInformation(AppResource.RulesEngineTaskStart); + _logger.LogInformation(ThingsGateway.Gateway.Application.AppResource.RulesEngineTaskStart); } catch (Exception ex) { @@ -273,14 +277,14 @@ internal sealed class RulesEngineHostedService : BackgroundService, IRulesEngine private void Clear() { - foreach (var item in BlazorDiagrams.Values) + foreach (var item in Diagrams.Values) { foreach (var nodeModel in item.Nodes) { nodeModel.TryDispose(); } } - BlazorDiagrams.Clear(); + Diagrams.Clear(); } protected override Task ExecuteAsync(CancellationToken stoppingToken) diff --git a/src/Gateway/ThingsGateway.RulesEngine/Services/RulesService.cs b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/RulesService.cs similarity index 98% rename from src/Gateway/ThingsGateway.RulesEngine/Services/RulesService.cs rename to src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/RulesService.cs index 676795e49..097a9b9cd 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Services/RulesService.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Services/RulesEngine/Services/RulesService.cs @@ -8,6 +8,8 @@ // QQ群:605534569 //------------------------------------------------------------------------------ +using BootstrapBlazor.Components; + using System.Data; using ThingsGateway.Admin.Application; @@ -17,7 +19,7 @@ using ThingsGateway.SqlSugar; using TouchSocket.Core; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Application; internal sealed class RulesService : BaseService, IRulesService { diff --git a/src/Gateway/ThingsGateway.Gateway.Application/Startup.cs b/src/Gateway/ThingsGateway.Gateway.Application/Startup.cs index e7f73ece5..c667e95bf 100644 --- a/src/Gateway/ThingsGateway.Gateway.Application/Startup.cs +++ b/src/Gateway/ThingsGateway.Gateway.Application/Startup.cs @@ -17,7 +17,10 @@ using Microsoft.Extensions.Logging; using System.Reflection; using ThingsGateway.Authentication; +using ThingsGateway.Management; +using ThingsGateway.Gateway.Application; using ThingsGateway.SqlSugar; +using ThingsGateway.Upgrade; namespace ThingsGateway.Gateway.Application; @@ -26,6 +29,23 @@ public class Startup : AppStartup { public void Configure(IServiceCollection services) { + #region R + + services.AddSingleton(); + services.AddGatewayHostedService(); + + #endregion + + #region M + + services.AddSingleton(); + services.AddGatewayHostedService(); + services.AddGatewayHostedService(); + services.AddSingleton(); + services.AddSingleton(provider => provider.GetRequiredService()); + services.AddConfigurableOptions(); + + #endregion ProAuthentication.TryGetAuthorizeInfo(out var authorizeInfo); @@ -72,9 +92,8 @@ public class Startup : AppStartup services.AddGatewayHostedService(); } - public void Use(IApplicationBuilder applicationBuilder) + public void Use(IServiceProvider serviceProvider) { - var serviceProvider = applicationBuilder.ApplicationServices; //检查ConfigId var configIdGroup = DbContext.DbConfigs.GroupBy(it => it.ConfigId); foreach (var configId in configIdGroup) diff --git a/src/Gateway/ThingsGateway.Gateway.Application/ThingsGateway.Gateway.Application.csproj b/src/Gateway/ThingsGateway.Gateway.Application/ThingsGateway.Gateway.Application.csproj index b522e5fd8..8e39f08d2 100644 --- a/src/Gateway/ThingsGateway.Gateway.Application/ThingsGateway.Gateway.Application.csproj +++ b/src/Gateway/ThingsGateway.Gateway.Application/ThingsGateway.Gateway.Application.csproj @@ -1,4 +1,4 @@ - + @@ -20,6 +20,17 @@ PreserveNewest + + + + PreserveNewest + + + + + PreserveNewest + + @@ -28,13 +39,25 @@ Never - + + + + + + + + + + + + + diff --git a/src/Gateway/ThingsGateway.Gateway.Razor/Locales/en-US.json b/src/Gateway/ThingsGateway.Gateway.Razor/Locales/en-US.json index dca7deda2..73217685b 100644 --- a/src/Gateway/ThingsGateway.Gateway.Razor/Locales/en-US.json +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Locales/en-US.json @@ -1,5 +1,47 @@ { "ThingsGateway.Gateway.Razor._Imports": { + + "Actuator": "Actuator", + "AlarmChangedTriggerNode": "AlarmStateTrigger", + "BusinessNode": "BusinessDeviceExecution", + "BusinessNode.Placeholder": "BusinessDeviceName", + "Cancel": "Cancel", + "Clear": "Clear", + "ConditionNode": "Condition", + "ConditionNode.Placeholder": "Calculation returns boolean", + "DataNode": "DataScript", + "DelayNode": "Delay", + "DelayNode.Placeholder": "Interval Time (ms)", + "Design": "Design", + "Device.Placeholder": "DeviceName", + "DeviceChangedTriggerNode": "DeviceStateTrigger", + "Download": "Download JSON", + "End": "End", + "EndNode": "End", + "ExecuteScriptNode": "CustomExecution", + "Expression": "Script", + "Load": "Load JSON", + "Other": "Other", + "Save": "Save", + "Start": "Start", + "Start/End": "Start/End", + "StartNode": "Start", + "TimeIntervalTriggerNode": "IntervalExecutionTrigger", + "TimeIntervalTriggerNode.Placeholder": "IntervalTime (ms)", + "Trigger": "Trigger", + "ValueChangedTriggerNode": "VariableStateTrigger", + "Variable.Placeholder": "VariableName", + "VariableRpcNode": "VariableRpc", + "VariableRpcNode.Placeholder": "VariableName", + "ZoomToFit": "ZoomToFit", + + "Authentication": "Authentication", + "CheckUpdate": "CheckUpdates", + "HeaderText": "Communication Log", + "Info": "Details", + "Restart": "Restart Gateway", + "Update": "Download Update", + "AddChannel": "Add Channel", "AddDevice": "Add Device", "AddVariable": "Add Variable", diff --git a/src/Gateway/ThingsGateway.Gateway.Razor/Locales/zh-CN.json b/src/Gateway/ThingsGateway.Gateway.Razor/Locales/zh-CN.json index 3b3b19b05..7098b0d47 100644 --- a/src/Gateway/ThingsGateway.Gateway.Razor/Locales/zh-CN.json +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Locales/zh-CN.json @@ -1,5 +1,47 @@ { "ThingsGateway.Gateway.Razor._Imports": { + + "Actuator": "执行", + "AlarmChangedTriggerNode": "报警状态触发器", + "BusinessNode": "业务设备执行", + "BusinessNode.Placeholder": "设备名称", + "Cancel": "取消", + "Clear": "清空", + "ConditionNode": "条件", + "ConditionNode.Placeholder": "计算返回boolean", + "DataNode": "数据脚本", + "DelayNode": "延时", + "DelayNode.Placeholder": "间隔时间(ms)", + "Design": "设计", + "Device.Placeholder": "设备名称", + "DeviceChangedTriggerNode": "设备状态触发器", + "Download": "下载Json", + "End": "结束", + "EndNode": "结束", + "ExecuteScriptNode": "自定义执行", + "Expression": "脚本", + "Load": "加载Json", + "Other": "其他", + "Save": "保存", + "Start": "开始", + "Start/End": "开始/结束", + "StartNode": "开始", + "TimeIntervalTriggerNode": "间隔执行触发器", + "TimeIntervalTriggerNode.Placeholder": "间隔时间(ms)", + "Trigger": "触发器", + "ValueChangedTriggerNode": "变量状态触发器", + "Variable.Placeholder": "变量名称", + "VariableRpcNode": "RPC写入", + "VariableRpcNode.Placeholder": "变量名称", + "ZoomToFit": "自适应", + + "Authentication": "注册授权", + "CheckUpdate": "检查更新", + "HeaderText": "通讯日志", + "Info": "详情", + "Restart": "重启网关", + "Update": "下载更新", + "AddChannel": "添加通道", "AddDevice": "添加设备", "AddVariable": "添加变量", diff --git a/src/Gateway/ThingsGateway.Management/Pages/Authentication.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/Authentication.razor similarity index 100% rename from src/Gateway/ThingsGateway.Management/Pages/Authentication.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/Authentication.razor diff --git a/src/Gateway/ThingsGateway.Management/Pages/Authentication.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/Authentication.razor.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Pages/Authentication.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/Authentication.razor.cs diff --git a/src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsHeader.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsHeader.razor similarity index 100% rename from src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsHeader.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsHeader.razor diff --git a/src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsHeader.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsHeader.razor.cs similarity index 100% rename from src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsHeader.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsHeader.razor.cs diff --git a/src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsPage.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsPage.razor similarity index 100% rename from src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsPage.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsPage.razor diff --git a/src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsPage.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsPage.razor.cs similarity index 95% rename from src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsPage.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsPage.razor.cs index 6b53aa3b6..352af0685 100644 --- a/src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsPage.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsPage.razor.cs @@ -41,12 +41,12 @@ public partial class RedundancyOptionsPage [Inject] [NotNull] - public IStringLocalizer ManagementLocalizer { get; set; } + public IStringLocalizer GatewayLocalizer { get; set; } /// protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - HeaderText = ManagementLocalizer[nameof(HeaderText)]; + HeaderText = GatewayLocalizer[nameof(HeaderText)]; Model = (await RedundancyService.GetRedundancyAsync()).Adapt(); } diff --git a/src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsPage.razor.css b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsPage.razor.css similarity index 100% rename from src/Gateway/ThingsGateway.Management/Pages/RedundancyOptionsPage.razor.css rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/RedundancyOptionsPage.razor.css diff --git a/src/Gateway/ThingsGateway.Management/Pages/SystemConfigPage.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/SystemConfigPage.razor similarity index 84% rename from src/Gateway/ThingsGateway.Management/Pages/SystemConfigPage.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/SystemConfigPage.razor index 563e8e073..02c3c6d40 100644 --- a/src/Gateway/ThingsGateway.Management/Pages/SystemConfigPage.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/SystemConfigPage.razor @@ -37,7 +37,7 @@ - + @@ -50,13 +50,13 @@ - + - + @@ -66,7 +66,7 @@ @if (WebsiteOption.Value.ShowAuthorize) { - + diff --git a/src/Gateway/ThingsGateway.Management/Pages/SystemConfigPage.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/SystemConfigPage.razor.cs similarity index 93% rename from src/Gateway/ThingsGateway.Management/Pages/SystemConfigPage.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/SystemConfigPage.razor.cs index 3f2b75955..2fafe74c3 100644 --- a/src/Gateway/ThingsGateway.Management/Pages/SystemConfigPage.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/SystemConfigPage.razor.cs @@ -48,14 +48,14 @@ public partial class SystemConfigPage [Inject] [NotNull] - public IStringLocalizer ManagementLocalizer { get; set; } + public IStringLocalizer GatewayLocalizer { get; set; } private async Task OnRestart() { var result = await SwalService.ShowModal(new SwalOption() { Category = SwalCategory.Warning, - Title = ManagementLocalizer["Restart"] + Title = GatewayLocalizer["Restart"] }); if (result) { diff --git a/src/Gateway/ThingsGateway.Management/Pages/SystemConfigPage.razor.css b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/SystemConfigPage.razor.css similarity index 100% rename from src/Gateway/ThingsGateway.Management/Pages/SystemConfigPage.razor.css rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/SystemConfigPage.razor.css diff --git a/src/Gateway/ThingsGateway.Management/Pages/UpdateZipFileInfo.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFileInfo.razor similarity index 90% rename from src/Gateway/ThingsGateway.Management/Pages/UpdateZipFileInfo.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFileInfo.razor index ea4f646bf..088db45b6 100644 --- a/src/Gateway/ThingsGateway.Management/Pages/UpdateZipFileInfo.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFileInfo.razor @@ -14,13 +14,13 @@
- +
diff --git a/src/Gateway/ThingsGateway.Management/Pages/UpdateZipFileInfo.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFileInfo.razor.cs similarity index 89% rename from src/Gateway/ThingsGateway.Management/Pages/UpdateZipFileInfo.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFileInfo.razor.cs index 937cd05d3..5d53ca080 100644 --- a/src/Gateway/ThingsGateway.Management/Pages/UpdateZipFileInfo.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFileInfo.razor.cs @@ -37,12 +37,12 @@ public partial class UpdateZipFileInfo private IUpdateZipFileHostedService UpdateZipFileHostedService { get; set; } [Inject] [NotNull] - public IStringLocalizer ManagementLocalizer { get; set; } + public IStringLocalizer GatewayLocalizer { get; set; } /// protected override void OnInitialized() { base.OnInitialized(); - HeaderText = ManagementLocalizer[nameof(HeaderText)]; + HeaderText = GatewayLocalizer[nameof(HeaderText)]; } [Inject] private SwalService SwalService { get; set; } @@ -51,7 +51,7 @@ public partial class UpdateZipFileInfo var result = await SwalService.ShowModal(new SwalOption() { Category = SwalCategory.Warning, - Title = ManagementLocalizer["Restart"] + Title = GatewayLocalizer["Restart"] }); if (result) { @@ -69,7 +69,7 @@ public partial class UpdateZipFileInfo var result = await SwalService.ShowModal(new SwalOption() { Category = SwalCategory.Warning, - Title = ManagementLocalizer["Restart"] + Title = GatewayLocalizer["Restart"] }); return result; }); diff --git a/src/Gateway/ThingsGateway.Management/Pages/UpdateZipFilePage.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFilePage.razor similarity index 91% rename from src/Gateway/ThingsGateway.Management/Pages/UpdateZipFilePage.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFilePage.razor index 667b11b41..efc19c999 100644 --- a/src/Gateway/ThingsGateway.Management/Pages/UpdateZipFilePage.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFilePage.razor @@ -32,7 +32,7 @@ *@ - + diff --git a/src/Gateway/ThingsGateway.Management/Pages/UpdateZipFilePage.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFilePage.razor.cs similarity index 94% rename from src/Gateway/ThingsGateway.Management/Pages/UpdateZipFilePage.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFilePage.razor.cs index 6d6106eb5..f969d6945 100644 --- a/src/Gateway/ThingsGateway.Management/Pages/UpdateZipFilePage.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/Management/UpdateZipFilePage.razor.cs @@ -19,7 +19,7 @@ public partial class UpdateZipFilePage { [Inject] [NotNull] - public IStringLocalizer ManagementLocalizer { get; set; } + public IStringLocalizer GatewayLocalizer { get; set; } #region 查询 [Inject] private ToastService ToastService { get; set; } @@ -51,7 +51,7 @@ public partial class UpdateZipFilePage { IsScrolling = true, Size = Size.ExtraExtraLarge, - Title = ManagementLocalizer["Info"], + Title = GatewayLocalizer["Info"], ShowCloseButton = false, ShowMaximizeButton = true, ShowSaveButton = false, diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/CSharpScriptWidget.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/CSharpScriptWidget.razor similarity index 94% rename from src/Gateway/ThingsGateway.RulesEngine/Component/CSharpScriptWidget.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/CSharpScriptWidget.razor index 6e4f148b8..3867466a4 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/CSharpScriptWidget.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/CSharpScriptWidget.razor @@ -1,4 +1,4 @@ -@namespace ThingsGateway.RulesEngine +@namespace ThingsGateway.Gateway.Razor @using Newtonsoft.Json.Linq @using ThingsGateway.Blazor.Diagrams.Components.Renderers diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/CSharpScriptWidget.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/CSharpScriptWidget.razor.cs similarity index 95% rename from src/Gateway/ThingsGateway.RulesEngine/Component/CSharpScriptWidget.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/CSharpScriptWidget.razor.cs index 00e7515b5..470eb35ed 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/CSharpScriptWidget.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/CSharpScriptWidget.razor.cs @@ -13,12 +13,12 @@ using Newtonsoft.Json.Linq; using Size = BootstrapBlazor.Components.Size; -namespace ThingsGateway.RulesEngine +namespace ThingsGateway.Gateway.Razor { public partial class CSharpScriptWidget { [Inject] - IStringLocalizer Localizer { get; set; } + IStringLocalizer Localizer { get; set; } [Parameter] public TextNode Node { get; set; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/DefaultWidget.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/DefaultWidget.razor similarity index 75% rename from src/Gateway/ThingsGateway.RulesEngine/Component/DefaultWidget.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/DefaultWidget.razor index b052bf0cf..643e92b8c 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/DefaultWidget.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/DefaultWidget.razor @@ -1,6 +1,7 @@ -@namespace ThingsGateway.RulesEngine +@namespace ThingsGateway.Gateway.Razor @using ThingsGateway.Blazor.Diagrams.Components.Renderers +@using ThingsGateway.Blazor.Diagrams.Core.Models
@@ -18,7 +19,7 @@ @code { [Inject] - IStringLocalizer Localizer { get; set; } + IStringLocalizer Localizer { get; set; } [Parameter] public NodeModel Node { get; set; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/DeviceWidget.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/DeviceWidget.razor similarity index 93% rename from src/Gateway/ThingsGateway.RulesEngine/Component/DeviceWidget.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/DeviceWidget.razor index 993dbc0dd..dcbe658c0 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/DeviceWidget.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/DeviceWidget.razor @@ -1,4 +1,4 @@ -@namespace ThingsGateway.RulesEngine +@namespace ThingsGateway.Gateway.Razor @using ThingsGateway.Blazor.Diagrams.Components.Renderers @using ThingsGateway.Extension.Generic @@ -30,7 +30,7 @@ @code { [Inject] - IStringLocalizer Localizer { get; set; } + IStringLocalizer Localizer { get; set; } [Parameter] public TextNode Node { get; set; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/DragComponent.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/DragComponent.razor similarity index 92% rename from src/Gateway/ThingsGateway.RulesEngine/Component/DragComponent.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/DragComponent.razor index 34534e51a..e71077605 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/DragComponent.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/DragComponent.razor @@ -1,4 +1,4 @@ -@namespace ThingsGateway.RulesEngine +@namespace ThingsGateway.Gateway.Razor
OnDragStart())>
diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/NumberWidget.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/NumberWidget.razor similarity index 87% rename from src/Gateway/ThingsGateway.RulesEngine/Component/NumberWidget.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/NumberWidget.razor index 5190ddee6..28ef4935f 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/NumberWidget.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/NumberWidget.razor @@ -1,4 +1,4 @@ -@namespace ThingsGateway.RulesEngine +@namespace ThingsGateway.Gateway.Razor @using ThingsGateway.Blazor.Diagrams.Components.Renderers
@@ -24,7 +24,7 @@ @code { [Inject] - IStringLocalizer Localizer { get; set; } + IStringLocalizer Localizer { get; set; } [Parameter] public NumberNode Node { get; set; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/ScriptEdit.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/ScriptEdit.razor similarity index 97% rename from src/Gateway/ThingsGateway.RulesEngine/Component/ScriptEdit.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/ScriptEdit.razor index a663a3d4c..f05904c03 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/ScriptEdit.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/ScriptEdit.razor @@ -1,4 +1,4 @@ -@namespace ThingsGateway.RulesEngine +@namespace ThingsGateway.Gateway.Razor
diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/ScriptEdit.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/ScriptEdit.razor.cs similarity index 92% rename from src/Gateway/ThingsGateway.RulesEngine/Component/ScriptEdit.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/ScriptEdit.razor.cs index a1c4f097c..9ccf2efb6 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/ScriptEdit.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/ScriptEdit.razor.cs @@ -9,7 +9,7 @@ //------------------------------------------------------------------------------ #pragma warning disable CA2007 // 考虑对等待的任务调用 ConfigureAwait -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Razor; public partial class ScriptEdit { @@ -42,5 +42,5 @@ public partial class ScriptEdit } [Inject] - IStringLocalizer Localizer { get; set; } + IStringLocalizer Localizer { get; set; } } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/TextWidget.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/TextWidget.razor similarity index 87% rename from src/Gateway/ThingsGateway.RulesEngine/Component/TextWidget.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/TextWidget.razor index 26c4984bb..def749313 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/TextWidget.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/TextWidget.razor @@ -1,4 +1,4 @@ -@namespace ThingsGateway.RulesEngine +@namespace ThingsGateway.Gateway.Razor @using ThingsGateway.Blazor.Diagrams.Components.Renderers
@@ -24,7 +24,7 @@ @code { [Inject] - IStringLocalizer Localizer { get; set; } + IStringLocalizer Localizer { get; set; } [Parameter] public TextNode Node { get; set; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/VariableWidget.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/VariableWidget.razor similarity index 97% rename from src/Gateway/ThingsGateway.RulesEngine/Component/VariableWidget.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/VariableWidget.razor index 0adc0bd4e..631c5553c 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/VariableWidget.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/VariableWidget.razor @@ -1,4 +1,4 @@ -@namespace ThingsGateway.RulesEngine +@namespace ThingsGateway.Gateway.Razor @using ThingsGateway.Blazor.Diagrams.Components.Renderers @using ThingsGateway.Extension.Generic diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/VariableWidget.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/VariableWidget.razor.cs similarity index 95% rename from src/Gateway/ThingsGateway.RulesEngine/Component/VariableWidget.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/VariableWidget.razor.cs index d6e050b25..bcb004f38 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/VariableWidget.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/Component/VariableWidget.razor.cs @@ -12,12 +12,12 @@ using ThingsGateway.Extension.Generic; using ThingsGateway.Gateway.Application; using ThingsGateway.NewLife.Extension; -namespace ThingsGateway.RulesEngine +namespace ThingsGateway.Gateway.Razor { public partial class VariableWidget { [Inject] - IStringLocalizer Localizer { get; set; } + IStringLocalizer Localizer { get; set; } [Parameter] public VariableNode Node { get; set; } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Page/DragAndDrop.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/DragAndDrop.razor similarity index 86% rename from src/Gateway/ThingsGateway.RulesEngine/Page/DragAndDrop.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/DragAndDrop.razor index e0319d3eb..b38edef9a 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Page/DragAndDrop.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/DragAndDrop.razor @@ -1,6 +1,8 @@  -@namespace ThingsGateway.RulesEngine -@using ThingsGateway.RulesEngine +@namespace ThingsGateway.Gateway.Razor +@using ThingsGateway.Blazor.Diagrams.Components +@using ThingsGateway.Blazor.Diagrams.Components.Widgets +@using ThingsGateway.Gateway.Razor
@@ -25,7 +27,7 @@ @foreach (var node in item) {
- OnDragStart(node.Key.FullName))> + OnDragStart($"{node.Key.FullName},{node.Key.Assembly.GetName().Name}"))>
} } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Page/DragAndDrop.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/DragAndDrop.razor.cs similarity index 87% rename from src/Gateway/ThingsGateway.RulesEngine/Page/DragAndDrop.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/DragAndDrop.razor.cs index ebb1abf7d..5b330f510 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Page/DragAndDrop.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/DragAndDrop.razor.cs @@ -3,11 +3,14 @@ using Microsoft.AspNetCore.Components.Web; using System.Text; +using ThingsGateway.Blazor.Diagrams; +using ThingsGateway.Blazor.Diagrams.Core.Geometry; +using ThingsGateway.Blazor.Diagrams.Core.Models; using ThingsGateway.Blazor.Diagrams.Options; using ThingsGateway.NewLife.Json.Extension; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Razor; public partial class DragAndDrop { @@ -18,7 +21,7 @@ public partial class DragAndDrop }); private string? _draggedType; [Inject] - IStringLocalizer Localizer { get; set; } + IStringLocalizer Localizer { get; set; } @@ -30,7 +33,11 @@ public partial class DragAndDrop foreach (var item in RuleHelpers.CategoryNodeDict) { - _blazorDiagram.RegisterComponent(item.Key, item.Value.WidgetType); + var type = Type.GetType(item.Value.WidgetType); + if (type != null) + { + _blazorDiagram.RegisterComponent(item.Key, type); + } } } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Page/DragAndDrop.razor.css b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/DragAndDrop.razor.css similarity index 100% rename from src/Gateway/ThingsGateway.RulesEngine/Page/DragAndDrop.razor.css rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/DragAndDrop.razor.css diff --git a/src/Gateway/ThingsGateway.RulesEngine/Page/RulesPage.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesPage.razor similarity index 94% rename from src/Gateway/ThingsGateway.RulesEngine/Page/RulesPage.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesPage.razor index e81a050a8..8f3ff27e8 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Page/RulesPage.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesPage.razor @@ -1,7 +1,7 @@ @page "/gateway/rules" -@inherits ThingsGatewayRulesEngineComponentBase -@attribute [JSModuleAutoLoader("Page/RulesPage.razor.js")] -@namespace ThingsGateway.RulesEngine +@inherits ThingsGatewayModuleComponentBase +@attribute [JSModuleAutoLoader("Pages/RulesEngine/RulesPage.razor.js")] +@namespace ThingsGateway.Gateway.Razor @using ThingsGateway.Admin.Application @using ThingsGateway.Admin.Razor @using ThingsGateway.Gateway.Application diff --git a/src/Gateway/ThingsGateway.RulesEngine/Page/RulesPage.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesPage.razor.cs similarity index 97% rename from src/Gateway/ThingsGateway.RulesEngine/Page/RulesPage.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesPage.razor.cs index 9dc696048..a754e103d 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Page/RulesPage.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesPage.razor.cs @@ -13,7 +13,7 @@ using System.Data; using ThingsGateway.Admin.Razor; -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Razor; public partial class RulesPage { @@ -116,7 +116,7 @@ public partial class RulesPage } [Inject] - private IStringLocalizer StringLocalizer { get; set; } + private IStringLocalizer StringLocalizer { get; set; } #endregion 修改 diff --git a/src/Gateway/ThingsGateway.RulesEngine/Page/RulesPage.razor.js b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesPage.razor.js similarity index 100% rename from src/Gateway/ThingsGateway.RulesEngine/Page/RulesPage.razor.js rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesPage.razor.js diff --git a/src/Gateway/ThingsGateway.RulesEngine/Page/RulesStatus.razor b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesStatus.razor similarity index 90% rename from src/Gateway/ThingsGateway.RulesEngine/Page/RulesStatus.razor rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesStatus.razor index a12cb0646..47c38fbaf 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Page/RulesStatus.razor +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesStatus.razor @@ -1,4 +1,4 @@ -@namespace ThingsGateway.RulesEngine +@namespace ThingsGateway.Gateway.Razor @using ThingsGateway.Admin.Application @using ThingsGateway.Admin.Razor @using ThingsGateway.Debug diff --git a/src/Gateway/ThingsGateway.RulesEngine/Page/RulesStatus.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesStatus.razor.cs similarity index 87% rename from src/Gateway/ThingsGateway.RulesEngine/Page/RulesStatus.razor.cs rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesStatus.razor.cs index 5259f08f4..8765119d5 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/Page/RulesStatus.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesStatus.razor.cs @@ -8,7 +8,7 @@ // QQ群:605534569 //------------------------------------------------------------------------------ -namespace ThingsGateway.RulesEngine; +namespace ThingsGateway.Gateway.Razor; public partial class RulesStatus { @@ -20,7 +20,7 @@ public partial class RulesStatus IRulesEngineHostedService RulesEngineHostedService { get; set; } protected override Task OnParametersSetAsync() { - _rules = RulesEngineHostedService.BlazorDiagrams.Keys.FirstOrDefault(a => a.Rules.Id == RulesId); + _rules = RulesEngineHostedService.Diagrams.Keys.FirstOrDefault(a => a.Rules.Id == RulesId); return base.OnParametersSetAsync(); } } diff --git a/src/Gateway/ThingsGateway.RulesEngine/Page/RulesStatus.razor.css b/src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesStatus.razor.css similarity index 100% rename from src/Gateway/ThingsGateway.RulesEngine/Page/RulesStatus.razor.css rename to src/Gateway/ThingsGateway.Gateway.Razor/Pages/RulesEngine/RulesStatus.razor.css diff --git a/src/Gateway/ThingsGateway.Gateway.Razor/ThingsGateway.Gateway.Razor.csproj b/src/Gateway/ThingsGateway.Gateway.Razor/ThingsGateway.Gateway.Razor.csproj index b311861b8..632922fcb 100644 --- a/src/Gateway/ThingsGateway.Gateway.Razor/ThingsGateway.Gateway.Razor.csproj +++ b/src/Gateway/ThingsGateway.Gateway.Razor/ThingsGateway.Gateway.Razor.csproj @@ -6,6 +6,7 @@ net8.0; + diff --git a/src/Gateway/ThingsGateway.Gateway.Razor/_Imports.razor.cs b/src/Gateway/ThingsGateway.Gateway.Razor/_Imports.razor.cs index c7516208c..74bd1ca4f 100644 --- a/src/Gateway/ThingsGateway.Gateway.Razor/_Imports.razor.cs +++ b/src/Gateway/ThingsGateway.Gateway.Razor/_Imports.razor.cs @@ -17,5 +17,6 @@ global using System.Diagnostics.CodeAnalysis; global using ThingsGateway.Razor; +global using ThingsGateway.Gateway.Application; [assembly: SuppressMessage("Reliability", "CA2007", Justification = "<挂起>", Scope = "module")] diff --git a/src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/CSharpScript.svg b/src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/CSharpScript.svg similarity index 100% rename from src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/CSharpScript.svg rename to src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/CSharpScript.svg diff --git a/src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/Delay.svg b/src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/Delay.svg similarity index 100% rename from src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/Delay.svg rename to src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/Delay.svg diff --git a/src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/Rpc.svg b/src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/Rpc.svg similarity index 100% rename from src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/Rpc.svg rename to src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/Rpc.svg diff --git a/src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/Start.svg b/src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/Start.svg similarity index 100% rename from src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/Start.svg rename to src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/Start.svg diff --git a/src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/TimeInterval.svg b/src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/TimeInterval.svg similarity index 100% rename from src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/TimeInterval.svg rename to src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/TimeInterval.svg diff --git a/src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/ValueChanged.svg b/src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/ValueChanged.svg similarity index 100% rename from src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/ValueChanged.svg rename to src/Gateway/ThingsGateway.Gateway.Razor/wwwroot/img/ValueChanged.svg diff --git a/src/Gateway/ThingsGateway.Management/FodyWeavers.xml b/src/Gateway/ThingsGateway.Management/FodyWeavers.xml deleted file mode 100644 index a6a2edf1b..000000000 --- a/src/Gateway/ThingsGateway.Management/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.Management/Locales/en-US.json b/src/Gateway/ThingsGateway.Management/Locales/en-US.json deleted file mode 100644 index cac39b5d1..000000000 --- a/src/Gateway/ThingsGateway.Management/Locales/en-US.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "ThingsGateway.Management._Imports": { - "Authentication": "Authentication", - "CheckUpdate": "CheckUpdates", - "HeaderText": "Communication Log", - "Info": "Details", - "Restart": "Restart Gateway", - "Update": "Download Update" - }, - "ThingsGateway.Management.Authentication": { - "AuthName": "AuthName", - "Authorized": "Authorized", - "ExpireTime": "ExpireTime", - "Password": "Password", - "Register": "Register", - "RegisterStatus": "RegisterStatus", - "Unauthorized": "Unauthorized", - "Unregister": "Unregister", - "UUID": "UUID" - }, - "ThingsGateway.Management.AutoUpdateController": { - "AutoUpdateController": "AutoUpdate", - "Update": "Update" - }, - "ThingsGateway.Management.RedundancyHostedService": { - "ErrorSynchronizingData": "Synchronize data to standby site error", - "RedundancyDisable": "Redundant gateway site not enabled", - "RedundancyDup": "Redundant station settings duplicated", - "Start": "Gateway management service started", - "Stop": "Gateway management service stopped", - "SwitchMasterState": "Cannot connect to redundant site, local machine will switch to normal state", - "SwitchNormalState": "Local machine (primary site) will switch to normal state", - "SwitchSlaveState": "Master site has recovered, local machine (standby) will switch to standby state" - }, - "ThingsGateway.Management.RedundancyOptions": { - "Confirm": "Confirm switching to redundant state", - "Enable": "Enable Dual-Machine Redundancy", - "ForcedSync": "Forced Synchronous", - "ForcedSyncWarning": "Forcing synchronization will generate database configuration information.Are you sure you want to continue?", - "HeartbeatInterval": "Heartbeat Interval", - "IsMaster": "IsMaster", - "IsStartBusinessDevice": "Enable Business Device in Slave Site", - "Master": "Active Node", - "MasterUri": "Master Node URL", - "MaxErrorCount": "Maximum Error Count", - "RedundancyOptions": "Dual-Machine Redundancy", - "Restart": "The redundant service will be restarted soon", - "Slave": "Slave Node", - "Status": "Current Site Status", - "Switch": "Switch", - "SyncInterval": "Data Synchronization Interval", - "VerifyToken": "Verification Token" - }, - "ThingsGateway.Management.RedundancyService": { - "EditRedundancyOption": "EditRedundancyOption" - }, - "ThingsGateway.Management.UpdateZipFileHostedService": { - "Update": "New version detected" - }, - "ThingsGateway.Upgrade.UpdateZipFile": { - "AppName": "AppName", - "Architecture": "Architecture", - "DotNetVersion": "DotNetVersion", - "FilePath": "FilePath", - "FileSize": "FileSize", - "MinimumCompatibleVersion": "MinimumCompatibleVersion", - "OSPlatform": "OSPlatform", - "Version": "Version" - } -} \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.Management/Locales/zh-CN.json b/src/Gateway/ThingsGateway.Management/Locales/zh-CN.json deleted file mode 100644 index 0c06d4b6b..000000000 --- a/src/Gateway/ThingsGateway.Management/Locales/zh-CN.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "ThingsGateway.Management._Imports": { - "Authentication": "注册授权", - "CheckUpdate": "检查更新", - "HeaderText": "通讯日志", - "Info": "详情", - "Restart": "重启网关", - "Update": "下载更新" - }, - "ThingsGateway.Management.Authentication": { - "AuthName": "公司名称", - "Authorized": "已授权", - "ExpireTime": "过期时间", - "Password": "注册码", - "Register": "注册", - "RegisterStatus": "注册状态", - "Unauthorized": "未授权", - "Unregister": "取消注册", - "UUID": "唯一编码" - }, - "ThingsGateway.Management.AutoUpdateController": { - "AutoUpdateController": "程序更新", - "Update": "更新" - }, - "ThingsGateway.Management.RedundancyHostedService": { - "ErrorSynchronizingData": "同步数据到从站错误", - "RedundancyDisable": "不启用网关冗余站点", - "RedundancyDup": "主备站设置重复", - "Start": "网关管理服务启动", - "Stop": "网关管理服务停止", - "SwitchMasterState": "无法连接冗余站点,本机将切换到正常状态", - "SwitchNormalState": "本机(主站)将切换到正常状态", - "SwitchSlaveState": "主站已恢复,本机(从站)将切换到备用状态" - }, - "ThingsGateway.Management.RedundancyOptions": { - "Confirm": "确认切换冗余状态", - "Enable": "启用双机冗余", - "ForcedSync": "强制同步", - "ForcedSyncWarning": "强制同步会生成数据库配置信息,是否继续?", - "HeartbeatInterval": "心跳间隔", - "IsMaster": "是否为主站", - "IsStartBusinessDevice": "备用站点启用业务设备", - "Master": "激活站", - "MasterUri": "主站Url", - "MaxErrorCount": "错误最大次数", - "RedundancyOptions": "双机冗余", - "Restart": "即将重新启动冗余服务", - "Slave": "备用站", - "Status": "当前站点状态", - "Switch": "切换", - "SyncInterval": "数据同步间隔", - "VerifyToken": "Token" - }, - "ThingsGateway.Management.RedundancyService": { - "EditRedundancyOption": "修改网关冗余配置" - }, - "ThingsGateway.Management.UpdateZipFileHostedService": { - "Update": "检测到新版本" - }, - "ThingsGateway.Upgrade.UpdateZipFile": { - "AppName": "名称", - "Architecture": "架构", - "DotNetVersion": ".net版本", - "FilePath": "文件路径", - "FileSize": "文件大小", - "MinimumCompatibleVersion": "最小兼容版本", - "OSPlatform": "系统版本", - "Version": "版本" - } -} \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.Management/SeedData/SysResourceSeedData.cs b/src/Gateway/ThingsGateway.Management/SeedData/SysResourceSeedData.cs deleted file mode 100644 index ab3328d43..000000000 --- a/src/Gateway/ThingsGateway.Management/SeedData/SysResourceSeedData.cs +++ /dev/null @@ -1,28 +0,0 @@ -//------------------------------------------------------------------------------ -// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -// 源代码使用协议遵循本仓库的开源协议及附加协议 -// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -// 使用文档:https://thingsgateway.cn/ -// QQ群:605534569 -//------------------------------------------------------------------------------ - -namespace ThingsGateway.Management; - -/// -/// 资源表种子数据 -/// -public class SysResourceSeedData : ISqlSugarEntitySeedData -{ - /// - public IEnumerable SeedData() - { - var data1 = SeedDataUtil.GetSeedData(PathExtensions.CombinePathWithOs("SeedData", "Management", "seed_sys_resource.json")); - var data2 = SeedDataUtil.GetSeedData(PathExtensions.CombinePathWithOs("SeedData", "Management", "seed_sys_resourcebutton.json")); - - var assembly = GetType().Assembly; - return SeedDataUtil.GetSeedDataByJson(SeedDataUtil.GetManifestResourceStream(assembly, "SeedData.Management.seed_sys_resource.json")).Concat(SeedDataUtil.GetSeedDataByJson(SeedDataUtil.GetManifestResourceStream(assembly, "SeedData.Management.seed_sys_resourcebutton.json"))).Concat(data1).Concat(data2); - - } -} diff --git a/src/Gateway/ThingsGateway.Management/Startup.cs b/src/Gateway/ThingsGateway.Management/Startup.cs deleted file mode 100644 index f6de45d62..000000000 --- a/src/Gateway/ThingsGateway.Management/Startup.cs +++ /dev/null @@ -1,54 +0,0 @@ -//------------------------------------------------------------------------------ -// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -// 源代码使用协议遵循本仓库的开源协议及附加协议 -// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -// 使用文档:https://thingsgateway.cn/ -// QQ群:605534569 -//------------------------------------------------------------------------------ - -using Microsoft.AspNetCore.Builder; - -using System.Reflection; - -using ThingsGateway.Gateway.Application; -using ThingsGateway.Upgrade; - -namespace ThingsGateway.Management; - -[AppStartup(10000000)] -public class Startup : AppStartup -{ - public void Configure(IServiceCollection services) - { - services.AddSingleton(); - services.AddGatewayHostedService(); - services.AddGatewayHostedService(); - services.AddSingleton(); - services.AddSingleton(provider => provider.GetRequiredService()); - services.AddConfigurableOptions(); - } - - - public void Use(IApplicationBuilder applicationBuilder) - { - var serviceProvider = applicationBuilder.ApplicationServices; - //检查ConfigId - var configIdGroup = DbContext.DbConfigs.GroupBy(it => it.ConfigId); - foreach (var configId in configIdGroup) - { - if (configId.Count() > 1) throw new($"Sqlsugar connect configId: {configId.Key} Duplicate!"); - } - - //遍历配置 - DbContext.DbConfigs?.ForEach(it => - { - var connection = DbContext.Db.GetConnection(it.ConfigId);//获取数据库连接对象 - if (it.InitDatabase == true) - connection.DbMaintenance.CreateDatabase();//创建数据库,如果存在则不创建 - }); - var fullName = Assembly.GetExecutingAssembly().FullName;//获取程序集全名 - CodeFirstUtils.CodeFirst(fullName!);//CodeFirst - } -} diff --git a/src/Gateway/ThingsGateway.Management/ThingsGateway.Management.csproj b/src/Gateway/ThingsGateway.Management/ThingsGateway.Management.csproj deleted file mode 100644 index dc02de57d..000000000 --- a/src/Gateway/ThingsGateway.Management/ThingsGateway.Management.csproj +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - True - - - - - - PreserveNewest - - - - - - - Never - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.Management/_Imports.razor b/src/Gateway/ThingsGateway.Management/_Imports.razor deleted file mode 100644 index d77ed7b7b..000000000 --- a/src/Gateway/ThingsGateway.Management/_Imports.razor +++ /dev/null @@ -1,19 +0,0 @@ - -@using System.Net.Http -@using System.Net.Http.Json -@using Microsoft.AspNetCore.Components.Forms -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Microsoft.AspNetCore.Components.Web.Virtualization -@using Microsoft.JSInterop -@using Microsoft.AspNetCore.Authorization -@using Microsoft.AspNetCore.Components.Authorization -@using Microsoft.Extensions.Localization - -@using System.ComponentModel -@using System.ComponentModel.DataAnnotations - -@using BootstrapBlazor.Components - - -@using ThingsGateway.Razor; \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.Management/_Imports.razor.cs b/src/Gateway/ThingsGateway.Management/_Imports.razor.cs deleted file mode 100644 index d2810c494..000000000 --- a/src/Gateway/ThingsGateway.Management/_Imports.razor.cs +++ /dev/null @@ -1,18 +0,0 @@ -//------------------------------------------------------------------------------ -// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -// 源代码使用协议遵循本仓库的开源协议及附加协议 -// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -// 使用文档:https://thingsgateway.cn/ -// QQ群:605534569 -//------------------------------------------------------------------------------ - -global using BootstrapBlazor.Components; - -global using Microsoft.AspNetCore.Components; -global using Microsoft.Extensions.Localization; - -global using System.Diagnostics.CodeAnalysis; - -global using ThingsGateway.Razor; diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/PlaceholderModel.cs b/src/Gateway/ThingsGateway.RulesEngine/Component/PlaceholderModel.cs deleted file mode 100644 index 2d7955db7..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/PlaceholderModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ThingsGateway.RulesEngine; - -public abstract class PlaceholderModel : BaseNode -{ - - protected PlaceholderModel(string id, Point? position = null) : base(id, position) - { - } - - public string Placeholder { get; set; } -} \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.RulesEngine/Component/ThingsGatewayRulesEngineComponentBase.cs b/src/Gateway/ThingsGateway.RulesEngine/Component/ThingsGatewayRulesEngineComponentBase.cs deleted file mode 100644 index ac0af55e3..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Component/ThingsGatewayRulesEngineComponentBase.cs +++ /dev/null @@ -1,21 +0,0 @@ -//------------------------------------------------------------------------------ -// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -// 源代码使用协议遵循本仓库的开源协议及附加协议 -// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -// 使用文档:https://thingsgateway.cn/ -// QQ群:605534569 -//------------------------------------------------------------------------------ - -namespace ThingsGateway.Razor; - -public abstract class ThingsGatewayRulesEngineComponentBase : BootstrapModuleComponentBase -{ - /// - protected override void OnLoadJSModule() - { - base.OnLoadJSModule(); - ModulePath = $"./_content/ThingsGateway.RulesEngine/{ModulePath}"; - } -} diff --git a/src/Gateway/ThingsGateway.RulesEngine/FodyWeavers.xml b/src/Gateway/ThingsGateway.RulesEngine/FodyWeavers.xml deleted file mode 100644 index a6a2edf1b..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.RulesEngine/Job/LogJob.cs b/src/Gateway/ThingsGateway.RulesEngine/Job/LogJob.cs deleted file mode 100644 index 905ed9d6f..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Job/LogJob.cs +++ /dev/null @@ -1,67 +0,0 @@ -// ------------------------------------------------------------------------------ -// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -// 源代码使用协议遵循本仓库的开源协议及附加协议 -// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -// 使用文档:https://thingsgateway.cn/ -// QQ群:605534569 -// ------------------------------------------------------------------------------ - -using Microsoft.Extensions.DependencyInjection; - -using ThingsGateway.Schedule; - -namespace ThingsGateway.RulesEngine; - -/// -/// 清理日志作业任务 -/// -[JobDetail("rulesenginejob_log", Description = "清理规则引擎日志", GroupName = "Log", Concurrent = false)] -[Daily(TriggerId = "trigger_rulesenginelog", Description = "清理规则引擎日志", RunOnStart = false)] -public class LogJob : IJob -{ - public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) - { - await DeleteTextLog(stoppingToken).ConfigureAwait(false); - } - - - - private static async Task DeleteTextLog(CancellationToken stoppingToken) - { - //网关通道日志以通道id命名 - var rulesService = App.RootServices.GetService(); - var ruleNames = (await rulesService.GetAllAsync().ConfigureAwait(false)).Select(a => a.Name.ToString()).ToHashSet(); - var ruleBaseDir = RulesEngineHostedService.LogDir; - Directory.CreateDirectory(ruleBaseDir); - - Delete(ruleBaseDir, ruleNames, stoppingToken); - - } - - private static void Delete(string baseDir, HashSet strings, CancellationToken stoppingToken) - { - var channelDir = Directory.GetDirectories(baseDir) - .Select(a => Path.GetFileName(a)) - .ToArray(); - foreach (var dir in channelDir) - { - if (stoppingToken.IsCancellationRequested) - { - return; - } - //删除文件夹 - try - { - if (!strings.Contains(dir)) - { - Directory.Delete(baseDir.CombinePathWithOs(dir), true); - } - } - catch { } - } - } - - -} diff --git a/src/Gateway/ThingsGateway.RulesEngine/Locales/AppResource.cs b/src/Gateway/ThingsGateway.RulesEngine/Locales/AppResource.cs deleted file mode 100644 index b033377b1..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Locales/AppResource.cs +++ /dev/null @@ -1,29 +0,0 @@ -//------------------------------------------------------------------------------ -// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -// 源代码使用协议遵循本仓库的开源协议及附加协议 -// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -// 使用文档:https://thingsgateway.cn/ -// QQ群:605534569 -//------------------------------------------------------------------------------ - -using ThingsGateway.Foundation; - -namespace ThingsGateway.RulesEngine; - -public static class AppResource -{ - public static string RulesEngineTaskStart => ThingsGateway.Foundation.AppResource.Lang == Language.Chinese ? ChineseResource.RulesEngineTaskStart : EnglishResource.RulesEngineTaskStart; -} - -public static class ChineseResource -{ - - public const string RulesEngineTaskStart = "规则引擎线程启动"; -} -public static class EnglishResource -{ - public const string RulesEngineTaskStart = "Rules engine service started"; - -} \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.RulesEngine/Locales/en-US.json b/src/Gateway/ThingsGateway.RulesEngine/Locales/en-US.json deleted file mode 100644 index 9ed906563..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Locales/en-US.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "ThingsGateway.RulesEngine._Imports": { - "Actuator": "Actuator", - "AlarmChangedTriggerNode": "AlarmStateTrigger", - "BusinessNode": "BusinessDeviceExecution", - "BusinessNode.Placeholder": "BusinessDeviceName", - "Cancel": "Cancel", - "Check": "Check", - "Clear": "Clear", - "ConditionNode": "Condition", - "ConditionNode.Placeholder": "Calculation returns boolean", - "DataNode": "DataScript", - "DelayNode": "Delay", - "DelayNode.Placeholder": "Interval Time (ms)", - "Design": "Design", - "Device.Placeholder": "DeviceName", - "DeviceChangedTriggerNode": "DeviceStateTrigger", - "Download": "Download JSON", - "End": "End", - "EndNode": "End", - "ExecuteScriptNode": "CustomExecution", - "Expression": "Script", - "Load": "Load JSON", - "Other": "Other", - "Save": "Save", - "Start": "Start", - "Start/End": "Start/End", - "StartNode": "Start", - "TimeIntervalTriggerNode": "IntervalExecutionTrigger", - "TimeIntervalTriggerNode.Placeholder": "IntervalTime (ms)", - "Trigger": "Trigger", - "ValueChangedTriggerNode": "VariableStateTrigger", - "Variable.Placeholder": "VariableName", - "VariableRpcNode": "VariableRpc", - "VariableRpcNode.Placeholder": "VariableName", - "ZoomToFit": "ZoomToFit" - }, - "ThingsGateway.RulesEngine.Rules": { - "ClearRules": "ClearRules", - "DeleteRules": "DeleteRules", - "Name": "Name", - "SaveRules": "SaveRules", - "SortCode": "SortCode", - "Status": "Status" - }, - - "ThingsGateway.RulesEngine.RulesStatus": { - "LogConsole": "Log", - "RulesId": "Name" - } -} \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.RulesEngine/Locales/zh-CN.json b/src/Gateway/ThingsGateway.RulesEngine/Locales/zh-CN.json deleted file mode 100644 index 2f14a1aa3..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Locales/zh-CN.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "ThingsGateway.RulesEngine._Imports": { - "Actuator": "执行", - "AlarmChangedTriggerNode": "报警状态触发器", - "BusinessNode": "业务设备执行", - "BusinessNode.Placeholder": "设备名称", - "Cancel": "取消", - "Check": "检查", - "Clear": "清空", - "ConditionNode": "条件", - "ConditionNode.Placeholder": "计算返回boolean", - "DataNode": "数据脚本", - "DelayNode": "延时", - "DelayNode.Placeholder": "间隔时间(ms)", - "Design": "设计", - "Device.Placeholder": "设备名称", - "DeviceChangedTriggerNode": "设备状态触发器", - "Download": "下载Json", - "End": "结束", - "EndNode": "结束", - "ExecuteScriptNode": "自定义执行", - "Expression": "脚本", - "Load": "加载Json", - "Other": "其他", - "Save": "保存", - "Start": "开始", - "Start/End": "开始/结束", - "StartNode": "开始", - "TimeIntervalTriggerNode": "间隔执行触发器", - "TimeIntervalTriggerNode.Placeholder": "间隔时间(ms)", - "Trigger": "触发器", - "ValueChangedTriggerNode": "变量状态触发器", - "Variable.Placeholder": "变量名称", - "VariableRpcNode": "RPC写入", - "VariableRpcNode.Placeholder": "变量名称", - "ZoomToFit": "自适应" - }, - "ThingsGateway.RulesEngine.Rules": { - "ClearRules": "清空规则", - "DeleteRules": "删除规则", - "Name": "名称", - "SaveRules": "保存规则", - "SortCode": "排序", - "Status": "状态" - }, - - "ThingsGateway.RulesEngine.RulesStatus": { - "LogConsole": "日志", - "RulesId": "名称" - } -} \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/NumberNode.cs b/src/Gateway/ThingsGateway.RulesEngine/Node/NumberNode.cs deleted file mode 100644 index ef5605262..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/NumberNode.cs +++ /dev/null @@ -1,14 +0,0 @@ - -namespace ThingsGateway.RulesEngine; - -public abstract class NumberNode : PlaceholderModel -{ - - public NumberNode(string id, Point? position = null) : base(id, position) - { - } - [ModelValue] - public int? Number { get; set; } - - -} diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Start/EndNode.cs b/src/Gateway/ThingsGateway.RulesEngine/Node/Start/EndNode.cs deleted file mode 100644 index 04033dc7c..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Start/EndNode.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace ThingsGateway.RulesEngine; - - -[CategoryNode(Category = "Start/End", ImgUrl = "_content/ThingsGateway.RulesEngine/img/End.svg", Desc = nameof(EndNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(DefaultWidget))] -public class EndNode : BaseNode -{ - - public EndNode(string id, Point? position = null) : base(id, position) - { Title = "End"; } - - -} diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/Start/StartNode.cs b/src/Gateway/ThingsGateway.RulesEngine/Node/Start/StartNode.cs deleted file mode 100644 index 33df8bdc2..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/Start/StartNode.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ThingsGateway.RulesEngine; - -[CategoryNode(Category = "Start/End", ImgUrl = "_content/ThingsGateway.RulesEngine/img/Start.svg", Desc = nameof(StartNode), LocalizerType = typeof(ThingsGateway.RulesEngine._Imports), WidgetType = typeof(DefaultWidget))] -public class StartNode : BaseNode -{ - - public StartNode(string id, Point? position = null) : base(id, position) - { Title = "Start"; } - - -} diff --git a/src/Gateway/ThingsGateway.RulesEngine/Node/TextNode.cs b/src/Gateway/ThingsGateway.RulesEngine/Node/TextNode.cs deleted file mode 100644 index 8da44d9fe..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Node/TextNode.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace ThingsGateway.RulesEngine; - -public abstract class TextNode : PlaceholderModel -{ - - public TextNode(string id, Point? position = null) : base(id, position) - { - } - - [ModelValue] - public virtual string Text { get; set; } -} diff --git a/src/Gateway/ThingsGateway.RulesEngine/SeedData/SysResourceSeedData.cs b/src/Gateway/ThingsGateway.RulesEngine/SeedData/SysResourceSeedData.cs deleted file mode 100644 index b74f215a2..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/SeedData/SysResourceSeedData.cs +++ /dev/null @@ -1,30 +0,0 @@ -//------------------------------------------------------------------------------ -// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -// 源代码使用协议遵循本仓库的开源协议及附加协议 -// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -// 使用文档:https://thingsgateway.cn/ -// QQ群:605534569 -//------------------------------------------------------------------------------ - -using ThingsGateway.Admin.Application; - -namespace ThingsGateway.RulesEngine; - -/// -/// 资源表种子数据 -/// -public class SysResourceSeedData : ISqlSugarEntitySeedData -{ - /// - public IEnumerable SeedData() - { - var data1 = SeedDataUtil.GetSeedData(PathExtensions.CombinePathWithOs("SeedData", "RulesEngine", "seed_sys_resource.json")); - var data2 = SeedDataUtil.GetSeedData(PathExtensions.CombinePathWithOs("SeedData", "RulesEngine", "seed_sys_resourcebutton.json")); - - var assembly = GetType().Assembly; - return SeedDataUtil.GetSeedDataByJson(SeedDataUtil.GetManifestResourceStream(assembly, "SeedData.RulesEngine.seed_sys_resource.json")).Concat(SeedDataUtil.GetSeedDataByJson(SeedDataUtil.GetManifestResourceStream(assembly, "SeedData.RulesEngine.seed_sys_resourcebutton.json"))).Concat(data1).Concat(data2); - - } -} diff --git a/src/Gateway/ThingsGateway.RulesEngine/Startup.cs b/src/Gateway/ThingsGateway.RulesEngine/Startup.cs deleted file mode 100644 index 01523de68..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/Startup.cs +++ /dev/null @@ -1,51 +0,0 @@ -//------------------------------------------------------------------------------ -// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -// 源代码使用协议遵循本仓库的开源协议及附加协议 -// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -// 使用文档:https://thingsgateway.cn/ -// QQ群:605534569 -//------------------------------------------------------------------------------ - -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.DependencyInjection; - -using System.Reflection; - -using ThingsGateway.Admin.Application; -using ThingsGateway.RulesEngine; - -namespace ThingsGateway.Management; - -[AppStartup(10000000)] -public class Startup : AppStartup -{ - public void Configure(IServiceCollection services) - { - services.AddSingleton(); - services.AddGatewayHostedService(); - } - - - public void Use(IApplicationBuilder applicationBuilder) - { - var serviceProvider = applicationBuilder.ApplicationServices; - //检查ConfigId - var configIdGroup = DbContext.DbConfigs.GroupBy(it => it.ConfigId); - foreach (var configId in configIdGroup) - { - if (configId.Count() > 1) throw new($"Sqlsugar connect configId: {configId.Key} Duplicate!"); - } - - //遍历配置 - DbContext.DbConfigs?.ForEach(it => - { - var connection = DbContext.Db.GetConnection(it.ConfigId);//获取数据库连接对象 - if (it.InitDatabase == true) - connection.DbMaintenance.CreateDatabase();//创建数据库,如果存在则不创建 - }); - var fullName = Assembly.GetExecutingAssembly().FullName;//获取程序集全名 - CodeFirstUtils.CodeFirst(fullName!);//CodeFirst - } -} diff --git a/src/Gateway/ThingsGateway.RulesEngine/ThingsGateway.RulesEngine.csproj b/src/Gateway/ThingsGateway.RulesEngine/ThingsGateway.RulesEngine.csproj deleted file mode 100644 index 36dbe05e0..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/ThingsGateway.RulesEngine.csproj +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - True - - - - - - PreserveNewest - - - - - - - Never - - - - - - - - - - - - diff --git a/src/Gateway/ThingsGateway.RulesEngine/_Imports.razor b/src/Gateway/ThingsGateway.RulesEngine/_Imports.razor deleted file mode 100644 index 2d9846b0a..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/_Imports.razor +++ /dev/null @@ -1,24 +0,0 @@ -@namespace ThingsGateway.RulesEngine -@using System.Net.Http -@using System.Net.Http.Json -@using Microsoft.AspNetCore.Components.Forms -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Microsoft.AspNetCore.Components.Web.Virtualization -@using Microsoft.JSInterop -@using Microsoft.AspNetCore.Authorization -@using Microsoft.AspNetCore.Components.Authorization -@using Microsoft.Extensions.Localization - -@using System.ComponentModel -@using System.ComponentModel.DataAnnotations - -@using BootstrapBlazor.Components - -@using ThingsGateway.Razor; - -@using ThingsGateway.RulesEngine - -@using ThingsGateway.Blazor.Diagrams.Components -@using ThingsGateway.Blazor.Diagrams.Components.Widgets -@using ThingsGateway.Blazor.Diagrams.Components.Renderers diff --git a/src/Gateway/ThingsGateway.RulesEngine/_Imports.razor.cs b/src/Gateway/ThingsGateway.RulesEngine/_Imports.razor.cs deleted file mode 100644 index c27242b29..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/_Imports.razor.cs +++ /dev/null @@ -1,9 +0,0 @@ -global using ThingsGateway.Blazor.Diagrams; -global using ThingsGateway.Blazor.Diagrams.Core.Geometry; -global using ThingsGateway.Blazor.Diagrams.Core.Models; - -namespace ThingsGateway.RulesEngine; -public partial class _Imports -{ - -} \ No newline at end of file diff --git a/src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/End.svg b/src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/End.svg deleted file mode 100644 index 11731f07d..000000000 --- a/src/Gateway/ThingsGateway.RulesEngine/wwwroot/img/End.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/Plugin/ThingsGateway.Debug.Razor/Startup.cs b/src/Plugin/ThingsGateway.Debug.Razor/Startup.cs index 7837ec5a2..59e5bae53 100644 --- a/src/Plugin/ThingsGateway.Debug.Razor/Startup.cs +++ b/src/Plugin/ThingsGateway.Debug.Razor/Startup.cs @@ -23,7 +23,7 @@ public class Startup : AppStartup .AddScoped(); } - public void Use(IApplicationBuilder applicationBuilder) + public void Use(IServiceProvider serviceProvider) { } } diff --git a/src/Plugin/ThingsGateway.Plugin.OpcUa/OpcUaMaster/OpcUaMaster.cs b/src/Plugin/ThingsGateway.Plugin.OpcUa/OpcUaMaster/OpcUaMaster.cs index f0bca1277..661abb783 100644 --- a/src/Plugin/ThingsGateway.Plugin.OpcUa/OpcUaMaster/OpcUaMaster.cs +++ b/src/Plugin/ThingsGateway.Plugin.OpcUa/OpcUaMaster/OpcUaMaster.cs @@ -321,7 +321,7 @@ public class OpcUaMaster : CollectBase private Dictionary> VariableAddresDicts { get; set; } = new(); - private void DataChangedHandler((VariableNode variableNode, MonitoredItem monitoredItem, DataValue dataValue, JToken jToken) data) + private void DataChangedHandler((Opc.Ua.VariableNode variableNode, MonitoredItem monitoredItem, DataValue dataValue, JToken jToken) data) { DateTime time = DateTime.Now; try diff --git a/src/Gateway/ThingsGateway.RulesEngine/GlobalUsings.cs b/src/ThingsGateway.OnlyApi/GlobalUsings.cs similarity index 74% rename from src/Gateway/ThingsGateway.RulesEngine/GlobalUsings.cs rename to src/ThingsGateway.OnlyApi/GlobalUsings.cs index d2810c494..e855c4d36 100644 --- a/src/Gateway/ThingsGateway.RulesEngine/GlobalUsings.cs +++ b/src/ThingsGateway.OnlyApi/GlobalUsings.cs @@ -8,11 +8,4 @@ // QQ群:605534569 //------------------------------------------------------------------------------ -global using BootstrapBlazor.Components; - -global using Microsoft.AspNetCore.Components; -global using Microsoft.Extensions.Localization; - -global using System.Diagnostics.CodeAnalysis; - -global using ThingsGateway.Razor; +global using System; diff --git a/src/ThingsGateway.OnlyApi/Program.cs b/src/ThingsGateway.OnlyApi/Program.cs new file mode 100644 index 000000000..2e5ca5978 --- /dev/null +++ b/src/ThingsGateway.OnlyApi/Program.cs @@ -0,0 +1,105 @@ +//------------------------------------------------------------------------------ +// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 +// 此代码版权(除特别声明外的代码)归作者本人Diego所有 +// 源代码使用协议遵循本仓库的开源协议及附加协议 +// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway +// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway +// 使用文档:https://thingsgateway.cn/ +// QQ群:605534569 +//------------------------------------------------------------------------------ + +using Microsoft.AspNetCore.ResponseCompression; + +using System.Runtime.InteropServices; +using System.Text; + +using ThingsGateway.NewLife.Log; +using ThingsGateway.SqlSugar; + +namespace ThingsGateway.Server; + +public class Program +{ + private static readonly string[] second = new[] { "application/octet-stream" }; + + public static async Task Main(string[] args) + { + await Task.Delay(2000).ConfigureAwait(false); + //当前工作目录设为程序集的基目录 + System.IO.Directory.SetCurrentDirectory(AppContext.BaseDirectory); + // 增加中文编码支持 + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + + ThingsGateway.Admin.Application.ClaimConst.Scheme = typeof(Program).Assembly.GetName().Name; + + #region 控制台输出Logo + + Console.Write(Environment.NewLine); + Console.ForegroundColor = ConsoleColor.Yellow; + XTrace.WriteLine(string.Empty); + XTrace.UseConsole(); + Console.WriteLine( + """ + + _______ _ _ _____ _ + |__ __|| | (_) / ____| | | + | | | |__ _ _ __ __ _ ___ | | __ __ _ | |_ ___ __ __ __ _ _ _ + | | | '_ \ | || '_ \ / _` |/ __|| | |_ | / _` || __|/ _ \\ \ /\ / // _` || | | | + | | | | | || || | | || (_| |\__ \| |__| || (_| || |_| __/ \ V V /| (_| || |_| | + |_| |_| |_||_||_| |_| \__, ||___/ \_____| \__,_| \__|\___| \_/\_/ \__,_| \__, | + __/ | __/ | + |___/ |___/ + + """ + ); + Console.ResetColor(); + + #endregion 控制台输出Logo + + + await Serve.RunAsync(RunOptions.Default.ConfigureFirstActionBuilder(builder => + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + builder.Host.UseWindowsService(); + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + builder.Host.UseSystemd(); + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + builder.Logging.ClearProviders(); //去除默认的事件日志提供者,某些情况下会日志输出异常,导致程序崩溃 + + }).ConfigureBuilder(builder => + { + + if (!builder.Environment.IsDevelopment()) + { + builder.Services.AddResponseCompression( + opts => + { + opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(second); + }); + } + + builder.WebHost.UseWebRoot("wwwroot"); + builder.WebHost.UseStaticWebAssets(); + // 设置接口超时时间和上传大小-Kestrel + builder.WebHost.ConfigureKestrel(u => + { + u.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30); + u.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(30); + u.Limits.MaxRequestBodySize = null; + }); + + + + }) + .Configure(app=> + { + ReflectionInoHelper.RemoveAllCache(); + InstanceFactory.RemoveCache(); + }) + ).ConfigureAwait(false); + + await Task.Delay(2000).ConfigureAwait(false); + } + +} diff --git a/src/ThingsGateway.OnlyApi/Properties/launchSettings.json b/src/ThingsGateway.OnlyApi/Properties/launchSettings.json new file mode 100644 index 000000000..ccedd694a --- /dev/null +++ b/src/ThingsGateway.OnlyApi/Properties/launchSettings.json @@ -0,0 +1,47 @@ +{ + "profiles": { + "http": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Production" + }, + "dotnetRunMessages": true, + "applicationUrl": "http://*:5000" + }, + "demo": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Demo" + }, + "dotnetRunMessages": true, + "applicationUrl": "http://*:5000" + }, + "PostgreSQL": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "PostgreSQL " + }, + "dotnetRunMessages": true, + "applicationUrl": "http://*:5000" + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + }, + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://*:59494/", + "sslPort": 44372 + } + } +} \ No newline at end of file diff --git a/src/ThingsGateway.OnlyApi/Startup.cs b/src/ThingsGateway.OnlyApi/Startup.cs new file mode 100644 index 000000000..a6f9d4cdf --- /dev/null +++ b/src/ThingsGateway.OnlyApi/Startup.cs @@ -0,0 +1,464 @@ +//------------------------------------------------------------------------------ +// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 +// 此代码版权(除特别声明外的代码)归作者本人Diego所有 +// 源代码使用协议遵循本仓库的开源协议及附加协议 +// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway +// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway +// 使用文档:https://thingsgateway.cn/ +// QQ群:605534569 +//------------------------------------------------------------------------------ + +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.DataProtection; +using Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption; +using Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel; +using Microsoft.AspNetCore.HttpOverrides; +using Microsoft.AspNetCore.StaticFiles; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; + +using Newtonsoft.Json; + +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Text.Encodings.Web; +using System.Text.Unicode; + +using ThingsGateway.Admin.Application; +using ThingsGateway.Admin.Razor; +using ThingsGateway.Extension; +using ThingsGateway.NewLife.Caching; +using ThingsGateway.Razor; + +namespace ThingsGateway.Server; + +[AppStartup(-99999)] +public class Startup : AppStartup +{ + public void ConfigBlazorServer(IServiceCollection services) + { + + // 增加中文编码支持网页源码显示汉字 + services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All)); + //并发启动/停止host + services.Configure(options => + { + options.ServicesStartConcurrently = true; + options.ServicesStopConcurrently = true; + }); + + //// 事件总线 + //services.AddEventBus(options => + //{ + + //}); + + // 任务调度 + services.AddSchedule(options => + { + options.AddPersistence(); + }); + + // 缓存 + services.AddSingleton(); + + // 允许跨域 + services.AddCorsAccessor(); + + // + //services.AddRazorPages(); + + // Json序列化设置 + static void SetNewtonsoftJsonSetting(JsonSerializerSettings setting) + { + setting.DateFormatHandling = DateFormatHandling.IsoDateFormat; + setting.DateTimeZoneHandling = DateTimeZoneHandling.Local; + // setting.Converters.AddDateTimeTypeConverters(localized: true); // 时间本地化 + //setting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 时间格式化 + setting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 忽略循环引用 + + // setting.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 解决动态对象属性名大写 + setting.NullValueHandling = NullValueHandling.Ignore; // 忽略空值 + // setting.Converters.AddLongTypeConverters(); // long转string(防止js精度溢出) 超过17位开启 + // setting.MetadataPropertyHandling = MetadataPropertyHandling.Ignore; // 解决DateTimeOffset异常 + // setting.DateParseHandling = DateParseHandling.None; // 解决DateTimeOffset异常 + // setting.Converters.Add(new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }); // 解决DateTimeOffset异常 + } + ; + + services.AddMvcFilter(); + + services.AddControllers() + .AddNewtonsoftJson(options => SetNewtonsoftJsonSetting(options.SerializerSettings)) + //.AddXmlSerializerFormatters() + //.AddXmlDataContractSerializerFormatters() + .AddInjectWithUnifyResult(); + + +#if NET8_0_OR_GREATER + services + .AddRazorComponents(options => + { + options.TemporaryRedirectionUrlValidityDuration = TimeSpan.FromMinutes(10); + }) + .AddInteractiveServerComponents(options => + { + options.RootComponents.MaxJSRootComponents = 500; + options.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(2); + options.MaxBufferedUnacknowledgedRenderBatches = 20; + options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(10); + }) + .AddHubOptions(options => + { + //单个传入集线器消息的最大大小。默认 32 KB + options.MaximumReceiveMessageSize = 1024 * 1024; + //可为客户端上载流缓冲的最大项数。 如果达到此限制,则会阻止处理调用,直到服务器处理流项。 + options.StreamBufferCapacity = 30; + options.ClientTimeoutInterval = TimeSpan.FromMinutes(2); + options.KeepAliveInterval = TimeSpan.FromSeconds(15); + options.HandshakeTimeout = TimeSpan.FromSeconds(30); + }); + +#else + + services.AddServerSideBlazor(options => + { + options.RootComponents.MaxJSRootComponents = 500; + options.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(2); + options.MaxBufferedUnacknowledgedRenderBatches = 20; + options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(10); + }).AddHubOptions(options => + { + //单个传入集线器消息的最大大小。默认 32 KB + options.MaximumReceiveMessageSize = 1024 * 1024; + //可为客户端上载流缓冲的最大项数。 如果达到此限制,则会阻止处理调用,直到服务器处理流项。 + options.StreamBufferCapacity = 30; + options.ClientTimeoutInterval = TimeSpan.FromMinutes(2); + options.KeepAliveInterval = TimeSpan.FromSeconds(15); + options.HandshakeTimeout = TimeSpan.FromSeconds(30); + }); + +#endif + + // 配置Nginx转发获取客户端真实IP + // 注1:如果负载均衡不是在本机通过 Loopback 地址转发请求的,一定要加上options.KnownNetworks.Clear()和options.KnownProxies.Clear() + // 注2:如果设置环境变量 ASPNETCORE_FORWARDEDHEADERS_ENABLED 为 True,则不需要下面的配置代码 + services.Configure(options => + { + options.ForwardedHeaders = ForwardedHeaders.All; + options.KnownNetworks.Clear(); + options.KnownProxies.Clear(); + }); + + + #region 控制台美化 + + services.AddConsoleFormatter(options => + { + options.WriteFilter = (logMsg) => + { + if (App.HostApplicationLifetime.ApplicationStopping.IsCancellationRequested && logMsg.LogLevel >= LogLevel.Warning) return false; + if (string.IsNullOrEmpty(logMsg.Message)) return false; + else return true; + }; + + options.MessageFormat = (logMsg) => + { + //如果不是LoggingMonitor日志才格式化 + if (logMsg.LogName != "System.Logging.LoggingMonitor") + { + var stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("【日志级别】:" + logMsg.LogLevel); + stringBuilder.AppendLine("【日志类名】:" + logMsg.LogName); + stringBuilder.AppendLine("【日志时间】:" + DateTime.Now.ToDefaultDateTimeFormat()); + stringBuilder.AppendLine("【日志内容】:" + logMsg.Message); + if (logMsg.Exception != null) + { + stringBuilder.AppendLine("【异常信息】:" + logMsg.Exception); + } + return stringBuilder.ToString(); + } + else + { + return logMsg.Message; + } + }; + options.WriteHandler = (logMsg, scopeProvider, writer, fmtMsg, opt) => + { + ConsoleColor consoleColor = ConsoleColor.White; + switch (logMsg.LogLevel) + { + case LogLevel.Information: + consoleColor = ConsoleColor.DarkGreen; + break; + + case LogLevel.Warning: + consoleColor = ConsoleColor.DarkYellow; + break; + + case LogLevel.Error: + consoleColor = ConsoleColor.DarkRed; + break; + } + writer.WriteWithColor(fmtMsg, ConsoleColor.Black, consoleColor); + }; + }); + + #endregion 控制台美化 + + #region api日志 + + //Monitor日志配置 + //services.AddMonitorLogging(options => + //{ + // options.JsonIndented = true;// 是否美化 JSON + // options.GlobalEnabled = false;//全局启用 + // options.ConfigureLogger((logger, logContext, context) => + // { + // var httpContext = context.HttpContext;//获取httpContext + + // //获取客户端信息 + // var userAgent = App.GetService().UserAgent; + // // 获取控制器/操作描述器 + // var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; + // //操作名称默认是控制器名加方法名,自定义操作名称要在action上加Description特性 + // var option = $"{controllerActionDescriptor.ControllerName}/{controllerActionDescriptor.ActionName}"; + + // var desc = App.CreateLocalizerByType(controllerActionDescriptor.ControllerTypeInfo.AsType())[controllerActionDescriptor.MethodInfo.Name]; + // //获取特性 + // option = desc.Value;//则将操作名称赋值为控制器上写的title + + // logContext.Set(LoggingConst.CateGory, option);//传操作名称 + // logContext.Set(LoggingConst.Operation, option);//传操作名称 + // logContext.Set(LoggingConst.Client, userAgent);//客户端信息 + // logContext.Set(LoggingConst.Path, httpContext.Request.Path.Value);//请求地址 + // logContext.Set(LoggingConst.Method, httpContext.Request.Method);//请求方法 + // }); + //}); + + //日志写入数据库配置 + services.AddDatabaseLogging(options => + { + options.WriteFilter = (logMsg) => + { + return logMsg.LogName == "System.Logging.RequestAudit"; + }; + }); + + #endregion api日志 + + //已添加AddOptions + // 增加多语言支持配置信息 + services.AddRequestLocalization>((localizerOption, blazorOption) => + { + blazorOption.OnChange(op => Invoke(op)); + Invoke(blazorOption.CurrentValue); + + void Invoke(BootstrapBlazor.Components.BootstrapBlazorOptions option) + { + var supportedCultures = option.GetSupportedCultures(); + localizerOption.SupportedCultures = supportedCultures; + localizerOption.SupportedUICultures = supportedCultures; + } + }); + + services.AddScoped(a => + { + var appContext = new BlazorAppContext( + a.GetService(), + a.GetService(), + a.GetService()); + //appContext.TitleLocalizer = a.GetRequiredService>(); + + return appContext; + }); + + services.AddHttpContextAccessor(); + + //添加cookie授权 + var authenticationBuilder = services.AddAuthentication(ClaimConst.Scheme).AddCookie(ClaimConst.Scheme, a => + { + a.AccessDeniedPath = "/Account/AccessDenied/"; + a.LogoutPath = "/Account/Logout/"; + a.LoginPath = "/Account/Login/"; + }); + + var websiteOptions = App.GetOptions()!; + if (websiteOptions.Demo) + { + authenticationBuilder.AddOAuth>("Gitee", "Gitee", options => + { + var data = App.GetConfig("GiteeOAuthSettings"); + options.ClientId = data.ClientId; + options.ClientSecret = data.ClientSecret; + + }); + } + + // 添加jwt授权 + authenticationBuilder.AddJwt(); + + services.AddAuthorization(); +#if NET8_0_OR_GREATER + services.AddCascadingAuthenticationState(); +#endif + services.AddAuthorizationCore(); + services.AddScoped(); + services.AddScoped(); + + +#if NET9_0_OR_GREATER + var certificate = X509CertificateLoader.LoadPkcs12FromFile("ThingsGateway.pfx", "ThingsGateway", X509KeyStorageFlags.EphemeralKeySet); +#else + var certificate = new X509Certificate2("ThingsGateway.pfx", "ThingsGateway", X509KeyStorageFlags.EphemeralKeySet); +#endif + services.AddDataProtection() + .PersistKeysToFileSystem(new DirectoryInfo("keys")) + .ProtectKeysWithCertificate(certificate) + .UseCryptographicAlgorithms(new AuthenticatedEncryptorConfiguration + { + EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC, + ValidationAlgorithm = ValidationAlgorithm.HMACSHA256 + }); + } + + + + public void Use(IApplicationBuilder applicationBuilder, IWebHostEnvironment env) + { + var app = (WebApplication)applicationBuilder; + app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.All, KnownNetworks = { }, KnownProxies = { } }); + + app.UseBootstrapBlazor(); + + + // 启用本地化 + var option = app.Services.GetService>(); + if (option != null) + { + app.UseRequestLocalization(option.Value); + } + + // 任务调度看板 + app.UseScheduleUI(options => + { + options.RequestPath = "/schedule"; // 必须以 / 开头且不以 / 结尾 + options.DisableOnProduction = true; // 生产环境关闭 + options.DisplayEmptyTriggerJobs = true; // 是否显示空作业触发器的作业 + options.DisplayHead = false; // 是否显示页头 + options.DefaultExpandAllJobs = false; // 是否默认展开所有作业 + }); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Error"); + app.UseResponseCompression(); + app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => ctx.ProcessCache(app.Configuration) }); + } + + + app.UseStaticFiles(new StaticFileOptions + { + OnPrepareResponse = (stf) => + { + stf.ProcessCache(app.Configuration); + stf.Context.Response.Headers.AccessControlAllowOrigin = "*"; + stf.Context.Response.Headers.AccessControlAllowHeaders = "*"; + } + }); + var provider = new FileExtensionContentTypeProvider(); + provider.Mappings[".properties"] = "application/octet-stream"; + provider.Mappings[".moc"] = "application/x-msdownload"; + provider.Mappings[".moc3"] = "application/x-msdownload"; + provider.Mappings[".mtn"] = "application/x-msdownload"; + + app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider }); + app.UseStaticFiles(); + + // 特定文件类型(文件后缀)处理 + var contentTypeProvider = GetFileExtensionContentTypeProvider(); + // contentTypeProvider.Mappings[".文件后缀"] = "MIME 类型"; + app.UseStaticFiles(new StaticFileOptions + { + ContentTypeProvider = contentTypeProvider + }); + + //// 启用HTTPS + //app.UseHttpsRedirection(); + + + // 添加状态码拦截中间件 + app.UseUnifyResultStatusCodes(); + + // 路由注册 + app.UseRouting(); + + // 启用跨域,必须在 UseRouting 和 UseAuthentication 之间注册 + app.UseCorsAccessor(); + + // 启用鉴权授权 + app.UseAuthentication(); + app.UseAuthorization(); + + // 任务调度看板 + app.UseScheduleUI(options => + { + options.RequestPath = "/schedule"; // 必须以 / 开头且不以 / 结尾 + options.DisableOnProduction = true; // 生产环境关闭 + options.DisplayEmptyTriggerJobs = true; // 是否显示空作业触发器的作业 + options.DisplayHead = false; // 是否显示页头 + options.DefaultExpandAllJobs = false; // 是否默认展开所有作业 + }); + + app.UseInject(); + +#if NET8_0_OR_GREATER + app.UseAntiforgery(); +#endif + app.MapControllers(); + app.MapHubs(); + + if (env.IsDevelopment()) + { + app.MapGet("/", context => + { + context.Response.Redirect("/api/index.html"); + return Task.CompletedTask; + }); + } + } + + /// + /// 初始化文件 ContentType 提供器 + /// + /// + private static FileExtensionContentTypeProvider GetFileExtensionContentTypeProvider() + { + var fileExtensionProvider = new FileExtensionContentTypeProvider(); + fileExtensionProvider.Mappings[".iec"] = "application/octet-stream"; + fileExtensionProvider.Mappings[".patch"] = "application/octet-stream"; + fileExtensionProvider.Mappings[".apk"] = "application/vnd.android.package-archive"; + fileExtensionProvider.Mappings[".pem"] = "application/x-x509-user-cert"; + fileExtensionProvider.Mappings[".gzip"] = "application/x-gzip"; + fileExtensionProvider.Mappings[".7zip"] = "application/zip"; + fileExtensionProvider.Mappings[".jpg2"] = "image/jp2"; + fileExtensionProvider.Mappings[".et"] = "application/kset"; + fileExtensionProvider.Mappings[".dps"] = "application/ksdps"; + fileExtensionProvider.Mappings[".cdr"] = "application/x-coreldraw"; + fileExtensionProvider.Mappings[".shtml"] = "text/html"; + fileExtensionProvider.Mappings[".php"] = "application/x-httpd-php"; + fileExtensionProvider.Mappings[".php3"] = "application/x-httpd-php"; + fileExtensionProvider.Mappings[".php4"] = "application/x-httpd-php"; + fileExtensionProvider.Mappings[".phtml"] = "application/x-httpd-php"; + fileExtensionProvider.Mappings[".pcd"] = "image/x-photo-cd"; + fileExtensionProvider.Mappings[".bcmap"] = "application/octet-stream"; + fileExtensionProvider.Mappings[".properties"] = "application/octet-stream"; + fileExtensionProvider.Mappings[".m3u8"] = "application/x-mpegURL"; + return fileExtensionProvider; + } +} diff --git a/src/ThingsGateway.OnlyApi/ThingsGateway.OnlyApi.csproj b/src/ThingsGateway.OnlyApi/ThingsGateway.OnlyApi.csproj new file mode 100644 index 000000000..47a39f445 --- /dev/null +++ b/src/ThingsGateway.OnlyApi/ThingsGateway.OnlyApi.csproj @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + net8.0;net9.0; + $(TargetFramework) + false + zh-Hans;en-US + true + favicon.ico + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + PreserveNewest + + + PreserveNewest + + + + PreserveNewest + + + + + + + + Always + + + + + diff --git a/src/ThingsGateway.OnlyApi/favicon.ico b/src/ThingsGateway.OnlyApi/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d5a4939b2856a1e50185862447921c074d959e6b GIT binary patch literal 4286 zcmeIzTZm0j9LMo}+>Xm|%(xSKLP$PLjO3G|UxfRVYxzsVo_qVNmENAvUb0&$0z4h^5d+q;P|FhPHuS6l1o zf2Vb{`G;UXp5cv&FNn9%gvGFjMYffP6jtB?3OEX_ z?YH%Fu3XuJFUVp!CSwWOq4B2>S+n$laxoNlpz(WAnika7eR_&6XwQRw#S_r@)9SDE zP%czo`xjc@LI(eqF2nu|KST%Z%Trx$VQ$a)}-I zj!mXdzd`Rp5@(?GUx2?iM0=XhwsN5T@2h?tIlAwku^RsRi8F8o@1go1(TXt$t!Z~E z2daM)8XvX(2CnJ3|Acx3_4WR2#V+hX6SP0NUv{a`wsN5T3+`=HeXUt*@5V}m&ez{g z&4Wtn>$~_CUy(+CONHiZ9;m+FsdD>2j_VIi&K6?me0_Cl9Q19|^D)SrtNt|<>zn>6 zqW>HbHRc?Ya|D{lFBi0l8?g<_4gD$V#{^u3zMneRH(lqY^$*Z@76YNY4bcAIMK$dD zBRS9Fy!wM{r9Z-4(=&SyC!zOuFfPNcKbG_RP>w$zQSbFdWez8 ze636G>`u%_@cwIW=ixBEVK?k`F5vtLUP15ORII^c=-adzQRVGksX~wYQ*KhKB{wmX@~Shg QmuPc46COI0O&jaHUIzs literal 0 HcmV?d00001 diff --git a/src/ThingsGateway.Photino/Startup.cs b/src/ThingsGateway.Photino/Startup.cs index 21c00dbd3..d93fae2af 100644 --- a/src/ThingsGateway.Photino/Startup.cs +++ b/src/ThingsGateway.Photino/Startup.cs @@ -72,11 +72,11 @@ public class Startup : AppStartup }); - // 事件总线 - services.AddEventBus(options => - { + //// 事件总线 + //services.AddEventBus(options => + //{ - }); + //}); // 任务调度 services.AddSchedule(options => @@ -128,8 +128,6 @@ public class Startup : AppStartup }); - services.AddHealthChecks(); - #region 控制台美化 diff --git a/src/ThingsGateway.Photino/ThingsGateway.Photino.csproj b/src/ThingsGateway.Photino/ThingsGateway.Photino.csproj index cfdfcc0fd..fef3c7c31 100644 --- a/src/ThingsGateway.Photino/ThingsGateway.Photino.csproj +++ b/src/ThingsGateway.Photino/ThingsGateway.Photino.csproj @@ -6,8 +6,6 @@ - - diff --git a/src/ThingsGateway.Server/Configuration/App.Development.json b/src/ThingsGateway.Server/Configuration/App.Development.json index e92cb26a4..c30cd4748 100644 --- a/src/ThingsGateway.Server/Configuration/App.Development.json +++ b/src/ThingsGateway.Server/Configuration/App.Development.json @@ -14,6 +14,7 @@ "ThingsGateway.SqlSugar", "ThingsGateway.Admin.Application", "ThingsGateway.Admin.Razor", + "ThingsGateway.DB", "ThingsGateway.Gateway.Application", "ThingsGateway.Gateway.Razor", "ThingsGateway.Management", diff --git a/src/ThingsGateway.Server/Configuration/App.json b/src/ThingsGateway.Server/Configuration/App.json index 98f9d42f8..b565a3d81 100644 --- a/src/ThingsGateway.Server/Configuration/App.json +++ b/src/ThingsGateway.Server/Configuration/App.json @@ -14,6 +14,7 @@ "ThingsGateway.SqlSugar", "ThingsGateway.Admin.Application", "ThingsGateway.Admin.Razor", + "ThingsGateway.DB", "ThingsGateway.Gateway.Application", "ThingsGateway.Gateway.Razor", "ThingsGateway.Management", diff --git a/src/ThingsGateway.Server/Program/Program.cs b/src/ThingsGateway.Server/Program/Program.cs index 95f9c8379..2323d04ca 100644 --- a/src/ThingsGateway.Server/Program/Program.cs +++ b/src/ThingsGateway.Server/Program/Program.cs @@ -14,6 +14,7 @@ using System.Runtime.InteropServices; using System.Text; using ThingsGateway.NewLife.Log; +using ThingsGateway.SqlSugar; namespace ThingsGateway.Server; @@ -88,7 +89,6 @@ public class Program u.Limits.MaxRequestBodySize = null; }); - //builder.Services.AddSingleton(); }) .Configure(app => { @@ -103,6 +103,8 @@ public class Program #endif + ReflectionInoHelper.RemoveAllCache(); + InstanceFactory.RemoveCache(); }) ).ConfigureAwait(false); diff --git a/src/ThingsGateway.Server/Program/SingleFilePublish.cs b/src/ThingsGateway.Server/Program/SingleFilePublish.cs index 01182bf38..52f74f5c9 100644 --- a/src/ThingsGateway.Server/Program/SingleFilePublish.cs +++ b/src/ThingsGateway.Server/Program/SingleFilePublish.cs @@ -40,6 +40,7 @@ public class SingleFilePublish : ISingleFilePublish "ThingsGateway.NewLife.X", "ThingsGateway.Razor", "ThingsGateway.Admin.Razor" , + "ThingsGateway.DB", "ThingsGateway.Admin.Application", "ThingsGateway.SqlSugar", diff --git a/src/ThingsGateway.Server/Program/Startup.cs b/src/ThingsGateway.Server/Program/Startup.cs index fdca7cbfa..421d7ab3f 100644 --- a/src/ThingsGateway.Server/Program/Startup.cs +++ b/src/ThingsGateway.Server/Program/Startup.cs @@ -49,11 +49,11 @@ public class Startup : AppStartup }); - // 事件总线 - services.AddEventBus(options => - { + //// 事件总线 + //services.AddEventBus(options => + //{ - }); + //}); // 任务调度 services.AddSchedule(options => @@ -153,8 +153,6 @@ public class Startup : AppStartup }); - services.AddHealthChecks(); - #region 控制台美化 diff --git a/src/ThingsGateway.Server/ThingsGateway.Server.csproj b/src/ThingsGateway.Server/ThingsGateway.Server.csproj index dacbc9725..e09df9bd4 100644 --- a/src/ThingsGateway.Server/ThingsGateway.Server.csproj +++ b/src/ThingsGateway.Server/ThingsGateway.Server.csproj @@ -6,16 +6,12 @@ - - - - diff --git a/src/ThingsGateway.Server/targets/Gateway.targets b/src/ThingsGateway.Server/targets/Gateway.targets index 24660c2db..2c96d7113 100644 --- a/src/ThingsGateway.Server/targets/Gateway.targets +++ b/src/ThingsGateway.Server/targets/Gateway.targets @@ -1,43 +1,51 @@ - + - - - - - - - - - - - - - - - - - - $(TargetDir)SeedData\Gateway\ - - - + + + + - - - - - - - - - - + + + + + - + + + + + + + + + $(TargetDir)SeedData\RulesEngine\ + $(TargetDir)SeedData\SeedData\ + $(TargetDir)SeedData\Gateway\ + + + + + + + + + + + + + + + + + + + + + + - - diff --git a/src/ThingsGateway.Server/targets/GatewayOther.targets b/src/ThingsGateway.Server/targets/GatewayOther.targets deleted file mode 100644 index ed079c120..000000000 --- a/src/ThingsGateway.Server/targets/GatewayOther.targets +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - $(TargetDir)SeedData\Management\ - - - - - - - - - - - - $(TargetDir)SeedData\RulesEngine\ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Upgrade/ThingsGateway.Upgrade/Model/UpdateZipFile.cs b/src/Upgrade/ThingsGateway.Upgrade/Model/UpdateZipFile.cs index b24f85ff4..0d64cdd7a 100644 --- a/src/Upgrade/ThingsGateway.Upgrade/Model/UpdateZipFile.cs +++ b/src/Upgrade/ThingsGateway.Upgrade/Model/UpdateZipFile.cs @@ -1,4 +1,6 @@ -using System.Runtime.InteropServices; +using BootstrapBlazor.Components; + +using System.Runtime.InteropServices; namespace ThingsGateway.Upgrade; diff --git a/src/Upgrade/ThingsGateway.Upgrade/Startup.cs b/src/Upgrade/ThingsGateway.Upgrade/Startup.cs index f51e16251..64bc067c2 100644 --- a/src/Upgrade/ThingsGateway.Upgrade/Startup.cs +++ b/src/Upgrade/ThingsGateway.Upgrade/Startup.cs @@ -29,9 +29,8 @@ public class Startup : AppStartup services.TryAddEnumerable(ServiceDescriptor.Singleton(seriveProvider => seriveProvider.GetService())); services.AddConfigurableOptions(); } - public void Use(IApplicationBuilder applicationBuilder) + public void Use(IServiceProvider serviceProvider) { - var serviceProvider = applicationBuilder.ApplicationServices; //检查ConfigId var configIdGroup = DbContext.DbConfigs.GroupBy(it => it.ConfigId); foreach (var configId in configIdGroup) diff --git a/src/Upgrade/ThingsGateway.UpgradeServer/Program/Startup.cs b/src/Upgrade/ThingsGateway.UpgradeServer/Program/Startup.cs index f6ecc95d4..67b7151f4 100644 --- a/src/Upgrade/ThingsGateway.UpgradeServer/Program/Startup.cs +++ b/src/Upgrade/ThingsGateway.UpgradeServer/Program/Startup.cs @@ -45,11 +45,11 @@ public class Startup : AppStartup options.ServicesStopConcurrently = true; }); - // 事件总线 - services.AddEventBus(options => - { + //// 事件总线 + //services.AddEventBus(options => + //{ - }); + //}); // 任务调度 services.AddSchedule(options => @@ -146,8 +146,6 @@ public class Startup : AppStartup }); - services.AddHealthChecks(); - #region 控制台美化