lixiaojun
2024-11-18 a2059eaa7c6c2346f3a1a03ab214a6cd8dfc8b38
增加 szjt api数据对接
已修改1个文件
已添加26个文件
883 ■■■■■ 文件已修改
IStation.DataDocking.Api.sln 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDocking.Api/GlobalUsings.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDocking.Api/IStation.DataDocking.Api.csproj 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDocking.Api/IStation.DataDocking.Api.csproj.user 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDocking.Api/Program.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDocking.Api/Properties/PublishProfiles/FolderProfile.pubxml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDocking.Api/Properties/PublishProfiles/FolderProfile.pubxml.user 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/00-core/HttpRequestHelper.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/00-core/LastCollectHelper.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/00-core/TokenHelper.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/01-paras/AppParas.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/01-paras/AppParasHelper.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/02-model/Exception.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/02-model/Result_History.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/02-model/Result_Login.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/03-handle/HandleHelper.cs 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/GlobalUsings.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/IStation.DataDockingApi.JTMeter.csproj 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDockingApi.JTMeter/paras_datadocking_api_jtmeter.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.DataDocking4Api/IStation.TopShelf.DataDocking4Api.csproj 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.DataDocking4Api/IStation.TopShelf.DataDocking4Api.csproj.user 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.DataDocking4Api/Program.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.DataDocking4Api/Properties/PublishProfiles/FolderProfile.pubxml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.DataDocking4Api/Properties/PublishProfiles/FolderProfile.pubxml.user 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.DataDocking4Api/Service.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.DataDocking4Mqtt/IStation.TopShelf.DataDocking4Mqtt.csproj.user 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.DataDocking4Mqtt/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.DataDocking.Api.sln
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.1.32328.378
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.DataDocking.Api", "IStation.DataDocking.Api\IStation.DataDocking.Api.csproj", "{0C528556-BB5A-477F-806E-2A441531D3D5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.DataDockingApi.JTMeter", "IStation.DataDockingApi.JTMeter\IStation.DataDockingApi.JTMeter.csproj", "{64744652-C278-4439-8343-3872F07FFB45}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.TopShelf.DataDocking4Api", "IStation.TopShelf.DataDocking4Api\IStation.TopShelf.DataDocking4Api.csproj", "{F77F77DE-C9C0-4F1A-8934-D3A435182C91}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {0C528556-BB5A-477F-806E-2A441531D3D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {0C528556-BB5A-477F-806E-2A441531D3D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {0C528556-BB5A-477F-806E-2A441531D3D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {0C528556-BB5A-477F-806E-2A441531D3D5}.Release|Any CPU.Build.0 = Release|Any CPU
        {64744652-C278-4439-8343-3872F07FFB45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {64744652-C278-4439-8343-3872F07FFB45}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {64744652-C278-4439-8343-3872F07FFB45}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {64744652-C278-4439-8343-3872F07FFB45}.Release|Any CPU.Build.0 = Release|Any CPU
        {F77F77DE-C9C0-4F1A-8934-D3A435182C91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {F77F77DE-C9C0-4F1A-8934-D3A435182C91}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {F77F77DE-C9C0-4F1A-8934-D3A435182C91}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {F77F77DE-C9C0-4F1A-8934-D3A435182C91}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {E02989A8-9B6F-43E5-AACA-790328215089}
    EndGlobalSection
EndGlobal
IStation.DataDocking.Api/GlobalUsings.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
global using Yw;
global using Yw.Untity;
global using Yw.Service;
global using Yw.Server;
global using Quartz;
IStation.DataDocking.Api/IStation.DataDocking.Api.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>disable</Nullable>
        <AssemblyName>IStation.DataDocking.Api</AssemblyName>
        <RootNamespace>IStation.DataDocking</RootNamespace>
        <GenerateDocumentationFile>True</GenerateDocumentationFile>
    </PropertyGroup>
    <ItemGroup>
        <Folder Include="Properties\" />
    </ItemGroup>
    <ItemGroup>
      <PackageReference Include="Yw.DataDocking.Api.Core" Version="3.0.2" />
    </ItemGroup>
    <ItemGroup>
      <ProjectReference Include="..\IStation.DataDockingApi.JTMeter\IStation.DataDockingApi.JTMeter.csproj" />
    </ItemGroup>
</Project>
IStation.DataDocking.Api/IStation.DataDocking.Api.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.2\Service.V4.2\Server\IStation.DataDocking.Api\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
  </PropertyGroup>
</Project>
IStation.DataDocking.Api/Program.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
// See https://aka.ms/new-console-template for more information
LogHelper.Info("API数据对接服务正在启动...");
var jobHelper = new ApiJobHelper();
await jobHelper.StartJob();
AppDomain.CurrentDomain.ProcessExit += async (sender, e) =>
{
    await jobHelper.CancelJob();
};
LogHelper.Info("API数据对接服务启动成功!");
Console.ReadLine();
IStation.DataDocking.Api/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>
IStation.DataDocking.Api/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|2023-07-15T07:00:50.8280821Z;True|2023-07-15T14:14:42.0826207+08:00;True|2023-07-14T22:12:25.7041577+08:00;True|2023-07-12T10:19:32.0353122+08:00;True|2023-07-12T09:58:24.0623166+08:00;True|2023-07-12T09:48:23.4447126+08:00;True|2023-06-13T16:22:32.7349659+08:00;True|2023-06-13T15:04:34.9832999+08:00;</History>
  </PropertyGroup>
</Project>
IStation.DataDockingApi.JTMeter/00-core/HttpRequestHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
namespace IStation.DataDockingApi
{
    internal class HttpRequestHelper
    {
        /// <summary>
        /// ç™»å½•
        /// </summary>
        public static Result_Login Login()
        {
            var appParas = AppParasHelper.Get();
            var data = JsonHelper.Object2Json(appParas.account);
            using (var httpClient = new HttpClient())
            using (var request = new HttpRequestMessage(HttpMethod.Post, appParas.url.token))
            {
                request.Headers.Add("KeepAlive", "false");
                request.Headers.Add("X-Requested-With", "XMLHttpRequest");
                request.Content = new StringContent(data, Encoding.UTF8, "application/json");
                var response = httpClient.SendAsync(request).Result;
                response.EnsureSuccessStatusCode();
                var responsetext = response.Content.ReadAsStringAsync().Result;
                return JsonHelper.Json2Object<Result_Login>(responsetext);
            }
        }
        /// <summary>
        /// åŽ†å²
        /// </summary>
        public static Result_History History(string url, string token)
        {
            using (var httpClient = new HttpClient())
            using (var request = new HttpRequestMessage(HttpMethod.Post, url))
            {
                request.Headers.Add("KeepAlive", "false");
                if (!string.IsNullOrEmpty(token))
                {
                    request.Headers.Add("Access-Token", token);
                }
                var response = httpClient.SendAsync(request).Result;
                response.EnsureSuccessStatusCode();
                var responsetext = response.Content.ReadAsStringAsync().Result;
                return JsonHelper.Json2Object<Result_History>(responsetext);
            }
        }
        /// <summary>
        /// Get
        /// </summary>
        public static string Get(string url)
        {
            using (var httpClient = new HttpClient())
            using (var request = new HttpRequestMessage(HttpMethod.Get, url))
            {
                request.Headers.Add("KeepAlive", "false");
                var response = httpClient.SendAsync(request).Result;
                response.EnsureSuccessStatusCode();
                var responsetext = response.Content.ReadAsStringAsync().Result;
                return responsetext;
            }
        }
    }
}
IStation.DataDockingApi.JTMeter/00-core/LastCollectHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
namespace IStation.DataDockingApi
{
    internal class LastCollectHelper
    {
        private static Dictionary<string, DateTime> _dict = new Dictionary<string, DateTime>();
        /// <summary>
        /// è®¾ç½®æœ€è¿‘æ—¶é—´
        /// </summary>
        public static bool SetLastTime(string code, DateTime time)
        {
            if (!_dict.ContainsKey(code))
            {
                _dict.Add(code, time);
                return true;
            }
            if (time <= _dict[code])
            {
                return false;
            }
            _dict[code] = time;
            return true;
        }
    }
}
IStation.DataDockingApi.JTMeter/00-core/TokenHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
namespace IStation.DataDockingApi
{
    /// <summary>
    /// Token
    /// </summary>
    public class TokenHelper
    {
        private static DateTime _lastTokenTime;
        private static string _token = null;
        //获取Token
        private static string GetToken()
        {
            var result = HttpRequestHelper.Login();
            if (result == null)
            {
                return default;
            }
            if (result.status != "SUCCESS")
            {
                var json = JsonHelper.Object2Json(result);
                LogHelper.Info(json);
                return default;
            }
            return result.content.token;
        }
        //验证过期时间
        private static bool Verify()
        {
            var appParas = AppParasHelper.Get();
            if (_lastTokenTime.AddHours(appParas.expire) < DateTime.Now)
            {
                return false;
            }
            return true;
        }
        /// <summary>
        /// èŽ·å– (验证过期时间,使用缓存token)
        /// </summary>
        public static string Get()
        {
            if (string.IsNullOrEmpty(_token))
            {
                _token = GetToken();
                _lastTokenTime = DateTime.Now;
            }
            if (!Verify())
            {
                _token = GetToken();
                _lastTokenTime = DateTime.Now;
            }
            return _token;
        }
        /// <summary>
        /// é‡æ–°èŽ·å– (不做任何验证,重新获取token,之后更新缓存)
        /// </summary>
        public static string GetAgain()
        {
            _token = GetToken();
            _lastTokenTime = DateTime.Now;
            return _token;
        }
    }
}
IStation.DataDockingApi.JTMeter/01-paras/AppParas.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
namespace IStation.DataDockingApi
{
    /// <summary>
    /// app参数(可配制)
    /// </summary>
    internal class AppParas
    {
        /// <summary>
        /// è¿‡æœŸæ—¶é—´ ï¼ˆå°æ—¶ï¼‰
        /// </summary>
        public int expire { get; set; }
        /// <summary>
        /// url
        /// </summary>
        public Url url { get; set; }
        /// <summary>
        /// è´¦æˆ·
        /// </summary>
        public Account account { get; set; }
        /// <summary>
        /// ä»ªè¡¨
        /// </summary>
        public List<string> meters { get; set; }
    }
    internal class Url
    {
        /// <summary>
        /// token url
        /// </summary>
        public string token { get; set; }
        /// <summary>
        /// åŽ†å²æ•°æ®url
        /// </summary>
        public string history { get; set; }
    }
    internal class Account
    {
        public string username { get; set; }
        public string password { get; set; }
    }
}
IStation.DataDockingApi.JTMeter/01-paras/AppParasHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
namespace IStation.DataDockingApi
{
    /// <summary>
    /// app å‚数辅助类
    /// </summary>
    internal class AppParasHelper
    {
        /// <summary>
        /// json文件名称
        /// </summary>
        public static string JsonFileName
        {
            get
            {
                if (string.IsNullOrEmpty(_jsonFileName))
                {
                    _jsonFileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "paras_datadocking_api_jtmeter.json");
                }
                return _jsonFileName;
            }
        }
        private static string _jsonFileName = null;
        /// <summary>
        /// èŽ·å–
        /// </summary>
        /// <returns></returns>
        public static AppParas Get()
        {
            if (_appparas == null)
            {
                _appparas = JsonHelper.Json2Object<AppParas>(File.ReadAllText(JsonFileName));
            }
            return _appparas;
        }
        private static AppParas _appparas = null;
    }
}
IStation.DataDockingApi.JTMeter/02-model/Exception.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
namespace IStation.DataDockingApi.JTMeter
{
    /// <summary>
    ///
    /// </summary>
    public class Exception : System.Exception
    {
        /// <summary>
        ///
        /// </summary>
        public Exception() : base() { }
        /// <summary>
        ///
        /// </summary>
        public Exception(string message) : base(message) { }
        /// <summary>
        ///
        /// </summary>
        public Exception(string message, System.Exception innerException) : base(message, innerException) { }
    }
}
IStation.DataDockingApi.JTMeter/02-model/Result_History.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
namespace IStation.DataDockingApi.JTMeter
{
    /// <summary>
    ///
    /// </summary>
    public class Result_History
    {
        /// <summary>
        ///
        /// </summary>
        public string status { get; set; }
        /// <summary>
        ///
        /// </summary>
        public HistoryResultMessage message { get; set; }
        /// <summary>
        ///
        /// </summary>
        public HistoryResultContent content { get; set; }
    }
    /// <summary>
    ///
    /// </summary>
    public class HistoryResultMessage
    {
        /// <summary>
        ///
        /// </summary>
        public string notice { get; set; }
    }
    /// <summary>
    ///
    /// </summary>
    public class HistoryResultContent
    {
        /// <summary>
        ///
        /// </summary>
        public HistoryResultContentItem[] result { get; set; }
        /// <summary>
        ///
        /// </summary>
        public int count { get; set; }
    }
    /// <summary>
    ///
    /// </summary>
    public class HistoryResultContentItem
    {
        /// <summary>
        ///
        /// </summary>
        public string meterCode { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string meterType { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? flowSpeed { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? instantFlow { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? cumulativeFlow { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? positiveCumulativeFlow { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? negativeCumulativeFlow { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? pressure { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string alarmDetail { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime collectedTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime reportTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? signalStrength { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? voltage { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? cumulativeWorkTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? positiveCumulativeWorkTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public double? negativeCumulativeWorkTime { get; set; }
    }
}
IStation.DataDockingApi.JTMeter/02-model/Result_Login.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
namespace IStation.DataDockingApi.JTMeter
{
    /// <summary>
    ///
    /// </summary>
    public class Result_Login
    {
        /// <summary>
        ///
        /// </summary>
        public LoginResultContent content { get; set; }
        /// <summary>
        ///
        /// </summary>
        public LoginResultMessage message { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string status { get; set; }
    }
    /// <summary>
    ///
    /// </summary>
    public class LoginResultContent
    {
        /// <summary>
        ///
        /// </summary>
        public string token { get; set; }
    }
    /// <summary>
    ///
    /// </summary>
    public class LoginResultMessage
    {
        /// <summary>
        ///
        /// </summary>
        public object notice { get; set; }
        /// <summary>
        ///
        /// </summary>
        public object cause { get; set; }
    }
}
IStation.DataDockingApi.JTMeter/03-handle/HandleHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,180 @@
namespace IStation.DataDockingApi
{
    /// <summary>
    ///
    /// </summary>
    public class HandleHelper : IHandleHelper
    {
        /// <summary>
        ///
        /// </summary>
        public void HandleData(List<Yw.Model.DataDockingConfigureItemExSubList> items, Action<List<Yw.Model.MonitorHandleRecord>> receive)
        {
            if (items == null || items.Count < 1)
            {
                return;
            }
            var app_paras = AppParasHelper.Get();
            if (app_paras == null)
            {
                LogHelper.Error("苏州金庭仪表 Api æ•°æ®å¯¹æŽ¥ä¸­ï¼Œç¼ºå°‘对接配置文件");
            }
            var token = TokenHelper.Get();
            if (string.IsNullOrEmpty(token))
            {
                LogHelper.Error("苏州金庭仪表 Api æ•°æ®å¯¹æŽ¥ä¸­ï¼ŒèŽ·å–Token失败");
                return;
            }
            var history_url = app_paras.url.history;
            history_url = $"{history_url}?pageNumber=1&startTime={DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd")}&endTime={DateTime.Now.AddDays(1).ToString("yyyy-MM-dd")}";
            var history_result = HttpRequestHelper.History(history_url, token);
            if (history_result == null)
            {
                LogHelper.Info("苏州金庭仪表 Api æ•°æ®å¯¹æŽ¥ä¸­ï¼ŒèŽ·å–å®žæ—¶æ•°æ®å¤±è´¥");
                return;
            }
            if (history_result.status != "SUCCESS")
            {
                LogHelper.Info("苏州金庭仪表 Api æ•°æ®å¯¹æŽ¥ä¸­ï¼ŒèŽ·å–å®žæ—¶æ•°æ®å¤±è´¥ï¼ˆstatus!= SUCCESS),可能是token被其他程序更新,正在重新获取");
                token = TokenHelper.GetAgain();
                history_result = HttpRequestHelper.History(history_url, token);
                if (history_result == null)
                {
                    LogHelper.Info("苏州金庭仪表 Api æ•°æ®å¯¹æŽ¥ä¸­ï¼ŒèŽ·å–å®žæ—¶æ•°æ®å¤±è´¥");
                    return;
                }
                if (history_result.status != "SUCCESS")
                {
                    LogHelper.Info("苏州金庭仪表 Api æ•°æ®å¯¹æŽ¥ä¸­ï¼ŒèŽ·å–å®žæ—¶æ•°æ®å¤±è´¥ï¼ˆstatus!= SUCCESS),重新获取依旧失败,请检查程序!");
                    return;
                }
            }
            if (history_result.content.result == null || history_result.content.result.Length < 1)
            {
                LogHelper.Info("苏州金庭仪表 Api æ•°æ®å¯¹æŽ¥ä¸­ï¼ŒèŽ·å–å®žæ—¶æ•°æ®å¤±è´¥(数据为空)");
                return;
            }
            var result_group_list = history_result.content.result.OrderBy(x => x.collectedTime).GroupBy(x => x.collectedTime).ToList();
            foreach (var result_group in result_group_list)
            {
                var receive_list = new List<Yw.Model.MonitorHandleRecord>();
                var code_list = result_group.Select(x => x.meterCode).Distinct().ToList();
                foreach (var code in code_list)
                {
                    var record = result_group.FirstOrDefault(x => x.meterCode == code);
                    if (LastCollectHelper.SetLastTime(code, record.collectedTime))
                    {
                        if (record.instantFlow != null)
                        {
                            var signId = $"{code}_q";
                            var item_list = items.Where(x => x.TransferId == signId).ToList();
                            if (item_list != null && item_list.Count > 0)
                            {
                                foreach (var item in item_list)
                                {
                                    var item_sub = item.SubList.First();
                                    var receiveRecord = new Yw.Model.MonitorHandleRecord();
                                    receiveRecord.DataTime = record.collectedTime;
                                    receiveRecord.MonitorPointID = item.MonitorPointID;
                                    var srcValue = record.instantFlow.Value;
                                    var dataStatus = new List<string>();
                                    var dataValue = item_sub.Docking(srcValue.ToString(), ref dataStatus);
                                    var receiveSubRecord = new Yw.Model.MonitorHandleSubRecord();
                                    receiveSubRecord.SignalID = item_sub.SignalID;
                                    receiveSubRecord.SrcValue = srcValue.ToString();
                                    receiveSubRecord.DataValue = dataValue;
                                    receiveRecord.SubList.Add(receiveSubRecord);
                                    if (item.IsMeet(receiveRecord))
                                    {
                                        receive_list.Add(receiveRecord);
                                    }
                                }
                            }
                        }
                        if (record.cumulativeFlow != null)
                        {
                            var signId = $"{code}_ql";
                            var item_list = items.Where(x => x.TransferId == signId).ToList();
                            if (item_list != null && item_list.Count > 0)
                            {
                                foreach (var item in item_list)
                                {
                                    var item_sub = item.SubList.First();
                                    var receiveRecord = new Yw.Model.MonitorHandleRecord();
                                    receiveRecord.DataTime = record.collectedTime;
                                    receiveRecord.MonitorPointID = item.MonitorPointID;
                                    var srcValue = record.cumulativeFlow.Value;
                                    var dataStatus = new List<string>();
                                    var dataValue = item_sub.Docking(srcValue.ToString(), ref dataStatus);
                                    var receiveSubRecord = new Yw.Model.MonitorHandleSubRecord();
                                    receiveSubRecord.SignalID = item_sub.SignalID;
                                    receiveSubRecord.SrcValue = srcValue.ToString();
                                    receiveSubRecord.DataValue = dataValue;
                                    receiveRecord.SubList.Add(receiveSubRecord);
                                    if (item.IsMeet(receiveRecord))
                                    {
                                        receive_list.Add(receiveRecord);
                                    }
                                }
                            }
                        }
                        if (record.pressure != null)
                        {
                            var signId = $"{code}_pr";
                            var item_list = items.Where(x => x.TransferId == signId).ToList();
                            if (item_list != null && item_list.Count > 0)
                            {
                                foreach (var item in item_list)
                                {
                                    var item_sub = item.SubList.First();
                                    var receiveRecord = new Yw.Model.MonitorHandleRecord();
                                    receiveRecord.DataTime = record.collectedTime;
                                    receiveRecord.MonitorPointID = item.MonitorPointID;
                                    var srcValue = record.pressure.Value;
                                    var dataStatus = new List<string>();
                                    var dataValue = item_sub.Docking(srcValue.ToString(), ref dataStatus);
                                    var receiveSubRecord = new Yw.Model.MonitorHandleSubRecord();
                                    receiveSubRecord.SignalID = item_sub.SignalID;
                                    receiveSubRecord.SrcValue = srcValue.ToString();
                                    receiveSubRecord.DataValue = dataValue;
                                    receiveRecord.SubList.Add(receiveSubRecord);
                                    if (item.IsMeet(receiveRecord))
                                    {
                                        receive_list.Add(receiveRecord);
                                    }
                                }
                            }
                        }
                    }
                }
                if (receive_list.Count > 0)
                {
                    receive(receive_list);
                }
            }
        }
    }
}
IStation.DataDockingApi.JTMeter/GlobalUsings.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
global using Yw;
global using Yw.Untity;
global using Yw.Service;
global using IStation.DataDockingApi.JTMeter;
global using System.Text;
global using Yw.Service.Monitor;
global using Yw.DataDockingApi;
global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Net.Http;
IStation.DataDockingApi.JTMeter/IStation.DataDockingApi.JTMeter.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>disable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <None Remove="paras_datadocking_api_jtmeter.json" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="paras_datadocking_api_jtmeter.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Yw.IDataDockingApi.Core" Version="3.0.3" />
  </ItemGroup>
</Project>
IStation.DataDockingApi.JTMeter/paras_datadocking_api_jtmeter.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
{
  "expire": 24,
  "url": {
    "token": "http://39.106.98.144:8100/hzybbase/auth/login",
    "history": "http://39.106.98.144:8100/hzybbase/api/info/history/batch"
  },
  "account": {
    "username": "wzjtzlsmg",
    "password": "29e5b0b6a11ef700e158b79fa94e4397"
  },
  "meters": [ "3211312510799", "6321313403374", "6321313403444", "3211314313774", "3211324121890" ] //暂时不用
}
IStation.TopShelf.DataDocking4Api/IStation.TopShelf.DataDocking4Api.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>disable</Nullable>
    <AssemblyName>IStation.TopShelf.DataDocking4Api</AssemblyName>
    <RootNamespace>IStation.TopShelf</RootNamespace>
    <GenerateDocumentationFile>True</GenerateDocumentationFile>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Yw.TopShelf" Version="3.0.0" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\IStation.DataDocking.Api\IStation.DataDocking.Api.csproj" />
  </ItemGroup>
</Project>
IStation.TopShelf.DataDocking4Api/IStation.TopShelf.DataDocking4Api.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\szjt\IStation.TopShelf.DataDocking4Api\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
  </PropertyGroup>
</Project>
IStation.TopShelf.DataDocking4Api/Program.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
// See https://aka.ms/new-console-template for more information
using IStation.TopShelf;
using Topshelf;
///SZJT
HostFactory.Run(x =>
{
    x.Service<Service>();
    x.RunAsLocalSystem();
    x.SetDescription("智慧泵站Core版API数据对接程序(SZJT)");
    x.SetDisplayName("IStation.Core.DataDocking.Api.SZJT");
    x.SetServiceName("IStation.Core.DataDocking.Api.SZJT");
    x.EnableServiceRecovery(r => r.RestartService(TimeSpan.FromSeconds(120)));
    x.StartAutomatically();
});
IStation.TopShelf.DataDocking4Api/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>
IStation.TopShelf.DataDocking4Api/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>
    <History>True|2024-11-18T05:37:07.7626653Z;True|2024-11-11T16:23:28.6469381+08:00;True|2024-05-16T12:39:54.9946569+08:00;True|2024-05-16T12:39:29.3584802+08:00;True|2024-05-09T17:14:37.5350192+08:00;True|2024-04-04T11:43:31.7040256+08:00;True|2024-03-02T10:23:38.5098941+08:00;True|2024-03-02T09:59:51.2850262+08:00;True|2023-12-26T12:07:27.4247222+08:00;True|2023-12-11T15:15:41.1462691+08:00;False|2023-12-11T15:14:59.4869740+08:00;True|2022-09-22T10:27:20.9740415+08:00;True|2022-07-01T20:14:42.0373390+08:00;True|2022-07-01T14:01:54.3765684+08:00;True|2022-07-01T13:55:51.6239735+08:00;True|2022-07-01T13:48:27.2176427+08:00;True|2022-06-06T13:37:14.3901330+08:00;True|2022-06-06T11:49:16.9822820+08:00;True|2022-06-02T09:29:24.8316905+08:00;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
IStation.TopShelf.DataDocking4Api/Service.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
using Yw.Server;
using Topshelf;
namespace IStation.TopShelf
{
    /// <summary>
    ///
    /// </summary>
    public class Service : ServiceControl
    {
        private readonly ApiJobHelper _jobHelper = new ApiJobHelper();
        /// <summary>
        ///
        /// </summary>
        public bool Start(HostControl hostControl)
        {
            _ = _jobHelper.StartJob();
            return true;
        }
        /// <summary>
        ///
        /// </summary>
        public bool Stop(HostControl hostControl)
        {
            _ = _jobHelper.CancelJob();
            return true;
        }
    }
}
IStation.TopShelf.DataDocking4Mqtt/IStation.TopShelf.DataDocking4Mqtt.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\szjt\IStation.TopShelf.DataDocking4Mqtt\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
  </PropertyGroup>
</Project>
IStation.TopShelf.DataDocking4Mqtt/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -4,7 +4,7 @@
-->
<Project>
  <PropertyGroup>
    <History>True|2024-05-20T06:54:10.8142650Z;True|2024-05-20T14:53:11.9407797+08:00;True|2024-05-16T11:27:44.8720373+08:00;True|2024-05-16T11:21:56.7846755+08:00;True|2024-02-22T16:25:43.4558929+08:00;True|2024-02-22T16:24:45.8722568+08:00;True|2024-02-22T12:01:45.6247638+08:00;True|2023-10-31T16:04:40.5948906+08:00;True|2023-10-19T13:26:35.6019347+08:00;True|2023-10-19T13:26:00.5198778+08:00;False|2023-10-19T13:24:00.4780702+08:00;True|2023-09-26T13:59:27.5337530+08:00;False|2023-09-26T13:58:50.7519102+08:00;False|2023-09-26T13:58:20.1466908+08:00;True|2022-09-22T10:27:20.9740415+08:00;True|2022-07-01T20:14:42.0373390+08:00;True|2022-07-01T14:01:54.3765684+08:00;True|2022-07-01T13:55:51.6239735+08:00;True|2022-07-01T13:48:27.2176427+08:00;True|2022-06-06T13:37:14.3901330+08:00;True|2022-06-06T11:49:16.9822820+08:00;True|2022-06-02T09:29:24.8316905+08:00;</History>
    <History>True|2024-11-18T05:05:19.5471687Z;True|2024-05-20T14:54:10.8142650+08:00;True|2024-05-20T14:53:11.9407797+08:00;True|2024-05-16T11:27:44.8720373+08:00;True|2024-05-16T11:21:56.7846755+08:00;True|2024-02-22T16:25:43.4558929+08:00;True|2024-02-22T16:24:45.8722568+08:00;True|2024-02-22T12:01:45.6247638+08:00;True|2023-10-31T16:04:40.5948906+08:00;True|2023-10-19T13:26:35.6019347+08:00;True|2023-10-19T13:26:00.5198778+08:00;False|2023-10-19T13:24:00.4780702+08:00;True|2023-09-26T13:59:27.5337530+08:00;False|2023-09-26T13:58:50.7519102+08:00;False|2023-09-26T13:58:20.1466908+08:00;True|2022-09-22T10:27:20.9740415+08:00;True|2022-07-01T20:14:42.0373390+08:00;True|2022-07-01T14:01:54.3765684+08:00;True|2022-07-01T13:55:51.6239735+08:00;True|2022-07-01T13:48:27.2176427+08:00;True|2022-06-06T13:37:14.3901330+08:00;True|2022-06-06T11:49:16.9822820+08:00;True|2022-06-02T09:29:24.8316905+08:00;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>