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