| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- 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);
- }
- }
- /// <summary>
- /// 检查搅拌任务
- /// </summary>
- /// <param name="routeId"></param>
- /// <returns></returns>
- 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);
- }
- }
- /// <summary>
- /// 检查滴定任务
- /// </summary>
- /// <param name="routeId"></param>
- /// <returns></returns>
- 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);
- }
- }
- /// <summary>
- /// 改变任务状态
- /// </summary>
- private void ChangeTaskState(EquipmentTask defaultTask,string typejbOrDd)
- {
- var tasks = new List<EquipmentTask>()
- {
- defaultTask
- };
- ChangeTaskState(tasks, typejbOrDd);
- }
- /// <summary>
- /// 改变任务状态
- /// </summary>
- /// <param name="defaultTasks"></param>
- private void ChangeTaskState(List<EquipmentTask> 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
- }
- }
|