From b29e9fbda8096ce7255864cd2d63122cca60b952 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期一, 05 九月 2022 12:34:42 +0800
Subject: [PATCH] 新增Linux demo测试程序

---
 RedisCache/IStation.RedisCache.LinuxTest/SMI/航天/Smi_HangTian_StoreVibrationRecord.cs        |   97 +++
 Server/IStation.Server.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml            |   12 
 Application/IStation.Application.LinuxTest/test/dto/AddMonitorRecordInput.cs                |   36 +
 Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml       |   16 
 Server/IStation.Server.LinuxTest/interface/IJobHelper.cs                                    |   24 
 Service/IStation.Service.LinuxTest/monitor_record/MonitorRecord.cs                          |  164 +++++
 Service/IStation.Service.LinuxTest/helpers/CacheHelper.cs                                   |   40 +
 Service/IStation.Service.LinuxTest/monitor_record/MonitorRecord_Instance.cs                 |   72 ++
 DAL/IStation.DAL.LinuxTest/helper/ConfigHelper.cs                                           |   70 ++
 RedisCache/IStation.RedisCache.LinuxTest/monitor_record/MonitorRecordCacheHelper.cs         |   78 ++
 Entry/IStation.WebApi.Entry.LinuxTest/appsettings.Development.json                          |    8 
 Settings/IStation.Settings/models/linux_test/Paras_LinuxTest_Queue.cs                       |   20 
 Application/IStation.Application.LinuxTest/IStation.Application.LinuxTest.csproj            |   17 
 Model/IStation.Model.LinuxTest/MonitorRecord.cs                                             |   83 ++
 Core/IStation.WebApi.Core/applicationconfig.json                                            |    7 
 Server/IStation.Server.LinuxTest/helpers/ConfigHelper.cs                                    |   25 
 Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile2.pubxml      |   16 
 Server/IStation.Server.LinuxTest/IStation.Server.LinuxTest.csproj                           |   16 
 Server/IStation.Server.LinuxTest/Program.cs                                                 |   19 
 Server/IStation.Server.LinuxTest/task/JobHelper.cs                                          |   35 +
 Entry/IStation.WebApi.Entry.LinuxTest/IStation.WebApi.Entry.LinuxTest.csproj                |   18 
 Model/IStation.Model.LinuxTest/IStation.Model.LinuxTest.csproj                              |   15 
 RedisCache/IStation.RedisCache.LinuxTest/SMI/Expert/Smi_Expert_StoreVibrationRecord.cs      |   97 +++
 Service/IStation.Service.LinuxTest/helpers/ConfigHelper.cs                                  |   48 +
 RedisCache/IStation.RedisCache.LinuxTest/IStation.RedisCache.LinuxTest.csproj               |   22 
 Application/IStation.Application.LinuxTest/config/Mapper.cs                                 |   30 
 Server/IStation.Server.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml.user       |    9 
 Entity/IStation.Entity.LinuxTest/MonitorRecord.cs                                           |   88 ++
 Server/IStation.Server.LinuxTest/task/MonitorJobHelper.cs                                   |   71 ++
 Server/IStation.Server.LinuxTest/IStation.Server.LinuxTest.csproj.user                      |    6 
 DAL/IStation.DAL.LinuxTest/MonitorRecord.cs                                                 |  105 +++
 Settings/IStation.Settings/paras_settings.json                                              |   11 
 Entry/IStation.WebApi.Entry.LinuxTest/appsettings.json                                      |   12 
 Settings/IStation.Settings/models/Paras.cs                                                  |    5 
 Service/IStation.Service.LinuxTest/IStation.Service.LinuxTest.csproj                        |   20 
 Entity/IStation.Entity.LinuxTest/IStation.Entity.LinuxTest.csproj                           |   16 
 Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml.user  |   10 
 Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile1.pubxml      |   16 
 Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile2.pubxml.user |   10 
 Settings/IStation.Settings/models/linux_test/Paras_LinuxTest.cs                             |   24 
 Entry/IStation.WebApi.Entry.LinuxTest/Properties/launchSettings.json                        |   31 
 Application/IStation.Application.LinuxTest/test/dto/MonitorRecordDto.cs                     |   58 +
 Settings/IStation.Settings/paras/Settings.cs                                                |   10 
 DAL/IStation.DAL.LinuxTest/IStation.DAL.LinuxTest.csproj                                    |   16 
 Entry/IStation.WebApi.Entry.LinuxTest/Program.cs                                            |    3 
 Settings/IStation.Settings/models/linux_test/Paras_LinuxTest_DataBase.cs                    |   20 
 Application/IStation.Application.LinuxTest/test/MonitorRecord_Controller.cs                 |  198 ++++++
 IStation.sln                                                                                |   56 +
 Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile1.pubxml.user |   10 
 Entry/IStation.WebApi.Entry.LinuxTest/IStation.WebApi.Entry.LinuxTest.csproj.user           |    6 
 50 files changed, 1,895 insertions(+), 1 deletions(-)

