lixun 2 سال پیش
والد
کامیت
86dc55a33f

+ 10 - 0
src/YSAI.DAQ/YSAI.Can/YSAI.Can.csproj

@@ -6,4 +6,14 @@
     <Nullable>enable</Nullable>
   </PropertyGroup>
 
+  <ItemGroup>
+    <ProjectReference Include="..\YSAI.Core\YSAI.Core.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Reference Include="Kvaser.CanLib">
+      <HintPath>lib\Kvaser.CanLib.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+
 </Project>

+ 6 - 6
src/YSAI.DAQ/YSAI.Core/interface/only/IManage.cs

@@ -19,39 +19,39 @@ namespace YSAI.Core.@interface.only
         /// 示例
         /// </summary>
         /// <returns>配置文件</returns>
-        IActionResult Sample();
+        IActionResult Sample(LibType LType);
         /// <summary>
         /// 示例
         /// </summary>
         /// <returns>配置文件</returns>
-        Task<IActionResult> SampleAsync();
+        Task<IActionResult> SampleAsync(LibType LType);
 
         /// <summary>
         /// 设置配置
         /// </summary>
         /// <param name="ConfigFile">配置文件</param>
         /// <returns>统一出参</returns>
-        OperateResult Setting(IFormFile? ConfigFile);
+        OperateResult Setting(IFormFile? ConfigFile, LibType LType);
         /// <summary>
         /// 设置配置
         /// </summary>
         /// <param name="ConfigFile">配置文件</param>
         /// <returns>统一出参</returns>
-        Task<OperateResult> SettingAsync(IFormFile? ConfigFile);
+        Task<OperateResult> SettingAsync(IFormFile? ConfigFile, LibType LType);
 
         /// <summary>
         /// 修改配置
         /// </summary>
         /// <param name="ConfigFile">配置文件</param>
         /// <returns>统一出参</returns>
-        OperateResult Update(IFormFile? ConfigFile);
+        OperateResult Update(IFormFile? ConfigFile, LibType LType);
 
         /// <summary>
         /// 修改配置
         /// </summary>
         /// <param name="ConfigFile">配置文件</param>
         /// <returns>统一出参</returns>
-        Task<OperateResult> UpdateAsync(IFormFile? ConfigFile);
+        Task<OperateResult> UpdateAsync(IFormFile? ConfigFile, LibType LType);
     }
 
     /// <summary>

+ 1 - 1
src/YSAI.DAQ/YSAI.Core/reflection/ReflectionOperate.cs

@@ -35,7 +35,7 @@ namespace YSAI.Core.reflection
         /// <summary>
         /// 文件
         /// </summary>
-        public static string ConfigFile = $"{ConfigDirectory}//Reflection.json";
+        public static string ConfigFile = $"{AppDomain.CurrentDomain.BaseDirectory}{ConfigDirectory}//RelayConfig.json";
         /// <summary>
         /// 配置数据
         /// </summary>

+ 127 - 42
src/YSAI.DAQ/YSAI.Manage.Core/ManageOperate.cs

@@ -1,9 +1,11 @@
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using System.IO;
 using YSAI.Core.data;
 using YSAI.Core.@enum;
 using YSAI.Core.@interface.only;
 using YSAI.Core.@interface.unify;
+using YSAI.Core.reflection;
 using YSAI.Manage.Core.@base;
 using YSAI.Opc.ua.client;
 using YSAI.Unility;
@@ -18,13 +20,21 @@ namespace YSAI.Manage.Core
         protected override string LogHead => "[ ManageOperate 操作 ]";
         protected override string ClassName => "ManageOperate";
         /// <summary>
-        /// 配置路径
+        /// 转发配置路径
         /// </summary>
-        private readonly string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config//AMConfig.json");
+        private readonly string RelayConfigPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config//RelayConfig.json");
         /// <summary>
-        /// 实例文件路径
+        /// 转发实例文件路径
         /// </summary>
-        private readonly string samplePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config//Sample.json");
+        private readonly string RelaySamplePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config//RelaySample.json");
+        /// <summary>
+        /// 数采配置路径
+        /// </summary>
+        private readonly string DaqConfigPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config//DaqConfig.json");
+        /// <summary>
+        /// 数采实例文件路径
+        /// </summary>
+        private readonly string DaqSamplePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config//DaqSample.json");
         /// <summary>
         /// 配置数据
         /// </summary>
@@ -50,31 +60,45 @@ namespace YSAI.Manage.Core
             }
         }
 
