using System;
using System.Linq;
using SHJX.Service.Model.Dao;
using System.Collections.Generic;
using SHJX.Service.Common.ReadXML;
using SHJX.Service.Control.Interface;
namespace SHJX.Service.Control.TimerControl.ChangeTaskState
{
public class SampleChangeState : ChangeTaskStateImp
{
public SampleChangeState(ReadConfigUtil config) : base(config)
{
}
#region ChangeTaskState
public override void ChangeEquipmentTaskStateEvent()
{
//如果没有状态为新建的任务,则返回不做处理
if (!DataManager.GetTaskByStateNew("SY"))
return;
//Tip这里有任务优先级,一般来说,如果有比当前优先级高的就不做任务下发
if (DataManager.CheckTaskByPriority(300))
{
//例外的情况:当标定任务存在的时候,如果标定任务处在冷却中 则可以进行水样任务的下发
if (!DataManager.GetBdTaskIsCooling())
return;
//步骤只能到达加热这一步骤
if (DataManager.GetSYRouteIDIsNotOne())
return;
}
ChangeTaskStateEvent(1);
}
private void ChangeTaskStateEvent(int routeId)
{
try
{
switch (routeId)
{
case 1:
CheckRouteIsFirst(routeId);
break;
case 2 or 5:
CheckRouteIsTwoOrFive(routeId);
break;
case 7:
CheckRouteIsStir(routeId);
break;
case 10:
CheckRouteIsTitration(routeId);
break;
default:
CheckRouteOthers(routeId);
break;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
private void CheckRouteOthers(int routeId)
{
var tasks = DataManager.GetTaskByRouteId(routeId);
if (tasks.Any() && !DataManager.GetLessThanRouteId(routeId))
{
var defaultTasks = tasks.Where(item => item.Status.Equals(TaskState.New)).ToList();
foreach (var item in defaultTasks)
{
if (item.TaskType != "补杯")
{
if (defaultTasks.Any())
ChangeTaskState(defaultTasks, "");
return;
}
}
if (routeId.Equals(11)) return;
ChangeTaskStateEvent(++routeId);
}
else
{
if (routeId.Equals(11)) return;
ChangeTaskStateEvent(++routeId);
}
}
private void CheckRouteIsTwoOrFive(int routeId)
{
if (DataManager.CheckElseRouteId(routeId))
{
var tasks = DataManager.GetTaskByRouteId(routeId);
if (!tasks.Any() || DataManager.GetLessThanRouteId(routeId)) return;
var defaultTasks = tasks.Where(item => item.Status.Equals(TaskState.New)).ToList();
if (defaultTasks.Any())
{
ChangeTaskState(defaultTasks, "");
}
}
else
{
ChangeTaskStateEvent(++routeId);
}
}
private void CheckRouteIsFirst(int routeId)
{
var bl1 = DataManager.CheckRouteIdNew();
var bl2 = DataManager.CheckElseRouteId(routeId);
if (bl1 && bl2)
{
var taskIsReadyRow = 24 - DataManager.RouteIdStateEqualsDoing(routeId);
var tasks = DataManager.GetTaskByRouteId(routeId).Where(item => item.Status.Equals(TaskState.New))
.ToList();
var sendRow = tasks.Count - taskIsReadyRow > 0 ? taskIsReadyRow : tasks.Count;
var route1Sends = tasks.Take(sendRow).ToList();
if (!route1Sends.Any()) return;
route1Sends.ForEach(item => item.Status = TaskState.Doing);
DataManager.Update(route1Sends);
}
else
{
ChangeTaskStateEvent(++routeId);
}
}
///
/// 检查搅拌任务
///
///
///
private void CheckRouteIsStir(int routeId)
{
var tasks = DataManager.GetTaskByRouteId(routeId);
var taskDoing = tasks.Where(item => item.Status.Equals(TaskState.Doing)).ToList();
var nextRouteId = routeId + 1;
var tasksNext = DataManager.GetTaskByRouteId(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(task,"jb");
}
else
{
ChangeTaskStateEvent(++routeId);
}
}
///
/// 检查滴定任务
///
///
///
private void CheckRouteIsTitration(int routeId)
{
var tasks = DataManager.GetTaskByRouteId(routeId);
var nextRouteId = routeId + 1;
var tasksNext = DataManager.GetTaskByRouteId(nextRouteId);
if (tasks.Any(item => item.Status is TaskState.New or TaskState.Doing)
&& !tasksNext.Any()
&& !tasks.Any(item => item.Status.Equals(TaskState.Doing))
&& DataManager.CheckElseRouteId(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(task,"dd");
}
else
{
ChangeTaskStateEvent(++routeId);
}
}
///
/// 改变任务状态
///
private void ChangeTaskState(EquipmentTask defaultTask,string typejbOrDd)
{
var tasks = new List()
{
defaultTask
};
ChangeTaskState(tasks, typejbOrDd);
}
///
/// 改变任务状态
///
///
private void ChangeTaskState(List defaultTasks,string typejbOrDd)
{
foreach (var item in defaultTasks)
{
if (typejbOrDd == "jb" && item.TaskType == "补杯" && item.RouteId == 7 && item.RouteStepId == 1)
{
item.Status = TaskState.Doing;
}
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
}
}