MaterialErrorMessageDal.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. using Cksoft.Data;
  2. using DllEapEntity.OFILM;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. namespace DllEapDal.OFILM
  8. {
  9. public class MaterialErrorMessageDal
  10. {
  11. public IDatabase CurrDb { get; set; }
  12. public MaterialErrorMessageDal(IDatabase db)
  13. {
  14. CurrDb = db;
  15. }
  16. public int InsertTrans(IEnumerable<MaterialErrorMessage> errMsgs)
  17. {
  18. return CurrDb.InsertFor<MaterialErrorMessage>(errMsgs, string.Empty);
  19. }
  20. public IEnumerable<ErrorMessageDto> GetByRecipe(string filter, string subFilter, int start, int length, string sort, string order, out int total)
  21. {
  22. var list = new List<ErrorMessageDto>();
  23. var rejectDal = new MachineMaterialDetailDal(CurrDb);
  24. var rejects = rejectDal.GetByRecipe(filter, subFilter, start, length, sort, order, out total);
  25. if (rejects != null && rejects.Count() > 0)
  26. {
  27. var errorMsgsSql = $@"select sum(count) count,category,recipe,type from (select count,case when (category='LPA' or category='Lens') then 'Lens' else 'Sensor' end as category,
  28. recipe,type from (
  29. select sum(count) as count,fdate,recipe,substring_index(error,' ',1) as category,type from
  30. materialerrormessage a where 1=1 and (type='Pick&Place' or type='PR') {filter}
  31. group by fdate,recipe,substring_index(error,' ',1),type) tt where (tt.category='Lens' or tt.category='LPA' or
  32. tt.category='SPA' or tt.category='CPA')) h
  33. group by category,recipe,type
  34. ";
  35. var errmessages = CurrDb.FindList<ErrorMessageCountDto>(errorMsgsSql);
  36. foreach (var item in rejects)
  37. {
  38. var entity = new ErrorMessageDto
  39. {
  40. FKey = item.FKey,
  41. Output = item.Output,
  42. LensInput = item.LenInput,
  43. LensVacuoAlarms = errmessages.Where(c => c.Category == "Lens" && c.Recipe == item.FKey && c.Type == "Pick&Place")?.Sum(c => c.Count),
  44. LensPrAlarms = errmessages.Where(c => c.Category == "Lens" && c.Recipe == item.FKey && c.Type == "PR")?.Sum(c => c.Count),
  45. SensorInput = item.SensorInput,
  46. SensorVacuoAlarms = errmessages.Where(c => c.Category == "Sensor" && c.Recipe == item.FKey && c.Type == "Pick&Place")?.Sum(c => c.Count),
  47. SensorPrAlarms = errmessages.Where(c => c.Category == "Sensor" && c.Recipe == item.FKey && c.Type == "PR")?.Sum(c => c.Count),
  48. LensVacuoAlarmRate = "0",
  49. LensPrAlarmRate = "0",
  50. SensorVacuoAlarmRate = "0",
  51. SensorPrAlarmRate = "0"
  52. };
  53. entity.LensPrAlarms = entity.LensPrAlarms == null ? 0 : entity.LensPrAlarms;
  54. entity.LensVacuoAlarms = entity.LensVacuoAlarms == null ? 0 : entity.LensVacuoAlarms;
  55. entity.SensorPrAlarms = entity.SensorPrAlarms == null ? 0 : entity.SensorPrAlarms;
  56. entity.SensorVacuoAlarms = entity.SensorVacuoAlarms == null ? 0 : entity.SensorVacuoAlarms;
  57. if (item.LenInput > 0)
  58. {
  59. entity.LensVacuoAlarmRate = Math.Round(Convert.ToDouble(entity.LensVacuoAlarms) / Convert.ToDouble(entity.LensInput),4).ToString();
  60. entity.LensPrAlarmRate = Math.Round(Convert.ToDouble(entity.LensPrAlarms) / Convert.ToDouble(entity.LensInput),4).ToString();
  61. }
  62. if (entity.SensorInput > 0)
  63. {
  64. entity.SensorVacuoAlarmRate = Math.Round(Convert.ToDouble(entity.SensorVacuoAlarms) / Convert.ToDouble(entity.SensorInput),4).ToString();
  65. entity.SensorPrAlarmRate = Math.Round(Convert.ToDouble(entity.SensorPrAlarms) / Convert.ToDouble(entity.SensorInput),4).ToString();
  66. }
  67. list.Add(entity);
  68. }
  69. }
  70. return list;
  71. }
  72. public IEnumerable<ErrorMessageDto> GetByMachine(string filter, string subFilter, int start, int length, string sort, string order, out int total)
  73. {
  74. var list = new List<ErrorMessageDto>();
  75. var rejectDal = new MachineMaterialDetailDal(CurrDb);
  76. var rejects = rejectDal.Get(filter, subFilter, start, length, sort, order, out total);
  77. if (rejects != null && rejects.Count() > 0)
  78. {
  79. var errorMsgsSql = $@"select sum(count) count,b.FCode as Fkey,category,type from (select sum(count) count,macid,case when (category='LPA' or category='Lens') then 'Lens' else 'Sensor' end as category,
  80. type from (
  81. select sum(count) as count,macid,substring_index(error,' ',1) as category,type from
  82. materialerrormessage a where 1=1 and (type='Pick&Place' or type='PR') {filter}
  83. group by macid,substring_index(error,' ',1),type) t where (t.category='Lens' or t.category='LPA' or
  84. t.category='SPA' or t.category='CPA') group by macid,category,type) tt
  85. left join machine b on tt.macid=b.id
  86. where 1=1 {subFilter} group by b.FCode,category,type";
  87. var errmessages = CurrDb.FindList<ErrorMessageCountDto>(errorMsgsSql);
  88. foreach (var item in rejects)
  89. {
  90. var entity = new ErrorMessageDto
  91. {
  92. FKey = item.FKey,
  93. Output = item.Output,
  94. LensInput = item.LenInput,
  95. LensVacuoAlarms = errmessages.Where(c => c.FKey == item.FKey && c.Category == "Lens" && c.Type == "Pick&Place")?.Sum(c => c.Count),
  96. LensPrAlarms = errmessages.Where(c => c.FKey == item.FKey && c.Category == "Lens" && c.Type == "PR")?.Sum(c => c.Count),
  97. SensorInput = item.SensorInput,
  98. SensorVacuoAlarms = errmessages.Where(c => c.FKey == item.FKey && c.Category == "Sensor" && c.Type == "Pick&Place")?.Sum(c => c.Count),
  99. SensorPrAlarms = errmessages.Where(c => c.FKey == item.FKey && c.Category == "Sensor" && c.Type == "PR")?.Sum(c => c.Count),
  100. LensVacuoAlarmRate = "0",
  101. LensPrAlarmRate = "0",
  102. SensorVacuoAlarmRate = "0",
  103. SensorPrAlarmRate = "0"
  104. };
  105. entity.LensPrAlarms = entity.LensPrAlarms == null ? 0 : entity.LensPrAlarms;
  106. entity.LensVacuoAlarms = entity.LensVacuoAlarms == null ? 0 : entity.LensVacuoAlarms;
  107. entity.SensorPrAlarms = entity.SensorPrAlarms == null ? 0 : entity.SensorPrAlarms;
  108. entity.SensorVacuoAlarms = entity.SensorVacuoAlarms == null ? 0 : entity.SensorVacuoAlarms;
  109. if (item.LenInput > 0)
  110. {
  111. entity.LensVacuoAlarmRate = Math.Round(Convert.ToDouble(entity.LensVacuoAlarms) / Convert.ToDouble(entity.LensInput),4).ToString();
  112. entity.LensPrAlarmRate = Math.Round(Convert.ToDouble(entity.LensPrAlarms) / Convert.ToDouble(entity.LensInput),4).ToString();
  113. }
  114. if (entity.SensorInput > 0)
  115. {
  116. entity.SensorVacuoAlarmRate =Math.Round( Convert.ToDouble(entity.SensorVacuoAlarms) / Convert.ToDouble(entity.SensorInput),4).ToString();
  117. entity.SensorPrAlarmRate =Math.Round( Convert.ToDouble(entity.SensorPrAlarms) / Convert.ToDouble(entity.SensorInput),4).ToString();
  118. }
  119. list.Add(entity);
  120. }
  121. }
  122. return list;
  123. }
  124. public IEnumerable<MaterialErrorMessage> GetMaterialErrorMessages(string filter, string subFilter)
  125. {
  126. string errorinfo = string.Empty;
  127. var sql = $@"select sum(TotalIdleTime) as TotalIdleTime,sum(count) as count,Type,Error from
  128. (select sum(totalIdleTime) as TotalIdleTime,Type,sum(count) as Count,error,macid
  129. from materialerrormessage a
  130. where 1=1 {filter}
  131. group by error,type,macid) tt
  132. left join machine c on tt.macid=c.id
  133. where 1=1 {subFilter}
  134. group by Type,Error";
  135. var entities = CurrDb.FindList<MaterialErrorMessage>(sql);
  136. return entities;
  137. }
  138. public ErrorMessageDto GetTotalInfo(string filter, string subFilter)
  139. {
  140. var errMsgDto = new ErrorMessageDto();
  141. var sql = $@"select 'Total' as Fkey,l.LenInput,l.LenReject,l.SensorInput,l.SensorReject,round(l.LenReject/l.LenInput,4) as LenRejectPercent,
  142. round(l.SensorReject/l.SensorInput,4) as SensorRejectPercent,l.Output from(
  143. select sum(tt.LenInput) as LenInput,sum(tt.LenInput-tt.Output-tt.LenMissingReject) as LenReject,
  144. sum(tt.SensorInput) as SensorInput,sum(tt.SensorInput-tt.output-tt.SensorMissingReject) as SensorReject,
  145. sum(tt.output) as Output from(
  146. select a.macid as macid,a.fdate,a.shift,a.recipe,max(case a.category when 'Lens Input' then ifnull(total,0) else 0 end) LenInput,
  147. max(case a.category when 'Lens(#Missing)' then ifnull(total,0) else 0 end) LenMissingReject,
  148. max(case a.category when 'Sensor Input' then ifnull(total,0) else 0 end) SensorInput,
  149. max(case a.category when 'Sensor(#Missing)' then ifnull(total,0) else 0 end) SensorMissingReject,
  150. max(case a.category when 'Camera Output' then ifnull(total,0) else 0 end) output
  151. from machinematerialdetail a
  152. where 1=1 {filter}
  153. group by a.macid,a.fdate,a.shift,a.recipe
  154. ) tt
  155. left join machine b on tt.macid=b.id
  156. where 1=1 {subFilter}) l ";
  157. var reject = CurrDb.FindList<MaterialRejectDto>(sql).FirstOrDefault();
  158. sql = $@"select sum(count) count,category,type from (
  159. select count,case when (category='LPA' or category='Lens') then 'Lens' else 'Sensor' end as category,
  160. type,macid from (
  161. select sum(count) as count,fdate,macid,substring_index(error,' ',1) as category,type from
  162. materialerrormessage a where 1=1 and (type='Pick&Place' or type='PR') {filter}
  163. group by fdate,macid,substring_index(error,' ',1),type) t where (t.category='Lens' or t.category='LPA' or
  164. t.category='SPA' or t.category='CPA') ) tt
  165. left join machine b on tt.macid=b.id
  166. where 1=1 {subFilter}
  167. group by category,type";
  168. var errMsgs = CurrDb.FindList<ErrorMessageCountDto>(sql);
  169. if (reject != null)
  170. {
  171. errMsgDto.FKey = reject.FKey;
  172. errMsgDto.Output = reject.Output;
  173. errMsgDto.LensInput = reject.LenInput;
  174. errMsgDto.LensVacuoAlarms = errMsgs.Where(c => c.Category == "Lens" && c.Type == "Pick&Place")?.Sum(c => c.Count);
  175. errMsgDto.LensPrAlarms = errMsgs.Where(c => c.Category == "Lens" && c.Type == "PR")?.Sum(c => c.Count);
  176. errMsgDto.SensorInput = reject.SensorInput;
  177. errMsgDto.SensorVacuoAlarms = errMsgs.Where(c => c.Category == "Sensor" && c.Type == "Pick&Place")?.Sum(c => c.Count);
  178. errMsgDto.SensorPrAlarms = errMsgs.Where(c => c.Category == "Sensor" && c.Type == "PR")?.Sum(c => c.Count);
  179. errMsgDto.LensPrAlarms = errMsgDto.LensPrAlarms == null ? 0 : errMsgDto.LensPrAlarms;
  180. errMsgDto.LensVacuoAlarms = errMsgDto.LensVacuoAlarms == null ? 0 : errMsgDto.LensVacuoAlarms;
  181. errMsgDto.SensorPrAlarms = errMsgDto.SensorPrAlarms == null ? 0 : errMsgDto.SensorPrAlarms;
  182. errMsgDto.SensorVacuoAlarms = errMsgDto.SensorVacuoAlarms == null ? 0 : errMsgDto.SensorVacuoAlarms;
  183. if (errMsgDto.LensInput > 0)
  184. {
  185. errMsgDto.LensVacuoAlarmRate = Math.Round(Convert.ToDouble(errMsgDto.LensVacuoAlarms) / Convert.ToDouble(errMsgDto.LensInput)).ToString();
  186. errMsgDto.LensPrAlarmRate = Math.Round(Convert.ToDouble(errMsgDto.LensPrAlarms) / Convert.ToDouble(errMsgDto.LensInput),4).ToString();
  187. }
  188. if (errMsgDto.SensorInput > 0)
  189. {
  190. errMsgDto.SensorVacuoAlarmRate =Math.Round( Convert.ToDouble(errMsgDto.SensorVacuoAlarms) / Convert.ToDouble(errMsgDto.SensorInput),4).ToString();
  191. errMsgDto.SensorPrAlarmRate = Math.Round(Convert.ToDouble(errMsgDto.SensorPrAlarms) / Convert.ToDouble(errMsgDto.SensorInput),4).ToString();
  192. }
  193. }
  194. return errMsgDto;
  195. }
  196. }
  197. }