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