| | |
| | | using IStation.Untity; |
| | | using Furion.DynamicApiController; |
| | | using System.ComponentModel.DataAnnotations; |
| | | using Mapster; |
| | | using Microsoft.AspNetCore.Authorization; |
| | | using IStation.Calculation; |
| | | using IStation.Calculation.PlanAna; |
| | | using IStation.Dto; |
| | | |
| | | namespace IStation.Application |
| | | { |
| | |
| | | LogHelper.Debug(responseText); |
| | | |
| | | var planDataList = JsonHelper.Json2Object<List<PlanAnaData>>(responseText); |
| | | if (planDataList == null||planDataList.Count<1) |
| | | return CalculateCore(planDataList); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 计算-调试 |
| | | /// </summary> |
| | | [AllowAnonymous] |
| | | [NonUnify] |
| | | [Route("Calculate@Debug")] |
| | | [HttpGet] |
| | | public List<PlanAnaDto> Calculate_debug() |
| | | { |
| | | var responseText = System.IO.File.ReadAllText(@"E:\WorkData\IStation\result.txt");//(测试用的) |
| | | var planDataList = JsonHelper.Json2Object<List<PlanAnaData>>(responseText); |
| | | return CalculateCore(planDataList); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 分析核心 |
| | | /// </summary> |
| | | /// <param name="planDataList"></param> |
| | | /// <returns></returns> |
| | | private List<PlanAnaDto> CalculateCore(List<PlanAnaData> planDataList) |
| | | { |
| | | if (planDataList == null || planDataList.Count < 1) |
| | | { |
| | | LogHelper.Error("上海原水能耗计划分析计算三高返回接口出参为空"); |
| | | return default; |
| | |
| | | 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) |
| | | { |
| | | //找到相关泵站,并进行计算 |
| | | if (!PlanAnaConstant.FactoryDict.ContainsKey(factoryId)) |
| | | { |
| | | LogHelper.Error("未找到id:{factoryId},对应的泵站"); |
| | | return default; |
| | | } |
| | | var stationId = PlanAnaConstant.FactoryDict[factoryId]; |
| | | var station = new Service.Station().GetByID(_corpId, stationId); |
| | | if (station == null) |
| | | { |
| | | LogHelper.Error($"上海原水能耗计划分析计算中, 泵站id:{stationId}, 数据库中未找到此泵站"); |
| | | continue; |
| | | } |
| | | var calculator = PlanAnaCalculatorFactory.CreateCalculator(_corpId, ObjectType.Station, stationId); |
| | | if (calculator == null) |
| | | { |
| | | LogHelper.Error($"上海原水能耗计划分析计算中, 泵站id:{stationId}, 未构建计算器"); |
| | | continue; |
| | | } |
| | | //构造计算入参 |
| | | var sumRecordList = new List<MonthSumRecord>(); |
| | | foreach (var planData in planDataList) |
| | |
| | | { |
| | | var hourSumRecord = new HourSumRecord(); |
| | | hourSumRecord.Hour = i; |
| | | hourSumRecord.Records = new List<Calculation.PlanAna.MonitorRecord>(); |
| | | hourSumRecord.Records = new List<Dto.MonitorRecord4SG>(); |
| | | 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; |
| | | var scadaRecord = new Dto.MonitorRecord4SG(); |
| | | scadaRecord.MonitorTag = scadaItem.tagname ; |
| | | var ff = scadaItem.values.Find(t => t.GetHour() == i ); |
| | | if(ff == null) |
| | | { |
| | | LogHelper.Error($"上海原水能耗计划分析计算中, 泵站id:{stationId}, {scadaItem.tagname} 时间点{i}, 未找到数据" ); |
| | | return default; |
| | | } |
| | | scadaRecord.RecordValue = ff.value; |
| | | hourSumRecord.Records.Add(scadaRecord); |
| | | } |
| | | } |
| | |
| | | { |
| | | 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; |
| | | var resultRecord = new Dto.MonitorRecord4SG(); |
| | | resultRecord.MonitorTag = resultItem.tagname;// PlanAnaConstant.MonitorDict[resultItem.tagname]; |
| | | resultRecord.RecordValue = resultItem.values.Find(t => t.GetHour() == i).value; |
| | | hourSumRecord.Records.Add(resultRecord); |
| | | } |
| | | } |
| | |
| | | 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) |
| | | string error_info=""; |
| | | var resultList = calculator.Calc(station, factoryId, sumRecordList, out error_info); |
| | | if (resultList == null || resultList.Count() < 1) |
| | | { |
| | | LogHelper.Error($"上海原水能耗计划分析计算中,泵站名称:{station.Name} 泵站id:{stationId},计算错误"); |
| | | LogHelper.Error($"上海原水能耗计划分析计算中,泵站名称:{station.Name} 泵站id:{stationId},计算错误,原因是:{error_info}" ); |
| | | continue; |
| | | } |
| | | |