using SqlSugar;
using System.Linq;
using SHJX.Service.Model.Dao;
using System.Collections.Generic;
using SHJX.Service.Common.ReadXML;
namespace SHJX.Service.Dao
{
public class ServiceDataManager : DataManagerImp
{
public ServiceDataManager(ReadConfigUtil config)
{
InitData(config);
}
#region SY
///
/// 查询任务状态为正在执行
///
///
///
///
public EquipmentTask QueryNewTaskFirst(TaskState status, int routeId) =>
Db.Queryable()
.OrderBy(it => it.Priority, OrderByType.Desc)
.Where(item => item.RouteType.Equals("SY"))
.Where("RouteID=@routeID ", new { routeID = routeId })
.WhereIF(routeId.Equals(11), "status not in ('4','6')")
.WhereIF(!routeId.Equals(11), "status= @status", new { status })
.Clone()
.First();
///
///
///
///
///
///
public int QueryEqualsRouteIdCount(int routeId, string opType = "SY") =>
Db.Queryable()
.OrderBy(it => it.Priority, OrderByType.Desc)
.Where(item => item.RouteType.Equals(opType))
.Where(item => item.RouteId.Equals(routeId))
.Where(item => item.Status.Equals(TaskState.Doing))
.Clone()
.Count();
///
///
///
///
///
public int RouteIdStateEqualsDoing(int routeId) =>
Db.Queryable()
.OrderBy(it => it.Priority, OrderByType.Desc)
.Where(it => it.RouteType.Equals("SY"))
.Where(it => it.RouteId.Equals(routeId))
.Where(it => it.Status.Equals(TaskState.Doing))
.Count();
///
///
///
///
public bool CheckRouteIdNew() =>
Db.Queryable()
.OrderBy(it => it.Priority, OrderByType.Desc)
.Where(it => it.RouteType.Equals("SY"))
.Where(it => it.RouteId.Equals(1))
.Where("NOT EXISTS(SELECT * FROM equipment_task WHERE Status != '4' and RouteID = '5' or RouteID = '6' AND RouteType = 'BD')")
.Where(it => it.Status.Equals(TaskState.New))
.Any();
///
///
///
///
///
/// 当RouteID为1时 做以下的查询:
/// '1' and(RouteID<>'4' or (RouteID= '4' and RouteStepID<>'27'))))
/// ]]>
///
/// 当RouteID为2时 做以下的查询:
///2)) or
/// EXISTS(SELECT 1 From equipment_task WHERE RouteType='SY' and Status=3 AND RouteID='8' and RouteStepID='30'))
/// ]]>
///
/// 这里给定1:
///1) OR
/// EXISTS(SELECT 1 FROM equipment_task WHERE RouteType = 'SY' and RouteID = '4' and RouteStepID = '27' AND Status = '3' AND
/// NOT EXISTS(SELECT 1 From equipment_task WHERE RouteType = 'SY' and `Status`in ('3','1') and RouteID>'1' and(RouteID<>'4' or (RouteID= '4' and RouteStepID<>'27'))))
/// ]]>
public bool CheckElseRouteId(int routeId) =>
Db.Queryable()
.OrderBy(it => it.Priority, OrderByType.Desc)
.Where(item => item.RouteType.Equals("SY"))
.Where(item => item.RouteId.Equals(routeId) && new[] { TaskState.New, TaskState.Doing }.Contains(item.Status))
.WhereIF(routeId.Equals(1), @"(
NOT EXISTS(SELECT * FROM `equipment_task` WHERE RouteType='SY' AND status in (3,1) AND RouteID>1)
OR
EXISTS
(
SELECT 1 FROM equipment_task WHERE RouteType='SY' and RouteID='4' and RouteStepID='27' AND Status='3' AND
NOT EXISTS
(
SELECT 1 From equipment_task WHERE RouteType='SY' and `Status`in ('3','1') and RouteID>'1' and (RouteID<>'4' or (RouteID='4' and RouteStepID<>'27'))
)
)
OR
EXISTS
(
SELECT COUNT(*) From equipment_task WHERE RouteType = 'SY' and Status='1' and RouteID='2' and RouteStepID='1' and NOT EXISTS(SELECT 1 From equipment_task WHERE status='3' and (RouteID<>'4' or (RouteID= '4' and RouteStepID<>'27'))) GROUP BY RouteType HAVING COUNT(*)<24
)
)")
.WhereIF(routeId.Equals(2), @"((NOT EXISTS(SELECT 1 From equipment_task WHERE Status IN ('3','1') AND RouteType='SY' AND RouteID>2))
or EXISTS(SELECT 1 From equipment_task WHERE RouteType='SY' and Status=3 AND RouteID='9' and RouteStepID='30'
and NOT EXISTS(SELECT * From equipment_task WHERE RouteType='SY' AND RouteID='7' AND Status='1')))", new { routeID2 = routeId + 1 })
.WhereIF(routeId.Equals(5), "NOT EXISTS(SELECT * From equipment_task WHERE RouteType='SY' AND RouteID>=9 AND Status in (1,3))")
.WhereIF(routeId.Equals(10), "NOT EXISTS(SELECT 1 From equipment_task WHERE RouteType='SY' AND RouteID in (9) and status not in (4,6))")
.Clone()
.Any();
///
///
///
///
///
public List GetTaskByRouteId(int routeId) =>
Db.Queryable()
.OrderBy(it => it.Priority, OrderByType.Desc)
.Where(it => it.RouteType.Equals("SY"))
.Where(it => it.RouteId.Equals(routeId))
.Where(it => it.Status.Equals(TaskState.New))
.WhereIF(routeId.Equals(10), it => !it.Status.Equals(TaskState.Finished))
.Clone()
?.ToList();
///
///
///
///
///
public bool GetLessThanRouteId(int routeId) =>
Db.Queryable()
.OrderBy(it => it.Priority, OrderByType.Desc)
.Where(item => item.RouteType.Equals("SY"))
.Where(item => item.Status.Equals(TaskState.Doing))
.WhereIF(routeId.Equals(11), "NOT EXISTS(SELECT * FROM equipment_task WHERE Status='3' and RouteID='4' AND RouteStepID='27')")
.WhereIF(!routeId.Equals(11), item => item.RouteId < routeId)
.Clone()
.Any();
#endregion
#region Wash
///
///
///
///
///
///
public EquipmentTask QueryDoingWashTaskFirst(TaskState status, int routeId) =>
Db.Queryable()
.Where(item => item.RouteType.Equals("Wash"))
.Where("RouteID=@routeID ", new { routeID = routeId })
.WhereIF(routeId.Equals(6), "status not in ('4','6')")
.WhereIF(!routeId.Equals(6), "status= @status", new { status })
.Clone()
?.First();
///
/// 检查是否有润洗的任务存在
///
///
public bool CheckWashTaskIsRunning() =>
Db.Queryable()
.Where(item => item.RouteType.Equals("Wash"))
.Where(item => item.Status.Equals(TaskState.New) || item.Status.Equals(TaskState.Doing))
.Any();
///
/// 查找润洗的任务
///
///
///
public List GetWashTaskByRouteId(int routeId) =>
Db.Queryable()
.Where(it => it.RouteType.Equals("Wash"))
.Where(it => it.RouteId.Equals(routeId))
.WhereIF(routeId.Equals(6), it => !it.Status.Equals(TaskState.Finished))?.ToList();
#endregion
#region BD
public bool CheckSampleTask() =>
Db.Queryable()
.Where(it => it.RouteType.Equals("SY"))
.Where(it => it.RouteId < 3)
.Where(it => it.Status.Equals(TaskState.Doing))
.Clone()
.ToList()
.Any();
public List GetBdTaskByRouteId(int routeId) =>
Db.Queryable()
.Where(it => it.RouteType.Equals("BD"))
.Where(it => it.RouteId.Equals(routeId))
.WhereIF(routeId.Equals(9), it => !it.Status.Equals(TaskState.Finished))
.Clone()
?.ToList();
public bool CheckElseBdRouteId(int routeId) =>
Db.Queryable()
.Where(item => item.RouteType.Equals("BD"))
.Where("RouteID=@routeID and status in(1,3) ", new { routeID = routeId })
.WhereIF(routeId.Equals(1), "(SELECT COUNT(*) From equipment_task WHERE RouteType='BD' AND RouteID<>1 and status<>4) <1")
.WhereIF(routeId.Equals(8), "(SELECT COUNT(*) From equipment_task WHERE RouteType='BD' AND RouteID=7) <1")
.Clone()
.Any();
public EquipmentTask QueryDoingBdTaskFirst(TaskState status, int routeId) =>
Db.Queryable()
.Where(item => item.RouteType.Equals("BD"))
.Where("RouteID=@routeID ", new { routeID = routeId })
.WhereIF(routeId.Equals(9), "status not in (4,6)")
.WhereIF(!routeId.Equals(9), "status= @status", new { status })
.Clone()
?.First();
#endregion
#region
public EquipmentTask QueryDoingSpTaskFirst(TaskState status, int routeId) =>
Db.Queryable()
.Where(item => item.RouteType.Equals("SP"))
.Where("RouteID=@routeID ", new { routeID = routeId })
.Where("status= @status", new { status })
.Clone()
?.First();
#endregion
///
/// 根据任务优先级查找是否有任务
///
///
public bool CheckTaskByPriority(int value)
{
TaskState[] states = new TaskState[] { TaskState.New, TaskState.Doing };
return Db.Queryable().Where(item => states.Contains(item.Status) && item.Priority > value).Any();
}
public bool GetTaskByStateNew(params string[] routeName)
{
return Db.Queryable().Where(item => routeName.Contains(item.RouteType) && (item.Status.Equals(TaskState.New)|| item.Status.Equals(TaskState.Doing))).Any();
}
///
/// 这里要改 要所有的都是BD
///
///
public bool GetBdTaskIsCooling()
{
return Db.Queryable()
.Where(item => item.RouteType.Equals("BD")
&& item.Status.Equals(TaskState.Doing)
&& item.RouteId.Equals(7)
&& item.RouteStepId.Equals(25))
.Any();
}
public bool GetBdTaskIsT_Move_W()
{
return Db.Queryable()
.Where(item => item.RouteType.Equals("SY")
&& item.Status.Equals(TaskState.New)
&& item.RouteId.Equals(5)
&& item.RouteStepId.Equals(28))
.Any();
}
public bool GetSYRouteIDIsNotOne()
{
TaskState[] states = new TaskState[] { TaskState.Doing, TaskState.New };
return Db.Queryable()
.Where(item => item.RouteType.Equals("SY")
&& states.Contains(item.Status)
&& item.RouteId > 5)
.Any();
}
///
/// 查询样品加热
///
///
public bool QuerySampleHeating() =>
Db.Queryable().
Where(item => item.RouteType.Equals("SY")
&& item.RouteId.Equals(4)
&& item.RouteStepId.Equals(27)
&& item.Status.Equals(TaskState.Doing))
.Any();
///
/// 查询样品冷却任务
///
///
/// 这里的任务状态也要为正在执行
public EquipmentTask QuerySampleCoolingAfter() =>
Db.Queryable().
Where(item => item.RouteType.Equals("SY")
&& item.RouteId > 9
&& item.Status.Equals(TaskState.Doing))
.First();
}
}