From 05f522e321a742f03bf1e3e26edaeb5147da42f4 Mon Sep 17 00:00:00 2001 From: tangxu <76880903@qq.com> Date: 星期三, 02 十一月 2022 16:18:47 +0800 Subject: [PATCH] 解决南汇北 计划计算 --- Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs | 212 ++++++++++++++++++++++++++++++++--------------------- 1 files changed, 128 insertions(+), 84 deletions(-) diff --git a/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs b/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs index 48a5b3a..256f1b2 100644 --- a/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs +++ b/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs @@ -9,6 +9,8 @@ using Microsoft.AspNetCore.Authorization; using IStation.Calculation; using IStation.Dto; +using System.Collections.Generic; +using Mapster; namespace IStation.Application { @@ -56,117 +58,159 @@ [HttpGet] public List<PlanAnaDto> Calculate_debug() { - var responseText = System.IO.File.ReadAllText(@"E:\WorkData\IStation\result.txt");//(娴嬭瘯鐢ㄧ殑) + var path = @"D:\WorkData\IStation\result_1102.json"; + if (!System.IO.File.Exists(path)) + return null; + + var responseText = System.IO.File.ReadAllText(path);//(娴嬭瘯鐢ㄧ殑) var planDataList = JsonHelper.Json2Object<List<PlanAnaData>>(responseText); - return CalculateCore(planDataList); + + var ret = CalculateCore(planDataList ); + + return ret; } - + /// <summary> /// 鍒嗘瀽鏍稿績 /// </summary> /// <param name="planDataList"></param> /// <returns></returns> - private List<PlanAnaDto> CalculateCore(List<PlanAnaData> planDataList) + private List<PlanAnaDto> CalculateCore(List<PlanAnaData> planDataList ) { if (planDataList == null || planDataList.Count < 1) - { + { LogHelper.Error("涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾笁楂樿繑鍥炴帴鍙e嚭鍙備负绌�"); return default; } if (planDataList.Exists(x => x.datas == null || x.datas.Count < 1)) - { + { LogHelper.Error("涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾笁楂樿繑鍥炴帴鍙e嚭鍙傛牸寮忛敊璇�"); return default; } - var factoryIds = planDataList.SelectMany(x => x.datas).Select(x => x.factory).Distinct().ToList(); + var sg_factoryIds = planDataList.SelectMany(x => x.datas).Select(x => x.factory).Distinct().ToList(); var vmList = new List<PlanAnaDto>(); - foreach (var factoryId in factoryIds) + + + foreach (var sg_factoryId in sg_factoryIds) { - //鎵惧埌鐩稿叧娉电珯锛屽苟杩涜璁$畻 - if (!PlanAnaConstant.FactoryDict.ContainsKey(factoryId)) + string error_info; + var vmItem = Ana(planDataList, sg_factoryId,out error_info); + if (vmItem != null) { - LogHelper.Error("鏈壘鍒癷d:{factoryId},瀵瑰簲鐨勬车绔�"); - return default; - } - var stationId = PlanAnaConstant.FactoryDict[factoryId]; - var station = new Service.Station().GetByID(_corpId, stationId); - if (station == null) + vmList.Add(vmItem); + } + else { - LogHelper.Error($"涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾腑锛� 娉电珯id:{stationId}, 鏁版嵁搴撲腑鏈壘鍒版娉电珯"); - continue; + vmList.Add(new PlanAnaDto() { factory=sg_factoryId, name="", Error = error_info }); } - 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 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<Dto.MonitorRecord4SG>(); - if (factoryData.scada != null && factoryData.scada.Count > 0) - { - foreach (var scadaItem in factoryData.scada) - { - 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); - } - } - sumRecord.HourRecords.Add(hourSumRecord); - } - sumRecordList.Add(sumRecord); - } - - 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},璁$畻閿欒,鍘熷洜鏄�:{error_info}" ); - 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; } + private PlanAnaDto Ana(List<PlanAnaData> planDataList, int sg_factoryId, out string error_info) + { + //鎵惧埌鐩稿叧娉电珯锛屽苟杩涜璁$畻 + var stationInfo = ShysPlanHelper.GetStationInfo(sg_factoryId); + if (stationInfo == null) + { + error_info = "鏈壘鍒癷d:{factoryId},瀵瑰簲鐨勬车绔�" ; + return null; + } + var stationId = stationInfo.ID; + var station = new Service.Station().GetByID(_corpId, stationId); + if (station == null) + { + error_info = $"娉电珯id:{stationId}, 鏁版嵁搴撲腑鏈壘鍒版娉电珯" ; + return null; + } + var calculator = stationInfo.Calculator; + if (calculator == null) + { + error_info = $"娉电珯id:{stationId}, 鏈瀯寤鸿绠楀櫒" ; + return null; + } + calculator.SetStationID(_corpId, stationInfo.ID);//璁剧疆ID + + //鏋勯�犺绠楀叆鍙� + 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 == sg_factoryId); + for (int i = 0; i <= 23; i++) + { + var hourSumRecord = new HourSumRecord(); + hourSumRecord.Hour = i; + hourSumRecord.Records = new List<Dto.MonitorRecord4SG>(); + if (factoryData.scada != null && factoryData.scada.Count > 0) + { + foreach (var scadaItem in factoryData.scada) + { + var scadaRecord = new Dto.MonitorRecord4SG(); + scadaRecord.MonitorTag = scadaItem.tagname; + var ff = scadaItem.values.Find(t => t.GetHour() == i); + if (ff == null) + { + if (calculator.IsIgnoreAble(scadaItem.tagname)) + { + scadaRecord.RecordValue = 0; + } + //else if (calculator.Is娑蹭綅Monitor(scadaItem.tagname)) + //{ + // scadaRecord.RecordValue = 0; + //} + else + { + error_info = $"factoryId:{sg_factoryId}, 娉电珯id:{stationId}, 娴嬭瘯tag:{scadaItem.tagname} ,娴嬬偣鍚嶇О{calculator.GetMonitorNameByTag(scadaItem.tagname)},鏃堕棿鐐箋i}, 鏈壘鍒板搴旀暟鎹�" ; + return null; + } + } + else + { + scadaRecord.RecordValue = ff.value; + } + + hourSumRecord.Records.Add(scadaRecord); + } + } + sumRecord.HourRecords.Add(hourSumRecord); + } + sumRecordList.Add(sumRecord); + } + + string ana_error_info = ""; + var resultList = calculator.Calc(station, sg_factoryId, sumRecordList, out ana_error_info); + if (resultList == null || resultList.Count() < 1) + { + error_info = $"娉电珯鍚嶇О:{station.Name} 娉电珯id:{stationId},鍘熷洜鏄�:{ana_error_info}"; + LogHelper.Error("涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾腑 factoryId:{sg_factoryId},锛�" + error_info); + return null; + } + + //鐢熸垚杩斿洖缁撴灉 + var vmItem = new PlanAnaDto(); + vmItem.factory = sg_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 }); + } + } + error_info = null; + return vmItem; + } -- Gitblit v1.9.3