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;
|
}
|
|
|
|
|
|
|
|
|
|
|
}
|
}
|