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