123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921 |
- using Cksoft.Data;
- using Cksoft.Unity;
- using DllEapEntity.Dtos;
- using DllEapEntity.OFILM;
- using DllEapEntity.RA;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using ChartDto = DllEapEntity.OFILM.ChartDto;
- namespace DllEapDal.RA
- {
- public class DataBoardDal
- {
- private IDatabase db;
- public DataBoardDal(IDatabase db)
- {
- this.db = db;
- }
- public List<Center<MachineShort>> Get(DateTime time, string fcode, string factory, string status, string fname, ref List<Center<Params>> da,ref double coun)
- {
- DateTime starttime;
- DateTime start;
- DateTime endtime;
-
- if (DateTime.Now.Subtract(time).TotalDays<1)
- {
- starttime = DateTime.Now.AddMinutes(-1);
- start= Convert.ToDateTime(DateTime.Now.ToString("D").ToString());
- endtime = starttime;
- }
- else
- {
- start= Convert.ToDateTime(time.ToString("D").ToString());
- endtime=Convert.ToDateTime(time.AddDays(1).ToString("D").ToString());
- starttime = endtime.AddMinutes(-1);
- }
- string str = " ";
- /* string sql = $@" and b.rectime=='{DateTime.Now.ToString("yyyy-MM-dd HH:mm:00")}' and c.endtime='0001-01-01 00:00:00'";
- IEnumerable<MachineShort> data = db.FindListForCondition<MachineShort>(" a", ref error);*/
- var ss = new MachineShort().GetQueryColSql();
- string sql = $@"select {ss} from machine a left outer join ((select * from baseinfo where id in (select max(id) from baseinfo where modetime<'{endtime.AddMinutes(1).ToString("yyyy-MM-dd HH:mm")}' GROUP BY(MacID)))) b on a.id =b.macid
- left outer join (select * from statusinfo where id in (select max(id) from statusinfo where Duration>0 and StartTime<'{endtime.ToString("yyyy-MM-dd HH:mm:ss")}' GROUP BY macid)) c on a.id =c.macid left outer join supplier d on a.SupplierID =d.id where 1=1 and a.rectime<'{endtime.ToString("yyyy-MM-dd HH:mm:ss")}' ";
- if (!string.IsNullOrEmpty(fcode))
- {
- sql += $@" and a.fcode like '{fcode}'";
- str += $@" and fcode like '{fcode}'";
- }
- if (!string.IsNullOrEmpty(factory))
- {
- sql += $@" and a.factory like '{factory}'";
- str += $@" and factory like '{factory}'";
- }
- if (!string.IsNullOrEmpty(status))
- {
- sql += $@" and c.status like '{status}'";
- }
- if (!string.IsNullOrEmpty(fname))
- {
- sql += $@" and d.FName like '{fname}'";
- }
- sql += $@" ORDER BY FIND_IN_SET(a.Factory,'未来城,2号园区,HC园区'),a.FCode";
- IEnumerable<MachineShort> data1 = db.FindList<MachineShort>(sql);
- foreach (var item in data1)
- {
- if (string.IsNullOrEmpty(item.HumidPV))
- item.HumidPV = "0";
- if (string.IsNullOrEmpty(item.TemperaturePV))
- item.TemperaturePV = "0";
- if (string.IsNullOrEmpty(item.Duration))
- item.Duration = "0";
- if (string.IsNullOrEmpty(item.Cycle))
- item.Cycle = "0";
- if (string.IsNullOrEmpty(item.Step))
- item.Step = "0";
- if (string.IsNullOrEmpty(item.Hour))
- item.Hour = "0";
- if (string.IsNullOrEmpty(item.Minutes))
- item.Minutes = "0";
- if (string.IsNullOrEmpty(item.ProgramName))
- item.ProgramName = "暂无";
- if (string.IsNullOrEmpty(item.Status))
- item.Status = "-1";
- if (item.Status=="-1")
- {
- item.HumidPV = "0";
- item.TemperatureSV = "0";
- item.TemperaturePV = "0";
- item.HumidSv = "0";
- }
- if (DateTime.Now.Subtract(starttime).TotalMinutes>1)
- {
- item.Duration = Math.Round(endtime.Subtract(item.StartTime).TotalHours,2).ToString();
- }
- /* item.Duration=DateTime.Now.Subtract(item.)*/
- }
-
- var data = new List<Center<MachineShort>>();
- var li=data1?.GroupBy(c => c.Factory);
- var s =new List<string>();
- if (li != null)
- {
-
- foreach (var item in li)
- {
- var d = new Center<MachineShort>();
- d.name = item.Key;
- s.Add(item.Key);
- d.list = item.ToList();
- data.Add(d);
- }
- }
- int count = 0, count1 = 0, count2 = 0, count3 = 0, count4 = 0;
- /* List<string> s1 = new List<string>();
- List<string> s2 = new List<string>();
- List<string> s3 = new List<string>();
- List<string> s4 = new List<string>();*/
- var a = new Center<Params>()
- {
- name = "rate", list = new List<Params>()
- };
- var b = new Center<Params>()
- {
- name = "status",
- list = new List<Params>()
- };
- string error = "";
- foreach (var item in s)
- {
-
-
- DateTime date;
- var r = db.FindList<Machine>($@"select * from machine where Factory='{item}' and rectime<'{endtime.ToString("yyyy-MM-dd HH:mm:ss")}' " +str);
- int total = 0;
-
- double x = 0;
-
- foreach (var i in r)
- {
-
- bool bl = false;
- DateTime end = endtime;
- var statu = db.FindListForCondition<StatusInfo>($@" and macid={i.ID} and starttime <'{endtime.ToString("yyyy-MM-dd HH:mm:ss")}' order by modetime desc", ref error).ToList();
-
- foreach (var j in statu)
- {
- if (!string.IsNullOrEmpty(status))
- {
- if (statu[0].Status != status)
- {
- break;
- }
- }
-
- if (j.EndTime.ToString("yyyy-MM-dd HH:mm:ss") == "0001-01-01 00:00:00")
- {
- if (start >j.StartTime)
- {
- date = end > DateTime.Now ? DateTime.Now : end;
- if (j.Status == "1")
- x += date.Subtract(start).TotalHours;
- if (j.Status == "0")
- {
- count1 += 1;
- /*s1.Add(i.FCode);*/
- }
- if (j.Status == "1")
- {
- count2 += 1;
- /* s2.Add(i.FCode);*/
- }
- if (j.Status == "2")
- {
- count3 += 1;
- /* s3.Add(i.FCode);*/
- }
- if (j.Status == "-1")
- {
- count4 += 1;
- /* s4.Add(i.FCode);*/
- }
- count += 1;
- total += 1;
- break;
- }
- else if (end > j.StartTime)
- {
- date = end > DateTime.Now ? DateTime.Now : end;
- if (j.Status == "1")
- x += date.Subtract(j.StartTime).TotalHours;
- if (j.Status == "0")
- {
- count1 += 1;
- /* s1.Add(i.FCode);*/
- }
- if (j.Status == "1")
- {
- count2 += 1;
- /* s2.Add(i.FCode);*/
- }
- if (j.Status == "2")
- {
- count3 += 1;
- /* s3.Add(i.FCode);*/
- }
- if (j.Status == "-1")
- {
- count4 += 1;
- /* s4.Add(i.FCode);*/
- }
- count += 1;
- total += 1;
- end = j.StartTime;
- bl = true;
- continue;
- }
- }
- else
- {
- if (bl)
- {
- if (start > j.StartTime )
- {
- if (j.Status == "1")
- {
- x += end.Subtract(start).TotalHours;
- }
-
- break;
- }
- else if (end > j.StartTime)
- {
- if(j.Status == "1")
- {
- x += end.Subtract(j.StartTime).TotalHours;
-
- }
- end = j.StartTime;
- bl = true;
- continue;
- }
- }
- else
- {
- if (start > j.StartTime )
- {
- if (j.Status == "1")
- x += end.Subtract(start).TotalHours;
- if (j.Status == "0")
- {
- count1 += 1;
- /* s1.Add(i.FCode);*/
- }
- if (j.Status == "1")
- {
- count2 += 1;
- /* s2.Add(i.FCode);*/
- }
- if (j.Status == "2")
- {
- count3 += 1;
- /* s3.Add(i.FCode);*/
- }
- if (j.Status == "-1")
- {
- count4 += 1;
- /* s4.Add(i.FCode);*/
- }
- count += 1;
- total += 1;
- break;
- }
- else if (end > j.StartTime )
- {
- if (j.Status == "1")
- x += end.Subtract(j.StartTime).TotalHours;
- if (j.Status == "0")
- {
- count1 += 1;
- /* s1.Add(i.FCode);*/
- }
- if (j.Status == "1")
- {
- count2 += 1;
- /* s2.Add(i.FCode);*/
- }
- if (j.Status == "2")
- {
- count3 += 1;
- /*s3.Add(i.FCode);*/
- }
- if (j.Status == "-1")
- {
- count4 += 1;
- /* s4.Add(i.FCode);*/
- }
- count += 1;
- total += 1;
- end = j.StartTime;
- bl = true;
- continue;
- }
- }
- }
- }
- }
- coun = Math.Round(x,2);
- total = total > 0 ? total : 1;
- a.list.Add(new Params() { name = item, value = Math.Round(x / (total * (endtime.Subtract(start).TotalHours))*100, 2).ToString() }
- );
- }
-
-
- b.list.Add(new Params() { name = "总计",value = count.ToString()
- });
- b.list.Add(new Params() { name = "停机",value = count1.ToString()});
-
- b.list.Add(new Params() { name = "运转",value = count2.ToString()});
- b.list.Add(new Params() { name = "预约",value = count3.ToString()});
-
- b.list.Add(new Params() { name = "离线", value = count4.ToString()
- });
- da.Add(a);
- da.Add(b);
- /* List<List<string>> strr = new List<List<string>>();
- strr.Add(s1); strr.Add(s2); strr.Add(s3); strr.Add(s4);
- data.Add(new Center<MachineShort>() { str = strr });*/
- return data;
- }
- public LayuiModel<TempDetail> GetTempDetail(DateTime start, DateTime end, string fcode, int pageIndex, int pageSize)
- {
-
- string sql = $@"select a.FCode FCode,b.HumidPV HumidPV,b.TemperaturePV TemperaturePV,b.HumidSv HumidSv,b.TemperatureSV TemperatureSV,a.MacNum MacNum,b.ModeTime date from machine a left outer join baseinfo b on a.id =b.macid
- left outer join supplier d on a.SupplierID =d.id where 1=1 and b.ModeTime>='{start.ToString("yyyy-MM-dd HH:mm:ss")}' and b.ModeTime<='{end.ToString("yyyy-MM-dd HH:mm:ss")}' and a.FCode='{fcode}' order by b.ModeTime desc limit {(pageIndex - 1) * pageSize},{pageSize}";
- string error = "";
- var data = db.FindList<TempDetail>(sql);
- var dto = GetTemp(start.ToString("yyyy-MM-dd HH:mm:ss"), end.ToString("yyyy-MM-dd HH:mm:ss"), fcode);
- var total = Convert.ToInt32(db.FindObject($@"select count(1) from machine a left outer join baseinfo b on a.id =b.macid
- left outer join supplier d on a.SupplierID =d.id where 1=1 and b.ModeTime>='{start.ToString("yyyy-MM-dd HH:mm:ss")}' and b.ModeTime<='{end.ToString("yyyy-MM-dd HH:mm:ss")}' and a.FCode='{fcode}'"));
- return new LayuiModel<TempDetail>()
- {
- code = 1,
- data = data,
- count=total,
- extraObject = dto
- };
-
- }
-
- public IEnumerable<AlarmDetails> GetAlarmDetails(DateTime date, string fcode)
- {
- string str = string.Empty;
- return db.FindListForCondition<AlarmDetails>($@" and a.starttime >='{date.ToString("yyyy-MM-dd HH:mm:ss")}' and b.fcode='{fcode}' order by a.starttime desc" ,ref str);
- }
- public LayuiModel<MachineBase> GetBase(DateTime? time, string fcode)
- {
- DateTime t;
- var d = new List<Center<Params>>();
- if (!time.HasValue)
- {
- t = DateTime.Now;
- }
- else
- {
- t = time.Value;
- }
- double ds = 0;
- var x = Get(t, fcode, string.Empty, string.Empty, string.Empty, ref d,ref ds);
- MachineBase y = new MachineBase();
- var dic = new Dictionary<string, string>();
- dic.Add("-1", "离线"); dic.Add("0", "停机"); dic.Add("1", "运转"); dic.Add("2", "预约");
- if (x != null)
- {
- foreach (var item in x)
- {
- foreach (var it in item.list)
- {
- if (it.FCode == fcode)
- {
- y.FCode = it.FCode;
- y.FName = it.FName;
- y.Cycle = it.Cycle;
- y.Time = (Convert.ToInt32(it.Hour) + Math.Round(Convert.ToDouble(it.Minutes) / 60, 2)).ToString();
- y.Model = it.Model;
- y.Hour = it.Hour;
- y.Minutes = it.Minutes;
- y.ProgramName = it.ProgramName;
- y.Status = it.Status;
- y.Step = it.Step;
- y.IPAdress = it.IPAdress;
- switch ((y.Status))
- {
- case "-1":
- y.StatusName = "离线";
- break;
- case "0":
- y.StatusName = "停机";
- break;
- case "1":
- y.StatusName = "运转";
- break;
- case "2":
- y.StatusName = "预约";
- break;
- default:
- y.StatusName = "暂无";
- break;
- }
-
- }
- }
- }
- }
-
-
-
- y.StatusTime = ds.ToString();
- string str = string.Empty;
- var dd = new Dictionary<string, string>();
- var z = GetAlarm(t, fcode,ref dd);
- foreach (var item in dd)
- {
- if (item.Key == t.ToString("yyyy-MM-dd"))
- {
- y.AlarmNum = item.Value;
- }
- }
-
- foreach (var item in d)
- {
- if (item.name =="rate")
- {
- y.Rate = item.list[0].value;
- }
- }
- return new LayuiModel<MachineBase>()
- {
- code = 1,
- data = new List<MachineBase>() { y }
- };
- }
- public ChartDto GetAlarm(DateTime? time, string fcode,ref Dictionary<string,string> dic)
- {
- if (!time.HasValue)
- {
- time = DateTime.Now;
- }
- string str = string.Empty;
- var data = new ChartDto();
- data.XData = new List<string>();
- data.SeriesData = new List<DllEapEntity.OFILM.Series>();
- for (int i = 0; i< 4; i++)
- {
-
- DateTime d = time.Value.AddDays(-i);
- data.XData.Add(d.ToString("yyyy-MM-dd"));
- string sql = $@"select count(1) from alarminfo a left outer join machine b on a.macid =b.id where b.fcode='{fcode}' and a.rectime>='{d.ToString("yyyy-MM-dd 00:00:00")}' and a.rectime<'{d.AddDays(1).ToString("yyyy-MM-dd 00:00:00")}'";
- var da = db.FindObject(sql);
- data.SeriesData.Add(new DllEapEntity.OFILM.Series() { Name = d.ToString("yyyy-MM-dd"), YAxis = 0, Type = "column", Data = new List<decimal>() { decimal.Parse(da.ToString()) } });
- dic.Add(d.ToString("yyyy-MM-dd"), da.ToString());
- }
-
-
- return data;
- }
- public List<Center<Center<ArrayList>>> GetTemp(string start,string end, string fcode)
- {
-
-
- string str = string.Empty;
- string sql = $@" and b.fcode='{fcode}' and a.modetime >='{start}' and a.modetime<'{end}'";
- var x = db.FindListForCondition<BaseInfo>(sql, ref str).ToList();
- var tep = new Center<ArrayList>()
- {
- name = "温度实际值",
- list = new List<ArrayList>()
- };
- var tes = new Center<ArrayList>()
- {
- name = "温度标准值",
- list = new List<ArrayList>()
- };
- var hp = new Center<ArrayList>()
- {
- name = "湿度实际值",
- list = new List<ArrayList>()
- };
- var hs = new Center<ArrayList>()
- {
- name = "湿度标准值",
- list = new List<ArrayList>()
- };
- /*foreach (var item in x)
- {
- ArrayList aa = new ArrayList()
- {
- item.RecTime.ToString("HH:mm"),
- Convert.ToDouble(item.TemperaturePV.Trim())
-
- };
- tep.list.Add(aa);
- ArrayList bb = new ArrayList()
- {
- item.RecTime.ToString("HH:mm"),
- Convert.ToDouble(item.TemperatureSV.Trim())
- };
- tes.list.Add(bb);
- ArrayList cc = new ArrayList
- {
- item.RecTime.ToString("HH:mm"),
- Convert.ToDouble(item.HumidPV.Trim())
- };
- hp.list.Add(cc);
- ArrayList arrayList = new ArrayList();
- arrayList.Add(item.RecTime.ToString("HH:mm"));
- arrayList.Add(Convert.ToDouble(item.HumidSv.Trim()));
-
- hs.list.Add(arrayList);
-
- }
- var bs = x.LastOrDefault();
- if (DateTime.Parse(bs.RecTime.ToString("HH:mm")) < DateTime.Parse(DateTime.Parse(end).AddSeconds(-1).ToString("HH: mm")))
- {
- for (DateTime i=bs.RecTime.AddMinutes(1); i<= DateTime.Parse(end); i=i.AddMinutes(1))
- {
- ArrayList array = new ArrayList()
- {
- i.ToString("HH:mm"),
- null
- };
- tep.list.Add(array);
- tes.list.Add(array);
- hp.list.Add(array);
- hs.list.Add(array);
- }
- }*/
- for (DateTime i = DateTime.Parse(start); i <= DateTime.Parse(end); i = i.AddMinutes(1))
- {
- var data1 = x.FirstOrDefault(c => (c.ModeTime.ToString("yyyy-MM-dd HH:mm:00") == i.ToString("yyyy-MM-dd HH:mm:00")));
- var data2 = x.Where(c => (c.ModeTime > DateTime.Parse(i.AddMinutes(-5).ToString("yyyy-MM-dd HH:mm:00")) && c.ModeTime <= DateTime.Parse(i.AddMinutes(5).ToString("yyyy-MM-dd HH:mm:00")))).ToList();
- if (data1 == null)
- {
- if (data2.Count < 1)
- {
- ArrayList array = new ArrayList()
- {
- i.ToString("yyyy-MM-dd HH:mm:ss"),
- null
- };
- tep.list.Add(array);
- tes.list.Add(array);
- hp.list.Add(array);
- hs.list.Add(array);
- }
- }
- else
- {
- ArrayList aa = new ArrayList()
- {
- i.ToString("yyyy-MM-dd HH:mm:ss"),
- Convert.ToDouble(data1.TemperaturePV.Trim())
- };
- tep.list.Add(aa);
- ArrayList bb = new ArrayList()
- {
- i.ToString("yyyy-MM-dd HH:mm:ss"),
- Convert.ToDouble(data1.TemperatureSV.Trim())
- };
- tes.list.Add(bb);
- ArrayList cc = new ArrayList
- {
- i.ToString("yyyy-MM-dd HH:mm:ss"),
- Convert.ToDouble(data1.HumidPV.Trim())
- };
- hp.list.Add(cc);
- ArrayList arrayList = new ArrayList();
- arrayList.Add(i.ToString("yyyy-MM-dd HH:mm:ss"));
- arrayList.Add(Convert.ToDouble(data1.HumidSv.Trim()));
- hs.list.Add(arrayList);
- }
- }
- var data = new List<Center<Center<ArrayList>>>()
- {
- new Center<Center<ArrayList>>
- {
- name="温度",
- list=new List<Center<ArrayList>>
- {
- tep,tes
- }
- },
- new Center<Center<ArrayList>>
- {
- name="湿度",
- list=new List<Center<ArrayList>>
- {
- hp,hs
- }
- }
- };
- return data;
- }
- public IEnumerable<RunHistroyDto> GetStatus(DateTime time,string fcode, out List<StatusRatio> d)
- {
- DateTime start, end;
- var dd = new List<StatusRatio>();
- if (DateTime.Now.Subtract(time).TotalDays < 1)
- {
- end = DateTime.Now.AddMinutes(-1);
- start = Convert.ToDateTime(DateTime.Now.ToString("D").ToString());
-
- }
- else
- {
- start = Convert.ToDateTime(time.ToString("D").ToString());
- end = Convert.ToDateTime(time.AddDays(1).ToString("D").ToString()).AddSeconds(-1);
- }
- string str = string.Empty;
- DateTime date = DateTime.Now;
- var x = db.FindListForCondition<StatusInfo>($@" and starttime<='{end.ToString("yyyy-MM-dd HH:mm:ss")}' and macid=(select id from machine where fcode='{fcode}') ORDER BY StartTime desc ", ref str);
- var y = new List<StatusInfo>();
- foreach (var item in x)
- {
- if (item.EndTime < start && item.EndTime.ToString("yyyy-MM-dd HH:mm:ss") != "0001-01-01 00:00:00")
- {
- if (y.Count == 0){
- y.Add(item);
- }
- break;
- }
- y.Add(item);
- }
- var history = new List<RunHistroyDto>();
- var dateFormatter = "yyyy-MM-dd H:mm:ss";
- var dic = new Dictionary<string, string>();
- dic.Add("-1", "离线"); dic.Add("0", "停机"); dic.Add("1", "运转"); dic.Add("2", "预约");
- foreach (var item in dic)
- {
- dd.Add(new StatusRatio()
- {
- Status = item.Key,
- StatusName = item.Value,
- ratio = 0,
- time = 0
- });
- }
- double sum = 0;
- if (y.Count > 0)
- {
- for (int i = y.Count - 1; i >= 0; i--)
- {
- if (y[i].StartTime <= start)
- {
- if (y[i].EndTime >= end)
- {
- var z = new RunHistroyDto()
- {
- Start = start.Hour * 100 + start.Minute,
- StartTime = start.ToString(dateFormatter),
- End = end.Hour * 100 + end.Minute,
- EndTime = end.ToString(dateFormatter) ,
- MacCode = fcode,
- Status = y[i].Status,
-
- TimeLen = Math.Round( end.Subtract(start).TotalHours , 2),
- Duration = AppendDuration( end - start ),
- /* Color=*/
- };
- switch ((z.Status))
- {
- case "-1":
- z.StatusName = "离线";
- break;
- case "0":
- z.StatusName = "停机";
- break;
- case "1":
- z.StatusName = "运转";
- break;
- case "2":
- z.StatusName = "预约";
- break;
- default:
- z.StatusName = "暂无";
- break;
- }
- history.Add(z);
- foreach (var item in dd)
- {
- if (z.Status == item.Status)
- {
- item.time += z.TimeLen;
- }
- }
- sum += z.TimeLen;
- break;
- }
- else if(y[i].EndTime.ToString("yyyy-MM-dd HH:mm:ss") == "0001-01-01 00:00:00")
- {
- var z = new RunHistroyDto()
- {
- Start = start.Hour * 100 + start.Minute,
- StartTime = start.ToString(dateFormatter),
- End = date > end ? end.Hour * 100 + end.Minute : date.Hour * 100 + date.Minute,
- EndTime = date > end ? end.ToString(dateFormatter) : date.ToString(dateFormatter),
- MacCode = fcode,
- Status = y[i].Status,
- StatusName = dic[y[i].Status],
- TimeLen = Math.Round(date > end ? end.Subtract(start).TotalHours : date.Subtract(start).TotalMinutes, 2),
- Duration = AppendDuration(date > end ? end - start : date - start),
- /* Color=*/
- };
- history.Add(z);
- foreach (var item in dd)
- {
- if (z.Status == item.Status)
- {
- item.time += z.TimeLen;
- }
- }
- sum += z.TimeLen;
- break;
- }
- else
- {
- var z = new RunHistroyDto()
- {
- Start = start.Hour * 100 + start.Minute,
- StartTime = start.ToString(dateFormatter),
- End = y[i].EndTime.Hour * 100 + y[i].EndTime.Minute ,
- EndTime = y[i].EndTime.ToString(dateFormatter) ,
- MacCode = fcode,
- Status = y[i].Status,
- StatusName = dic[y[i].Status],
- TimeLen = Math.Round(y[i].EndTime.Subtract(start).TotalHours, 2),
- Duration = AppendDuration(y[i].EndTime - start ),
- /* Color=*/
- };
- history.Add(z);
- foreach (var item in dd)
- {
- if (z.Status == item.Status)
- {
- item.time += z.TimeLen;
- }
- }
- sum += z.TimeLen;
- start = y[i].EndTime;
- }
- }
- else
- {
- var z1 = new RunHistroyDto()
- {
- Start = start.Hour * 100 + start.Minute,
- StartTime = start.ToString(dateFormatter),
- End = y[i].StartTime.Hour * 100 + y[i].StartTime.Minute,
- EndTime = y[i].StartTime.ToString(dateFormatter),
- MacCode = fcode,
- Status = "-1",
- StatusName = dic["-1"],
- TimeLen = Math.Round(y[i].StartTime.Subtract(start).TotalHours, 2),
- Duration = AppendDuration(y[i].StartTime - start),
- /* Color=*/
- };
- history.Add(z1);
- foreach (var item in dd)
- {
- if (z1.Status == item.Status)
- {
- item.time += z1.TimeLen;
- }
- }
- sum += z1.TimeLen;
- start = y[i].StartTime;
- if (y[i].EndTime >= end)
- {
- var z = new RunHistroyDto()
- {
- Start = start.Hour * 100 + start.Minute,
- StartTime = start.ToString(dateFormatter),
- End = end.Hour * 100 + end.Minute,
- EndTime = end.ToString(dateFormatter),
- MacCode = fcode,
- Status = y[i].Status,
- StatusName = dic[y[i].Status],
- TimeLen = Math.Round(end.Subtract(start).TotalHours, 2),
- Duration = AppendDuration(end - start),
- /* Color=*/
- };
- history.Add(z);
- foreach (var item in dd)
- {
- if (z.Status == item.Status)
- {
- item.time += z.TimeLen;
- }
- }
- sum += z.TimeLen;
- break;
- }
- else if (y[i].EndTime.ToString("yyyy-MM-dd HH:mm:ss") == "0001-01-01 00:00:00")
- {
- var z = new RunHistroyDto()
- {
- Start = start.Hour * 100 + start.Minute,
- StartTime = start.ToString(dateFormatter),
- End = date > end ? end.Hour * 100 + end.Minute : date.Hour * 100 + date.Minute,
- EndTime = date > end ? end.ToString(dateFormatter) : date.ToString(dateFormatter),
- MacCode = fcode,
- Status = y[i].Status,
- StatusName = dic[y[i].Status],
- TimeLen = Math.Round(date > end ? end.Subtract(start).TotalHours : date.Subtract(start).TotalMinutes, 2),
- Duration = AppendDuration(date > end ? end - start : date - start),
- /* Color=*/
- };
- history.Add(z);
- foreach (var item in dd)
- {
- if (z.Status == item.Status)
- {
- item.time += z.TimeLen;
- }
- }
- sum += z.TimeLen;
- break;
- }
- else
- {
- var z = new RunHistroyDto()
- {
- Start = start.Hour * 100 + start.Minute,
- StartTime = start.ToString(dateFormatter),
- End = y[i].EndTime.Hour * 100 + y[i].EndTime.Minute,
- EndTime = y[i].EndTime.ToString(dateFormatter),
- MacCode = fcode,
- Status = y[i].Status,
- StatusName = dic[y[i].Status],
- TimeLen = Math.Round(y[i].EndTime.Subtract(start).TotalHours, 2),
- Duration = AppendDuration(y[i].EndTime - start),
- /* Color=*/
- };
- history.Add(z);
- foreach (var item in dd)
- {
- if (z.Status == item.Status)
- {
- item.time += z.TimeLen;
- }
- }
- sum += z.TimeLen;
- start = y[i].EndTime;
- }
- }
-
- }
- }
- foreach (var item in dd)
- {
- item.ratio = Math.Round(item.time / sum, 2) * 100;
- }
- d = dd;
- return history;
- }
- private string AppendDuration(TimeSpan timeSpan)
- {
- var days = timeSpan.Days;
- var hours = 0;
- if (days > 0)
- {
- hours = days * 24;
- }
- hours += timeSpan.Hours;
- var hourPart = hours + "小时";
- var minutePart = timeSpan.Minutes + "分";
- var secondPart = timeSpan.Seconds + "秒";
- if (timeSpan.TotalSeconds < 60)
- return secondPart;
- else if (timeSpan.TotalSeconds < 3600)
- {
- return minutePart + secondPart;
- }
- else
- {
- return hourPart + minutePart + secondPart;
- }
- }
- }
- }
|