| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 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;
- }
- }
- /// <summary>
- /// 检查搅拌任务
- /// </summary>
- /// <param name="routeId"></param>
- /// <returns></returns>
- 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<EquipmentTask>() { task });
- }
- else
- {
- ChangeTaskStateEvent(++routeId);
- }
- }
- /// <summary>
- /// 检查标定路由的滴定任务
- /// </summary>
- /// <param name="routeId"></param>
- 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<EquipmentTask>() { 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<EquipmentTask> 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
- }
- }
|