namespace IStation.Application
{
///
/// 输水调度
///
[AllowAnonymous]
[Route("Standard/Dispatch/Solution")]
[ApiDescriptionSettings("Schedule", Name = "调度", Order = 1000)]
public class Schedule_Std_Controller : IDynamicApiController, ITransient
{
private readonly Service.ScheduleRequest _service_schedule_request = new();
private readonly Service.ScheduleScada _service_schedule_scada = new();
private readonly Service.ScheduleConclusion _service_schedule_conclusion = new();
private readonly Service.SchedulePump _service_schedule_pump = new();
///
/// 调度
///
[AllowAnonymous]
[Route("GetLast")]
[HttpGet]
[NonUnify]
public OptScheduleOutput GetLast()
{
var last_request = _service_schedule_request.GetAll()?.LastOrDefault();
if (last_request == null)
{
return default;
}
var request_id = last_request.ID;
var conclusion_list = _service_schedule_conclusion.GetByRequestID(request_id);
var pump_list = _service_schedule_pump.GetByRequestID(request_id);
var scada_list = _service_schedule_scada.GetByRequestID(request_id);
var opt = new OptScheduleOutput();
opt.ID = request_id;
opt.TargetFlow1 = last_request.TargetFlow1;
opt.TargetPressure1 = last_request.TargetPressure1;
opt.TargetFlow2 = last_request.TargetFlow2;
opt.TargetPressure2 = last_request.TargetPressure2;
opt.ScheduleStatus1 = last_request.ScheduleStatus1;
opt.ScheduleStatus2 = last_request.ScheduleStatus2;
opt.TotalTimeSpent = last_request.TotalTimeSpent;
opt.ReceptionTime = last_request.ReceptionTime;
if (pump_list != null && pump_list.Any())
{
opt.Pumps = new List();
foreach (var item in pump_list)
{
var pump = new OptSchedulePumpOutput();
pump.RequestID = item.RequestID;
pump.Station = (int)item.Station;
pump.Flag = item.Flag;
pump.Flow = item.Flow;
pump.Head = item.Head;
pump.PressureDiff = item.PressureDiff;
pump.Power = item.Power;
pump.Efficiency = item.Efficiency;
pump.Hz = item.Hz;
pump.Rpm = item.Rpm;
opt.Pumps.Add(pump);
}
}
if (scada_list != null && scada_list.Any())
{
opt.Scadas = new List();
foreach (var item in scada_list)
{
var scada = new OptScheduleScadaOutput();
scada.RequestID = item.RequestID;
scada.DataCode = item.DataCode;
scada.DataTime = item.DataTime;
scada.ReceiptTime = item.ReceiptTime;
scada.DataValue = item.DataValue;
opt.Scadas.Add(scada);
}
}
if (conclusion_list != null && conclusion_list.Any())
{
opt.Conclusions = new List();
foreach (var item in conclusion_list)
{
var cl = new OptScheduleConclusionOutput();
cl.RequestID = item.RequestID;
cl.Station = (int)item.Station;
cl.TotalFlow = item.TotalFlow;
cl.TotalPressure = item.TotalPressure;
cl.TotalPower = item.TotalPower;
cl.TotalEfficiency = item.TotalEfficiency;
cl.WP = item.WP;
cl.UWP = item.UWP;
cl.Flags = item.Flags;
cl.MeritRatio = item.MeritRatio;
opt.Conclusions.Add(cl);
}
}
return opt;
}
}
}