MacOutPutTimeDal.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. using Cksoft.Data;
  2. using Cksoft.Data.Repository;
  3. using Cksoft.Unity;
  4. using DllEapEntity;
  5. using Microsoft.Extensions.Logging;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. namespace DllEapDal.OFILM
  11. {
  12. /// <summary>
  13. /// 每小时汇总一次产量稼动率等指标
  14. /// </summary>
  15. public class MacOutPutTimeDal
  16. {
  17. private ILogger myloger = AppConfigurtaionServices.MyLog;
  18. /// <summary>
  19. /// 逻辑处理
  20. /// </summary>
  21. public void SetData()
  22. {
  23. var time = DateTime.Now;
  24. string start = time.AddHours(-1).ToString("yyyy-MM-dd HH:00:00");
  25. string end = time.ToString("yyyy-MM-dd HH:00:00");
  26. myloger.LogError($"{start}产量计算定时任务开始");
  27. string sql = GetSql(start, end);
  28. var data = GetData(sql).ToList();
  29. if (data!=null)
  30. {
  31. int count = Add(data);
  32. if (count > 0)
  33. {
  34. myloger.LogError($"{start}产量计算定时任务成功");
  35. }
  36. else
  37. {
  38. myloger.LogError($"{start}产量计算定时任务失败");
  39. }
  40. }
  41. myloger.LogError($"{start}产量计算定时任务结束");
  42. }
  43. /// <summary>
  44. /// 插入指标数据
  45. /// </summary>
  46. /// <param name="data"></param>
  47. /// <returns></returns>
  48. private int Add(IEnumerable<OutPutTime> data)
  49. {
  50. using(IDatabase db = DbFactory.Base("eap"))
  51. {
  52. foreach (var item in data)
  53. {
  54. if (item.Day==null)
  55. {
  56. item.Day = DateTime.Now.ToString("yyyy-MM-dd");
  57. item.Hour = DateTime.Now.AddHours(-1).ToString("HH");
  58. }
  59. else
  60. {
  61. item.Day = DateTime.Parse(item.Day).ToString("yyyy-MM-dd");
  62. }
  63. }
  64. return db.InsertFor<OutPutTime>(data, "定时提交");
  65. }
  66. }
  67. /// <summary>
  68. /// 获取指标数据
  69. /// </summary>
  70. /// <param name="sql"></param>
  71. /// <returns></returns>
  72. private IEnumerable<OutPutTime> GetData(string sql)
  73. {
  74. using (IDatabase db = DbFactory.Base("eapslave"))
  75. {
  76. var data = db.FindList<OutPutTime>(sql);
  77. return data;
  78. }
  79. }
  80. /// <summary>
  81. /// 拼接sql语句
  82. /// </summary>
  83. /// <param name="start"></param>
  84. /// <param name="end"></param>
  85. /// <returns></returns>
  86. private string GetSql(string start, string end)
  87. {
  88. string count = $@"SELECT IFNULL( sum( a.FCount ), 0 ) Count,IFNULL( sum( a.FCount ), 0 ) IntCount,DATE( b.EDate ) date,HOUR ( b.EDate ) HOUR,b.MacID MacId ,c.FCode maccode
  89. FROM
  90. maccountdetail a
  91. LEFT JOIN maccountmst b ON a.mstid = b.id
  92. LEFT JOIN machine c ON b.macid = c.id
  93. WHERE
  94. a.typeID = 0 AND a.ParamCode = 'S00026' AND b.EDate>= '{start}' AND b.EDate<'{end}'
  95. GROUP BY b.MacID,c.FCode,DATE( b.EDate ),HOUR ( b.EDate ) ";
  96. string t3 = $@"SELECT IFNULL( sum( IntCount ), 0 ) IntCount,IFNULL( sum( TimeLen ), 0 ) TimeLen,maccode MacCode,StatusID
  97. FROM
  98. (
  99. SELECT IFNULL( count( 1 ), 0 ) IntCount,TIME_TO_SEC(timediff( t.ETime, '{start}' )) TimeLen,maccode MacCode,StatusID
  100. FROM macstatus t
  101. WHERE
  102. 1 = 1 AND t.stime < '{start}' AND t.etime > '{start}' AND StatusID = 3
  103. GROUP BY maccode,StatusID,t.ETime
  104. UNION ALL
  105. SELECT IFNULL( count( 1 ), 0 ) IntCount,SUM( FLen ) TimeLen,maccode MacCode,StatusID
  106. FROM
  107. macstatus t
  108. WHERE
  109. 1 = 1 AND t.stime >= '{start}' AND t.etime <= '{end}' AND StatusID = 3
  110. GROUP BY maccode,StatusID,t.sTime
  111. UNION ALL
  112. SELECT IFNULL( count( 1 ), 0 ) IntCount,TIME_TO_SEC(timediff( '{end}', t.sTime )) TimeLen,maccode MacCode,StatusID
  113. FROM
  114. macstatus t
  115. WHERE
  116. 1 = 1 AND t.stime < '{end}' AND t.etime >'{end}' AND StatusID = 3
  117. GROUP BY maccode,StatusID,t.sTime
  118. ) temp3
  119. GROUP BY maccode,StatusID ";
  120. string t4 = $@"SELECT IFNULL( sum( IntCount ), 0 ) IntCount,IFNULL( sum( TimeLen ), 0 ) TimeLen,maccode MacCode,StatusID
  121. FROM
  122. (
  123. SELECT IFNULL( count( 1 ), 0 ) IntCount,TIME_TO_SEC(timediff( t.ETime, '{start}' )) TimeLen,maccode MacCode,StatusID
  124. FROM
  125. macstatus t
  126. WHERE
  127. 1 = 1 AND t.stime < '{start}' AND t.etime >'{start}' AND StatusID = 4
  128. GROUP BY
  129. maccode,StatusID,t.ETime
  130. UNION ALL
  131. SELECT IFNULL( count( 1 ), 0 ) IntCount,SUM( FLen ) TimeLen,maccode MacCode,StatusID
  132. FROM
  133. macstatus t
  134. WHERE
  135. 1 = 1 AND t.stime >= '{start}' AND t.etime <= '{end}' AND StatusID = 4
  136. GROUP BY
  137. maccode,StatusID,t.sTime
  138. UNION ALL
  139. SELECT IFNULL( count( 1 ), 0 ) IntCount,TIME_TO_SEC(timediff( '{end}', t.sTime )) TimeLen,maccode MacCode,StatusID
  140. FROM
  141. macstatus t
  142. WHERE
  143. 1 = 1 AND t.stime < '{end}' AND t.etime > '{end}' AND StatusID = 4
  144. GROUP BY
  145. maccode,StatusID,t.sTime
  146. ) temp4
  147. GROUP BY maccode,StatusID ";
  148. string t6 = $@"SELECT IFNULL( sum( IntCount ), 0 ) IntCount,IFNULL( sum( TimeLen ), 0 ) TimeLen,maccode MacCode,StatusID
  149. FROM
  150. (
  151. SELECT IFNULL( count( 1 ), 0 ) IntCount,IF(TIME_TO_SEC(timediff( t.ETime, '{start}' ))= 0,0.01,TIME_TO_SEC(timediff( t.ETime, '{start}' ))) TimeLen,
  152. maccode MacCode,StatusID
  153. FROM
  154. macstatus t
  155. WHERE
  156. 1 = 1 AND t.stime <= '{start}' AND t.etime > '{start}' AND StatusID = 6
  157. GROUP BY maccode,StatusID,t.ETime
  158. UNION ALL
  159. SELECT IFNULL( count( 1 ), 0 ) IntCount,SUM(IF( flen = 0, 0.01, FLen )) TimeLen,maccode MacCode,StatusID
  160. FROM
  161. macstatus t
  162. WHERE
  163. 1 = 1 AND t.stime >= '{start}' AND t.etime <= '{end}' AND StatusID = 6
  164. GROUP BY maccode,StatusID,t.sTime
  165. UNION ALL
  166. SELECT IFNULL( count( 1 ), 0 ) IntCount,IF(TIME_TO_SEC(timediff( '{end}', t.sTime ))= 0,0.01,TIME_TO_SEC(timediff( '{end}', t.sTime ))) TimeLen,
  167. maccode MacCode,StatusID
  168. FROM macstatus t
  169. WHERE
  170. 1 = 1 AND t.stime < '{end}' AND t.etime >'{end}' AND StatusID = 6
  171. GROUP BY
  172. maccode,StatusID,t.sTime
  173. ) temp6
  174. GROUP BY
  175. maccode,StatusID";
  176. return $@"SELECT aa.Id macid, count.maccode maccode,count.date DAY,count.HOUR HOUR,IFNULL( count.count, 0 ) count,IFNULL( t4.TimeLen, 0 ) RunTime,
  177. IFNULL( ROUND( t4.TimeLen / 3600, 4 ), 0 ) Runrate,IFNULL( t3.TimeLen, 0 ) StandbyTime,IFNULL( ROUND( t3.TimeLen / 3600, 4 ), 0 ) StandbyRate,
  178. IFNULL( t6.TimeLen, 0 ) AlarmTime,IFNULL( ROUND( t6.TimeLen / 3600, 4 ), 0 ) AlarmRate,IFNULL( t6.IntCount, 0 ) AlarmCount
  179. FROM
  180. (
  181. machine aa left join
  182. ({count}) count on count.macid=aa.id
  183. LEFT JOIN ({t6}) t6 ON t6.maccode = count.maccode
  184. LEFT JOIN ({t4}) t4 ON t4.maccode = count.maccode
  185. LEFT JOIN ({t3}) t3 ON t3.maccode = count.maccode
  186. ) ORDER BY maccode";
  187. }
  188. }
  189. }