using Cksoft.Data; using Cksoft.Data.Repository; using Cksoft.Unity; using DllEapEntity; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DllEapDal.OFILM { /// /// 每小时汇总一次产量稼动率等指标 /// public class MacOutPutTimeDal { private ILogger myloger = AppConfigurtaionServices.MyLog; /// /// 逻辑处理 /// public void SetData() { var time = DateTime.Now; string start = time.AddHours(-1).ToString("yyyy-MM-dd HH:00:00"); string end = time.ToString("yyyy-MM-dd HH:00:00"); myloger.LogError($"{start}产量计算定时任务开始"); string sql = GetSql(start, end); var data = GetData(sql).ToList(); if (data!=null) { int count = Add(data); if (count > 0) { myloger.LogError($"{start}产量计算定时任务成功"); } else { myloger.LogError($"{start}产量计算定时任务失败"); } } myloger.LogError($"{start}产量计算定时任务结束"); } /// /// 插入指标数据 /// /// /// private int Add(IEnumerable data) { using(IDatabase db = DbFactory.Base("eap")) { foreach (var item in data) { if (item.Day==null) { item.Day = DateTime.Now.ToString("yyyy-MM-dd"); item.Hour = DateTime.Now.AddHours(-1).ToString("HH"); } else { item.Day = DateTime.Parse(item.Day).ToString("yyyy-MM-dd"); } } return db.InsertFor(data, "定时提交"); } } /// /// 获取指标数据 /// /// /// private IEnumerable GetData(string sql) { using (IDatabase db = DbFactory.Base("eapslave")) { var data = db.FindList(sql); return data; } } /// /// 拼接sql语句 /// /// /// /// private string GetSql(string start, string end) { 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 FROM maccountdetail a LEFT JOIN maccountmst b ON a.mstid = b.id LEFT JOIN machine c ON b.macid = c.id WHERE a.typeID = 0 AND a.ParamCode = 'S00026' AND b.EDate>= '{start}' AND b.EDate<'{end}' GROUP BY b.MacID,c.FCode,DATE( b.EDate ),HOUR ( b.EDate ) "; string t3 = $@"SELECT IFNULL( sum( IntCount ), 0 ) IntCount,IFNULL( sum( TimeLen ), 0 ) TimeLen,maccode MacCode,StatusID FROM ( SELECT IFNULL( count( 1 ), 0 ) IntCount,TIME_TO_SEC(timediff( t.ETime, '{start}' )) TimeLen,maccode MacCode,StatusID FROM macstatus t WHERE 1 = 1 AND t.stime < '{start}' AND t.etime > '{start}' AND StatusID = 3 GROUP BY maccode,StatusID,t.ETime UNION ALL SELECT IFNULL( count( 1 ), 0 ) IntCount,SUM( FLen ) TimeLen,maccode MacCode,StatusID FROM macstatus t WHERE 1 = 1 AND t.stime >= '{start}' AND t.etime <= '{end}' AND StatusID = 3 GROUP BY maccode,StatusID,t.sTime UNION ALL SELECT IFNULL( count( 1 ), 0 ) IntCount,TIME_TO_SEC(timediff( '{end}', t.sTime )) TimeLen,maccode MacCode,StatusID FROM macstatus t WHERE 1 = 1 AND t.stime < '{end}' AND t.etime >'{end}' AND StatusID = 3 GROUP BY maccode,StatusID,t.sTime ) temp3 GROUP BY maccode,StatusID "; string t4 = $@"SELECT IFNULL( sum( IntCount ), 0 ) IntCount,IFNULL( sum( TimeLen ), 0 ) TimeLen,maccode MacCode,StatusID FROM ( SELECT IFNULL( count( 1 ), 0 ) IntCount,TIME_TO_SEC(timediff( t.ETime, '{start}' )) TimeLen,maccode MacCode,StatusID FROM macstatus t WHERE 1 = 1 AND t.stime < '{start}' AND t.etime >'{start}' AND StatusID = 4 GROUP BY maccode,StatusID,t.ETime UNION ALL SELECT IFNULL( count( 1 ), 0 ) IntCount,SUM( FLen ) TimeLen,maccode MacCode,StatusID FROM macstatus t WHERE 1 = 1 AND t.stime >= '{start}' AND t.etime <= '{end}' AND StatusID = 4 GROUP BY maccode,StatusID,t.sTime UNION ALL SELECT IFNULL( count( 1 ), 0 ) IntCount,TIME_TO_SEC(timediff( '{end}', t.sTime )) TimeLen,maccode MacCode,StatusID FROM macstatus t WHERE 1 = 1 AND t.stime < '{end}' AND t.etime > '{end}' AND StatusID = 4 GROUP BY maccode,StatusID,t.sTime ) temp4 GROUP BY maccode,StatusID "; string t6 = $@"SELECT IFNULL( sum( IntCount ), 0 ) IntCount,IFNULL( sum( TimeLen ), 0 ) TimeLen,maccode MacCode,StatusID FROM ( 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, maccode MacCode,StatusID FROM macstatus t WHERE 1 = 1 AND t.stime <= '{start}' AND t.etime > '{start}' AND StatusID = 6 GROUP BY maccode,StatusID,t.ETime UNION ALL SELECT IFNULL( count( 1 ), 0 ) IntCount,SUM(IF( flen = 0, 0.01, FLen )) TimeLen,maccode MacCode,StatusID FROM macstatus t WHERE 1 = 1 AND t.stime >= '{start}' AND t.etime <= '{end}' AND StatusID = 6 GROUP BY maccode,StatusID,t.sTime UNION ALL 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, maccode MacCode,StatusID FROM macstatus t WHERE 1 = 1 AND t.stime < '{end}' AND t.etime >'{end}' AND StatusID = 6 GROUP BY maccode,StatusID,t.sTime ) temp6 GROUP BY maccode,StatusID"; return $@"SELECT aa.Id macid, count.maccode maccode,count.date DAY,count.HOUR HOUR,IFNULL( count.count, 0 ) count,IFNULL( t4.TimeLen, 0 ) RunTime, IFNULL( ROUND( t4.TimeLen / 3600, 4 ), 0 ) Runrate,IFNULL( t3.TimeLen, 0 ) StandbyTime,IFNULL( ROUND( t3.TimeLen / 3600, 4 ), 0 ) StandbyRate, IFNULL( t6.TimeLen, 0 ) AlarmTime,IFNULL( ROUND( t6.TimeLen / 3600, 4 ), 0 ) AlarmRate,IFNULL( t6.IntCount, 0 ) AlarmCount FROM ( machine aa left join ({count}) count on count.macid=aa.id LEFT JOIN ({t6}) t6 ON t6.maccode = count.maccode LEFT JOIN ({t4}) t4 ON t4.maccode = count.maccode LEFT JOIN ({t3}) t3 ON t3.maccode = count.maccode ) ORDER BY maccode"; } } }