示例#1
0
        // 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);
        }
示例#2
0
        public ActionResult DeleteConfirmed(int id)
        {
            Pendiente pendiente = db.Pendientes.Find(id);

            db.Pendientes.Remove(pendiente);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
示例#3
0
        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);
        }
示例#4
0
 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));
 }
示例#5
0
        // 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));
        }
示例#6
0
        // 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));
        }
示例#7
0
        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");
                    }
                }
            }
        }
示例#8
0
        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);
        }
示例#9
0
        /// <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
        }
示例#10
0
        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);
        }
示例#11
0
        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");
                    }
                }
            }
        }
示例#12
0
        // 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);
        }