namespace Yw.Application { /// /// CurveTool /// [Route("Curve/Tool")] [ApiDescriptionSettings("Curve", Name = "曲线工具", Order = 1000)] public partial class CurveTool_Controller : IDynamicApiController { /// /// 生成拟合点列表 /// [Route("GeneralFitPointList@V1.0")] [HttpPost] public List GeneralFitPointList([Required] CurveExpressToolInput input) { var fitHelper = new FitHelper(input.DefinePoints, input.FitType); var pointNumber = ConfigHelper.PointNumber; if (input.PointNumber.HasValue) { pointNumber = input.PointNumber.Value; } var list = fitHelper.GetFitPoints(pointNumber); return list; } /// /// 生成泵拟合点列表 /// [Route("GeneralPumpFitPointList@V1.0")] [HttpPost] public PumpCurveExpressToolOutput GeneralPumpFitPointList([Required] PumpCurveExpressToolInput input) { var vm = new PumpCurveExpressToolOutput(); //扬程 var pointNumberQH = ConfigHelper.PointNumber; if (input.PointNumberQH.HasValue) { pointNumberQH = input.PointNumberQH.Value; } var pointListQH = input.DefinePoints.Select(x => new CurvePoint(x.Q, x.H)).ToList(); var fitHelperQH = new FitHelper(pointListQH, input.FitTypeQH); vm.PointListQH = fitHelperQH.GetFitPoints(pointNumberQH); //功率 var hasQP = false; var pointNumberQP = ConfigHelper.PointNumber; if (input.PointNumberQP.HasValue) { pointNumberQP = input.PointNumberQP.Value; } var pointListQP = input.DefinePoints.Where(x => x.P.HasValue).Select(x => new CurvePoint(x.Q, x.P.Value)).ToList(); if (pointListQP != null && pointListQP.Count > 3) { var fitPowQP = FitHelper.GetFitPow(input.FitTypeQP); if (pointListQP.Count > fitPowQP) { var fitHelperQP = new FitHelper(pointListQP, input.FitTypeQP); vm.PointListQP = fitHelperQP.GetFitPoints(pointNumberQP); hasQP = true; } } //效率 var hasQE = false; var pointNumberQE = ConfigHelper.PointNumber; if (input.PointNumberQE.HasValue) { pointNumberQE = input.PointNumberQE.Value; } var pointListQE = input.DefinePoints.Where(x => x.E.HasValue).Select(x => new CurvePoint(x.Q, x.E.Value)).ToList(); if (pointListQE != null && pointListQE.Count > 3) { var fitPowQE = FitHelper.GetFitPow(input.FitTypeQE); if (pointListQE.Count > fitPowQE) { var fitHelperQE = new FitHelper(pointListQE, input.FitTypeQE); vm.PointListQE = fitHelperQE.GetFitPoints(pointNumberQE); hasQE = true; } } if (!hasQP && hasQE) { pointListQP = new List(); foreach (var item in pointListQE) { var pointQH = pointListQH.Find(x => x.X == item.X); var p = Yw.Calculation.PumpCalcuHelper.CalculateP(pointQH.X, pointQH.Y, item.Y); pointListQP.Add(new CurvePoint(item.X, p)); } var fitHelperQP = new FitHelper(pointListQP, input.FitTypeQE); vm.PointListQP = fitHelperQP.GetFitPoints(pointNumberQP); } else if (hasQP && !hasQE) { pointListQE = new List(); foreach (var item in pointListQP) { var pointQH = pointListQH.Find(x => x.X == item.X); var e = Yw.Calculation.PumpCalcuHelper.CalculateE(pointQH.X, pointQH.Y, item.Y); pointListQE.Add(new CurvePoint(item.X, e)); } var fitHelperQE = new FitHelper(pointListQE, input.FitTypeQP); vm.PointListQE = fitHelperQE.GetFitPoints(pointNumberQE); } return vm; } } }