diff --git a/Application/IStation.Application.LinuxTest/IStation.Application.LinuxTest.csproj b/Application/IStation.Application.LinuxTest/IStation.Application.LinuxTest.csproj
new file mode 100644
index 0000000..6dbed3f
--- /dev/null
+++ b/Application/IStation.Application.LinuxTest/IStation.Application.LinuxTest.csproj
@@ -0,0 +1,17 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <AssemblyName>IStation.Application.LinuxTest</AssemblyName>
+    <RootNamespace>IStation.Application</RootNamespace>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Service\IStation.Service.LinuxTest\IStation.Service.LinuxTest.csproj" />
+    <ProjectReference Include="..\IStation.Application.Core\IStation.Application.Core.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/Application/IStation.Application.LinuxTest/config/Mapper.cs b/Application/IStation.Application.LinuxTest/config/Mapper.cs
new file mode 100644
index 0000000..d4d1979
--- /dev/null
+++ b/Application/IStation.Application.LinuxTest/config/Mapper.cs
@@ -0,0 +1,30 @@
+锘縰sing Mapster;
+using System;
+namespace IStation.Application
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class Mapper : IRegister
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="config"></param>
+        public void Register(TypeAdapterConfig config)
+        {
+
+
+            #region 鐩戞祴璁板綍
+
+            config.ForType<Model.MonitorRecord, MonitorRecordDto>();
+
+            config.ForType<AddMonitorRecordInput, Model.MonitorRecord>();
+
+            #endregion
+
+
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/Application/IStation.Application.LinuxTest/test/MonitorRecord_Controller.cs b/Application/IStation.Application.LinuxTest/test/MonitorRecord_Controller.cs
new file mode 100644
index 0000000..57142b1
--- /dev/null
+++ b/Application/IStation.Application.LinuxTest/test/MonitorRecord_Controller.cs
@@ -0,0 +1,198 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using System.Net;
+using System.Net.Http.Headers;
+using Microsoft.Extensions.Hosting.Internal;
+using Microsoft.AspNetCore.Http.Extensions;
+using IStation.Untity;
+using Furion.DynamicApiController;
+using System.ComponentModel.DataAnnotations;
+using Mapster;
+using Microsoft.AspNetCore.Http;
+using Furion.DependencyInjection;
+using Microsoft.AspNetCore.Authorization;
+using Furion.DataEncryption;
+using Furion.FriendlyException;
+
+namespace IStation.Application
+{
+    /// <summary>
+    /// MonitorRecord
+    /// </summary>
+    [AllowAnonymous]
+    [Route("LinuxTest/MonitorRecord")]
+    [ApiDescriptionSettings("LinuxTest", Name = "鐩戞祴璁板綍", Order = 999)]
+    public class MonitorRecord_Controller : IDynamicApiController, ITransient 
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public MonitorRecord_Controller(IHttpContextAccessor httpContextAccessor) 
+        {
+            _httpContextAccessor = httpContextAccessor; 
+        }
+
+        //鏈嶅姟
+        private readonly Service.MonitorRecord _service = new Service.MonitorRecord();
+
+        #region Insert
+
+        /// <summary>
+        /// 鎻掑叆涓�鏉�
+        /// </summary>
+        [Route("Insert@V1.0")]
+        [HttpPost]
+        public bool Insert([Required] AddMonitorRecordInput input)
+        {
+            if (input == null)
+                return default;
+            var model = input.Adapt<AddMonitorRecordInput, Model.MonitorRecord>();
+            var bol = _service.InsertLastRecord(model);
+            return bol;
+        }
+
+        /// <summary>
+        /// 鎻掑叆澶氭潯
+        /// </summary>
+        [Route("Inserts@V1.0")]
+        [HttpPost]
+        public bool Inserts([Required] List<AddMonitorRecordInput> inputList)
+        {
+            if (inputList == null || inputList.Count < 1)
+                return false;
+            var list = inputList.Select(x => x.Adapt<AddMonitorRecordInput, Model.MonitorRecord>()).ToList();
+            var bol = _service.InsertsLastRecord(list);
+            return bol;
+        }
+
+        #endregion
+
+        #region 鑾峰彇鎵�鏈�
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈�
+        /// </summary>
+        [Route("GetAll")]
+        [HttpGet]
+        public List<MonitorRecordDto> GetAll()
+        {
+            var list = _service.GetAll();
+            var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
+            return vmList;
+        }
+
+        #endregion
+
+        #region 鑾峰彇鏈�杩戣褰�
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointID 鑾峰彇鏈�杩戜竴鏉℃暟鎹�
+        /// </summary>
+        [Route("GetLastRecordByMonitorPointID")]
+        [HttpGet]
+        public MonitorRecordDto GetLastRecordByMonitorPointID([FromQuery][Required] MonitorPointIDInput input)
+        {
+            var model = _service.GetLastRecord( input.MonitorPointID);
+            if (model == null)
+                return default;
+            return new MonitorRecordDto(model);
+        }
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointIds  鑾峰彇鏈�杩戜竴鏉℃暟鎹�
+        /// </summary>
+        [Route("GetLastRecordByMonitorPointIds")]
+        [HttpGet]
+        public List<MonitorRecordDto> GetLastRecordByMonitorPointIds([FromQuery][Required] MonitorPointIdsInput input) 
+        {
+            var ids = LongListHelper.ToList(input.MonitorPointIds);
+            var list = _service.GetLastRecord(ids);
+            var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
+            return vmList;
+        }
+
+        #endregion
+
+        #region 閫氳繃娴嬬偣鏍囪瘑鑾峰彇
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointID 鑾峰彇鏌愬ぉ鐨勬暟鎹�
+        /// </summary>
+        [Route("GetByMonitorPointIDOfDay")]
+        [HttpGet]
+        public List<MonitorRecordDto> GetByMonitorPointIDOfDay
+            (
+                [Required, Range(1, long.MaxValue, ErrorMessage = "MonitorPointID 蹇呴』澶т簬0")]
+                long MonitorPointID,
+                [Required]
+                DateTime Day
+            )
+        {
+            var list = _service.GetByMonitorPointIDOfDay( MonitorPointID, Day);
+            var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
+            return vmList;
+        }
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointID 鑾峰彇鏃ユ湡鍖洪棿鍐呯殑鏁版嵁
+        /// </summary>
+        [Route("GetByMonitorPointIDOfDayRange")]
+        [HttpGet]
+        public List<MonitorRecordDto> GetByMonitorPointIDOfDayRange
+            (
+                [Required, Range(1, long.MaxValue, ErrorMessage = "MonitorPointID 蹇呴』澶т簬0")]
+                long MonitorPointID,
+                [Required]
+                DateTime StartDay,
+                [Required]
+                DateTime EndDay
+            )
+        {
+            if (StartDay.Date > EndDay.Date)
+            {
+                return default;
+            }
+            var list = _service.GetByMonitorPointIDOfDayRange( MonitorPointID, StartDay, EndDay);
+            var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
+            return vmList;
+        }
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointID 鑾峰彇鏃堕棿鍖洪棿鍐呯殑鏁版嵁
+        /// </summary>
+        [Route("GetByMonitorPointIDOfTimeRange")]
+        [HttpGet]
+        public List<MonitorRecordDto> GetByMonitorPointIDOfTimeRange
+            (
+                [Required, Range(1, long.MaxValue, ErrorMessage = "MonitorPointID 蹇呴』澶т簬0")]
+                long MonitorPointID,
+                [Required]
+                DateTime StartTime,
+                [Required]
+                DateTime EndTime
+            )
+        {
+            if (StartTime > EndTime)
+            {
+                return default;
+            }
+            var list = _service.GetByMonitorPointIDOfTimeRange( MonitorPointID, StartTime, EndTime);
+            var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
+            return vmList;
+        }
+
+        #endregion
+
+
+
+
+
+
+
+
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/Application/IStation.Application.LinuxTest/test/dto/AddMonitorRecordInput.cs b/Application/IStation.Application.LinuxTest/test/dto/AddMonitorRecordInput.cs
new file mode 100644
index 0000000..79dfd3f
--- /dev/null
+++ b/Application/IStation.Application.LinuxTest/test/dto/AddMonitorRecordInput.cs
@@ -0,0 +1,36 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Application
+{
+    /// <summary>
+    /// 娣诲姞鐩戞祴璁板綍浠诲姟
+    /// </summary>
+    public class AddMonitorRecordInput
+    {
+
+        /// <summary>
+        /// 娴嬬偣鏍囪瘑
+        /// </summary>
+        public long MonitorPointID { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁鏃堕棿
+        /// </summary>
+        public DateTime DataTime { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁鍊�
+        /// </summary>
+        public string DataValue { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁鐘舵��
+        /// </summary>
+        public string DataStatus { get; set; }
+
+    }
+}
diff --git a/Application/IStation.Application.LinuxTest/test/dto/MonitorRecordDto.cs b/Application/IStation.Application.LinuxTest/test/dto/MonitorRecordDto.cs
new file mode 100644
index 0000000..c1a075b
--- /dev/null
+++ b/Application/IStation.Application.LinuxTest/test/dto/MonitorRecordDto.cs
@@ -0,0 +1,58 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Application
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class MonitorRecordDto
+    {
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public MonitorRecordDto() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public MonitorRecordDto(Model.MonitorRecord rhs)
+        {
+            this.ID = rhs.ID;
+            this.MonitorPointID = rhs.MonitorPointID;
+            this.DataTime = rhs.DataTime;
+            this.DataValue = rhs.DataValue;
+            this.DataStatus = rhs.DataStatus;
+        }
+
+        /// <summary>
+        /// 鏍囪瘑
+        /// </summary>	
+        public long ID { get; set; }
+
+        /// <summary>
+        /// 娴嬬偣鏍囪瘑
+        /// </summary>
+        public long MonitorPointID { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁鏃堕棿
+        /// </summary>
+        public DateTime DataTime { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁鍊�
+        /// </summary>
+        public string DataValue { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁鐘舵��
+        /// </summary>
+        public string DataStatus { get; set; }
+
+    }
+}
diff --git a/Core/IStation.WebApi.Core/applicationconfig.json b/Core/IStation.WebApi.Core/applicationconfig.json
index c0a5785..3e8f8e1 100644
--- a/Core/IStation.WebApi.Core/applicationconfig.json
+++ b/Core/IStation.WebApi.Core/applicationconfig.json
@@ -164,6 +164,13 @@
         "Order": 81,
         "Description": "Transfer妯″潡",
         "Version": "V1"
+      },
+      {
+        "Group": "LinuxTest",
+        "Title": "Linux娴嬭瘯妯″潡",
+        "Order": 80,
+        "Description": "Linux娴嬭瘯妯″潡",
+        "Version": "V1"
       }
     ]
   }
diff --git a/DAL/IStation.DAL.LinuxTest/IStation.DAL.LinuxTest.csproj b/DAL/IStation.DAL.LinuxTest/IStation.DAL.LinuxTest.csproj
new file mode 100644
index 0000000..50c51e4
--- /dev/null
+++ b/DAL/IStation.DAL.LinuxTest/IStation.DAL.LinuxTest.csproj
@@ -0,0 +1,16 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <RootNamespace>IStation.DAL</RootNamespace>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Entity\IStation.Entity.LinuxTest\IStation.Entity.LinuxTest.csproj" />
+    <ProjectReference Include="..\IStation.DAL.Core\IStation.DAL.Core.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/DAL/IStation.DAL.LinuxTest/MonitorRecord.cs b/DAL/IStation.DAL.LinuxTest/MonitorRecord.cs
new file mode 100644
index 0000000..5e1e39a
--- /dev/null
+++ b/DAL/IStation.DAL.LinuxTest/MonitorRecord.cs
@@ -0,0 +1,105 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SqlSugar;
+
+namespace IStation.DAL
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class MonitorRecord : BaseDAL<Entity.MonitorRecord> 
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public override ConnectionConfig ConnectionConfig
+        {
+            get { return ConfigHelper.DefaultConnectionConfig; }
+        }
+
+        #region 閫氳繃 MonitorPointID 鑾峰彇
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointID 鑾峰彇鏌愬ぉ鐨勫叏閮ㄦ暟鎹�
+        /// </summary>
+        public List<Entity.MonitorRecord> GetByMonitorPointIDOfDay( long MonitorPointID, DateTime Day)
+        {
+            if (MonitorPointID < 1)
+                return default;
+            using (var db = new SqlSugarClient(ConnectionConfig))
+            {
+                return db.Queryable<Entity.MonitorRecord>()
+                .Where(x => x.MonitorPointID == MonitorPointID && x.DataTime >= Day.Date && x.DataTime < Day.Date.AddDays(1))
+                .OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
+            }
+        }
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointID 鑾峰彇鏃ユ湡鍖洪棿鍐呯殑鏁版嵁
+        /// </summary>
+        public List<Entity.MonitorRecord> GetByMonitorPointIDOfDayRange( long MonitorPointID, DateTime StartDay, DateTime EndDay)
+        {
+            if (StartDay.Date > EndDay.Date)
+                return default;
+            using (var db = new SqlSugarClient(ConnectionConfig))
+            {
+                return db.Queryable<Entity.MonitorRecord>()
+                .Where(x =>  x.MonitorPointID == MonitorPointID && x.DataTime >= StartDay.Date && x.DataTime < EndDay.Date.AddDays(1))
+                .OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
+            }
+        }
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointID 鑾峰彇鏃堕棿鍖洪棿鍐呯殑鏁版嵁
+        /// </summary>
+        public List<Entity.MonitorRecord> GetByMonitorPointIDOfTimeRange( long MonitorPointID, DateTime StartTime, DateTime EndTime)
+        {
+            if (StartTime > EndTime)
+                return default;
+            using (var db = new SqlSugarClient(ConnectionConfig))
+            {
+                return db.Queryable<Entity.MonitorRecord>()
+                .Where(x =>  x.MonitorPointID == MonitorPointID && x.DataTime >= StartTime && x.DataTime <= EndTime)
+                .OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
+            }
+        }
+
+        #endregion
+
+
+        #region Update
+
+        /// <summary>
+        /// 鏇存柊
+        /// </summary>
+        public override bool Update(Entity.MonitorRecord entity)
+        {
+            if (entity == null)
+                return false;
+            using (SqlSugarClient db = new SqlSugarClient(ConnectionConfig))
+            {
+                return db.Updateable(entity).IgnoreColumns(x => x.DataTime).Where(x => x.ID == entity.ID).ExecuteCommand() > 0;
+            }
+        }
+
+        /// <summary>
+        /// 鎵归噺鏇存柊
+        /// </summary>
+        public override bool Updates(List<Entity.MonitorRecord> list)
+        {
+            if (list == null || list.Count < 1)
+                return false;
+            using (SqlSugarClient db = new SqlSugarClient(ConnectionConfig))
+            {
+                return db.Updateable(list).IgnoreColumns(x => x.DataTime).WhereColumns(it => new { it.ID }).ExecuteCommand() > 0;
+            }
+        }
+
+        #endregion
+
+
+    }
+}
diff --git a/DAL/IStation.DAL.LinuxTest/helper/ConfigHelper.cs b/DAL/IStation.DAL.LinuxTest/helper/ConfigHelper.cs
new file mode 100644
index 0000000..f7dccd6
--- /dev/null
+++ b/DAL/IStation.DAL.LinuxTest/helper/ConfigHelper.cs
@@ -0,0 +1,70 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SqlSugar;
+
+namespace IStation.DAL
+{
+    internal class ConfigHelper
+    {
+        #region 榛樿杩炴帴
+
+        /// <summary>
+        /// 榛樿杩炴帴瀛楃涓�
+        /// </summary>
+        public static string DefaultConnString
+        {
+            get
+            {
+                return Settings.LinuxTest.DataBase.ConnectString;
+            }
+        }
+
+        /// <summary>
+        /// 榛樿杩炴帴閰嶇疆
+        /// </summary>
+        public static ConnectionConfig DefaultConnectionConfig
+        {
+            get
+            {
+                return new ConnectionConfig()
+                {
+                    DbType = SqlSugar.DbType.PostgreSQL,//鏁版嵁搴撶被鍨�
+                    ConnectionString = DefaultConnString,
+                    IsAutoCloseConnection = true,//鏄惁鑷姩鍏抽棴
+                    MoreSettings = new ConnMoreSettings()
+                    {
+                        //PgSqlIsAutoToLower = false //鏁版嵁搴撳瓨鍦ㄥぇ鍐欏瓧娈电殑 锛岄渶瑕佹妸杩欎釜璁句负false 锛屽苟涓斿疄浣撳拰瀛楁鍚嶇О瑕佷竴鏍�
+                    },
+                    AopEvents = new AopEvents
+                    {
+                        OnLogExecuting = (sql, p) =>
+                        {
+                            // Console.WriteLine(sql);
+                        }
+                    }
+                };
+            }
+        }
+
+        #endregion
+
+
+
+
+
+
+
+
+
+
+
+
+
+    }
+}
diff --git a/Entity/IStation.Entity.LinuxTest/IStation.Entity.LinuxTest.csproj b/Entity/IStation.Entity.LinuxTest/IStation.Entity.LinuxTest.csproj
new file mode 100644
index 0000000..8a18608
--- /dev/null
+++ b/Entity/IStation.Entity.LinuxTest/IStation.Entity.LinuxTest.csproj
@@ -0,0 +1,16 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <AssemblyName>IStation.Entity.LinuxTest</AssemblyName>
+    <RootNamespace>IStation.Entity</RootNamespace>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\IStation.Entity.Core\IStation.Entity.Core.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/Entity/IStation.Entity.LinuxTest/MonitorRecord.cs b/Entity/IStation.Entity.LinuxTest/MonitorRecord.cs
new file mode 100644
index 0000000..cc346f5
--- /dev/null
+++ b/Entity/IStation.Entity.LinuxTest/MonitorRecord.cs
@@ -0,0 +1,88 @@
+锘縰sing System;
+using System.Text;
+using System.Collections.Generic;
+using System.Data;
+using System.Runtime.Serialization;
+using SqlSugar;
+
+namespace IStation.Entity
+{
+    /// <summary>
+    /// 鐩戞祴璁板綍
+    /// </summary>
+    [SugarTable("monitor_record")]
+    public class MonitorRecord : BaseEntity, System.ICloneable
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public MonitorRecord() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public MonitorRecord(MonitorRecord rhs) : base(rhs)
+        {
+            this.MonitorPointID = rhs.MonitorPointID;
+            this.DataTime = rhs.DataTime;
+            this.DataValue = rhs.DataValue;
+            this.DataStatus = rhs.DataStatus;
+        }
+
+
+        /// <summary>
+        /// 娴嬬偣鏍囪瘑
+        /// </summary>	
+        public long MonitorPointID
+        {
+            get { return _monitorpointid; }
+            set { _monitorpointid = value; }
+        }
+        private long _monitorpointid;
+
+        /// <summary>
+        /// 鏁版嵁鏃堕棿
+        /// </summary>	
+        public DateTime DataTime
+        {
+            get { return _datatime; }
+            set { _datatime = value; }
+        }
+        private DateTime _datatime;
+
+        /// <summary>
+        /// 鏁版嵁鍊�
+        /// </summary>	
+        public string DataValue
+        {
+            get { return _datavalue; }
+            set { _datavalue = value; }
+        }
+        private string _datavalue;
+
+        /// <summary>
+        /// 鏁版嵁鐘舵��
+        /// </summary>	
+        public string DataStatus
+        {
+            get { return _datastatus; }
+            set { _datastatus = value; }
+        }
+        private string _datastatus;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public MonitorRecord Clone()
+        {
+            return (MonitorRecord)this.MemberwiseClone();
+        }
+
+        object ICloneable.Clone()
+        {
+            return this.MemberwiseClone();
+        }
+
+    }
+
+}
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/IStation.WebApi.Entry.LinuxTest.csproj b/Entry/IStation.WebApi.Entry.LinuxTest/IStation.WebApi.Entry.LinuxTest.csproj
new file mode 100644
index 0000000..eb6f629
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/IStation.WebApi.Entry.LinuxTest.csproj
@@ -0,0 +1,18 @@
+锘�<Project Sdk="Microsoft.NET.Sdk.Web">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <Nullable>disable</Nullable>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <AssemblyName>IStation.WebApi.Entry.LinuxTest</AssemblyName>
+    <RootNamespace>IStation.WebApi</RootNamespace>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+    <Version />
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Application\IStation.Application.LinuxTest\IStation.Application.LinuxTest.csproj" />
+    <ProjectReference Include="..\..\Core\IStation.WebApi.Core\IStation.WebApi.Core.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/IStation.WebApi.Entry.LinuxTest.csproj.user b/Entry/IStation.WebApi.Entry.LinuxTest/IStation.WebApi.Entry.LinuxTest.csproj.user
new file mode 100644
index 0000000..f57456d
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/IStation.WebApi.Entry.LinuxTest.csproj.user
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <NameOfLastUsedPublishProfile>D:\WorkData\git\istation\webapi\v4\Entry\IStation.WebApi.Entry.LinuxTest\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/Program.cs b/Entry/IStation.WebApi.Entry.LinuxTest/Program.cs
new file mode 100644
index 0000000..6010138
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/Program.cs
@@ -0,0 +1,3 @@
+var builder = WebApplication.CreateBuilder(args).Inject();
+var app = builder.Build();
+app.Run();
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml
new file mode 100644
index 0000000..d0d2ce9
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml
@@ -0,0 +1,16 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <DeleteExistingFiles>False</DeleteExistingFiles>
+    <ExcludeApp_Data>False</ExcludeApp_Data>
+    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
+    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+    <LastUsedPlatform>Any CPU</LastUsedPlatform>
+    <PublishProvider>FileSystem</PublishProvider>
+    <PublishUrl>bin\Release\net6.0\publish\</PublishUrl>
+    <WebPublishMethod>FileSystem</WebPublishMethod>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml.user b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml.user
new file mode 100644
index 0000000..d8945d9
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <_PublishTargetUrl>D:\WorkData\git\istation\webapi\v4\Entry\IStation.WebApi.Entry.LinuxTest\bin\Release\net6.0\publish\</_PublishTargetUrl>
+    <History>True|2022-09-05T04:12:19.6266719Z;True|2022-08-18T13:19:31.8409048+08:00;True|2022-08-18T13:09:47.5150561+08:00;True|2022-08-18T10:37:50.8776926+08:00;True|2022-08-17T17:10:09.3527873+08:00;True|2022-08-17T16:04:30.4487827+08:00;True|2022-08-15T13:35:48.4976973+08:00;True|2022-08-15T13:35:34.4046702+08:00;True|2022-08-15T13:31:44.3380038+08:00;True|2022-08-15T13:07:03.2183172+08:00;True|2022-07-25T15:14:36.3659352+08:00;True|2022-07-25T15:10:01.3426246+08:00;True|2022-07-25T13:20:08.1574461+08:00;True|2022-07-19T10:26:17.1257582+08:00;True|2022-07-14T10:30:13.1942620+08:00;True|2022-07-13T14:35:30.0524912+08:00;True|2022-07-08T14:32:42.4327635+08:00;True|2022-07-05T11:08:07.0982998+08:00;True|2022-07-04T10:33:11.4756479+08:00;True|2022-07-01T22:05:04.4907981+08:00;True|2022-07-01T15:57:41.6399584+08:00;True|2022-06-29T10:33:01.2518877+08:00;True|2022-06-29T09:35:04.8176716+08:00;True|2022-06-22T10:29:08.8189250+08:00;True|2022-06-21T20:20:26.7306581+08:00;True|2022-06-21T09:54:59.2174617+08:00;True|2022-06-20T16:05:34.5414017+08:00;True|2022-06-16T13:17:09.9717924+08:00;True|2022-06-16T09:40:45.1175998+08:00;True|2022-06-15T18:01:54.0267150+08:00;False|2022-06-15T18:00:46.8407587+08:00;True|2022-06-15T15:22:18.3048191+08:00;True|2022-06-15T14:10:37.0479735+08:00;False|2022-06-15T14:08:52.7287625+08:00;True|2022-06-15T11:52:36.3090013+08:00;True|2022-06-15T10:29:17.8467709+08:00;True|2022-06-15T09:53:07.0983926+08:00;False|2022-06-15T09:51:02.1269263+08:00;True|2022-06-14T16:42:04.7964854+08:00;True|2022-06-14T14:08:49.4227432+08:00;True|2022-06-14T14:04:00.9153594+08:00;True|2022-06-13T14:57:09.1986107+08:00;True|2022-06-12T10:12:40.2143903+08:00;True|2022-06-12T09:59:01.3527438+08:00;True|2022-06-09T17:47:54.0302121+08:00;True|2022-06-09T17:30:21.7998171+08:00;True|2022-06-09T13:53:49.3251173+08:00;True|2022-06-09T11:06:42.0691794+08:00;True|2022-06-09T10:24:37.1232972+08:00;True|2022-06-09T10:00:30.4180885+08:00;True|2022-06-08T16:55:14.5816280+08:00;True|2022-06-08T16:02:29.3874857+08:00;True|2022-06-08T13:37:33.4098629+08:00;True|2022-06-08T11:05:09.3848401+08:00;True|2022-06-08T10:21:11.6630897+08:00;True|2022-06-08T09:38:48.6605705+08:00;True|2022-06-08T09:38:12.5509843+08:00;True|2022-06-08T09:37:38.2420697+08:00;True|2022-06-08T09:33:06.1943764+08:00;True|2022-06-07T17:26:45.0216506+08:00;True|2022-06-07T17:15:13.6540984+08:00;True|2022-06-07T13:30:54.6796254+08:00;True|2022-06-06T17:33:50.9010674+08:00;True|2022-06-06T17:32:21.9276179+08:00;True|2022-06-06T15:59:31.7116819+08:00;True|2022-06-06T15:29:18.4459191+08:00;True|2022-06-06T14:17:56.0946686+08:00;True|2022-06-02T09:13:02.9635258+08:00;True|2022-06-01T17:15:47.4170975+08:00;True|2022-06-01T14:06:29.6241464+08:00;True|2022-06-01T13:27:18.8319582+08:00;True|2022-06-01T13:14:07.7862232+08:00;True|2022-06-01T09:48:16.4577267+08:00;True|2022-05-30T09:57:00.6017913+08:00;True|2022-05-28T15:54:16.3134700+08:00;True|2022-05-28T11:46:55.8201686+08:00;True|2022-05-28T00:40:34.8169520+08:00;True|2022-05-27T20:45:57.0931886+08:00;True|2022-05-27T20:45:18.6248676+08:00;True|2022-05-27T14:19:14.0927561+08:00;True|2022-05-26T16:52:59.8936895+08:00;True|2022-05-26T13:53:53.4391535+08:00;True|2022-05-25T14:49:54.5116623+08:00;True|2022-05-25T14:23:38.7752497+08:00;True|2022-05-18T00:26:56.5524482+08:00;True|2022-05-17T12:08:45.5933704+08:00;True|2022-05-17T02:14:04.9500075+08:00;True|2022-05-16T12:01:40.6872993+08:00;True|2022-05-12T10:27:07.2614929+08:00;True|2022-05-11T11:02:55.5830630+08:00;True|2022-05-11T10:00:40.6549316+08:00;True|2022-05-11T09:20:32.0973524+08:00;</History>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile1.pubxml b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile1.pubxml
new file mode 100644
index 0000000..d0d2ce9
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile1.pubxml
@@ -0,0 +1,16 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <DeleteExistingFiles>False</DeleteExistingFiles>
+    <ExcludeApp_Data>False</ExcludeApp_Data>
+    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
+    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+    <LastUsedPlatform>Any CPU</LastUsedPlatform>
+    <PublishProvider>FileSystem</PublishProvider>
+    <PublishUrl>bin\Release\net6.0\publish\</PublishUrl>
+    <WebPublishMethod>FileSystem</WebPublishMethod>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile1.pubxml.user b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile1.pubxml.user
new file mode 100644
index 0000000..f75eef2
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile1.pubxml.user
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <_PublishTargetUrl>D:\WorkData\git\istation\webapi\v4\Entry\IStation.WebApi.Entry\bin\Release\net6.0\publish\</_PublishTargetUrl>
+    <History>True|2022-08-08T04:51:49.7900559Z;True|2022-08-05T16:30:55.2183383+08:00;True|2022-08-04T10:29:25.0004310+08:00;True|2022-07-28T14:00:01.5462663+08:00;True|2022-07-28T09:15:39.4522594+08:00;</History>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile2.pubxml b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile2.pubxml
new file mode 100644
index 0000000..b208e5e
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile2.pubxml
@@ -0,0 +1,16 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <DeleteExistingFiles>False</DeleteExistingFiles>
+    <ExcludeApp_Data>False</ExcludeApp_Data>
+    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
+    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+    <LastUsedPlatform>Any CPU</LastUsedPlatform>
+    <PublishProvider>FileSystem</PublishProvider>
+    <PublishUrl>bin\Release\net6.0\publish\linux</PublishUrl>
+    <WebPublishMethod>FileSystem</WebPublishMethod>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile2.pubxml.user b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile2.pubxml.user
new file mode 100644
index 0000000..8760c0b
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/PublishProfiles/FolderProfile2.pubxml.user
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <_PublishTargetUrl>D:\WorkData\git\istation\webapi\v4\Entry\IStation.WebApi.Entry\bin\Release\net6.0\publish\linux</_PublishTargetUrl>
+    <History>True|2022-08-15T01:36:37.5504507Z;</History>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/Properties/launchSettings.json b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/launchSettings.json
new file mode 100644
index 0000000..a3e94e9
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/Properties/launchSettings.json
@@ -0,0 +1,31 @@
+锘縶
+  "$schema": "https://json.schemastore.org/launchsettings.json",
+  "iisSettings": {
+    "windowsAuthentication": false,
+    "anonymousAuthentication": true,
+    "iisExpress": {
+      "applicationUrl": "http://localhost:31950",
+      "sslPort": 44347
+    }
+  },
+  "profiles": {
+    "IStation.Entry": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "launchBrowser": true,
+      "launchUrl": "",
+      "applicationUrl": "https://localhost:7143;http://localhost:5143",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "IIS Express": {
+      "commandName": "IISExpress",
+      "launchBrowser": true,
+      "launchUrl": "",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    }
+  }
+}
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/appsettings.Development.json b/Entry/IStation.WebApi.Entry.LinuxTest/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  }
+}
diff --git a/Entry/IStation.WebApi.Entry.LinuxTest/appsettings.json b/Entry/IStation.WebApi.Entry.LinuxTest/appsettings.json
new file mode 100644
index 0000000..759a4dc
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.LinuxTest/appsettings.json
@@ -0,0 +1,12 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  },
+  "AllowedHosts": "*",
+  "IgnoreConfigurationFiles": [
+    "paras_settings.json"
+  ]
+}
diff --git a/IStation.sln b/IStation.sln
index 210d155..71fbe74 100644
--- a/IStation.sln
+++ b/IStation.sln
@@ -399,6 +399,22 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.DataProvider.SMI_Vib", "DataProvider\IStation.DataProvider.SMI_Vib\IStation.DataProvider.SMI_Vib.csproj", "{24AAD452-DC37-4DF1-B40C-E1F58DF1A98B}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.LinuxTest", "Application\IStation.Application.LinuxTest\IStation.Application.LinuxTest.csproj", "{2E7985B8-1910-48B8-BCED-DB10966CA879}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IStation.Entity.LinuxTest", "Entity\IStation.Entity.LinuxTest\IStation.Entity.LinuxTest.csproj", "{AFB25410-75EF-4A8A-B7EF-AFF59F9FAAE1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IStation.Model.LinuxTest", "Model\IStation.Model.LinuxTest\IStation.Model.LinuxTest.csproj", "{43C56FAB-C917-49C9-977E-9E8B3F899EB9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IStation.DAL.LinuxTest", "DAL\IStation.DAL.LinuxTest\IStation.DAL.LinuxTest.csproj", "{7B78DCFE-A596-4F69-8DEE-53E0B22A9C4B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IStation.Service.LinuxTest", "Service\IStation.Service.LinuxTest\IStation.Service.LinuxTest.csproj", "{CFE5081A-568C-440A-9691-A01342D5EC3F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.RedisCache.LinuxTest", "RedisCache\IStation.RedisCache.LinuxTest\IStation.RedisCache.LinuxTest.csproj", "{73F2DCB8-32F2-47F2-B48D-A88463FFCCCE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.WebApi.Entry.LinuxTest", "Entry\IStation.WebApi.Entry.LinuxTest\IStation.WebApi.Entry.LinuxTest.csproj", "{2FF6544D-390E-47A5-88D0-54C022E7A9E7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Server.LinuxTest", "Server\IStation.Server.LinuxTest\IStation.Server.LinuxTest.csproj", "{806A79E4-0546-45F2-82A0-550F316B331E}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -1113,6 +1129,38 @@
 		{24AAD452-DC37-4DF1-B40C-E1F58DF1A98B}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{24AAD452-DC37-4DF1-B40C-E1F58DF1A98B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{24AAD452-DC37-4DF1-B40C-E1F58DF1A98B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2E7985B8-1910-48B8-BCED-DB10966CA879}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2E7985B8-1910-48B8-BCED-DB10966CA879}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2E7985B8-1910-48B8-BCED-DB10966CA879}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2E7985B8-1910-48B8-BCED-DB10966CA879}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AFB25410-75EF-4A8A-B7EF-AFF59F9FAAE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AFB25410-75EF-4A8A-B7EF-AFF59F9FAAE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AFB25410-75EF-4A8A-B7EF-AFF59F9FAAE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AFB25410-75EF-4A8A-B7EF-AFF59F9FAAE1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{43C56FAB-C917-49C9-977E-9E8B3F899EB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{43C56FAB-C917-49C9-977E-9E8B3F899EB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{43C56FAB-C917-49C9-977E-9E8B3F899EB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{43C56FAB-C917-49C9-977E-9E8B3F899EB9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7B78DCFE-A596-4F69-8DEE-53E0B22A9C4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7B78DCFE-A596-4F69-8DEE-53E0B22A9C4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7B78DCFE-A596-4F69-8DEE-53E0B22A9C4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7B78DCFE-A596-4F69-8DEE-53E0B22A9C4B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CFE5081A-568C-440A-9691-A01342D5EC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CFE5081A-568C-440A-9691-A01342D5EC3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CFE5081A-568C-440A-9691-A01342D5EC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CFE5081A-568C-440A-9691-A01342D5EC3F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{73F2DCB8-32F2-47F2-B48D-A88463FFCCCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{73F2DCB8-32F2-47F2-B48D-A88463FFCCCE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{73F2DCB8-32F2-47F2-B48D-A88463FFCCCE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{73F2DCB8-32F2-47F2-B48D-A88463FFCCCE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2FF6544D-390E-47A5-88D0-54C022E7A9E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2FF6544D-390E-47A5-88D0-54C022E7A9E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2FF6544D-390E-47A5-88D0-54C022E7A9E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2FF6544D-390E-47A5-88D0-54C022E7A9E7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{806A79E4-0546-45F2-82A0-550F316B331E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{806A79E4-0546-45F2-82A0-550F316B331E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{806A79E4-0546-45F2-82A0-550F316B331E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{806A79E4-0546-45F2-82A0-550F316B331E}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -1295,6 +1343,14 @@
 		{4724268A-4341-459B-A6A9-7117F2A005ED} = {B419D1AA-F88B-4780-9018-30D5669C48DC}
 		{4C16607C-0134-4027-8537-CA01ACB5954F} = {02FFB09B-F53B-4CE0-A5B7-85B1881DCD2A}
 		{24AAD452-DC37-4DF1-B40C-E1F58DF1A98B} = {B419D1AA-F88B-4780-9018-30D5669C48DC}
+		{2E7985B8-1910-48B8-BCED-DB10966CA879} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
+		{AFB25410-75EF-4A8A-B7EF-AFF59F9FAAE1} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
+		{43C56FAB-C917-49C9-977E-9E8B3F899EB9} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
+		{7B78DCFE-A596-4F69-8DEE-53E0B22A9C4B} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
+		{CFE5081A-568C-440A-9691-A01342D5EC3F} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
+		{73F2DCB8-32F2-47F2-B48D-A88463FFCCCE} = {318306D9-A6F4-456C-9019-8E7EDA4F2066}
+		{2FF6544D-390E-47A5-88D0-54C022E7A9E7} = {A942D1DC-1312-4316-8E0B-9D22A0AFE03D}
+		{806A79E4-0546-45F2-82A0-550F316B331E} = {B419D1AA-F88B-4780-9018-30D5669C48DC}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {18D1EA07-81E5-4443-8512-F303BC79DCF4}
diff --git a/Model/IStation.Model.LinuxTest/IStation.Model.LinuxTest.csproj b/Model/IStation.Model.LinuxTest/IStation.Model.LinuxTest.csproj
new file mode 100644
index 0000000..66a3db4
--- /dev/null
+++ b/Model/IStation.Model.LinuxTest/IStation.Model.LinuxTest.csproj
@@ -0,0 +1,15 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <RootNamespace>IStation.Model</RootNamespace>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\IStation.Model.Core\IStation.Model.Core.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/Model/IStation.Model.LinuxTest/MonitorRecord.cs b/Model/IStation.Model.LinuxTest/MonitorRecord.cs
new file mode 100644
index 0000000..cd26f48
--- /dev/null
+++ b/Model/IStation.Model.LinuxTest/MonitorRecord.cs
@@ -0,0 +1,83 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Model
+{
+    /// <summary>
+    /// 鐩戞祴璁板綍
+    /// </summary>
+    public class MonitorRecord :  System.ICloneable
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public MonitorRecord() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public MonitorRecord(MonitorRecord rhs) 
+        {
+            this.ID = rhs.ID;
+            this.MonitorPointID = rhs.MonitorPointID;
+            this.DataTime = rhs.DataTime;
+            this.DataValue = rhs.DataValue;
+            this.DataStatus = rhs.DataStatus;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void Reset(MonitorRecord rhs)
+        {
+            this.ID = rhs.ID;
+            this.MonitorPointID = rhs.MonitorPointID;
+            this.DataTime = rhs.DataTime;
+            this.DataValue = rhs.DataValue;
+            this.DataStatus = rhs.DataStatus;
+        }
+
+        /// <summary>
+        /// 鏍囪瘑
+        /// </summary>	
+        public long ID { get; set; }
+
+        /// <summary>
+        /// 娴嬬偣鏍囪瘑
+        /// </summary>
+        public long MonitorPointID { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁鏃堕棿
+        /// </summary>
+        public DateTime DataTime { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁鍊�
+        /// </summary>
+        public string DataValue { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁鐘舵��
+        /// </summary>
+        public string DataStatus { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public MonitorRecord Clone()
+        {
+            return (MonitorRecord)this.MemberwiseClone();
+        }
+
+        object ICloneable.Clone()
+        {
+            return this.MemberwiseClone();
+        }
+
+
+    }
+}
diff --git a/RedisCache/IStation.RedisCache.LinuxTest/IStation.RedisCache.LinuxTest.csproj b/RedisCache/IStation.RedisCache.LinuxTest/IStation.RedisCache.LinuxTest.csproj
new file mode 100644
index 0000000..5ab0164
--- /dev/null
+++ b/RedisCache/IStation.RedisCache.LinuxTest/IStation.RedisCache.LinuxTest.csproj
@@ -0,0 +1,22 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <AssemblyName>IStation.RedisCache.Run</AssemblyName>
+    <RootNamespace>IStation.RedisCache</RootNamespace>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Remove="SMI\**" />
+    <EmbeddedResource Remove="SMI\**" />
+    <None Remove="SMI\**" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Component\IStation.Redis\IStation.Redis.csproj" />
+    <ProjectReference Include="..\..\Model\IStation.Model.LinuxTest\IStation.Model.LinuxTest.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/RedisCache/IStation.RedisCache.LinuxTest/SMI/Expert/Smi_Expert_StoreVibrationRecord.cs b/RedisCache/IStation.RedisCache.LinuxTest/SMI/Expert/Smi_Expert_StoreVibrationRecord.cs
new file mode 100644
index 0000000..5d7006f
--- /dev/null
+++ b/RedisCache/IStation.RedisCache.LinuxTest/SMI/Expert/Smi_Expert_StoreVibrationRecord.cs
@@ -0,0 +1,97 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.RedisCache
+{
+    public class Smi_Expert_StoreVibrationRecord
+    {
+        private const string Flag = "smi-expert";//鏍囧織
+
+        //鏈�鍚庝竴鏉¤褰�
+        private const string _lastRecord = "LastRecord";
+
+
+        //Redis瀹㈡埛绔緟鍔╃被瀵硅薄
+        private readonly RedisClientHelper _redisClient = new RedisClientHelper();
+
+        //鍒涘缓RedisKey
+        private static string CreateRedisKey(string objectId)
+        {
+            return $"{RedisKeyHelper.CreateKey(Flag)}:{objectId}";
+        }
+
+
+        /// <summary>
+        /// 璁剧疆鏈�鍚庝竴鏉¤褰�
+        /// </summary>
+        public void SetLastRecord(Model.Smi_Expert_VibrationRecord model)
+        {
+            if (model == null)
+                return;
+            var redisKey = CreateRedisKey(model.ObjectId);
+            _redisClient.HashSetJosn(redisKey, _lastRecord,model);
+        }
+
+        /// <summary>
+        /// 璁剧疆鏈�鍚庝竴鏉¤褰�(鎵归噺)
+        /// </summary>
+        public void SetLastRecord(IEnumerable<Model.Smi_Expert_VibrationRecord> list)
+        {
+            if (list == null || list.Count() < 1)
+                return;
+            foreach (var item in list)
+            {
+                SetLastRecord(item);
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈�鍚庝竴鏉¤褰�
+        /// </summary>
+        public Model.Smi_Expert_VibrationRecord GetLastRecord(string ObjectId)
+        {
+            var redisKey = CreateRedisKey(ObjectId);
+            return _redisClient.HashGetJson<Model.Smi_Expert_VibrationRecord>(redisKey,_lastRecord);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈�鍚庝竴鏉¤褰�
+        /// </summary>
+        public List<Model.Smi_Expert_VibrationRecord> GetLastRecord(IEnumerable<string> ObjectIds)
+        {
+            if (ObjectIds == null || ObjectIds.Count() < 1)
+                return default;
+            return ObjectIds.Select(x => GetLastRecord(x)).Where(x => x != null).ToList();
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈�鍚庝竴鏉¤褰昐tartWith 
+        /// </summary>
+        public List<Model.Smi_Expert_VibrationRecord> GetLastRecordStartWith(string objectId)
+        {
+            var key = CreateRedisKey(objectId);
+            var allKeys = _redisClient.AllKeyStartWidth(key);
+            if (allKeys == null || allKeys.Count < 1)
+                return default;
+            var vm_list = new List<Model.Smi_Expert_VibrationRecord>();
+            foreach (var redisKey in allKeys)
+            {
+                var vm = _redisClient.HashGetJson<Model.Smi_Expert_VibrationRecord>(redisKey, _lastRecord);
+                if (vm != null)
+                {
+                    vm_list.Add(vm);
+                }
+            }
+            return vm_list;
+        }
+      
+
+       
+
+
+
+    }
+}
diff --git "a/RedisCache/IStation.RedisCache.LinuxTest/SMI/\350\210\252\345\244\251/Smi_HangTian_StoreVibrationRecord.cs" "b/RedisCache/IStation.RedisCache.LinuxTest/SMI/\350\210\252\345\244\251/Smi_HangTian_StoreVibrationRecord.cs"
new file mode 100644
index 0000000..bbca7e5
--- /dev/null
+++ "b/RedisCache/IStation.RedisCache.LinuxTest/SMI/\350\210\252\345\244\251/Smi_HangTian_StoreVibrationRecord.cs"
@@ -0,0 +1,97 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.RedisCache
+{
+    public class Smi_HangTian_StoreVibrationRecord
+    {
+        private const string Flag = "smi-hangtian";//鏍囧織
+
+        //鏈�鍚庝竴鏉¤褰�
+        private const string _lastRecord = "LastRecord";
+
+
+        //Redis瀹㈡埛绔緟鍔╃被瀵硅薄
+        private readonly RedisClientHelper _redisClient = new RedisClientHelper();
+
+        //鍒涘缓RedisKey
+        private static string CreateRedisKey(string objectId)
+        {
+            return $"{RedisKeyHelper.CreateKey(Flag)}:{objectId}";
+        }
+
+
+        /// <summary>
+        /// 璁剧疆鏈�鍚庝竴鏉¤褰�
+        /// </summary>
+        public void SetLastRecord(Model.Smi_HangTian_VibrationRecord model)
+        {
+            if (model == null)
+                return;
+            var redisKey = CreateRedisKey(model.ObjectId);
+            _redisClient.HashSetJosn(redisKey, _lastRecord, model);
+        }
+
+        /// <summary>
+        /// 璁剧疆鏈�鍚庝竴鏉¤褰�(鎵归噺)
+        /// </summary>
+        public void SetLastRecord(IEnumerable<Model.Smi_HangTian_VibrationRecord> list)
+        {
+            if (list == null || list.Count() < 1)
+                return;
+            foreach (var item in list)
+            {
+                SetLastRecord(item);
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈�鍚庝竴鏉¤褰�
+        /// </summary>
+        public Model.Smi_HangTian_VibrationRecord GetLastRecord(string ObjectId)
+        {
+            var redisKey = CreateRedisKey(ObjectId);
+            return _redisClient.HashGetJson<Model.Smi_HangTian_VibrationRecord>(redisKey, _lastRecord);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈�鍚庝竴鏉¤褰�
+        /// </summary>
+        public List<Model.Smi_HangTian_VibrationRecord> GetLastRecord(IEnumerable<string> ObjectIds)
+        {
+            if (ObjectIds == null || ObjectIds.Count() < 1)
+                return default;
+            return ObjectIds.Select(x => GetLastRecord(x)).Where(x => x != null).ToList();
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈�鍚庝竴鏉¤褰昐tartWith 
+        /// </summary>
+        public List<Model.Smi_HangTian_VibrationRecord> GetLastRecordStartWith(string objectId)
+        {
+            var key = CreateRedisKey(objectId);
+            var allKeys = _redisClient.AllKeyStartWidth(key);
+            if (allKeys == null || allKeys.Count < 1)
+                return default;
+            var vm_list = new List<Model.Smi_HangTian_VibrationRecord>();
+            foreach (var redisKey in allKeys)
+            {
+                var vm = _redisClient.HashGetJson<Model.Smi_HangTian_VibrationRecord>(redisKey, _lastRecord);
+                if (vm != null)
+                {
+                    vm_list.Add(vm);
+                }
+            }
+            return vm_list;
+        }
+
+
+
+
+
+
+    }
+}
diff --git a/RedisCache/IStation.RedisCache.LinuxTest/monitor_record/MonitorRecordCacheHelper.cs b/RedisCache/IStation.RedisCache.LinuxTest/monitor_record/MonitorRecordCacheHelper.cs
new file mode 100644
index 0000000..c6b9cb8
--- /dev/null
+++ b/RedisCache/IStation.RedisCache.LinuxTest/monitor_record/MonitorRecordCacheHelper.cs
@@ -0,0 +1,78 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.RedisCache
+{
+    /// <summary>
+    /// 鐩戞祴璁板綍缂撳瓨杈呭姪绫�
+    /// </summary>
+    public class MonitorRecordCacheHelper
+    {
+
+        //Redis瀹㈡埛绔緟鍔╃被瀵硅薄
+        private readonly RedisClientHelper _redisClient = new RedisClientHelper();
+
+        private static string CreateRedisKey(long monitorPointId) 
+        {
+            return $"linux_test:{monitorPointId}";
+        }
+
+        //鏈�鍚庝竴鏉¤褰�
+        private const string _lastRecord = "last-record";
+
+
+        #region 鏈�鍚庝竴鏉¤褰�
+
+        /// <summary>
+        /// 璁剧疆鏈�鍚庝竴鏉¤褰�
+        /// </summary>
+        public void SetLastRecord(Model.MonitorRecord model)
+        {
+            if (model == null)
+                return;
+            var redisKey = CreateRedisKey(model.MonitorPointID);
+            _redisClient.HashSetJosn(redisKey, _lastRecord, model);
+        }
+
+        /// <summary>
+        /// 璁剧疆鏈�鍚庝竴鏉¤褰�
+        /// </summary>
+        public void SetLastRecord(IEnumerable<Model.MonitorRecord> list)
+        {
+            if (list == null || list.Count() < 1)
+                return;
+            foreach (var item in list)
+            {
+                SetLastRecord(item);
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈�鍚庝竴鏉¤褰�
+        /// </summary>
+        public Model.MonitorRecord GetLastRecord(long monitorPointId) 
+        {
+            var redisKey = CreateRedisKey(monitorPointId);
+            return _redisClient.HashGetJson<Model.MonitorRecord>(redisKey, _lastRecord);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈�鍚庝竴鏉¤褰�
+        /// </summary>
+        public List<Model.MonitorRecord> GetLastRecord(IEnumerable<long> monitorPointIds)
+        {
+            if (monitorPointIds == null || monitorPointIds.Count() < 1)
+                return default;
+            return monitorPointIds.Select(x => GetLastRecord(x)).Where(x => x != null).ToList();
+        }
+
+
+        #endregion
+
+
+
+    }
+}
diff --git a/Server/IStation.Server.LinuxTest/IStation.Server.LinuxTest.csproj b/Server/IStation.Server.LinuxTest/IStation.Server.LinuxTest.csproj
new file mode 100644
index 0000000..dbc59cb
--- /dev/null
+++ b/Server/IStation.Server.LinuxTest/IStation.Server.LinuxTest.csproj
@@ -0,0 +1,16 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <AssemblyName>IStation.Server.LinuxTest</AssemblyName>
+    <RootNamespace>IStation.Server</RootNamespace>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Service\IStation.Service.LinuxTest\IStation.Service.LinuxTest.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/Server/IStation.Server.LinuxTest/IStation.Server.LinuxTest.csproj.user b/Server/IStation.Server.LinuxTest/IStation.Server.LinuxTest.csproj.user
new file mode 100644
index 0000000..e08933d
--- /dev/null
+++ b/Server/IStation.Server.LinuxTest/IStation.Server.LinuxTest.csproj.user
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <_LastSelectedProfileId>D:\WorkData\git\istation\webapi\v4\Server\IStation.Server.LinuxTest\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Server/IStation.Server.LinuxTest/Program.cs b/Server/IStation.Server.LinuxTest/Program.cs
new file mode 100644
index 0000000..4e75475
--- /dev/null
+++ b/Server/IStation.Server.LinuxTest/Program.cs
@@ -0,0 +1,19 @@
+锘�// See https://aka.ms/new-console-template for more information
+using IStation;
+using IStation.Server;
+
+LogHelper.Info("寮�鍚惎鍔ㄦ湇鍔�...");
+
+var jobHelper=new JobHelper();
+jobHelper.StartJob();
+AppDomain.CurrentDomain.ProcessExit += (sender, e) =>
+{
+    jobHelper.CancelJob();
+};
+
+LogHelper.Info("鏈嶅姟鍚姩鎴愬姛锛�");
+
+Console.ReadLine();
+
+
+
diff --git a/Server/IStation.Server.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml b/Server/IStation.Server.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml
new file mode 100644
index 0000000..639934f
--- /dev/null
+++ b/Server/IStation.Server.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml
@@ -0,0 +1,12 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <Configuration>Release</Configuration>
+    <Platform>Any CPU</Platform>
+    <PublishDir>bin\Release\net6.0\publish\</PublishDir>
+    <PublishProtocol>FileSystem</PublishProtocol>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Server/IStation.Server.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml.user b/Server/IStation.Server.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml.user
new file mode 100644
index 0000000..3a62c30
--- /dev/null
+++ b/Server/IStation.Server.LinuxTest/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -0,0 +1,9 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <History>True|2022-09-05T04:14:53.8624561Z;</History>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Server/IStation.Server.LinuxTest/helpers/ConfigHelper.cs b/Server/IStation.Server.LinuxTest/helpers/ConfigHelper.cs
new file mode 100644
index 0000000..7869105
--- /dev/null
+++ b/Server/IStation.Server.LinuxTest/helpers/ConfigHelper.cs
@@ -0,0 +1,25 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Server
+{
+    internal static class ConfigHelper
+    {
+
+        /// <summary>
+        /// 閫氶亾鍚嶇О
+        /// </summary>
+        public static string StoreQueueName
+        {
+            get
+            {
+                return Settings.LinuxTest.Queue.StoreQueueName;
+            }
+        }
+
+
+    }
+}
diff --git a/Server/IStation.Server.LinuxTest/interface/IJobHelper.cs b/Server/IStation.Server.LinuxTest/interface/IJobHelper.cs
new file mode 100644
index 0000000..662961c
--- /dev/null
+++ b/Server/IStation.Server.LinuxTest/interface/IJobHelper.cs
@@ -0,0 +1,24 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Server
+{
+    /// <summary>
+    /// 浠诲姟杈呭姪绫绘帴鍙�
+    /// </summary>
+    public interface IJobHelper
+    {
+        /// <summary>
+        /// 寮�濮嬩换鍔�
+        /// </summary>
+        void StartJob();
+
+        /// <summary>
+        /// 鍙栨秷浠诲姟
+        /// </summary>
+        void CancelJob();
+    }
+}
diff --git a/Server/IStation.Server.LinuxTest/task/JobHelper.cs b/Server/IStation.Server.LinuxTest/task/JobHelper.cs
new file mode 100644
index 0000000..c927f6d
--- /dev/null
+++ b/Server/IStation.Server.LinuxTest/task/JobHelper.cs
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Server
+{
+    /// <summary>
+    /// 浠诲姟杈呭姪绫�
+    /// </summary>
+    public class JobHelper
+    {
+        private List<IJobHelper> _jobHelpers = new List<IJobHelper>() 
+        {
+            new MonitorJobHelper()
+        };
+
+        /// <summary>
+        /// 寮�濮嬩换鍔�
+        /// </summary>
+        public void StartJob()
+        {
+            _jobHelpers.ForEach(x=>x.StartJob());
+        }
+
+        /// <summary>
+        /// 鍙栨秷浠诲姟
+        /// </summary>
+        public void CancelJob()
+        {
+            _jobHelpers.ForEach(x=>x.CancelJob());
+        }
+    }
+}
diff --git a/Server/IStation.Server.LinuxTest/task/MonitorJobHelper.cs b/Server/IStation.Server.LinuxTest/task/MonitorJobHelper.cs
new file mode 100644
index 0000000..dc29761
--- /dev/null
+++ b/Server/IStation.Server.LinuxTest/task/MonitorJobHelper.cs
@@ -0,0 +1,71 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Server
+{
+    /// <summary>
+    /// 鐩戞祴浠诲姟杈呭姪绫�
+    /// </summary>
+    public class MonitorJobHelper : IJobHelper
+    {
+        private readonly RabbitMqQueueHelper _queueHelper = new RabbitMqQueueHelper(); 
+
+        /// <summary>
+        /// 寮�濮嬩换鍔�
+        /// </summary>
+        public void StartJob()
+        {
+            _queueHelper.Receive<List<Model.MonitorRecord>>(ConfigHelper.StoreQueueName, (data) =>
+            {
+
+                try
+                {
+                    if (data == null)
+                    {
+                        LogHelper.Error("鐩戞祴鏁版嵁瀛樺偍鏈嶅姟涓紝鏁版嵁搴忓垪鍖栧け璐ワ紝鑷姩璺宠繃褰撳墠鏁版嵁锛�");
+                        return true;
+                    }
+                    if (data == null || data.Count < 1)
+                    {
+                        LogHelper.Error($"鐩戞祴鏁版嵁瀛樺偍鏈嶅姟涓紝鏁版嵁璁板綍涓虹┖锛岃嚜鍔ㄨ烦杩囧綋鍓嶆暟鎹紒");
+                        return true;
+                    }
+
+                    #region 鍐欐棩蹇�
+
+                    LogHelper.Info($"鐩戞祴鏁版嵁瀛樺偍鏈嶅姟涓紝鏁版嵁鏁伴噺-{data.Count}!");
+
+                    #endregion
+
+
+                    var result = new Service.MonitorRecord().Inserts(data);
+                    if (!result)
+                    {
+                        LogHelper.Error($"鐩戞祴鏁版嵁瀛樺偍鏈嶅姟涓�,褰撳墠閫氶亾澶勪簬闃诲鐘舵�� 锛�");
+                    }
+                    return result;
+                }
+                catch (Exception ex)
+                {
+                    LogHelper.Error("鐩戞祴鏁版嵁瀛樺偍鏈嶅姟涓�,鏁版嵁娑堟伅闃熷垪鍑洪敊锛岃嚜鍔ㄨ烦杩囪鏉℃暟鎹�", ex);
+                    return true;
+                }
+            });
+        }
+
+        /// <summary>
+        /// 鍙栨秷浠诲姟
+        /// </summary>
+        public void CancelJob()
+        {
+            if (_queueHelper == null)
+                return;
+            _queueHelper.Close();
+        }
+
+
+    }
+}
diff --git a/Service/IStation.Service.LinuxTest/IStation.Service.LinuxTest.csproj b/Service/IStation.Service.LinuxTest/IStation.Service.LinuxTest.csproj
new file mode 100644
index 0000000..2953ce4
--- /dev/null
+++ b/Service/IStation.Service.LinuxTest/IStation.Service.LinuxTest.csproj
@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <AssemblyName>IStation.Service.LinuxTest</AssemblyName>
+    <RootNamespace>IStation.Service</RootNamespace>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Component\IStation.RabbitMq\IStation.RabbitMq.csproj" />
+    <ProjectReference Include="..\..\DAL\IStation.DAL.LinuxTest\IStation.DAL.LinuxTest.csproj" />
+    <ProjectReference Include="..\..\Model\IStation.Model.LinuxTest\IStation.Model.LinuxTest.csproj" />
+    <ProjectReference Include="..\..\RedisCache\IStation.RedisCache.LinuxTest\IStation.RedisCache.LinuxTest.csproj" />
+    <ProjectReference Include="..\IStation.Service.Core\IStation.Service.Core.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/Service/IStation.Service.LinuxTest/helpers/CacheHelper.cs b/Service/IStation.Service.LinuxTest/helpers/CacheHelper.cs
new file mode 100644
index 0000000..e2ff045
--- /dev/null
+++ b/Service/IStation.Service.LinuxTest/helpers/CacheHelper.cs
@@ -0,0 +1,40 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Service
+{
+    /// <summary>
+    /// 缂撳瓨杈呭姪绫�
+    /// </summary>
+    internal class CacheHelper
+    {
+        private const string _cacheKeyPrefix = "*Default_LinuxTest_Prefix*";//缂撳瓨閿墠缂�
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨閿�
+        /// </summary>
+        public static string GetCacheKey(string keyContent)
+        {
+            return string.Format("{0}_{1}", _cacheKeyPrefix, keyContent);
+        }
+
+        /// <summary>
+        /// 娓呴櫎鍏ㄩ儴
+        /// </summary>
+        public static void Clear()
+        {
+            MemoryCacheHelper.Remove((key) =>
+            {
+                return key.StartsWith(_cacheKeyPrefix);
+            });
+        }
+
+
+
+
+
+    }
+}
diff --git a/Service/IStation.Service.LinuxTest/helpers/ConfigHelper.cs b/Service/IStation.Service.LinuxTest/helpers/ConfigHelper.cs
new file mode 100644
index 0000000..309d978
--- /dev/null
+++ b/Service/IStation.Service.LinuxTest/helpers/ConfigHelper.cs
@@ -0,0 +1,48 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using IStation.Untity;
+
+namespace IStation.Service
+{
+    /// <summary>
+    /// 閰嶇疆杈呭姪绫�
+    /// </summary>
+    internal class ConfigHelper
+    {
+        /// <summary>
+        /// 缂撳瓨淇濇寔鏃堕棿 锛堝垎閽燂級
+        /// </summary>
+        public static int CacheKeepTime
+        {
+            get
+            {
+                return Settings.MemoryCache.KeepTime;
+            }
+        }
+
+        /// <summary>
+        /// 缂撳瓨闅忔満鏃堕棿 锛堢锛�
+        /// </summary>
+        public static int CacheRandomTime
+        {
+            get
+            {
+                return RandomHelper.Random(0, Settings.MemoryCache.RandomTime);
+            }
+        }
+
+        /// <summary>
+        /// 瀛樺偍閫氶亾鍚嶇О
+        /// </summary>
+        public static string StoreQueueName
+        {
+            get { return Settings.LinuxTest.Queue.StoreQueueName; }
+        }
+
+
+    }
+}
diff --git a/Service/IStation.Service.LinuxTest/monitor_record/MonitorRecord.cs b/Service/IStation.Service.LinuxTest/monitor_record/MonitorRecord.cs
new file mode 100644
index 0000000..580ab6b
--- /dev/null
+++ b/Service/IStation.Service.LinuxTest/monitor_record/MonitorRecord.cs
@@ -0,0 +1,164 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using IStation.RedisCache;
+
+namespace IStation.Service
+{
+    /// <summary>
+    /// 瀹炴椂鐩戞祴璁板綍
+    /// </summary>
+    public partial class MonitorRecord
+    {
+        #region 鏈�杩戜竴鏉¤褰�
+
+        /// <summary>
+        /// 鑾峰彇鏈�杩戜竴鏉¤褰�
+        /// </summary>
+        public Model.MonitorRecord GetLastRecord(long monitorPointId)
+        {
+            var redisHelper = new MonitorRecordCacheHelper();
+            var record = redisHelper.GetLastRecord(monitorPointId);
+            return record;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈�杩戜竴鏉¤褰�
+        /// </summary>
+        public List<Model.MonitorRecord> GetLastRecord(IEnumerable<long> monitorPointIds)
+        {
+            if (monitorPointIds == null || monitorPointIds.Count() < 1)
+                return default;
+            var redisHelper = new MonitorRecordCacheHelper();
+            var record = redisHelper.GetLastRecord(monitorPointIds);
+            return record;
+        } 
+
+        #endregion
+
+        #region Query
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈�
+        /// </summary>
+        public List<Model.MonitorRecord> GetAll()
+        {
+            var dal = new DAL.MonitorRecord();
+            var all = dal.GetAll();
+            return Entity2Models(all);
+        }
+
+
+        #endregion
+
+        #region 閫氳繃 MonitorPointID 鑾峰彇
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointID 鑾峰彇鏌愪竴澶╃殑鏁版嵁
+        /// </summary>
+        public List<Model.MonitorRecord> GetByMonitorPointIDOfDay( long MonitorPointID, DateTime Day)
+        {
+            var dal = new DAL.MonitorRecord();
+            var entity_list = dal.GetByMonitorPointIDOfDay( MonitorPointID, Day);
+            return Entity2Models(entity_list);
+        }
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointID 鑾峰彇鏃ユ湡鍖洪棿鍐呯殑鏁版嵁
+        /// </summary>
+        public List<Model.MonitorRecord> GetByMonitorPointIDOfDayRange(long MonitorPointID, DateTime StartDay, DateTime EndDay)
+        {
+            if (StartDay.Date > EndDay.Date)
+                return default;
+            var dal = new DAL.MonitorRecord();
+            var entity_list = dal.GetByMonitorPointIDOfDayRange(MonitorPointID, StartDay, EndDay);
+            return Entity2Models(entity_list);
+        }
+
+        /// <summary>
+        /// 閫氳繃 MonitorPointID 鑾峰彇鏃堕棿鍖洪棿鍐呯殑鏁版嵁
+        /// </summary>
+        public List<Model.MonitorRecord> GetByMonitorPointIDOfTimeRange( long MonitorPointID, DateTime StartTime, DateTime EndTime)
+        {
+            if (StartTime > EndTime)
+                return default;
+            var dal = new DAL.MonitorRecord();
+            var entity_list = dal.GetByMonitorPointIDOfTimeRange( MonitorPointID, StartTime, EndTime);
+            return Entity2Models(entity_list);
+        }
+
+        #endregion
+
+        #region Insert
+
+        /// <summary>
+        /// 鎻掑叆涓�鏉�
+        /// </summary>
+        public long Insert(Model.MonitorRecord model)
+        {
+            if (model == null)
+                return default;
+            var dal = new DAL.MonitorRecord();
+            var entity = Model2Entity(model);
+            var id = dal.Insert(entity);
+            return id;
+        }
+
+        /// <summary>
+        /// 鎻掑叆澶氭潯
+        /// </summary>
+        public bool Inserts(List<Model.MonitorRecord> list)
+        {
+            if (list == null || list.Count < 1)
+                return false;
+            var dal = new DAL.MonitorRecord();
+            var entity_list = Model2Entities(list);
+            var bol = dal.Inserts(entity_list);
+            return bol;
+        }
+
+
+        /// <summary>
+        /// 鎻掑叆鏈�杩戜竴鏉¤褰�
+        /// </summary>
+        public bool InsertLastRecord(Model.MonitorRecord model)
+        {
+            if (model == null)
+                return default;
+            var queueHelper = new RabbitMqQueueHelper();
+            var bol = queueHelper.Push(ConfigHelper.StoreQueueName, new List<Model.MonitorRecord> { model });
+            if (bol)
+            {
+                var redisHelper = new MonitorRecordCacheHelper();
+                redisHelper.SetLastRecord(model);
+            }
+
+            return bol;
+        }
+
+        /// <summary>
+        /// 鎻掑叆鏈�杩戝鏉¤褰�
+        /// </summary>
+        public bool InsertsLastRecord(List<Model.MonitorRecord> list)
+        {
+            if (list == null || list.Count() < 1)
+                return default;
+            var queueHelper = new RabbitMqQueueHelper();
+            var bol = queueHelper.Push(ConfigHelper.StoreQueueName, list);
+            if (bol)
+            {
+                var redisHelper = new MonitorRecordCacheHelper();
+                redisHelper.SetLastRecord(list);
+            }
+            return bol;
+        }
+
+        
+      
+        #endregion
+
+
+    }
+}
diff --git a/Service/IStation.Service.LinuxTest/monitor_record/MonitorRecord_Instance.cs b/Service/IStation.Service.LinuxTest/monitor_record/MonitorRecord_Instance.cs
new file mode 100644
index 0000000..71b3d70
--- /dev/null
+++ b/Service/IStation.Service.LinuxTest/monitor_record/MonitorRecord_Instance.cs
@@ -0,0 +1,72 @@
+锘縰sing AutoMapper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using IStation.Untity;
+
+namespace IStation.Service
+{
+    public partial class MonitorRecord
+    {
+        //Entity to Model
+        private Model.MonitorRecord Entity2Model(Entity.MonitorRecord entity)
+        {
+            if (entity == null)
+                return default;
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<Entity.MonitorRecord, Model.MonitorRecord>()
+            ).CreateMapper();
+            var model = mapper.Map<Entity.MonitorRecord, Model.MonitorRecord>(entity);
+            return model;
+        }
+
+        //Entities to Models
+        private List<Model.MonitorRecord> Entity2Models(List<Entity.MonitorRecord> entities)
+        {
+            if (entities == null || entities.Count() < 1)
+                return default;
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<Entity.MonitorRecord, Model.MonitorRecord>()
+            ).CreateMapper();
+            var models = mapper.Map<List<Entity.MonitorRecord>, List<Model.MonitorRecord>>(entities);
+            return models;
+        }
+
+        //Model to Entity
+        private Entity.MonitorRecord Model2Entity(Model.MonitorRecord model)
+        {
+            if (model == null)
+                return default;
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<Model.MonitorRecord, Entity.MonitorRecord>()
+            ).CreateMapper();
+            var entity = mapper.Map<Model.MonitorRecord, Entity.MonitorRecord>(model);
+            return entity;
+        }
+
+        //Models to Entities
+        private List<Entity.MonitorRecord> Model2Entities(List<Model.MonitorRecord> models)
+        {
+            if (models == null || models.Count < 1)
+                return default;
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<Model.MonitorRecord, Entity.MonitorRecord>()
+            ).CreateMapper();
+            var entities = mapper.Map<List<Model.MonitorRecord>, List<Entity.MonitorRecord>>(models);
+            return entities;
+        }
+
+        //Model to Entity
+        private void Model2Entity(Model.MonitorRecord model, Entity.MonitorRecord entity)
+        {
+            if (model == null || entity == null)
+                return;
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<Model.MonitorRecord, Entity.MonitorRecord>()
+            ).CreateMapper();
+            mapper.Map(model, entity);
+        }
+
+
+
+
+
+    }
+}
diff --git a/Settings/IStation.Settings/models/Paras.cs b/Settings/IStation.Settings/models/Paras.cs
index 9513d53..9f1d931 100644
--- a/Settings/IStation.Settings/models/Paras.cs
+++ b/Settings/IStation.Settings/models/Paras.cs
@@ -153,5 +153,10 @@
         /// Vibration鍙傛暟
         /// </summary>
         public Paras_Vibration Vibration { get; set; }
+
+        /// <summary>
+        /// LinuxTest鍙傛暟
+        /// </summary>
+        public Paras_LinuxTest LinuxTest { get; set; }
     }
 }
diff --git a/Settings/IStation.Settings/models/linux_test/Paras_LinuxTest.cs b/Settings/IStation.Settings/models/linux_test/Paras_LinuxTest.cs
new file mode 100644
index 0000000..d4d9b2d
--- /dev/null
+++ b/Settings/IStation.Settings/models/linux_test/Paras_LinuxTest.cs
@@ -0,0 +1,24 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation
+{
+    /// <summary>
+    /// LinuxTest鍙傛暟
+    /// </summary>
+    public class Paras_LinuxTest
+    {
+        /// <summary>
+        /// 鏁版嵁搴�
+        /// </summary>
+        public Paras_LinuxTest_DataBase DataBase { get; set; }
+
+        /// <summary>
+        /// 閫氶亾
+        /// </summary>
+        public Paras_LinuxTest_Queue Queue { get; set; }
+    }
+}
diff --git a/Settings/IStation.Settings/models/linux_test/Paras_LinuxTest_DataBase.cs b/Settings/IStation.Settings/models/linux_test/Paras_LinuxTest_DataBase.cs
new file mode 100644
index 0000000..46ae961
--- /dev/null
+++ b/Settings/IStation.Settings/models/linux_test/Paras_LinuxTest_DataBase.cs
@@ -0,0 +1,20 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation
+{
+    /// <summary>
+    /// 鏁版嵁搴�
+    /// </summary>
+    public class Paras_LinuxTest_DataBase 
+    {
+        /// <summary>
+        /// 杩炴帴瀛楃涓�
+        /// </summary>
+        public string ConnectString { get; set; }
+    }
+
+}
diff --git a/Settings/IStation.Settings/models/linux_test/Paras_LinuxTest_Queue.cs b/Settings/IStation.Settings/models/linux_test/Paras_LinuxTest_Queue.cs
new file mode 100644
index 0000000..5b46ef0
--- /dev/null
+++ b/Settings/IStation.Settings/models/linux_test/Paras_LinuxTest_Queue.cs
@@ -0,0 +1,20 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation
+{
+    /// <summary>
+    /// 閫氶亾
+    /// </summary>
+    public class Paras_LinuxTest_Queue
+    {
+        /// <summary>
+        /// 瀛樺偍閫氶亾鍚嶇О
+        /// </summary>
+        public string StoreQueueName { get; set; }
+    }
+
+}
diff --git a/Settings/IStation.Settings/paras/Settings.cs b/Settings/IStation.Settings/paras/Settings.cs
index 4f5f4f0..57ef337 100644
--- a/Settings/IStation.Settings/paras/Settings.cs
+++ b/Settings/IStation.Settings/paras/Settings.cs
@@ -245,6 +245,16 @@
         }
 
         /// <summary>
+        /// LinuxTest 鍙傛暟
+        /// </summary>
+        public static Paras_LinuxTest LinuxTest 
+        {
+            get { return SettingsHelper.Get().LinuxTest; }
+        }
+
+
+
+        /// <summary>
         /// 淇濆瓨
         /// </summary>
         public static bool Save()
diff --git a/Settings/IStation.Settings/paras_settings.json b/Settings/IStation.Settings/paras_settings.json
index 789080a..eb98c58 100644
--- a/Settings/IStation.Settings/paras_settings.json
+++ b/Settings/IStation.Settings/paras_settings.json
@@ -259,7 +259,16 @@
         "ConfigureID": 0
       }
     }
-  }
+  },
 
+  "LinuxTest": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_linux_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    },
+    "Queue": {
+      "StoreQueueName": "linux_text_queue_name"
+    }
+
+  }
 
 }

--
Gitblit v1.9.3