-        public IActionResult Sample()
+        public IActionResult Sample(LibType LType)
         {
-            try
-            {
-                Address address = JsonTool.StringToJsonEntity<Address>(FileTool.FileToString(samplePath));
-                AddressManage addressManage = new AddressManage();
-                addressManage.SN = address.SN;
-                addressManage.AddressArray = address.AddressArray;
-                addressManage.CreationTime = DateTime.Now.ToLocalTime();
-                addressManage.DType = DaqType.OpcUa;
-                addressManage.InstanceParam = new OpcUaClientData.Basics() { Name = $"OpcUa", UserName = "123", Password = "123", ServerUrl = "opc.tcp://127.0.0.1:4840", SamplingInterval = 100 };
-                return new FileContentResult(System.Text.Encoding.Default.GetBytes(new List<AddressManage> { addressManage, addressManage, addressManage, addressManage, addressManage, addressManage }.ToJson().JsonFormatting()), "application/octet-stream");
-            }
-            catch (Exception ex)
+            switch (LType)
             {
-                throw new NotImplementedException("实例获取异常:" + ex.Message);
+                case LibType.Daq:
+                    try
+                    {
+                        Address address = JsonTool.StringToJsonEntity<Address>(FileTool.FileToString(DaqSamplePath));
+                        AddressManage addressManage = new AddressManage();
+                        addressManage.SN = address.SN;
+                        addressManage.AddressArray = address.AddressArray;
+                        addressManage.CreationTime = DateTime.Now.ToLocalTime();
+                        addressManage.DType = DaqType.OpcUa;
+                        addressManage.InstanceParam = new OpcUaClientData.Basics() { Name = $"OpcUa", UserName = "123", Password = "123", ServerUrl = "opc.tcp://127.0.0.1:4840", SamplingInterval = 100 };
+                        return new FileContentResult(System.Text.Encoding.Default.GetBytes(new List<AddressManage> { addressManage, addressManage, addressManage, addressManage, addressManage, addressManage }.ToJson().JsonFormatting()), "application/octet-stream");
+                    }
+                    catch (Exception ex)
+                    {
+                        throw new NotImplementedException("数采示例获取异常:" + ex.Message);
+                    }
+                case LibType.Relay:
+                    try
+                    {
+                        return new FileContentResult(System.Text.Encoding.Default.GetBytes(FileTool.FileToString(RelaySamplePath).JsonFormatting()), "application/octet-stream");
+                    }
+                    catch (Exception ex)
+                    {
+                        throw new NotImplementedException("转发示例获取异常:" + ex.Message);
+                    }
             }
+            throw new NotImplementedException("示例获取失败");
         }
 
-        public Task<IActionResult> SampleAsync()
+        public Task<IActionResult> SampleAsync(LibType LType)
         {
-            return Task.Run(() => Sample());
+            return Task.Run(() => Sample(LType));
         }
 
-        public OperateResult Setting(IFormFile? ConfigFile)
+        public OperateResult Setting(IFormFile? ConfigFile, LibType LType)
         {
             //开始记录运行时间
             Depart("Setting");
@@ -84,19 +108,38 @@ namespace YSAI.Manage.Core
                 {
                     return Break("Setting", false, "请选择要上传的文件");
                 }
-                if (!System.IO.File.Exists(configPath))
-                {
-                    OperateResult operateResult = Update(ConfigFile);
-                    if (operateResult.State)
-                    {
-                        return Break("Setting", operateResult.State);
-                    }
-                    return Break("Setting", operateResult.State, operateResult.Message.Split(')')[1]);
-                }
-                else
+                switch (LType)
                 {
-                    return Break("Setting", false, "配置文件已存在,请执行修改配置接口");
+                    case LibType.Daq:
+                        if (!System.IO.File.Exists(DaqConfigPath))
+                        {
+                            OperateResult operateResult = Update(ConfigFile, LType);
+                            if (operateResult.State)
+                            {
+                                return Break("Setting", operateResult.State);
+                            }
+                            return Break("Setting", operateResult.State, operateResult.Message.Split(')')[1]);
+                        }
+                        else
+                        {
+                            return Break("Setting", false, "配置文件已存在,请执行修改配置接口");
+                        }
+                    case LibType.Relay:
+                        if (!System.IO.File.Exists(RelayConfigPath))
+                        {
+                            OperateResult operateResult = Update(ConfigFile, LType);
+                            if (operateResult.State)
+                            {
+                                return Break("Setting", operateResult.State);
+                            }
+                            return Break("Setting", operateResult.State, operateResult.Message.Split(')')[1]);
+                        }
+                        else
+                        {
+                            return Break("Setting", false, "配置文件已存在,请执行修改配置接口");
+                        }
                 }
+                return Break("Setting", false, $"设置配置失败");
             }
             catch (Exception ex)
             {
@@ -104,12 +147,12 @@ namespace YSAI.Manage.Core
             }
         }
 
