MachineMaterialDetailDal.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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 MachineMaterialDetailDal
  10. {
  11. public IDatabase CurrDb { get; set; }
  12. public MachineMaterialDetailDal(IDatabase db)
  13. {
  14. CurrDb = db;
  15. }
  16. public int InsertTrans(IEnumerable<MachineMaterialDetail> details)
  17. {
  18. if (details == null || details.Count() == 0)
  19. return -1;
  20. return CurrDb.InsertFor<MachineMaterialDetail>(details, string.Empty);
  21. }
  22. /// <summary>
  23. /// 按机台别获取特定机种的抛料率统计
  24. /// </summary>
  25. /// <param name="filter"></param>
  26. /// <param name="subFilter"></param>
  27. /// <param name="start"></param>
  28. /// <param name="length"></param>
  29. /// <param name="sort"></param>
  30. /// <param name="order"></param>
  31. /// <param name="total"></param>
  32. /// <returns></returns>
  33. public IEnumerable<MaterialRejectDto> Get(string filter, string subFilter, int start, int length, string sort, string order, out int total)
  34. {
  35. var sql = $@"select l.maccode as Fkey,l.LenInput,l.LenReject,l.SensorInput,l.SensorReject,round(l.LenReject/l.LenInput,4) as LenRejectPercent,
  36. round(l.SensorReject/l.SensorInput,4) as SensorRejectPercent,l.Output from(
  37. select b.fcode as maccode,sum(tt.LenInput) as LenInput,sum(tt.LenInput-tt.Output-tt.LenMissingReject) as LenReject,
  38. sum(tt.SensorInput) as SensorInput,sum(tt.SensorInput-tt.output-tt.SensorMissingReject) as SensorReject,
  39. sum(tt.output) as Output from(
  40. 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,
  41. max(case a.category when 'Lens(#Missing)' then ifnull(total,0) else 0 end) LenMissingReject,
  42. max(case a.category when 'Sensor Input' then ifnull(total,0) else 0 end) SensorInput,
  43. max(case a.category when 'Sensor(#Missing)' then ifnull(total,0) else 0 end) SensorMissingReject,
  44. max(case a.category when 'Camera Output' then ifnull(total,0) else 0 end) output
  45. from machinematerialdetail a
  46. where 1=1 {filter}
  47. group by a.macid,a.fdate,a.shift,a.recipe
  48. ) tt
  49. left join machine b on tt.macid=b.id
  50. left join factoryregion c on c.id=b.regionId
  51. left join factoryregion d on c.parentId=d.id
  52. where 1=1 {subFilter}
  53. group by b.fcode) l order by {sort} {order} limit {start - 1},{length}";
  54. var dtos = CurrDb.FindList<MaterialRejectDto>(sql);
  55. var countSql = $@"select count(1) from(
  56. select b.fcode as maccode,sum(tt.LenInput) as LenInput,sum(tt.LenInput-tt.Output-tt.LenMissingReject) as LenReject,
  57. sum(tt.SensorInput) as SensorInput,sum(tt.SensorInput-tt.output-tt.SensorMissingReject) as SensorReject,
  58. sum(tt.output) as Output from(
  59. 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,
  60. max(case a.category when 'Lens(#Missing)' then ifnull(total,0) else 0 end) LenMissingReject,
  61. max(case a.category when 'Sensor Input' then ifnull(total,0) else 0 end) SensorInput,
  62. max(case a.category when 'Sensor(#Missing)' then ifnull(total,0) else 0 end) SensorMissingReject,
  63. max(case a.category when 'Camera Output' then ifnull(total,0) else 0 end) output
  64. from machinematerialdetail a
  65. where 1=1 {filter}
  66. group by a.macid,a.fdate,a.shift,a.recipe
  67. ) tt
  68. left join machine b on tt.macid=b.id
  69. left join factoryregion c on c.id=b.regionId
  70. left join factoryregion d on c.parentId=d.id
  71. where 1=1 {subFilter}
  72. group by b.fcode) l";
  73. total = Convert.ToInt32(CurrDb.FindList<string>(countSql).FirstOrDefault() ?? "0");
  74. return dtos;
  75. }
  76. /// <summary>
  77. /// 按机种别获取抛料率统计
  78. /// </summary>
  79. /// <param name="filter"></param>
  80. /// <param name="subFilter"></param>
  81. /// <param name="start"></param>
  82. /// <param name="length"></param>
  83. /// <param name="sort"></param>
  84. /// <param name="order"></param>
  85. /// <param name="total"></param>
  86. /// <returns></returns>
  87. public IEnumerable<MaterialRejectDto> GetByRecipe(string filter, string subFilter, int start, int length, string sort, string order, out int total)
  88. {
  89. var sql = $@"select l.recipe as Fkey,l.LenInput,l.LenReject,l.SensorInput,l.SensorReject,round(l.LenReject/l.LenInput,4) as LenRejectPercent,
  90. round(l.SensorReject/l.SensorInput,4) as SensorRejectPercent,l.Output from(
  91. select tt.recipe as recipe,sum(tt.LenInput) as LenInput,sum(tt.LenInput-tt.Output-tt.LenMissingReject) as LenReject,
  92. sum(tt.SensorInput) as SensorInput,sum(tt.SensorInput-tt.output-tt.SensorMissingReject) as SensorReject,
  93. sum(tt.output) as Output from(
  94. 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,
  95. max(case a.category when 'Lens(#Missing)' then ifnull(total,0) else 0 end) LenMissingReject,
  96. max(case a.category when 'Sensor Input' then ifnull(total,0) else 0 end) SensorInput,
  97. max(case a.category when 'Sensor(#Missing)' then ifnull(total,0) else 0 end) SensorMissingReject,
  98. max(case a.category when 'Camera Output' then ifnull(total,0) else 0 end) output
  99. from machinematerialdetail a
  100. where 1=1 {filter}
  101. group by a.macid,a.fdate,a.shift,a.recipe
  102. ) tt group by tt.recipe
  103. ) l order by {sort} {order} limit {start - 1},{length}";
  104. var dtos = CurrDb.FindList<MaterialRejectDto>(sql);
  105. var countSql = $@"select count(1) from(
  106. select tt.recipe as recipe,sum(tt.LenInput) as LenInput,sum(tt.LenInput-tt.Output-tt.LenMissingReject) as LenReject,
  107. sum(tt.SensorInput) as SensorInput,sum(tt.SensorInput-tt.output-tt.SensorMissingReject) as SensorReject,
  108. sum(tt.output) as Output from(
  109. 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,
  110. max(case a.category when 'Lens(#Missing)' then ifnull(total,0) else 0 end) LenMissingReject,
  111. max(case a.category when 'Sensor Input' then ifnull(total,0) else 0 end) SensorInput,
  112. max(case a.category when 'Sensor(#Missing)' then ifnull(total,0) else 0 end) SensorMissingReject,
  113. max(case a.category when 'Camera Output' then ifnull(total,0) else 0 end) output
  114. from machinematerialdetail a
  115. where 1=1 {filter}
  116. group by a.macid,a.fdate,a.shift,a.recipe
  117. ) tt group by tt.recipe
  118. ) l";
  119. total = Convert.ToInt32(CurrDb.FindList<string>(countSql).FirstOrDefault() ?? "0");
  120. return dtos;
  121. }
  122. public IEnumerable<MachineMaterialDetail> GetMaterialDetails(string filter, string subFilter)
  123. {
  124. string errorinfo = string.Empty;
  125. var sql = $@"select category,sum(total) as Total,sum(Stn1) as Stn1,sum(Stn2) as Stn2,sum(Stn3) as Stn3,sum(Stn4) as Stn4 from
  126. (select a.macid,category,sum(Total) as Total,sum(Stn1) as Stn1,sum(stn2) as Stn2,sum(stn3) as stn3,sum(stn4) as stn4
  127. from machinematerialdetail a where 1=1 and
  128. a.category <>'Lens(#Missing)' and a.category<>'Sensor(#Missing)'
  129. {filter}
  130. group by category,macid ) tt
  131. left join machine c on tt.macid=c.id
  132. where 1=1 {subFilter} group by category";
  133. var entities = CurrDb.FindList<MachineMaterialDetail>(sql);
  134. if (entities == null || entities.Count() <= 0)
  135. return null;
  136. var lenInput = entities.Where(c => c.Category.Contains("Lens Input"))?.Sum(t => t.Total);
  137. var sensorInput = entities.Where(c => c.Category.Contains("Sensor Input"))?.Sum(t => t.Total);
  138. var cameraOutput = entities.Where(c => c.Category.Contains("Camera Output"))?.Sum(t => t.Total);
  139. foreach (var item in entities.Where(c => !(c.Category.Contains("Lens Input") ||
  140. c.Category.Contains("Sensor Input") || c.Category.Contains("Camera Output"))))
  141. {
  142. var minus = lenInput;
  143. if (item.Category.StartsWith("Lens"))
  144. minus = lenInput;
  145. else if (item.Category.StartsWith("Sensor"))
  146. minus = sensorInput;
  147. else if (item.Category.StartsWith("Camera"))
  148. minus = cameraOutput;
  149. item.Reject = (decimal?)Math.Round((double)item.Total / minus.Value * 100, 2, MidpointRounding.AwayFromZero);
  150. }
  151. #region 排序
  152. var list = new List<MachineMaterialDetail>();
  153. var lens = entities.Where(c => c.Category.StartsWith("Lens"));
  154. list.AddRange(lens);
  155. var sensors = entities.Where(c => c.Category.StartsWith("Sensor"));
  156. list.AddRange(sensors);
  157. var cameras = entities.Where(c => c.Category.StartsWith("Camera"));
  158. list.AddRange(cameras);
  159. #endregion
  160. return list;
  161. }
  162. /// <summary>
  163. /// 获取汇总数据
  164. /// </summary>
  165. /// <param name="filter"></param>
  166. /// <param name="subFilter"></param>
  167. /// <returns></returns>
  168. public MaterialRejectDto GetTotalInfo(string filter, string subFilter)
  169. {
  170. var sql = $@"select 'Total' as Fkey,l.LenInput,l.LenReject,l.SensorInput,l.SensorReject,round(l.LenReject/l.LenInput,4) as LenRejectPercent,
  171. round(l.SensorReject/l.SensorInput,4) as SensorRejectPercent,l.Output from(
  172. select sum(tt.LenInput) as LenInput,sum(tt.LenInput-tt.Output-tt.LenMissingReject) as LenReject,
  173. sum(tt.SensorInput) as SensorInput,sum(tt.SensorInput-tt.output-tt.SensorMissingReject) as SensorReject,
  174. sum(tt.output) as Output from(
  175. 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,
  176. max(case a.category when 'Lens(#Missing)' then ifnull(total,0) else 0 end) LenMissingReject,
  177. max(case a.category when 'Sensor Input' then ifnull(total,0) else 0 end) SensorInput,
  178. max(case a.category when 'Sensor(#Missing)' then ifnull(total,0) else 0 end) SensorMissingReject,
  179. max(case a.category when 'Camera Output' then ifnull(total,0) else 0 end) output
  180. from machinematerialdetail a
  181. where 1=1 {filter}
  182. group by a.macid,a.fdate,a.shift,a.recipe
  183. ) tt
  184. left join machine b on tt.macid=b.id
  185. where 1=1 {subFilter}) l ";
  186. return CurrDb.FindList<MaterialRejectDto>(sql).FirstOrDefault();
  187. }
  188. // public IEnumerable
  189. }
  190. }