using System.Linq;
using System.Collections.Generic;
using SHJX.Service.Model.Dao;
using SHJX.Service.Common.ReadXML;
using SHJX.Service.Control.Interface;
namespace SHJX.Service.Control.TimerControl.ChangeTaskState
{
public class CalibrationChangeState : ChangeTaskStateImp
{
public CalibrationChangeState(ReadConfigUtil config) : base(config)
{ }
#region ChangeTaskState
public override void ChangeEquipmentTaskStateEvent()
{
//如果没有状态为新建的任务,则返回不做处理
if (!DataManager.GetTaskByStateNew("BD")) return;
//Tip:这里有任务优先级,一般来说,如果有比当前优先级高的
if (DataManager.CheckTaskByPriority(400)) return;
ChangeTaskStateEvent();
}
private void ChangeTaskStateEvent(int routeId = 1)
{
switch (routeId)
{
case 8:
CheckBdRouteIsTitration(routeId);
break;
case 5:
CheckRouteIsStir(routeId);
break;
default:
CheckBdRouteOthers(routeId);
break;
}
}
///
/// 检查搅拌任务
///
///
///
private void CheckRouteIsStir(int routeId)
{
var tasks = DataManager.GetBdTaskByRouteId(routeId);
var taskDoing = tasks.Where(item => item.Status.Equals(TaskState.Doing)).ToList();
var nextRouteId = routeId + 1;
var tasksNext = DataManager.GetBdTaskByRouteId(nextRouteId);
if (tasks.Any(item => item.Status is TaskState.New /* or TaskState.Doing*/)
&& !taskDoing.Any()
&& !tasksNext.Any())
{
var task = tasks.FirstOrDefault(item => item.Status.Equals(TaskState.New));
if (task is null) return;
ChangeTaskState(new List() { task });
}
else
{
ChangeTaskStateEvent(++routeId);
}
}
///
/// 检查标定路由的滴定任务
///
///
private void CheckBdRouteIsTitration(int routeId)
{
if (DataManager.CheckSampleTask()) return;
var tasks = DataManager.GetBdTaskByRouteId(routeId);
var tasksNext = DataManager.GetBdTaskByRouteId(routeId + 1);
if (tasks.Any(item => item.Status is TaskState.New or TaskState.Doing) && !tasksNext.Any()
&& !tasks.Any(item => item.Status.Equals(TaskState.Doing))
&& DataManager.CheckElseBdRouteId(routeId))
{
var taskIsNew = tasks.Any(item => item.Status.Equals(TaskState.New));
if (!taskIsNew) return;
var task = tasks.FirstOrDefault(item => item.Status.Equals(TaskState.New));
ChangeTaskState(new List() { task });
}
else
{
ChangeTaskStateEvent(++routeId);
}
}
private void CheckBdRouteOthers(int routeId)
{
var tasks = DataManager.GetBdTaskByRouteId(routeId);
var res = DataManager.GetLessThanRouteId(routeId);
if (tasks.Any() && !res)
{
var defaultTasks = tasks.Where(item => item.Status.Equals(TaskState.New)).ToList();
if (defaultTasks.Any()) ChangeTaskState(defaultTasks);
}
else
{
if (routeId.Equals(10)) return;
ChangeTaskStateEvent(++routeId);
}
}
private void ChangeTaskState(List defaultTasks)
{
foreach (var item in defaultTasks)
{
var res = item.RouteId.GetEquipmentAreaPoint(out var areaPoint, item.RouteType,item.SampleConcentration);
if (!res) continue;
item.To = !string.IsNullOrWhiteSpace(areaPoint) ? areaPoint : item.To;
item.Status = TaskState.Doing;
}
DataManager.Update(defaultTasks);
}
#endregion
}
}