-        public Task<OperateResult> SettingAsync(IFormFile? ConfigFile)
+        public Task<OperateResult> SettingAsync(IFormFile? ConfigFile, LibType LType)
         {
-            return Task.Run(() => Setting(ConfigFile));
+            return Task.Run(() => Setting(ConfigFile, LType));
         }
 
-        public OperateResult Update(IFormFile? ConfigFile)
+        public OperateResult Update(IFormFile? ConfigFile, LibType LType)
         {
             //开始记录运行时间
             Depart("Update");
@@ -120,10 +163,53 @@ namespace YSAI.Manage.Core
                     return Break("Update", false, "请选择要上传的文件");
                 }
                 //判断文件夹是否存在,不存在则创建
-                FileTool.GetPathFolderPath(configPath, true);
-                using (var stream = System.IO.File.Create(configPath))
+                FileTool.GetPathFolderPath(DaqConfigPath, true);
+                FileTool.GetPathFolderPath(RelayConfigPath, true);
+
+                //数据转换
+                StreamReader reader = new StreamReader(ConfigFile.OpenReadStream());
+                //Json内容
+                string jsonContent = reader.ReadToEnd();
+
+                switch (LType)
                 {
-                    ConfigFile.CopyToAsync(stream).Wait();
+                    case LibType.Daq:
+                        
+                        List<AddressManage>? addressManage = null;
+                        //json转换
+                        try
+                        {
+                            addressManage = JsonTool.StringToJsonEntity<List<AddressManage>>(jsonContent);
+                        }
+                        catch { }
+
+                        if (addressManage != null)
+                        {
+                            FileTool.StringToFile(DaqConfigPath, jsonContent);
+                        }
+                        else
+                        {
+                            return Break("Update", false, $"[ {LType.ToString()} ] 文件内容错误");
+                        }
+                        break;
+                    case LibType.Relay:
+                        ReflectionData.Basics? reflectionData = null;
+                        //json转换
+                        try
+                        {
+                            reflectionData = JsonTool.StringToJsonEntity<ReflectionData.Basics>(jsonContent);
+                        }
+                        catch { }
+
+                        if (reflectionData != null)
+                        {
+                            FileTool.StringToFile(RelayConfigPath, jsonContent);
+                        }
+                        else
+                        {
+                            return Break("Update", false, $"[ {LType.ToString()} ] 文件内容错误");
+                        }
+                        break;
                 }
 
                 //当配置更新时,底层统一管理将被释放
@@ -138,20 +224,19 @@ namespace YSAI.Manage.Core
             }
         }
 
