ServiceDataManager.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. using SqlSugar;
  2. using System.Linq;
  3. using SHJX.Service.Model.Dao;
  4. using System.Collections.Generic;
  5. using SHJX.Service.Common.ReadXML;
  6. namespace SHJX.Service.Dao
  7. {
  8. public class ServiceDataManager : DataManagerImp
  9. {
  10. public ServiceDataManager(ReadConfigUtil config)
  11. {
  12. InitData(config);
  13. }
  14. #region SY
  15. /// <summary>
  16. /// 查询任务状态为正在执行
  17. /// </summary>
  18. /// <param name="status"></param>
  19. /// <param name="routeId"></param>
  20. /// <returns></returns>
  21. public EquipmentTask QueryNewTaskFirst(TaskState status, int routeId) =>
  22. Db.Queryable<EquipmentTask>()
  23. .OrderBy(it => it.Priority, OrderByType.Desc)
  24. .Where(item => item.RouteType.Equals("SY"))
  25. .Where("RouteID=@routeID ", new { routeID = routeId })
  26. .WhereIF(routeId.Equals(11), "status not in ('4','6')")
  27. .WhereIF(!routeId.Equals(11), "status= @status", new { status })
  28. .Clone()
  29. .First();
  30. /// <summary>
  31. ///
  32. /// </summary>
  33. /// <param name="routeId"></param>
  34. /// <param name="opType"></param>
  35. /// <returns></returns>
  36. public int QueryEqualsRouteIdCount(int routeId, string opType = "SY") =>
  37. Db.Queryable<EquipmentTask>()
  38. .OrderBy(it => it.Priority, OrderByType.Desc)
  39. .Where(item => item.RouteType.Equals(opType))
  40. .Where(item => item.RouteId.Equals(routeId))
  41. .Where(item => item.Status.Equals(TaskState.Doing))
  42. .Clone()
  43. .Count();
  44. /// <summary>
  45. ///
  46. /// </summary>
  47. /// <param name="routeId"></param>
  48. /// <returns></returns>
  49. public int RouteIdStateEqualsDoing(int routeId) =>
  50. Db.Queryable<EquipmentTask>()
  51. .OrderBy(it => it.Priority, OrderByType.Desc)
  52. .Where(it => it.RouteType.Equals("SY"))
  53. .Where(it => it.RouteId.Equals(routeId))
  54. .Where(it => it.Status.Equals(TaskState.Doing))
  55. .Count();
  56. /// <summary>
  57. ///
  58. /// </summary>
  59. /// <returns></returns>
  60. public bool CheckRouteIdNew() =>
  61. Db.Queryable<EquipmentTask>()
  62. .OrderBy(it => it.Priority, OrderByType.Desc)
  63. .Where(it => it.RouteType.Equals("SY"))
  64. .Where(it => it.RouteId.Equals(1))
  65. .Where("NOT EXISTS(SELECT * FROM equipment_task WHERE Status != '4' and RouteID = '5' or RouteID = '6' AND RouteType = 'BD')")
  66. .Where(it => it.Status.Equals(TaskState.New))
  67. .Any();
  68. /// <summary>
  69. ///
  70. /// </summary>
  71. /// <param name="routeId"></param>
  72. /// <returns></returns>
  73. /// 当RouteID为1时 做以下的查询:
  74. /// <![CDATA[
  75. /// SELECT * FROM `equipment_task` WHERE RouteType='SY' and RouteID=1 and status in(1,3)
  76. /// and EXISTS(SELECT 1 FROM equipment_task WHERE RouteType = 'SY' and RouteID = '4' and RouteStepID = '27' AND Status = '3' AND
  77. /// 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'))))
  78. /// ]]>
  79. ///
  80. /// 当RouteID为2时 做以下的查询:
  81. ///<![CDATA[
  82. /// SELECT * FROM `equipment_task` WHERE RouteType='SY' and RouteID='2' AND status in(1,3) AND
  83. /// ((NOT EXISTS(SELECT 1 From equipment_task WHERE Status IN ('3','1') AND RouteType='SY' AND RouteID>2)) or
  84. /// EXISTS(SELECT 1 From equipment_task WHERE RouteType='SY' and Status=3 AND RouteID='8' and RouteStepID='30'))
  85. /// ]]>
  86. ///
  87. /// 这里给定1:
  88. ///<![CDATA[
  89. /// NOT EXISTS(SELECT * FROM `equipment_task` WHERE RouteType='SY' AND status in (3,1) AND RouteID>1) OR
  90. /// EXISTS(SELECT 1 FROM equipment_task WHERE RouteType = 'SY' and RouteID = '4' and RouteStepID = '27' AND Status = '3' AND
  91. /// 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'))))
  92. /// ]]>
  93. public bool CheckElseRouteId(int routeId) =>
  94. Db.Queryable<EquipmentTask>()
  95. .OrderBy(it => it.Priority, OrderByType.Desc)
  96. .Where(item => item.RouteType.Equals("SY"))
  97. .Where(item => item.RouteId.Equals(routeId) && new[] { TaskState.New, TaskState.Doing }.Contains(item.Status))
  98. .WhereIF(routeId.Equals(1), @"(
  99. NOT EXISTS(SELECT * FROM `equipment_task` WHERE RouteType='SY' AND status in (3,1) AND RouteID>1)
  100. OR
  101. EXISTS
  102. (
  103. SELECT 1 FROM equipment_task WHERE RouteType='SY' and RouteID='4' and RouteStepID='27' AND Status='3' AND
  104. NOT EXISTS
  105. (
  106. 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'))
  107. )
  108. )
  109. OR
  110. EXISTS
  111. (
  112. 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
  113. )
  114. )")
  115. .WhereIF(routeId.Equals(2), @"((NOT EXISTS(SELECT 1 From equipment_task WHERE Status IN ('3','1') AND RouteType='SY' AND RouteID>2))
  116. or EXISTS(SELECT 1 From equipment_task WHERE RouteType='SY' and Status=3 AND RouteID='9' and RouteStepID='30'
  117. and NOT EXISTS(SELECT * From equipment_task WHERE RouteType='SY' AND RouteID='7' AND Status='1')))", new { routeID2 = routeId + 1 })
  118. .WhereIF(routeId.Equals(5), "NOT EXISTS(SELECT * From equipment_task WHERE RouteType='SY' AND RouteID>=9 AND Status in (1,3))")
  119. .WhereIF(routeId.Equals(10), "NOT EXISTS(SELECT 1 From equipment_task WHERE RouteType='SY' AND RouteID in (9) and status not in (4,6))")
  120. .Clone()
  121. .Any();
  122. /// <summary>
  123. ///
  124. /// </summary>
  125. /// <param name="routeId"></param>
  126. /// <returns></returns>
  127. public List<EquipmentTask> GetTaskByRouteId(int routeId) =>
  128. Db.Queryable<EquipmentTask>()
  129. .OrderBy(it => it.Priority, OrderByType.Desc)
  130. .Where(it => it.RouteType.Equals("SY"))
  131. .Where(it => it.RouteId.Equals(routeId))
  132. .Where(it => it.Status.Equals(TaskState.New))
  133. .WhereIF(routeId.Equals(10), it => !it.Status.Equals(TaskState.Finished))
  134. .Clone()
  135. ?.ToList();
  136. /// <summary>
  137. ///
  138. /// </summary>
  139. /// <param name="routeId"></param>
  140. /// <returns></returns>
  141. public bool GetLessThanRouteId(int routeId) =>
  142. Db.Queryable<EquipmentTask>()
  143. .OrderBy(it => it.Priority, OrderByType.Desc)
  144. .Where(item => item.RouteType.Equals("SY"))
  145. .Where(item => item.Status.Equals(TaskState.Doing))
  146. .WhereIF(routeId.Equals(11), "NOT EXISTS(SELECT * FROM equipment_task WHERE Status='3' and RouteID='4' AND RouteStepID='27')")
  147. .WhereIF(!routeId.Equals(11), item => item.RouteId < routeId)
  148. .Clone()
  149. .Any();
  150. #endregion
  151. #region Wash
  152. /// <summary>
  153. ///
  154. /// </summary>
  155. /// <param name="status"></param>
  156. /// <param name="routeId"></param>
  157. /// <returns></returns>
  158. public EquipmentTask QueryDoingWashTaskFirst(TaskState status, int routeId) =>
  159. Db.Queryable<EquipmentTask>()
  160. .Where(item => item.RouteType.Equals("Wash"))
  161. .Where("RouteID=@routeID ", new { routeID = routeId })
  162. .WhereIF(routeId.Equals(6), "status not in ('4','6')")
  163. .WhereIF(!routeId.Equals(6), "status= @status", new { status })
  164. .Clone()
  165. ?.First();
  166. /// <summary>
  167. /// 检查是否有润洗的任务存在
  168. /// </summary>
  169. /// <returns></returns>
  170. public bool CheckWashTaskIsRunning() =>
  171. Db.Queryable<EquipmentTask>()
  172. .Where(item => item.RouteType.Equals("Wash"))
  173. .Where(item => item.Status.Equals(TaskState.New) || item.Status.Equals(TaskState.Doing))
  174. .Any();
  175. /// <summary>
  176. /// 查找润洗的任务
  177. /// </summary>
  178. /// <param name="routeId"></param>
  179. /// <returns></returns>
  180. public List<EquipmentTask> GetWashTaskByRouteId(int routeId) =>
  181. Db.Queryable<EquipmentTask>()
  182. .Where(it => it.RouteType.Equals("Wash"))
  183. .Where(it => it.RouteId.Equals(routeId))
  184. .WhereIF(routeId.Equals(6), it => !it.Status.Equals(TaskState.Finished))?.ToList();
  185. #endregion
  186. #region BD
  187. public bool CheckSampleTask() =>
  188. Db.Queryable<EquipmentTask>()
  189. .Where(it => it.RouteType.Equals("SY"))
  190. .Where(it => it.RouteId < 3)
  191. .Where(it => it.Status.Equals(TaskState.Doing))
  192. .Clone()
  193. .ToList()
  194. .Any();
  195. public List<EquipmentTask> GetBdTaskByRouteId(int routeId) =>
  196. Db.Queryable<EquipmentTask>()
  197. .Where(it => it.RouteType.Equals("BD"))
  198. .Where(it => it.RouteId.Equals(routeId))
  199. .WhereIF(routeId.Equals(9), it => !it.Status.Equals(TaskState.Finished))
  200. .Clone()
  201. ?.ToList();
  202. public bool CheckElseBdRouteId(int routeId) =>
  203. Db.Queryable<EquipmentTask>()
  204. .Where(item => item.RouteType.Equals("BD"))
  205. .Where("RouteID=@routeID and status in(1,3) ", new { routeID = routeId })
  206. .WhereIF(routeId.Equals(1), "(SELECT COUNT(*) From equipment_task WHERE RouteType='BD' AND RouteID<>1 and status<>4) <1")
  207. .WhereIF(routeId.Equals(8), "(SELECT COUNT(*) From equipment_task WHERE RouteType='BD' AND RouteID=7) <1")
  208. .Clone()
  209. .Any();
  210. public EquipmentTask QueryDoingBdTaskFirst(TaskState status, int routeId) =>
  211. Db.Queryable<EquipmentTask>()
  212. .Where(item => item.RouteType.Equals("BD"))
  213. .Where("RouteID=@routeID ", new { routeID = routeId })
  214. .WhereIF(routeId.Equals(9), "status not in (4,6)")
  215. .WhereIF(!routeId.Equals(9), "status= @status", new { status })
  216. .Clone()
  217. ?.First();
  218. #endregion
  219. #region
  220. public EquipmentTask QueryDoingSpTaskFirst(TaskState status, int routeId) =>
  221. Db.Queryable<EquipmentTask>()
  222. .Where(item => item.RouteType.Equals("SP"))
  223. .Where("RouteID=@routeID ", new { routeID = routeId })
  224. .Where("status= @status", new { status })
  225. .Clone()
  226. ?.First();
  227. #endregion
  228. /// <summary>
  229. /// 根据任务优先级查找是否有任务
  230. /// </summary>
  231. /// <returns></returns>
  232. public bool CheckTaskByPriority(int value)
  233. {
  234. TaskState[] states = new TaskState[] { TaskState.New, TaskState.Doing };
  235. return Db.Queryable<EquipmentTask>().Where(item => states.Contains(item.Status) && item.Priority > value).Any();
  236. }
  237. public bool GetTaskByStateNew(params string[] routeName)
  238. {
  239. return Db.Queryable<EquipmentTask>().Where(item => routeName.Contains(item.RouteType) && (item.Status.Equals(TaskState.New)|| item.Status.Equals(TaskState.Doing))).Any();
  240. }
  241. /// <summary>
  242. /// 这里要改 要所有的都是BD
  243. /// </summary>
  244. /// <returns></returns>
  245. public bool GetBdTaskIsCooling()
  246. {
  247. return Db.Queryable<EquipmentTask>()
  248. .Where(item => item.RouteType.Equals("BD")
  249. && item.Status.Equals(TaskState.Doing)
  250. && item.RouteId.Equals(7)
  251. && item.RouteStepId.Equals(25))
  252. .Any();
  253. }
  254. public bool GetBdTaskIsT_Move_W()
  255. {
  256. return Db.Queryable<EquipmentTask>()
  257. .Where(item => item.RouteType.Equals("SY")
  258. && item.Status.Equals(TaskState.New)
  259. && item.RouteId.Equals(5)
  260. && item.RouteStepId.Equals(28))
  261. .Any();
  262. }
  263. public bool GetSYRouteIDIsNotOne()
  264. {
  265. TaskState[] states = new TaskState[] { TaskState.Doing, TaskState.New };
  266. return Db.Queryable<EquipmentTask>()
  267. .Where(item => item.RouteType.Equals("SY")
  268. && states.Contains(item.Status)
  269. && item.RouteId > 5)
  270. .Any();
  271. }
  272. /// <summary>
  273. /// 查询样品加热
  274. /// </summary>
  275. /// <returns></returns>
  276. public bool QuerySampleHeating() =>
  277. Db.Queryable<EquipmentTask>().
  278. Where(item => item.RouteType.Equals("SY")
  279. && item.RouteId.Equals(4)
  280. && item.RouteStepId.Equals(27)
  281. && item.Status.Equals(TaskState.Doing))
  282. .Any();
  283. /// <summary>
  284. /// 查询样品冷却任务
  285. /// </summary>
  286. /// <returns></returns>
  287. /// 这里的任务状态也要为正在执行
  288. public EquipmentTask QuerySampleCoolingAfter() =>
  289. Db.Queryable<EquipmentTask>().
  290. Where(item => item.RouteType.Equals("SY")
  291. && item.RouteId > 9
  292. && item.Status.Equals(TaskState.Doing))
  293. .First();
  294. }
  295. }