MacStatusAnalysisDal.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. using Cksoft.Data;
  2. using DllEapEntity;
  3. using DllEapEntity.Dtos;
  4. using DllHsms;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. namespace DllEapDal
  10. {
  11. public class MacStatusAnalysisDal
  12. {
  13. private IDatabase CurrDb = null;
  14. public MacStatusAnalysisDal(IDatabase db)
  15. {
  16. CurrDb = db;
  17. }
  18. /// <summary>
  19. /// 获取每个机台的最后一个状态
  20. /// </summary>
  21. /// <param name="filter"></param>
  22. /// <param name="errorinfo"></param>
  23. /// <returns></returns>
  24. public IEnumerable<MacStatus> GetMacStatuses(string filter, ref string errorinfo)
  25. {
  26. var sql = $@"select a.FCode macCode,g.FName factory,a.ipaddress,c.FCode macmodelCode,c.FName macmodelName,
  27. d.pCode processCode,f.Fname processName,ifnull(b.statusid,1) statusid,ifnull(h.FName,'离线') statusName from machine a
  28. left join macstatus01 b on a.FCode=b.maccode
  29. left join macmodel c on a.MModeid=c.id
  30. left join mactprocess d on a.id=d.macid
  31. left join tprocess f on d.pcode=f.fcode
  32. left join factoryregion g on a.factoryid=g.id
  33. left join standardstatus h on b.statusid=h.StatusVal";
  34. return CurrDb.FindList<MacStatus>(sql);
  35. }
  36. public IEnumerable<MacStatusAnalysisDtoTree> GetStatusTree(string filter, ref string errorinfo)
  37. {
  38. var dtos = this.GetMacStatuses(filter, ref errorinfo);
  39. var trees = new List<MacStatusAnalysisDtoTree>();
  40. if (dtos != null && dtos.Count() > 0)
  41. {
  42. var facItem = new MacStatusAnalysisDtoTree
  43. {
  44. Key = "全厂",
  45. Name = "全厂",
  46. Level = 0,
  47. Code = "全厂",
  48. Total = dtos.Count(), // 机台总数
  49. DisConn = dtos.Where(c => c.StatusID == 1)?.Count(), // 未连接
  50. Error = dtos.Where(c => c.StatusID == 6)?.Count(), // 错误
  51. Idle = dtos.Where(c => c.StatusID == 3)?.Count(), // 空闲
  52. Conn = dtos.Where(c => c.StatusID != 1)?.Count(), // 已连接
  53. Run = dtos.Where(c => c.StatusID == 4)?.Count(), // 运行
  54. Pause = dtos.Where(c => c.StatusID == 5)?.Count(),
  55. SetUp = dtos.Where(c => c.StatusID == 2)?.Count()
  56. };
  57. if (facItem.Conn != null)
  58. {
  59. facItem.ConnPercent = facItem.Conn / Convert.ToDecimal(facItem.Total);
  60. }
  61. var factoryGroups = dtos.GroupBy(c => c.Factory);
  62. if (factoryGroups != null && factoryGroups.Count() > 0)
  63. {
  64. var regionTrees = new List<MacStatusAnalysisDtoTree>();
  65. foreach (var regionItem in factoryGroups)
  66. {
  67. var root = new MacStatusAnalysisDtoTree
  68. {
  69. Key = regionItem.Key,
  70. Name = regionItem.Key,
  71. Code = regionItem.Key,
  72. Level = 1,
  73. Total = regionItem.Count(), // 机台总数
  74. DisConn = regionItem.Where(c => c.StatusID == 1)?.Count(), // 未连接
  75. Error = regionItem.Where(c => c.StatusID == 6)?.Count(), // 错误
  76. Idle = regionItem.Where(c => c.StatusID == 3)?.Count(), // 空闲
  77. Conn = regionItem.Where(c => c.StatusID != 1)?.Count(), // 已连接
  78. Run = regionItem.Where(c => c.StatusID == 4)?.Count(), // 运行
  79. Pause = regionItem.Where(c => c.StatusID == 5)?.Count(),
  80. SetUp = regionItem.Where(c => c.StatusID == 2)?.Count()
  81. };
  82. if (root.Conn != null)
  83. {
  84. root.ConnPercent = root.Conn / Convert.ToDecimal(root.Total);
  85. }
  86. var pcodeGroups = regionItem.GroupBy(c => new { c.ProcessCode, c.ProcessName });
  87. var pcodeTrees = new List<MacStatusAnalysisDtoTree>();
  88. if (pcodeGroups != null && pcodeGroups.Count() > 0)
  89. {
  90. foreach (var item in pcodeGroups)
  91. {
  92. var pCodeItem = new MacStatusAnalysisDtoTree
  93. {
  94. Key = root.Key + "/" + item.Key.ProcessCode,
  95. Name = item.Key.ProcessName,
  96. Level = 2,
  97. Total = item.Count(), // 机台总数
  98. DisConn = item.Where(c => c.StatusID == 1)?.Count(), // 未连接
  99. Error = item.Where(c => c.StatusID == 6)?.Count(), // 错误
  100. Idle = item.Where(c => c.StatusID == 3)?.Count(), // 空闲
  101. Conn = item.Where(c => c.StatusID != 1)?.Count(), // 已连接
  102. Run = item.Where(c => c.StatusID == 4)?.Count(), // 运行
  103. Pause = item.Where(c => c.StatusID == 5)?.Count(),
  104. SetUp = item.Where(c => c.StatusID == 2)?.Count(),
  105. Code = item.Key.ProcessCode
  106. };
  107. if (pCodeItem.Conn != null)
  108. {
  109. pCodeItem.ConnPercent = pCodeItem.Conn / Convert.ToDecimal(pCodeItem.Total);
  110. }
  111. var macmodelGroups = item.GroupBy(e => new { e.MacModelCode, e.MacModelName });
  112. if (macmodelGroups != null && macmodelGroups.Count() > 0)
  113. {
  114. var modelTrees = new List<MacStatusAnalysisDtoTree>();
  115. foreach (var modelItem in macmodelGroups)
  116. {
  117. var macmodel = new MacStatusAnalysisDtoTree
  118. {
  119. Key = root.Key + "/" + modelItem.Key.MacModelCode,
  120. Code = modelItem.Key.MacModelCode,
  121. Name = modelItem.Key.MacModelName,
  122. Level = 3,
  123. Total = modelItem.Count(), // 机台总数
  124. DisConn = modelItem.Where(c => c.StatusID == 1)?.Count(), // 未连接
  125. Error = modelItem.Where(c => c.StatusID == 6)?.Count(), // 错误
  126. Idle = modelItem.Where(c => c.StatusID == 3)?.Count(), // 空闲
  127. Conn = modelItem.Where(c => c.StatusID != 1)?.Count(), // 已连接
  128. Run = modelItem.Where(c => c.StatusID == 4)?.Count(), // 运行
  129. Pause = modelItem.Where(c => c.StatusID == 5)?.Count(),
  130. SetUp = modelItem.Where(c => c.StatusID == 2)?.Count()
  131. };
  132. if (macmodel.Conn != null)
  133. {
  134. macmodel.ConnPercent = macmodel.Conn / Convert.ToDecimal(macmodel.Total);
  135. }
  136. #region
  137. //var macTrees = new List<OutputTree>();
  138. //foreach (var mac in modelItem)
  139. //{
  140. // var macItem = new OutputTree
  141. // {
  142. // Key = mac.MacCode,
  143. // Name = mac.MacCode,
  144. // Total = mac.Count(), // 机台总数
  145. // DisConn = mac.Where(c => c.StatusID == 1)?.Count(), // 未连接
  146. // Error = mac.Where(c => c.StatusID == 6)?.Count(), // 错误
  147. // Idle = mac.Where(c => c.StatusID == 3)?.Count(), // 空闲
  148. // Conn = mac.Where(c => c.StatusID != 1)?.Count(), // 已连接
  149. // Run = mac.Where(c => c.StatusID == 4)?.Count(), // 运行
  150. // Pause = mac.Where(c => c.StatusID == 5)?.Count(),
  151. // SetUp = mac.Where(c => c.StatusID == 2)?.Count()
  152. // };
  153. // if (mac.TimeLen == 0)
  154. // {
  155. // macItem.UPH = 0;
  156. // }
  157. // else
  158. // {
  159. // macItem.UPH = Convert.ToInt32(Math.Round(macItem.Count / (decimal)macItem.TimeLen * 60 * 60));
  160. // }
  161. // macTrees.Add(macItem);
  162. //}
  163. #endregion
  164. modelTrees.Add(macmodel);
  165. }
  166. pCodeItem.Children = modelTrees;
  167. }
  168. pcodeTrees.Add(pCodeItem);
  169. }
  170. }
  171. root.Children = pcodeTrees;
  172. regionTrees.Add(root);
  173. }
  174. facItem.Children = regionTrees;
  175. }
  176. trees.Add(facItem);
  177. }
  178. return trees;
  179. }
  180. }
  181. }