-        public Task<OperateResult> UpdateAsync(IFormFile? ConfigFile)
+        public Task<OperateResult> UpdateAsync(IFormFile? ConfigFile, LibType LType)
         {
-            return Task.Run(() => Update(ConfigFile));
+            return Task.Run(() => Update(ConfigFile, LType));
         }
 
         public OperateResult Init()
         {
             if (baseOperate == null)
             {
-                
                 try
                 {
                     //配置赋值
-                    AManages = JsonTool.StringToListJsonEntity<AddressManage>(FileTool.FileToString(configPath));
+                    AManages = JsonTool.StringToListJsonEntity<AddressManage>(FileTool.FileToString(DaqConfigPath));
                     if (baseOperate != null)
                     {
                         baseOperate.Dispose();

+ 5 - 1
src/YSAI.DAQ/YSAI.Manage.Core/YSAI.Manage.Core.csproj

@@ -7,15 +7,19 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <None Remove="config\RelaySample.json" />
     <None Remove="Sample.json" />
   </ItemGroup>
 
   <ItemGroup>
-    <Content Include="config\Sample.json">
+    <Content Include="config\DaqSample.json">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
       <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
     </Content>
+    <Content Include="config\RelaySample.json">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
   </ItemGroup>
 
   <ItemGroup>

src/YSAI.DAQ/YSAI.Manage.Core/config/Sample.json → src/YSAI.DAQ/YSAI.Manage.Core/config/DaqSample.json


+ 123 - 0
src/YSAI.DAQ/YSAI.Manage.Core/config/RelaySample.json

@@ -0,0 +1,123 @@
+{
+    "DllDatas": [
+        {
+            "DllPath": "YSAI.Mqtt.dll",
+            "IsAbsolutePath": false,
+            "NamespaceDatas": [
+                {
+                    "Namespace": "YSAI.Mqtt.client",
+                    "ClassDatas": [
+                        {
+                            "SN": "YSAI.Mqtt.MqttClientOperate[Instance]",
+                            "ClassName": "MqttClientOperate",
+                            "ConstructorParam": [
+                                {
+                                    "SN": "YSAI",
+                                    "ServerIPAddress": "127.0.0.1",
+                                    "ServerPort": 11819,
+                                    "ServerLoginID": "ysai",
+                                    "ServerLoginPassword": "ysai",
+                                    "ClientID": null,
+                                    "QualityOfServiceLevel": "AtMostOnce"
+                                }
+                            ],
+                            "MethodDatas": [
+                                {
+                                    "SN": "[Init]",
+                                    "WhetherExecute": true,
+                                    "MethodName": "Init",
+                                    "MethodParam": null
+                                },
+                                {
+                                    "SN": "[On]",
+                                    "WhetherExecute": true,
+                                    "MethodName": "On",
+                                    "MethodParam": null
+                                },
+                                {
+                                    "SN": "[PublishSubscribe]",
+                                    "WhetherExecute": false,
+                                    "MethodName": "PublishSubscribe",
+                                    "MethodParam": null
+                                }
+                            ],
+                            "EventDatas": null
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "DllPath": "YSAI.Kafka.dll",
+            "IsAbsolutePath": false,
+            "NamespaceDatas": [
+                {
+                    "Namespace": "YSAI.Kafka",
+                    "ClassDatas": [
+                        {
+                            "SN": "YSAI.Kafka.KafkaProducerOperate[Instance]",
+                            "ClassName": "KafkaProducerOperate",
+                            "ConstructorParam": [
+                                {
+                                    "ClientId": "ysai",
+                                    "WaitTime": 1000,
+                                    "SN": "YSAI",
+                                    "BootstrapServers": "127.0.0.1:8083"
+                                }
+                            ],
+                            "MethodDatas": [
+                                {
+                                    "SN": "[Produce]",
+                                    "WhetherExecute": false,
+                                    "MethodName": "Produce",
+                                    "MethodParam": null
+                                }
+                            ],
+                            "EventDatas": null
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "DllPath": "YSAI.RabbitMQ.dll",
+            "IsAbsolutePath": false,
+            "NamespaceDatas": [
+                {
+                    "Namespace": "YSAI.RabbitMQ",
+                    "ClassDatas": [
+                        {
+                            "SN": "YSAI.RabbitMQ.RabbitMQPublisherOperate[Instance]",
+                            "ClassName": "RabbitMQPublisherOperate",
+                            "ConstructorParam": [
+                                {
+                                    "SN": "YSAI",
+                                    "ExChangeName": "exYSAI",
+                                    "HostName": "localhost",
+                                    "Port": 4369,
+                                    "UserName": "ysai",
+                                    "Password": "ysai"
+                                }
+                            ],
+                            "MethodDatas": [
+                                {
+                                    "SN": "[On]",
+                                    "WhetherExecute": true,
+                                    "MethodName": "On",
+                                    "MethodParam": null
+                                },
+                                {
+                                    "SN": "[Publish]",
+                                    "WhetherExecute": false,
+                                    "MethodName": "Publish",
+                                    "MethodParam": null
+                                }
+                            ],
+                            "EventDatas": null
+                        }
+                    ]
+                }
+            ]
+        }
+    ]
+}

+ 3 - 3
src/YSAI.DAQ/YSAI.Manage/Controllers/DaqLibOperateController.cs

@@ -55,7 +55,7 @@ namespace YSAI.Manage.Controllers
         [HttpGet]
         public IActionResult Sample()
         {
-            return manageOperate.Sample();
+            return manageOperate.Sample(LibType.Daq);
         }
         /// <summary>
         /// 设置配置
@@ -65,7 +65,7 @@ namespace YSAI.Manage.Controllers
         [HttpPost]
         public OperateResult Setting(IFormFile? ConfigFile)
         {
-            return manageOperate.Setting(ConfigFile);
+            return manageOperate.Setting(ConfigFile, LibType.Daq);
         }
         /// <summary>
         /// 修改配置
@@ -75,7 +75,7 @@ namespace YSAI.Manage.Controllers
         [HttpPost]
         public OperateResult Update(IFormFile? ConfigFile)
         {
-            return manageOperate.Update(ConfigFile);
+            return manageOperate.Update(ConfigFile, LibType.Daq);
         }
         /// <summary>
         /// 初始化

+ 64 - 0
src/YSAI.DAQ/YSAI.Manage/Controllers/RelayLibOperateController.cs

@@ -0,0 +1,64 @@
+using Microsoft.AspNetCore.Mvc;
+using YSAI.Core.data;
+using YSAI.Core.@enum;
+using YSAI.Manage.Core;
+
+namespace YSAI.Manage.Controllers
+{
+    /// <summary>
+    /// 库文件操作
+    /// </summary>
+    [ApiController]
+    [Route("api/[controller]/[action]")]
+    public class RelayLibOperateController : Controller
+    {
+        /// <summary>
+        /// 配置
+        /// </summary>
+        private readonly IConfiguration configuration;
+        /// <summary>
+        /// 统一操作结果
+        /// </summary>
+        private readonly ManageOperate manageOperate;
+
+        /// <summary>
+        /// 点位地址信息操作
+        /// </summary>
+        public RelayLibOperateController(IConfiguration configuration, ManageOperate manageOperate)
+        {
+            this.configuration = configuration;
+            this.manageOperate = manageOperate;
+        }
+
+
+        /// <summary>
+        /// 示例
+        /// </summary>
+        /// <returns>配置文件</returns>
+        [HttpGet]
+        public IActionResult Sample()
+        {
+            return manageOperate.Sample(LibType.Relay);
+        }
+        /// <summary>
+        /// 设置配置
+        /// </summary>
+        /// <param name="ConfigFile">配置文件</param>
+        /// <returns>统一出参</returns>
+        [HttpPost]
+        public OperateResult Setting(IFormFile? ConfigFile)
+        {
+            return manageOperate.Setting(ConfigFile, LibType.Relay);
+        }
+        /// <summary>
+        /// 修改配置
+        /// </summary>
+        /// <param name="ConfigFile">配置文件</param>
+        /// <returns>统一出参</returns>
+        [HttpPost]
+        public OperateResult Update(IFormFile? ConfigFile)
+        {
+            return manageOperate.Update(ConfigFile, LibType.Relay);
+        }
+    }
+}

+ 8 - 0
src/YSAI.DAQ/YSAI.TestConsole/Program.cs

@@ -23,6 +23,14 @@ namespace YSAI.TestConsole
     {
         static void Main(string[] args)
         {
+
+
+
+
+
+
+
+
             while (true)
             {
                 Console.ReadKey();

+ 4 - 4
src/YSAI.DAQ/YSAI.Unility/JsonTool.cs

@@ -44,7 +44,7 @@ namespace YSAI.Unility
         /// <typeparam name="T"></typeparam>
         /// <param name="Data"></param>
         /// <returns></returns>
-        public static T StringToJsonEntity<T>(string Data)
+        public static T? StringToJsonEntity<T>(string Data)
         {
             return JsonConvert.DeserializeObject<T>(Data);
         }
@@ -54,7 +54,7 @@ namespace YSAI.Unility
         /// <typeparam name="T"></typeparam>
         /// <param name="Data"></param>
         /// <returns></returns>
-        public static object StringToJsonEntity(string Data, Type type)
+        public static object? StringToJsonEntity(string Data, Type type)
         {
             return JsonConvert.DeserializeObject<object>(Data);
         }
@@ -62,7 +62,7 @@ namespace YSAI.Unility
         /// String转LIST json实体
         /// </summary>
         /// <returns></returns>
-        public static List<T> StringToListJsonEntity<T>(string Data)
+        public static List<T>? StringToListJsonEntity<T>(string Data)
         {
             return JsonConvert.DeserializeObject<List<T>>(Data);
         }
@@ -70,7 +70,7 @@ namespace YSAI.Unility
         /// String转ObservableCollection json实体
         /// </summary>
         /// <returns></returns>
-        public static ObservableCollection<T> StringToObservableCollectionJsonEntity<T>(string Data)
+        public static ObservableCollection<T>? StringToObservableCollectionJsonEntity<T>(string Data)
         {
             return JsonConvert.DeserializeObject<ObservableCollection<T>>(Data);
         }