lixiaojun
2022-09-27 64cf9d5d5e26085d04ae54595b026b31c4c3427d
上海能耗计划协调接口更新
已重命名9个文件
已修改4个文件
已添加13个文件
702 ■■■■■ 文件已修改
Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/dispatch/dto/DispatchAnaSchemeItemOutput.cs 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/dispatch/dto/DispatchAnaSchemeOutput.cs 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/dispatch/dto/DispatchBranchDto.cs 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/dispatch/dto/DispatchFactoryDto.cs 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/dispatch/dto/DispatchScadaDto.cs 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/dispatch/dto/FactoryDispatchInput.cs 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/dispatch/dto/StationDispatchExInput.cs 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/dispatch/dto/StationDispatchInput.cs 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaDto.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaInput.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaTransfer.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.Calculation.Plan/IPlanAnaCalculator.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.Calculation.Plan/IStation.Calculation.Plan.csproj 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.Calculation.Plan/PlanAnaCalculatorFactory.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.Calculation.Plan/custom/shys/station/Cxbz.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.Calculation.Plan/input/HourSumRecord.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.Calculation.Plan/input/MonitorRecord.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.Calculation.Plan/input/MonthSumRecord.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.Calculation.Plan/output/MonthCalcuResult.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.sln 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Settings/IStation.Settings/models/webapi/Paras_WebApi_OpenApi.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Settings/IStation.Settings/paras_settings.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj
@@ -11,6 +11,7 @@
  <ItemGroup>
    <ProjectReference Include="..\..\Calculation\IStation.Calculation.Dispatch\IStation.Calculation.Dispatch.csproj" />
    <ProjectReference Include="..\..\Calculation\IStation.Calculation.Plan\IStation.Calculation.Plan.csproj" />
    <ProjectReference Include="..\IStation.Application.Core\IStation.Application.Core.csproj" />
  </ItemGroup>
Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs
Application/IStation.Application.OpenApi/shys/dispatch/dto/DispatchAnaSchemeItemOutput.cs
Application/IStation.Application.OpenApi/shys/dispatch/dto/DispatchAnaSchemeOutput.cs
Application/IStation.Application.OpenApi/shys/dispatch/dto/DispatchBranchDto.cs
Application/IStation.Application.OpenApi/shys/dispatch/dto/DispatchFactoryDto.cs
Application/IStation.Application.OpenApi/shys/dispatch/dto/DispatchScadaDto.cs
Application/IStation.Application.OpenApi/shys/dispatch/dto/FactoryDispatchInput.cs
Application/IStation.Application.OpenApi/shys/dispatch/dto/StationDispatchExInput.cs
Application/IStation.Application.OpenApi/shys/dispatch/dto/StationDispatchInput.cs
Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,231 @@
using 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.Authorization;
using IStation.Calculation;
using IStation.Calculation.PlanAna;
namespace IStation.Application
{
    /// <summary>
    /// ShysPlanAna
    /// </summary>
    [Route("OpenApi/PlanAna/SHYS")]
    [ApiDescriptionSettings("OpenApi", Name = "上海原水计划分析", Order = 1000)]
    public class PlanAna_ShysController : IDynamicApiController
    {
        private const long _corpId = 4;
        /// <summary>
        /// è®¡ç®—
        /// </summary>
        [AllowAnonymous]
        [NonUnify]
        [Route("Calculate")]
        [HttpPost]
        public List<PlanAnaDto> Calculate([Required] List<PlanAnaInput> inputList)
        {
            if (inputList == null || inputList.Count < 1)
            {
                LogHelper.Error("上海原水能耗计划分析计算接口入参为空");
                return default;
            }
            //debug
            LogHelper.Debug(JsonHelper.Object2Json(inputList));
            var url_sg = Settings.WebApi.OpenApi.SanGaoPlanUrl;
            var responseText = HttpRequestHelper.Post(url_sg, JsonHelper.Object2Json(inputList));
            //debug
            LogHelper.Debug(responseText);
            var planDataList = JsonHelper.Json2Object<List<PlanAnaData>>(responseText);
            if (planDataList == null||planDataList.Count<1)
            {
                LogHelper.Error("上海原水能耗计划分析计算三高返回接口出参为空");
                return default;
            }
            if (planDataList.Exists(x => x.datas == null || x.datas.Count < 1))
            {
                LogHelper.Error("上海原水能耗计划分析计算三高返回接口出参格式错误");
                return default;
            }
            var factoryIds = planDataList.SelectMany(x=>x.datas).Select(x => x.factory).Distinct().ToList();
            var vmList = new List<PlanAnaDto>();
            foreach (var factoryId in factoryIds)
            {
                //构造计算入参
                var sumRecordList = new List<MonthSumRecord>();
                foreach (var planData in planDataList)
                {
                    var sumRecord = new MonthSumRecord();
                    sumRecord.Month = planData.timeflag;
                    sumRecord.HourRecords = new List<HourSumRecord>();
                    var factoryData = planData.datas.Find(t=>t.factory==factoryId);
                    for (int i = 0; i <= 23; i++)
                    {
                        var hourSumRecord = new HourSumRecord();
                        hourSumRecord.Hour = i;
                        hourSumRecord.Records = new List<Calculation.PlanAna.MonitorRecord>();
                        if (factoryData.scada != null && factoryData.scada.Count > 0)
                        {
                            foreach (var scadaItem in factoryData.scada)
                            {
                                var scadaRecord = new Calculation.PlanAna.MonitorRecord();
                                scadaRecord.MonitorId = PlanAnaConstant.MonitorDict[scadaItem.tagname];
                                scadaRecord.RecordValue = scadaItem.values.Find(t => t.datetime.Trim() == PlanAnaConstant.HourDict[i]).value;
                                hourSumRecord.Records.Add(scadaRecord);
                            }
                        }
                        if (factoryData.result != null && factoryData.result.Count > 0)
                        {
                            foreach (var resultItem in factoryData.result)
                            {
                                var resultRecord = new Calculation.PlanAna.MonitorRecord();
                                resultRecord.MonitorId = PlanAnaConstant.MonitorDict[resultItem.tagname];
                                resultRecord.RecordValue = resultItem.values.Find(t => t.datetime.Trim() == PlanAnaConstant.HourDict[i]).value;
                                hourSumRecord.Records.Add(resultRecord);
                            }
                        }
                        sumRecord.HourRecords.Add(hourSumRecord);
                    }
                    sumRecordList.Add(sumRecord);
                }
                //找到相关泵站,并进行计算
                var stationId = PlanAnaConstant.FactoryDict[factoryId];
                var station = new Service.Station().GetByID(_corpId, stationId);
                var calculator = PlanAnaCalculatorFactory.CreateCalculator(_corpId, ObjectType.Station, stationId);
                var resultList = calculator.Calculate(sumRecordList);
                if (resultList == null || resultList.Count < 1)
                {
                    LogHelper.Error($"上海原水能耗计划分析计算中,泵站名称:{station.Name} æ³µç«™id:{stationId},计算错误");
                    continue;
                }
                //生成返回结果
                var vmItem = new PlanAnaDto();
                vmItem.factory = factoryId;
                vmItem.name = station.Name;
                vmItem.values = new List<List<double>>();
                for (int i = 1; i <= 12; i++)
                {
                    var result = resultList.Find(t => t.Month == i);
                    if (result == null)
                    {
                        vmItem.values.Add(new List<double>() { 0, 0, 0 });
                    }
                    else
                    {
                        vmItem.values.Add(new List<double>() {result.Qt,result.Dt,result.WP});
                    }
                }
                vmList.Add(vmItem);
            }
            return vmList;
        }
        /// <summary>
        /// è®¡ç®—-调试
        /// </summary>
        [AllowAnonymous]
        [NonUnify]
        [Route("Calculate@Debug")]
        [HttpPost]
        public List<PlanAnaDto> Calculate_debug()
        {
            var responseText = System.IO.File.ReadAllText(@"D:\result.txt");//(测试用的)
            var planDataList = JsonHelper.Json2Object<List<PlanAnaData>>(responseText);
            var factoryIds = planDataList.SelectMany(x => x.datas).Select(x => x.factory).Distinct().ToList();
            var vmList = new List<PlanAnaDto>();
            foreach (var factoryId in factoryIds)
            {
                //构造计算入参
                var sumRecordList = new List<MonthSumRecord>();
                foreach (var planData in planDataList)
                {
                    var sumRecord = new MonthSumRecord();
                    sumRecord.Month = planData.timeflag;
                    sumRecord.HourRecords = new List<HourSumRecord>();
                    var factoryData = planData.datas.Find(t => t.factory == factoryId);
                    for (int i = 0; i <= 23; i++)
                    {
                        var hourSumRecord = new HourSumRecord();
                        hourSumRecord.Hour = i;
                        hourSumRecord.Records = new List<Calculation.PlanAna.MonitorRecord>();
                        if (factoryData.scada != null && factoryData.scada.Count > 0)
                        {
                            foreach (var scadaItem in factoryData.scada)
                            {
                                var scadaRecord = new Calculation.PlanAna.MonitorRecord();
                                scadaRecord.MonitorId = PlanAnaConstant.MonitorDict[scadaItem.tagname];
                                scadaRecord.RecordValue = scadaItem.values.Find(t => t.datetime.Trim() == PlanAnaConstant.HourDict[i]).value;
                                hourSumRecord.Records.Add(scadaRecord);
                            }
                        }
                        if (factoryData.result != null && factoryData.result.Count > 0)
                        {
                            foreach (var resultItem in factoryData.result)
                            {
                                var resultRecord = new Calculation.PlanAna.MonitorRecord();
                                resultRecord.MonitorId = PlanAnaConstant.MonitorDict[resultItem.tagname];
                                resultRecord.RecordValue = resultItem.values.Find(t => t.datetime.Trim() == PlanAnaConstant.HourDict[i]).value;
                                hourSumRecord.Records.Add(resultRecord);
                            }
                        }
                        sumRecord.HourRecords.Add(hourSumRecord);
                    }
                    sumRecordList.Add(sumRecord);
                }
                //找到相关泵站,并进行计算
                var stationId = PlanAnaConstant.FactoryDict[factoryId];
                var station = new Service.Station().GetByID(_corpId, stationId);
                var calculator = PlanAnaCalculatorFactory.CreateCalculator(_corpId, ObjectType.Station, stationId);
                var resultList = calculator.Calculate(sumRecordList);
                if (resultList == null || resultList.Count < 1)
                {
                    LogHelper.Error($"上海原水能耗计划分析计算中,泵站名称:{station.Name} æ³µç«™id:{stationId},计算错误");
                    continue;
                }
                //生成返回结果
                var vmItem = new PlanAnaDto();
                vmItem.factory = factoryId;
                vmItem.name = station.Name;
                vmItem.values = new List<List<double>>();
                for (int i = 1; i <= 12; i++)
                {
                    var result = resultList.Find(t => t.Month == i);
                    if (result == null)
                    {
                        vmItem.values.Add(new List<double>() { 0, 0, 0 });
                    }
                    else
                    {
                        vmItem.values.Add(new List<double>() { result.Qt, result.Dt, result.WP });
                    }
                }
                vmList.Add(vmItem);
            }
            return vmList;
        }
    }
}
Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Application
{
    /// <summary>
    /// è®¡åˆ’分析常量
    /// </summary>
    public class PlanAnaConstant
    {
        /// <summary>
        /// ç«™ç‚¹å­—å…¸
        /// </summary>
        public static Dictionary<int, long> FactoryDict = new Dictionary<int, long>()
        {
            {1,2},//长兴泵站
            {2,12},//五号沟凌桥方向
            {3,9},//五号沟金海方向
            {4,3},//五号沟严桥方向1
            {5,5},//五号沟严桥方向2
            {6,4},//严桥泵站
            {7,6},//临江1#泵站
            {8,7},//临江2#泵站
            {9,8},//徐泾泵站
            {10,10},//金海泵站
            {11,11},//南汇北泵站
            {12,15},//陈行一输
            {13,16},//陈行二输
            {14,17},//泰和泵站
            {15,19},//金泽泵站
            {16,20},//松江泵站
            {17,21},//大桥泵站
        };
        /// <summary>
        /// æµ‹ç‚¹å­—å…¸
        /// </summary>
        public static Dictionary<string, long> MonitorDict = new Dictionary<string, long>()
        {
            {"_0402010403030103001",69},//青草沙水库液位
            {"_0402010404030103001",70},//青草沙水库吸水井液位-长兴泵站前池液位
            {"_0402010403030002001",73},//长兴泵站输水泵出水管道1流量
            {"_0402010403030002005",72},//长兴泵站输水管道1#压力
            {"_0402010403030002002",77},//长兴泵站输水泵出水管道2流量
            {"_0402010403030002006",76},//长兴泵站输水管道2#压力
        };
        /// <summary>
        /// æ—¶å­—å…¸
        /// </summary>
        public static Dictionary<int,string> HourDict = new Dictionary<int,string>()
        {
            { 0,"00:00"},
            { 1,"01:00"},
            { 2,"02:00"},
            { 3,"03:00"},
            { 4,"04:00"},
            { 5,"05:00"},
            { 6,"06:00"},
            { 7,"07:00"},
            { 8,"08:00"},
            { 9,"09:00"},
            { 10,"10:00"},
            { 11,"11:00"},
            { 12,"12:00"},
            { 13,"13:00"},
            { 14,"14:00"},
            { 15,"15:00"},
            { 16,"16:00"},
            { 17,"17:00"},
            { 18,"18:00"},
            { 19,"19:00"},
            { 20,"20:00"},
            { 21,"21:00"},
            { 22,"22:00"},
            { 23,"23:00"}
        };
    }
}
Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Application
{
    /// <summary>
    /// è®¡åˆ’分析dto
    /// </summary>
    public class PlanAnaDto
    {
        /// <summary>
        /// ç«™ç‚¹
        /// </summary>
        public int factory { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 12个月数据数组[供水量,耗电量,千吨水能耗]
        /// </summary>
        public List<List<double>> values { get; set; }
    }
}
Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Application
{
    /// <summary>
    /// èƒ½è€—计划水量输入
    /// </summary>
    public class PlanAnaInput
    {
        /// <summary>
        /// ç«™ç‚¹
        /// </summary>
        public int factory { get; set; }
        /// <summary>
        /// æœˆä»½åˆ—表
        /// </summary>
        public List<int> value { get; set; }
    }
}
Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaTransfer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Application
{
    /// <summary>
    /// æ—¶å€¼
    /// </summary>
    public class PlanAnaHourValue
    {
        /// <summary>
        /// 00:00-23:00
        /// </summary>
        public string datetime { get; set; }
        /// <summary>
        /// å€¼
        /// </summary>
        public double value { get; set; }
    }
    /// <summary>
    /// æ ‡ç­¾æ—¶å€¼åˆ—表
    /// </summary>
    public class PlanAnaTagHourValues
    {
        /// <summary>
        /// æ ‡ç­¾åç§°
        /// </summary>
        public string tagname { get; set; }
        /// <summary>
        /// å€¼åˆ—表
        /// </summary>
        public List<PlanAnaHourValue> values { get; set; }
    }
    /// <summary>
    /// ç«™ç‚¹æ•°æ®
    /// </summary>
    public class PlanAnaFactoryData
    {
        /// <summary>
        /// ç«™ç‚¹
        /// </summary>
        public int factory { get; set; }
        /// <summary>
        /// ç»“æžœ
        /// </summary>
        public List<PlanAnaTagHourValues> result { get; set; }
        /// <summary>
        /// å®žæ—¶
        /// </summary>
        public List<PlanAnaTagHourValues> scada { get; set; }
    }
    /// <summary>
    /// æ•°æ®
    /// </summary>
    public class PlanAnaData
    {
        /// <summary>
        /// æœˆä»½æ ‡å¿— 1-12
        /// </summary>
        public int timeflag { get; set; }
        /// <summary>
        /// æ•°æ®
        /// </summary>
        public List<PlanAnaFactoryData> datas { get; set; }
    }
}
Calculation/IStation.Calculation.Plan/IPlanAnaCalculator.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IStation.Calculation.PlanAna;
namespace IStation.Calculation
{
    /// <summary>
    /// è®¡åˆ’分析计算器接口
    /// </summary>
    public interface IPlanAnaCalculator
    {
        /// <summary>
        ///
        /// </summary>
        List<MonthCalcuResult> Calculate(List<MonthSumRecord> monthRecordList);
    }
}
Calculation/IStation.Calculation.Plan/IStation.Calculation.Plan.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>disable</Nullable>
    <AssemblyName>IStation.Calculation.Plan</AssemblyName>
    <RootNamespace>IStation.Calculation.PlanAna</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\..\Core\IStation.Core\IStation.Core.csproj" />
  </ItemGroup>
</Project>
Calculation/IStation.Calculation.Plan/PlanAnaCalculatorFactory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
using IStation.Calculation.PlanAna;
namespace IStation.Calculation
{
    public class PlanAnaCalculatorFactory
    {
        /// <summary>
        /// åˆ›å»ºè®¡ç®—器
        /// </summary>
        public static IPlanAnaCalculator CreateCalculator(long corpId, string objectType, long objectId)
        {
            IPlanAnaCalculator calculator = null;
            switch (objectType)
            {
                case ObjectType.Station:
                    {
                        switch (corpId)
                        {
                            case 4:
                                {
                                    switch (objectId)
                                    {
                                        case 2: //长兴泵站
                                            {
                                                calculator = new Calculator4ShysCxbz();
                                            }
                                            break;
                                        default:break;
                                    }
                                }
                                break;
                            default:break;
                        }
                    }
                    break;
                default:break;
            }
            return calculator;
        }
    }
}
Calculation/IStation.Calculation.Plan/custom/shys/station/Cxbz.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Calculation.PlanAna
{
    /// <summary>
    /// é•¿å…´å²›è®¡ç®—
    /// </summary>
    public class Calculator4ShysCxbz : IPlanAnaCalculator
    {
        /// <summary>
        /// è®¡ç®—
        /// </summary>
        public List<MonthCalcuResult> Calculate(List<MonthSumRecord> monthRecordList)
        {
            throw new NotImplementedException();
        }
    }
}
Calculation/IStation.Calculation.Plan/input/HourSumRecord.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Calculation.PlanAna
{
    /// <summary>
    /// æ—¶æ±‡æ€»è®°å½•
    /// </summary>
    public class HourSumRecord
    {
        /// <summary>
        /// 0-23
        /// </summary>
        public int Hour { get; set; }
        /// <summary>
        /// è®°å½•
        /// </summary>
        public List<MonitorRecord> Records { get; set; }
    }
}
Calculation/IStation.Calculation.Plan/input/MonitorRecord.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Calculation.PlanAna
{
    /// <summary>
    /// ç›‘测值
    /// </summary>
    public class MonitorRecord
    {
        /// <summary>
        /// ç›‘测id
        /// </summary>
        public long MonitorId { get; set; }
        /// <summary>
        /// è®°å½•值
        /// </summary>
        public double RecordValue { get; set; }
    }
}
Calculation/IStation.Calculation.Plan/input/MonthSumRecord.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Calculation.PlanAna
{
    /// <summary>
    /// æœˆæ±‡æ€»è®°å½•
    /// </summary>
    public class MonthSumRecord
    {
        /// <summary>
        /// æœˆä»½ 1-12
        /// </summary>
        public int Month { get; set; }
        /// <summary>
        /// è®°å½•列表
        /// </summary>
        public List<HourSumRecord> HourRecords { get; set; }
    }
}
Calculation/IStation.Calculation.Plan/output/MonthCalcuResult.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Calculation.PlanAna
{
    /// <summary>
    /// æœˆè®¡ç®—结果
    /// </summary>
    public class MonthCalcuResult
    {
        /// <summary>
        /// æœˆä»½ 1-12
        /// </summary>
        public int Month { get; set; }
        /// <summary>
        /// ä¾›æ°´é‡ m³
        /// </summary>
        public double Qt { get; set; }
        /// <summary>
        /// è€—电量 kw
        /// </summary>
        public double Dt { get; set; }
        /// <summary>
        /// åƒå¨èƒ½è€—
        /// </summary>
        public double WP { get; set; }
    }
}
IStation.sln
@@ -401,19 +401,21 @@
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}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IStation.Calculation.Plan", "Calculation\IStation.Calculation.Plan\IStation.Calculation.Plan.csproj", "{F0F2A953-B00C-4B1C-8A3E-A866F0AA55B5}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -1161,6 +1163,10 @@
        {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
        {F0F2A953-B00C-4B1C-8A3E-A866F0AA55B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {F0F2A953-B00C-4B1C-8A3E-A866F0AA55B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {F0F2A953-B00C-4B1C-8A3E-A866F0AA55B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {F0F2A953-B00C-4B1C-8A3E-A866F0AA55B5}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
@@ -1351,6 +1357,7 @@
        {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}
        {F0F2A953-B00C-4B1C-8A3E-A866F0AA55B5} = {B1548C2C-C3C2-47C0-8F6E-B265D0603099}
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {18D1EA07-81E5-4443-8512-F303BC79DCF4}
Settings/IStation.Settings/models/webapi/Paras_WebApi_OpenApi.cs
@@ -15,5 +15,10 @@
        /// ä¸‰é«˜è°ƒåº¦æŽ¥å£
        /// </summary>
        public string SanGaoDispatchUrl { get; set; }
        /// <summary>
        /// ä¸‰é«˜è°ƒåº¦æŽ¥å£
        /// </summary>
        public string SanGaoPlanUrl { get; set; }
    }
}
Settings/IStation.Settings/paras_settings.json
@@ -229,7 +229,8 @@
  "WebApi": {
    "EnableJwt": false,
    "OpenApi": {
      "SanGaoDispatchUrl": "http://192.168.60.228:8821/Api/wsmp/v1/Chengtou/factoryCalc"
      "SanGaoDispatchUrl": "http://192.168.60.228:8821/Api/wsmp/v1/Chengtou/factoryCalc",
      "SanGaoPlanUrl": "http://192.168.60.228:8821/Api/wsmp/v1/Chengtou/factoryCalc_New"
    }
  },