// Obtiene lista de inspecciones realizadas public static string ListLastInspections(Machine machine, Pendiente pend = null) { string filtro = ""; if (pend == null) { string endDate = machine.ultima_inspeccion; DateTime format = DateTime.Parse(endDate); endDate = format.ToString("yyyy-MM-dd HH:mm:ss"); filtro = @" SUM.INSP_BEGIN_DATE > TO_DATE('" + endDate + @"', 'YYYY-MM-DD HH24:MI:SS') "; } else { filtro = @" ( SUM.INSP_BEGIN_DATE >= TO_DATE('" + pend.fechaMaquina + @"', 'YYYY-MM-DD HH24:MI:SS') AND SUM.BOARD_BARCODE = '" + pend.barcode + @"' ) "; } string query = @" SELECT PG.PG_NAME as PROGRAMA, PG.PG_ITEM_ID as PROGRAMA_ID, SUM.INSP_ID, SUM.BOARD_BARCODE as BARCODE, TO_CHAR(SUM.INSP_BEGIN_DATE, 'YYYY-MM-DD') AS AOI_FECHA, TO_CHAR(SUM.INSP_BEGIN_DATE, 'HH24:MI:SS') AS AOI_HORA, TO_CHAR(SUM.INSP_END_DATE, 'YYYY-MM-DD') AS INSP_FECHA, TO_CHAR(SUM.INSP_END_DATE, 'HH24:MI:SS') AS INSP_HORA, SUM.INSP_BEGIN_DATE, SUM.INSP_END_DATE, SUM.INSP_RESULT_CODE, CASE WHEN SUM.INSP_RESULT_CODE = 0 THEN 'OK' ELSE 'NG' END AS TEST_RESULT, SUM.VC_COMPLETE_FLAG as REVISED FROM INSP_RESULT_SUMMARY_INFO SUM, PG_INFO PG WHERE PG.PG_ITEM_ID = SUM.PG_ITEM_ID AND SUM.SYS_MACHINE_NAME = '" + machine.maquina + @"' AND " + filtro + @" ORDER BY INSP_END_DATE ASC "; return(query); }
public ActionResult DeleteConfirmed(int id) { Pendiente pendiente = db.Pendientes.Find(id); db.Pendientes.Remove(pendiente); db.SaveChanges(); return(RedirectToAction("Index")); }
public static string ListPanelBarcodeInfo(Pendiente pend) { string query = string.Format(@" SELECT [PCBID] ,CAST([StartDateTime] as DATE) as aoi_fecha ,CAST([EndDateTime] as TIME) as aoi_hora ,CAST([ReviewStartDateTime] as DATE) as insp_fecha ,CAST([ReviewEndDateTime] as TIME) as insp_hora ,( CASE WHEN [PCBResultBefore] = 11000000 THEN 'OK' WHEN [PCBResultBefore] = 12000000 THEN 'OK' WHEN [PCBResultBefore] = 13000000 THEN 'NG' WHEN [PCBResultBefore] = 14000000 THEN 'Scrap' WHEN [PCBResultBefore] = 15000000 THEN 'ByPass' End ) as revision_aoi ,( CASE WHEN [PCBResultAfter] = 11000000 THEN 'OK' WHEN [PCBResultAfter] = 12000000 THEN 'OK' WHEN [PCBResultAfter] = 13000000 THEN 'NG' WHEN [PCBResultAfter] = 14000000 THEN 'Scrap' WHEN [PCBResultAfter] = 15000000 THEN 'ByPass' End ) as revision_ins ,[PCBRepair] ,[BarCode] ,[ArrayCnt] as bloques ,[ResultDBName] ,[ImageDBName] ,[PCBModel] as programa ,[PCBGUID] FROM [KY_AOI].[dbo].[TB_AOIPCB] WHERE EndDateTime = '{0}' and BarCode = '{1}' and PCBModel = '{2}' and PCBModel is not null ORDER BY EndDateTime desc ", pend.fechaMaquina, pend.barcode, pend.programa ); return(query); }
public ActionResult Edit([Bind(Include = "ID,FechaEmision,LocadorID,InquilinoID,Referencia,Monto,Estado,FechaVencimiento,Observaciones")] Pendiente pendiente) { if (ModelState.IsValid) { db.Entry(pendiente).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } ViewBag.InquilinoID = new SelectList(db.Inquilinos, "ID", "Nombre", pendiente.InquilinoID); ViewBag.LocadorID = new SelectList(db.Locadores, "ID", "Nombre", pendiente.LocadorID); return(View(pendiente)); }
// GET: Pendiente/Details/5 public ActionResult Details(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Pendiente pendiente = db.Pendientes.Find(id); if (pendiente == null) { return(HttpNotFound()); } return(View(pendiente)); }
// GET: Pendiente/Edit/5 public ActionResult Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Pendiente pendiente = db.Pendientes.Find(id); if (pendiente == null) { return(HttpNotFound()); } ViewBag.InquilinoID = new SelectList(db.Inquilinos, "ID", "Nombre", pendiente.InquilinoID); ViewBag.LocadorID = new SelectList(db.Locadores, "ID", "Nombre", pendiente.LocadorID); return(View(pendiente)); }
public void HandlePendientInspection() { List <Pendiente> pendList = Pendiente.Download(aoiConfig.machineNameKey); Machine inspMachine = Machine.list.Single(obj => obj.tipo == aoiConfig.machineNameKey); aoiLog.info("Verificando inspecciones pendientes. Total: " + pendList.Count); if (pendList.Count > 0) { int count = 0; aoiWorker.SetProgressTotal(pendList.Count); foreach (Pendiente pend in pendList) { // Busco ultimo estado del barcode en ORACLE. string query = OracleQuery.ListLastInspections(inspMachine, pend); DataTable dt = oracle.Query(query); int totalRows = dt.Rows.Count; if (totalRows > 0) { count++; DataRow oracleLastRow = dt.Rows[totalRows - 1]; if (Config.isByPassMode(inspMachine)) { // SKIP MACHINE inspMachine.LogBroadcast("warning", string.Format("{0} {1} | En ByPass, no se analiza modo pendiente de {2}", inspMachine.maquina, inspMachine.smd, pend.barcode) ); } else { Vts500Panel panel = new Vts500Panel(oracle, oracleLastRow, inspMachine); if (panel.pendiente) { inspMachine.LogBroadcast("info", string.Format("+ Sigue pendiente Programa: [{0}] | Barcode: {1} | Bloques: {2} | Pendiente: {3}", panel.programa, panel.barcode, panel.totalBloques, panel.pendiente) ); } else { inspMachine.LogBroadcast("info", string.Format("+ Inspeccion detectada! Programa: [{0}] | Barcode: {1} | Bloques: {2} | Pendiente: {3}", panel.programa, panel.barcode, panel.totalBloques, panel.pendiente) ); panel.pendienteDelete = true; panel.TrazaSave(aoiConfig.xmlExportPath); } aoiWorker.SetProgressWorking(count); } } else { aoiLog.debug("No se detectaron actualizaciones de estado"); } } } }
private PanelService SavePanel(PanelService panelService) { Stopwatch sw = Stopwatch.StartNew(); if (Config.debugMode) { machine.LogBroadcast("warning", "Debug mode ON, no ejecuta StoreProcedure para guardar panel"); } else { #region SAVE PANELS ON DB string query = @"CALL sp_setInspectionPanel_optimizando('" + panelId + "','" + machine.mysql_id + "', '" + barcode + "', '" + programa + "', '" + fecha + "', '" + hora + "', '', '" + revisionAoi + "', '" + revisionIns + "', '" + totalErrores + "', '" + totalErroresFalsos + "', '" + totalErroresReales + "', '" + pcbInfo.bloques + "', '" + tipoBarcode + "', '" + Convert.ToInt32(pendiente) + "' , '" + machine.oracle_id + "' , '" + vtwinProgramNameId + "' , '" + spMode + "' );"; machine.LogBroadcast("debug", string.Format("Ejecutando StoreProcedure: sp_setInspectionPanel_optimizando({0}) =>", barcode) ); MySqlConnector sql = new MySqlConnector(); sql.LoadConfig("IASERVER"); DataTable sp = sql.Query(query); if (sql.rows) { // En caso de insert, informo el id_panel creado, si fue un update, seria el mismo id_panel... panelId = int.Parse(sp.Rows[0]["id_panel"].ToString()); //if (pendiente) //{ // Pendiente.Save(this); //} if (pendienteDelete) { Pendiente.Delete(this); } if (panelId > 0) { try { history.SavePanel(panelId, spMode); } catch (Exception ex) { machine.log.stack( string.Format("+ Error al ejecutar history.SavePanel({0}, {1}) ", panelId, spMode ), this, ex); } } } #endregion } // Es necesario volver a ejecutar el service, para obtener la OP asignada al panel if (spMode == "insert") { machine.LogBroadcast("debug", "Actualizando datos de panel insertado"); panelService = GetBarcodeInfoFromIAServer(); } sw.Stop(); machine.LogBroadcast("success", string.Format("Panel guardado: {0} (ms) {1} ", barcode, (long)sw.ElapsedMilliseconds) ); // Retorno ID, 0 si no pudo insertar, o actualizar return(panelService); }
/// <summary> /// La placa que llego a TrazaSave, no se encuentra pendiente de inspeccion. /// </summary> /// <param name="path"></param> public void TrazaSave(string path) { Stopwatch tiempoEjecucion = Stopwatch.StartNew(); history = new History(); // Solo proceso si la etiqueta es FISICA, las etiquetas virtuales no se aceptan mas if (tipoBarcode.Equals("E")) { // Si se detectaron bloques if (bloqueList.Count > 0) { machine.LogBroadcast("verbose", string.Format("Aoi: {0} | Inspector: {1} | Falsos: {3} | Reales: {4} | Pendiente: {2}", revisionAoi, revisionIns, pendiente, totalErroresFalsos, totalErroresReales ) ); if (pendiente) { machine.LogBroadcast("warning", string.Format("Agregando panel a estado pendiente, se verificara en la siguiente ronda") ); Pendiente.Save(this); } else { /* * Se consume el service y se obtiene toda la info actual de produccion * OP, Declaracion, Rutas, Regex, Inspector logueado etc... */ machine.GetProductionInfoFromIAServer(); if (machine.prodService.error == null) // El stack lo muestro en el metodo GetProductionInfoFromIAServer, si es null simplemente finaliza operaciones { if (machine.prodService.result.error == null) { // Existe configuracion de produccion? if (machine.prodService.result.produccion != null) { // Existe alguna configuracion de ruta? if (machine.prodService.routeMode != null) { PanelHandlerService(path); } else { machine.LogBroadcast("error", string.Format("Se cancela la operacion, no existe puesto de produccion para {0}", machine.prodService.result.produccion.op) ); } } else { machine.LogBroadcast("error", string.Format("Error al obtener datos de OP en produccion del service, se cancela la operacion") ); } } else { machine.LogBroadcast("error", string.Format("Error al obtener resultados del service {0}", machine.prodService.result.error) ); } } } } else { machine.LogBroadcast("error", string.Format("Error no se detectaron bloques") ); } } else { machine.LogBroadcast("error", string.Format("Etiqueta virtual {0} en {1} | Maquina: {2}, se cancela la operacion", barcode, programa, machine.maquina) ); } #region MONITOR REDIS string tiempoStyle = "success"; if (tiempoEjecucion.ElapsedMilliseconds > 4000) { tiempoStyle = "warning"; } if (tiempoEjecucion.ElapsedMilliseconds > 6000) { tiempoStyle = "error"; } machine.LogBroadcast(tiempoStyle, string.Format("Tiempo de ejecucion (ms) {0} ", tiempoEjecucion.ElapsedMilliseconds) ); JObject json = new JObject(); json["tiempoEjecucion"] = tiempoEjecucion.ElapsedMilliseconds.ToString(); json["aoibarcode"] = machine.line_barcode.ToString(); json["smd"] = machine.smd.ToString(); json["tipo"] = machine.tipo.ToString(); Realtime.send(json.ToString()); #endregion }
private BLAplicada AplicarVacuna(string nombreVacuna, string edadAplicacion, string idExpediente) { BLAplicada aplicada = new BLAplicada(); for (int i = 0; i < listaPendientes.Count; i++) { Pendiente pen = listaPendientes[i]; if ((pen.EdadAplicacion.Equals(edadAplicacion)) && (pen.NombreVacuna.Equals(nombreVacuna))) { aplicada.IDExpediente = idExpediente; aplicada.NombreVacuna = pen.NombreVacuna; foreach (BLVacuna vacuna in vacunas) { if (vacuna.NombreVacuna.Equals(aplicada.NombreVacuna)) { if (!vacuna.Aplicacion1.Equals("")) { if (vacuna.Aplicacion1.Equals(pen.CantidadMeses + "")) { aplicada.Aplicacion = "APLICACION1"; break; } } ////////////////////////////// if (!vacuna.Aplicacion2.Equals("")) { if (vacuna.Aplicacion2.Equals(pen.CantidadMeses + "")) { aplicada.Aplicacion = "APLICACION2"; break; } } ////////////////////////////// if (!vacuna.Aplicacion3.Equals("")) { if (vacuna.Aplicacion3.Equals(pen.CantidadMeses + "")) { aplicada.Aplicacion = "APLICACION3"; break; } } ////////////////////////////// if (!vacuna.Refuerzo1.Equals("")) { if (vacuna.Refuerzo1.Equals(pen.CantidadMeses + "")) { aplicada.Aplicacion = "REFUERZO1"; break; } } ////////////////////////////// if (!vacuna.Refuerzo2.Equals("")) { if (vacuna.Refuerzo2.Equals(pen.CantidadMeses + "")) { aplicada.Aplicacion = "REFUERZO2"; break; } } ////////////////////////////// if (!vacuna.Refuerzo3.Equals("")) { if (vacuna.Refuerzo3.Equals(pen.CantidadMeses + "")) { aplicada.Aplicacion = "REFUERZO3"; break; } } break; } } listaPendientes.RemoveAt(i); break; } } return(aplicada); }
public void HandlePendientInspection() { List <Pendiente> pendList = Pendiente.Download(aoiConfig.machineNameKey); aoiLog.debug("Verificando inspecciones pendientes. Total: " + pendList.Count); if (pendList.Count > 0) { int count = 0; aoiWorker.SetProgressTotal(pendList.Count); foreach (Pendiente pend in pendList) { // Busco ultimo estado del barcode string query = SqlServerQuery.ListPanelBarcodeInfo(pend); DataTable dt = sqlserver.Query(query); int totalRows = dt.Rows.Count; if (totalRows > 0) { count++; DataRow lastRow = dt.Rows[0]; Machine inspMachine = Machine.list.Single(obj => obj.tipo == aoiConfig.machineNameKey && obj.mysql_id == pend.idMaquina); if (Config.isByPassMode(inspMachine)) { // SKIP MACHINE inspMachine.LogBroadcast("warning", string.Format("{0} {1} | En ByPass, no se analiza modo pendiente de {2}", inspMachine.maquina, inspMachine.smd, pend.barcode) ); } else { ZenithPanel panel = new ZenithPanel(sqlserver, lastRow, inspMachine); if (panel.pendiente) { inspMachine.LogBroadcast("info", string.Format("+ Sigue pendiente Programa: [{0}] | PanelBarcode: {1} | Bloques: {2} | Pendiente: {3}", panel.programa, panel.barcode, panel.totalBloques, panel.pendiente) ); } else { inspMachine.LogBroadcast("info", string.Format("+ Inspeccion detectada! Programa: [{0}] | PanelBarcode: {1} | Bloques: {2} | Pendiente: {3}", panel.programa, panel.barcode, panel.totalBloques, panel.pendiente) ); panel.pendienteDelete = true; // TENGO QUE DESCOMENTAR ESTO PARA GUARDAR EN TRAZA panel.TrazaSave(aoiConfig.xmlExportPath); // ELIMINO LA INSPECCION PENDIENTE Pendiente.Delete(panel); } } } else { aoiLog.debug("No se detectaron actualizaciones de estado"); } } } }
// Obtiene lista de inspecciones realizadas public static string ListLastInspections(int createMachineId, string endDate, Pendiente pend = null) { string filtro = ""; if (pend == null) { DateTime format = DateTime.Parse(endDate); endDate = format.ToString("yyyy-MM-dd HH:mm:ss"); filtro = @" PCI.TEST_MACHINE_ID = " + createMachineId + @" AND PCI.END_DATE > TO_DATE('" + endDate + @"', 'YYYY-MM-DD HH24:MI:SS') "; } else { filtro = @" ( PCI.END_DATE >= TO_DATE('" + pend.fechaMaquina + @"', 'YYYY-MM-DD HH24:MI:SS') AND PCI.BARCODE = '" + pend.barcode + @"' AND PCI.TEST_MACHINE_ID = " + pend.vtwinTestMachineId + @" AND PCI.PROGRAM_NAME_ID = " + pend.vtwinProgramNameId + @" ) "; } // (PCI.REVISE_END_DATE IS NOT NULL) AND string query = @" SELECT PNI.PCB_NAME AS PROGRAMA, TO_CHAR(PCI.END_DATE, 'YYYY-MM-DD') AS AOI_FECHA, TO_CHAR(PCI.END_DATE, 'HH24:MI:SS') AS AOI_HORA, TO_CHAR(PCI.REVISE_END_DATE, 'YYYY-MM-DD') AS INSP_FECHA, TO_CHAR(PCI.REVISE_END_DATE, 'HH24:MI:SS') AS INSP_HORA, PCI.END_DATE, PCI.REVISE_END_DATE, PCI.TEST_RESULT, PCI.REVISE_RESULT, PCI.BARCODE, PCI.MACHINE_DETERMINATION, PCI.PCB_NO, PCI.TEST_MACHINE_ID, PCI.SAVED_MACHINE_ID, PCI.PROGRAM_NAME_ID, PCI.REVISION_NO, PCI.SERIAL_NO, PCI.LOAD_COUNT FROM PROGRAM_INFO PRI, PCB_INFO PCI, PCB_NAME_INFO PNI WHERE PRI.PCB_ID = PNI.PCB_ID AND (PCI.BARCODE IS NOT NULL) AND PRI.PROGRAM_NAME_ID = PCI.PROGRAM_NAME_ID AND PRI.SAVED_MACHINE_ID = PCI.SAVED_MACHINE_ID AND PRI.PROGRAM_NAME_ID = PCI.PROGRAM_NAME_ID AND PRI.REVISION_NO = PCI.REVISION_NO AND PRI.SERIAL_NO = PCI.SERIAL_NO AND " + filtro + @" ORDER BY PCI.END_DATE ASC "; return(query); }