private void AnalyseDetailByTime(string date, string dept, string block, SupplyDetail _supply) { string[] normalStt = { "NORMAL", "STOP_BY_CARD", "SAFETY", "NO_CART", "BATTERY_EMPTY", "OUT_OF_LINE", "EMERGENCY", "POLE_ERROR" }; int position = 0; string stt = "NORMAL"; string sttChange; string time = "(cast(datetime as time) >= '" + _supply.StartTime + "' and cast(datetime as time)<= '" + _supply.EndTime + "')"; DateTime startTime = DateTime.ParseExact(date + " " + _supply.StartTime, "yyyyMMdd HH:mm:ss", CultureInfo.InvariantCulture); DateTime stopTime; string query = "select Dept, Block, DateTime, Item, para1, value1, Value3 FROM [AgvData_" + date + "] " + " where Dept='" + dept + "' and Block ='" + block + "' and Item='" + _supply.AgvName + "'" + "and (Para1='status' or Para1='Position') and Value1 !='CROSS_STOP' and Value1 !='CROSS_RUN' order by DateTime"; // and" + time + //"order by DateTime"; List <StructAnalyzeDetail> dtKtra = RawList .Where(d => d.Item == _supply.AgvName && (d.Para1 == "Status" || d.Para1 == "Position") && d.Value1 != "CROSS_STOP" && d.Value1 != "CROSS_RUN") .Select(d => new StructAnalyzeDetail() { Dept = d.Dept, Block = d.Block, DateTime = d.DateTime, Item = d.Item, Para1 = d.Para1, Value1 = d.Value1, Value3 = d.Value3 }) .ToList(); if (dtKtra.Count > 0) { for (int j = 0; j < dtKtra.Count; j++) { if (dtKtra[j].Para1.ToString() == "Position") { position = Convert.ToInt16(dtKtra[j].Value1.ToString()); } if (dtKtra[j].Para1.ToString() == "Status") { sttChange = dtKtra[j].Value1.ToString(); stopTime = DateTime.Parse(dtKtra[j].DateTime.ToString()); TimeSpan duration = stopTime - startTime; if (stt != sttChange) { _supply.SetStatus(stt, position, duration.TotalSeconds); } startTime = DateTime.Parse(dtKtra[j].DateTime.ToString()); stt = sttChange; } } _supply.NORMAL = Math.Round((_supply._normal.totalTime / 60), 1).ToString() + " min. Detail: ," + _supply.NORMAL; _supply.SAFETY = Math.Round((_supply._safety.totalTime / 60), 1).ToString() + " min. Detail: ," + _supply.SAFETY; _supply.EMERGENCY = Math.Round((_supply._emergency.totalTime / 60), 1).ToString() + " min. Detail: ," + _supply.EMERGENCY; _supply.NO_CART = Math.Round((_supply._noCart.totalTime / 60), 1).ToString() + " min. Detail: ," + _supply.NO_CART; _supply.POLE_ERROR = Math.Round((_supply._poleError.totalTime / 60), 1).ToString() + " min. Detail: ," + _supply.POLE_ERROR; _supply.STOP_BY_CARD = Math.Round((_supply._stop.totalTime / 60), 1).ToString() + " min. Detail: ," + _supply.STOP_BY_CARD; _supply.OUT_OF_LINE = Math.Round((_supply._outOfLine.totalTime / 60), 1).ToString() + " min. Detail: ," + _supply.OUT_OF_LINE; _supply.BATTERY_EMPTY = Math.Round((_supply._batteryLow.totalTime / 60), 1).ToString() + " min. Detail: ," + _supply.BATTERY_EMPTY; sqliteConn.Execute_NonSQL("insert into [AGV_SupplyDetail](Date, Dept, Block, AgvName, Part, Route, StartTime, EndTime, SupplyTime," + "NORMAL_DETAIL, STOP_BY_CARD_DETAIL, SAFETY_DETAIL, BATTERY_EMPTY_DETAIL, NO_CART_DETAIL, POLE_ERROR_DETAIL, OUT_OF_LINE_DETAIL, EMERGENCY_DETAIL, " + "NORMAL, STOP_BY_CARD, SAFETY, BATTERY_EMPTY, NO_CART, POLE_ERROR, OUT_OF_LINE, EMERGENCY)" + "VALUES('" + date + "','" + dept + "','" + block + "','" + _supply.AgvName + "','" + _supply.Part + "','" + _supply.Route + "','" + _supply.StartTime + "','" + _supply.EndTime + "','" + _supply.SupplyTime + "','" + _supply.NORMAL + "','" + _supply.STOP_BY_CARD + "','" + _supply.SAFETY + "','" + _supply.BATTERY_EMPTY + "','" + _supply.NO_CART + "','" + _supply.POLE_ERROR + "','" + _supply.OUT_OF_LINE + "','" + _supply.EMERGENCY + "','" + Math.Round((_supply._normal.totalTime / 60), 1) + "','" + Math.Round((_supply._stop.totalTime / 60), 1) + "','" + Math.Round((_supply._safety.totalTime / 60), 1) + "','" + Math.Round((_supply._batteryLow.totalTime / 60), 1) + "','" + Math.Round((_supply._noCart.totalTime / 60), 1) + "','" + Math.Round((_supply._poleError.totalTime / 60), 1) + "','" + Math.Round((_supply._outOfLine.totalTime / 60), 1) + "','" + Math.Round((_supply._emergency.totalTime / 60), 1) + "' )"); } }
private void CalculateSupplyTime(string date, string dept, string block, string agv) { List <DataAnalyze> dtKtra = RawList.Where(a => a.Item == agv && a.Para1 == "Working status") .Select(a => new DataAnalyze() { DateTime = a.DateTime, Item = a.Item, Para1 = a.Para1, Value1 = a.Value1, Value2 = a.Value2, Value3 = a.Value3 }) .ToList(); if (dtKtra.Count == 0) { return; } bool calAbNormal = false; DateTime startTime, stopTime, startAbnormal, stopAbnormal; string part; int route; int count; count = 0; while (count < dtKtra.Count - 3) { if ((dtKtra[count].Value1.ToString() == "SUPPLYING") && (dtKtra[count + 1].Value1.ToString() == "RETURNING") && (dtKtra[count + 2].Value1.ToString() == "FREE")) { if (calAbNormal) { stopAbnormal = DateTime.Parse(dtKtra[count].DateTime.ToString()); calAbNormal = false; } startTime = DateTime.Parse(dtKtra[count].DateTime.ToString()); stopTime = DateTime.Parse(dtKtra[count + 2].DateTime.ToString()); TimeSpan supplyTime = stopTime - startTime; part = dtKtra[count].Value3.ToString(); route = Int16.Parse(dtKtra[count].Value2.ToString()); SupplyDetail _supply = new SupplyDetail(date, dept, block, agv, part, route, startTime.ToString("HH:mm:ss"), stopTime.ToString("HH:mm:ss"), Math.Round(supplyTime.TotalMinutes, 1)); AnalyseDetailByTime(date, dept, block, _supply); listSupplying.Add(_supply); count += 3; } else { if (!calAbNormal) { startAbnormal = DateTime.Parse(dtKtra[count].DateTime.ToString()); calAbNormal = true; } count++; } } }