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 System.Text; using IStation.Calculation.Epanet; namespace IStation.Application { /// /// 调度分析(标准版,简易版) /// [Route("Dispatch/ParallelConnectAnaly/Std")] [NonUnify] [ApiDescriptionSettings("Eta", Name = "并联运行分析", Order = 595)] public class ParallelConnect_StdController : IDynamicApiController { /// /// 根据扬程计算并联后的流量 /// /// [Route("CalcFlowByHead@V1.0")] [HttpGet] public IStation.Dto.ApiResult CalcFlowByHead(IStation.Dto.ParallelConnectCalcByHeadInput Request) { if (Request.CorpID <= 0) { return new IStation.Dto.ApiResult(IStation.Dto.ApiResultCode.Error, "CorpID为空"); } if (Request.StationID <= 0) { return new IStation.Dto.ApiResult(IStation.Dto.ApiResultCode.Error, "StationID为空"); } if (Request.Head <= 0) { return new IStation.Dto.ApiResult(IStation.Dto.ApiResultCode.Error, "Head为空"); } IStation.Service.PumpCurve bllCurve = new IStation.Service.PumpCurve(); IStation.Service.Product bllProduct = new IStation.Service.Product(); List curveListQH = new List(); List curveListQP = new List(); double r_maxH = double.MaxValue, r_minH = double.MinValue; List ParallelCurve = new List(); foreach (var s in Request.MachineList) { if (s == null) continue; var frequence = s.Frequence; if (frequence < 10 || frequence > 55) continue; var machineID = s.MachineID; var product = bllProduct.GetByID(Request.CorpID, machineID); if (product == null) continue; var pump = bllProduct.GetChildPumpByEnginePumpID(Request.CorpID, machineID); if (pump == null) continue; var curve_default = bllCurve.GetDefaultWorkingByPumpID(Request.CorpID, pump.ID); //.GetDefaultCurveByPumpID(CorpID, pumpID); if (curve_default == null) continue; if (curve_default.CurveInfo == null) continue; if (frequence > 49.5) { var curve_qh = curve_default.CurveInfo.CurveQH; curve_qh.Max = curve_qh.Max * IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper压力.ExtendMaxRatio; curveListQH.Add(curve_qh); var curve_qp = curve_default.CurveInfo.CurveQP; curve_qp.Max = curve_qp.Max * IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper压力.ExtendMaxRatio; curveListQP.Add(curve_qp); } else { var ration = frequence / 50.0; var maxCurveQH = IStation.Model.FitCurveHelper.GetFitPointsByExtend(curve_default.CurveInfo.CurveQH, IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper压力.ExtendMaxRatio, 20); var maxCurveQP = IStation.Model.FitCurveHelper.GetFitPointsByExtend(curve_default.CurveInfo.CurveQP, IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper压力.ExtendMaxRatio, 20); List simuPointsQH = new List(); foreach (var pt in maxCurveQH) { simuPointsQH.Add(new IStation.Model.CurvePoint(pt.X * ration, pt.Y * ration * ration)); } List simuPointsQP = new List(); foreach (var pt in maxCurveQP) { simuPointsQP.Add(new IStation.Model.CurvePoint(pt.X * ration, pt.Y * ration * ration * ration)); } curveListQH.Add(new IStation.Model.CurveExpress(simuPointsQH)); curveListQP.Add(new IStation.Model.CurveExpress(simuPointsQP)); } double maxH, minH; IStation.Model.FitCurveHelper.GetMinMaxPointY(curveListQH.Last(), out maxH, out minH); r_maxH = Math.Min(r_maxH, maxH); r_minH = Math.Max(r_minH, minH); } if (curveListQH.Count < 1) { return new IStation.Dto.ApiResult(IStation.Dto.ApiResultCode.Alert, "不适合并联1"); } if (r_maxH < r_minH) { return new IStation.Dto.ApiResult(IStation.Dto.ApiResultCode.Alert, "不适合并联2"); } double space_h = (r_maxH - r_minH) / 19; List conne_curve_qp = new List(); List conne_curve_qh = new List(); for (var h = r_minH; h <= r_maxH; h = h + space_h) { double total_flow = 0; double total_power = 0; for (int j = 0; j < curveListQH.Count; j++) { var curveQH = curveListQH[j]; var curveQP = curveListQP[j]; var pts = IStation.Model.FitCurveHelper.GetInterPointX(curveQH, h); if (pts != null && pts.Count > 0) { var q = pts.Last().X; total_flow += q; total_power += IStation.Model.FitCurveHelper.GetFitPointY(curveQP, q); } } conne_curve_qh.Add(new IStation.Model.CurvePoint(total_flow, h)); conne_curve_qp.Add(new IStation.Model.CurvePoint(total_flow, total_power)); } var sectPointQHs = IStation.Model.FitCurveHelper.GetInterPointX(conne_curve_qh, Request.Head); if (sectPointQHs == null || sectPointQHs.Count == 0) { return new IStation.Dto.ApiResult(IStation.Dto.ApiResultCode.Alert, "不适合并联3"); } var sect_q = sectPointQHs.Last().X; return new IStation.Dto.ApiResult(IStation.Dto.ApiResultCode.Success, String.Format("流量为:{0}", Math.Round(sect_q, 1))); } /// /// Epanet测试 /// /// [Route("EpanetDebug@V1.0")] [HttpGet] public IStation.Dto.ApiResult EpanetDebug() { var str = new StringBuilder(); try { //方法1 //var item = new EpanetMethod1ContextItem(); //item.Level = 2.697; //item.Flow1 = 3011; //item.Flow2 = 6; //item.Hz1 = 33; //item.Hz2 = 0; //item.Hz3 = 0; //item.Hz4 = 32; //var helper = new CalcCxd2(); //var list = helper.CalcuPressByLevelAndFlow(item); //var json = JsonHelper.Object2Json(list); //str.AppendLine(json); //方法2 //var item = new EpanetMethod2ContextItem(); //item.Level = 2.697; //item.Press1 = IStation.Formula.CalcuHelper.Mpa2M(0.1124); //item.Press2 = IStation.Formula.CalcuHelper.Mpa2M(0.1199); //item.Hz1 = 33; //item.Hz2 = 0; //item.Hz3 = 0; //item.Hz4 = 32; //var helper = new CalcCxd(); //var list = helper.CalcuFlowByPressAndPumpStatus(item); //var json = JsonHelper.Object2Json(list); //str.AppendLine(json); //方法3 var item = new EpanetMethod3ContextItem(); item.Level = 2.558; item.Flow1 = 2573; item.Flow2 = 0; item.Press1 = 2.929; item.Press2 = 0; item.RunStatus2 = false; item.RunStatus3 = false; var helper = new CalcCxd2(); var list = helper.CalcuPumpStatusByFlowAndPress(item); var json = JsonHelper.Object2Json(list); str.AppendLine(json); } catch (Exception e) { str.AppendLine("输入错误" + e.ToString()); } return new IStation.Dto.ApiResult(IStation.Dto.ApiResultCode.Success, str.ToString()); } } }