private SingleSlaTable AddTime_Normal(SingleSlaTable info, TimeSpan ts) { if (ts.Hours > 8) { DateTime dt1 = new DateTime(2018, 1, 1, 9, 0, 0); DateTime dt2 = new DateTime(2018, 1, 1, 0, 0, 0); ts = dt1 - dt2; } info.sla_time_second += ts.Seconds; if (info.sla_time_second > 59) { info.sla_time_second -= 60; info.sla_time_minute += 1; if (info.sla_time_minute > 59) { info.sla_time_minute -= 60; info.sla_time_hour += 1; } } info.sla_time_minute += ts.Minutes; if (info.sla_time_minute > 59) { info.sla_time_minute -= 60; info.sla_time_hour += 1; } info.sla_time_hour += ts.Hours; return(info); }
private List <SingleSlaTable> NormalizedSla(List <SlaTable> slaList) { List <SingleSlaTable> singleSla = new List <SingleSlaTable>(); for (int i = 0; i < slaList.Count; i++) { bool flag = false; for (int j = 0; j < singleSla.Count; j++) { if (slaList[i].id == singleSla[j].id) { flag = true; break; } } if (!flag) { SingleSlaTable temp = new SingleSlaTable(); temp.id = slaList[i].id; temp.project_id = slaList[i].project_id; temp.created_on = slaList[i].created_on; temp.closed_on = slaList[i].closed_on; temp.rate = slaList[i].rate; singleSla.Add(temp); } } return(singleSla); }
private SingleSlaTable CalculateSlaTime_Normal(SingleSlaTable sla) { DateTime temp_date = sla.start_time; while (temp_date.Date <= sla.end_time.Date) { if (temp_date.DayOfWeek.ToString() != "Saturday" && temp_date.DayOfWeek.ToString() != "Sunday") { if (temp_date.Date == sla.start_time.Date && temp_date.Hour >= sla.rate.work_start_time.Hour && temp_date.Hour < sla.rate.work_end_time.Hour) // oluşturulan tarih başlangıç tarihi ise, günlük 9 saat değil, request başlangıç saatinden itibaren günün bitiş saatine kadar hesaplar. { TimeSpan ts; sla.rate.work_end_time = new DateTime(sla.start_time.Year, sla.start_time.Month, sla.start_time.Day, sla.rate.work_end_time.Hour, sla.rate.work_end_time.Minute, sla.rate.work_end_time.Second); // Amaç sadece work_and time'ın date kısmını başlangıç tarihi yapmak. if (sla.end_time < sla.rate.work_end_time) // bitiş saati mesai saatinden önceyse son zaman olarak bitiş saatini alır. { ts = sla.end_time.TimeOfDay - sla.start_time.TimeOfDay; } else { ts = sla.rate.work_end_time.TimeOfDay - sla.start_time.TimeOfDay; // sla_time eklenecek saat hesaplaması, elde işlemleri } SingleSlaTable temp = new SingleSlaTable(); temp = AddTime_Normal(sla, ts); sla.sla_time_hour = temp.sla_time_hour; sla.sla_time_minute = temp.sla_time_minute; sla.sla_time_second = temp.sla_time_second; } else if (temp_date.Date == sla.start_time.Date && temp_date.Hour > sla.rate.work_end_time.Hour) { // haftaiçi gün ama mesai saati geçmiş durumudur. } else if (temp_date.Date == sla.end_time.Date) // request bitiş tarihindeki son günün saatini hesaplar. { if (sla.end_time.Hour >= sla.rate.work_start_time.Hour) { TimeSpan ts = sla.end_time.TimeOfDay - sla.rate.work_start_time.TimeOfDay; SingleSlaTable temp = new SingleSlaTable(); temp = AddTime_Normal(sla, ts); sla.sla_time_hour = temp.sla_time_hour; sla.sla_time_minute = temp.sla_time_minute; sla.sla_time_second = temp.sla_time_second; } } else { sla.sla_time_hour += sla.rate.total_time; } } temp_date = temp_date.AddDays(1); } return(sla); }
private SingleSlaTable CalculateSlaTime_Immediate(SingleSlaTable sla) { TimeSpan ts = new TimeSpan(); ts = sla.end_time - sla.start_time; SingleSlaTable temp = new SingleSlaTable(); temp = AddTime_Immediate(sla, ts); return(sla); }
private SingleSlaTable AddTime_Immediate(SingleSlaTable info, TimeSpan ts) { info.sla_time_second += ts.Seconds; if (info.sla_time_second > 59) { info.sla_time_second -= 60; info.sla_time_minute += 1; if (info.sla_time_minute > 59) { info.sla_time_minute -= 60; info.sla_time_hour += 1; } } info.sla_time_minute += ts.Minutes; if (info.sla_time_minute > 59) { info.sla_time_minute -= 60; info.sla_time_hour += 1; } info.sla_time_hour += ts.Hours; info.sla_time_hour += ts.Days * 24; return(info); }
private Slas MainReport(List <SlaTable> slaTable, SingleSlaTable singleSlaTable) { int slaIdCount = 0; // Aynı id'deki ticketların kaç tane olduğunu saklar. for (int i = 0; i < slaTable.Count; i++) // slaTable'daki en üstteki aynı id'li veri sayısını bulur. { if (slaTable[i].id == singleSlaTable.id) { slaIdCount++; } else { break; } } singleSlaTable.rate = slaTable[0].rate; List <int> slaActiveTime = new List <int> { 0, 1, 2, 7, 10 }; // 0-null 1-yeni 2-çalışılıyor 7-efor bekleniyor 10-değişiklik bekleniyor bool start_time = false; if (slaActiveTime.Contains(slaTable[0].old_value)) { singleSlaTable.start_time = slaTable[0].created_on; start_time = true; } for (int i = 0; i < slaIdCount; i++) { if (slaActiveTime.Contains(slaTable[i].value) && !start_time) { singleSlaTable.start_time = slaTable[i].changed_on; start_time = true; } else if (!slaActiveTime.Contains(slaTable[i].value) && start_time) { singleSlaTable.end_time = slaTable[i].changed_on; if (singleSlaTable.rate.Is_7_24 == 1) { singleSlaTable = CalculateSlaTime_Immediate(singleSlaTable); } else { singleSlaTable = CalculateSlaTime_Normal(singleSlaTable); } start_time = false; } } if (start_time) { singleSlaTable.end_time = DateTime.Now; if (singleSlaTable.rate.Is_7_24 == 1) { singleSlaTable = CalculateSlaTime_Immediate(singleSlaTable); } else { singleSlaTable = CalculateSlaTime_Normal(singleSlaTable); } } // success_rate hesaplaması: double tempSecond_past = (singleSlaTable.sla_time_hour * 3600) + (singleSlaTable.sla_time_minute * 60) + singleSlaTable.sla_time_second; // yüzde hesaplama saniye üzerinden yapılması için gerekli dönüşüm yapıldı double tempSecond_time_limit = singleSlaTable.rate.time_limit * 3600; // yüzde hesaplama saniye üzerinden yapılması için gerekli dönüşüm yapıldı singleSlaTable.success_rate = Math.Round((100 * tempSecond_past) / tempSecond_time_limit, 2); for (int i = 0; i < slaIdCount; i++) { slaTable.RemoveAt(0); } Slas all_of_them = new Slas(); all_of_them.slaTable = slaTable; all_of_them.singleSlaTable = singleSlaTable; return(all_of_them); }