Skip to main content
Glama
UNES97

APM Terminal Operations Intelligence

by UNES97
queries.ts10.5 kB
// MySQL 5.7 compatible queries for APM Terminal export const QUERIES = { // Get vessel visits with executed and planned moves (MySQL 5.7 compatible) VESSEL_VISITS: ` SELECT v.name, v.visitId, v.phase, v.ata, v.eta, v.etd, v.week_number, v.month, v.year, COALESCE(em.totalExecutedMoves, 0) AS totalExecutedMoves, COALESCE(pm.totalPlannedMoves, 0) AS totalPlannedMoves FROM ( SELECT vslnm.name AS name, argo.id AS visitId, argo.phase AS phase, argo.ata AS ata, vd.eta AS eta, vd.etd AS etd, WEEK(CASE WHEN argo.phase = '20INBOUND' THEN vd.eta ELSE argo.ata END, 3) AS week_number, MONTH(CASE WHEN argo.phase = '20INBOUND' THEN vd.eta ELSE argo.ata END) AS month, YEAR(CASE WHEN argo.phase = '20INBOUND' THEN vd.eta ELSE argo.ata END) AS year FROM argo_carrier_visit argo LEFT OUTER JOIN argo_visit_details vd ON vd.gkey = argo.cvcvd_gkey LEFT OUTER JOIN vsl_vessel_visit_details vvd ON argo.cvcvd_gkey = vvd.vvd_gkey LEFT OUTER JOIN vsl_vessels vslnm ON vslnm.gkey = vvd.vessel_gkey WHERE argo.carrier_mode = 'VESSEL' AND argo.phase IN ('20INBOUND','30ARRIVED', '40WORKING', '50COMPLETE','60DEPARTED','70CLOSED') ) v LEFT JOIN ( SELECT CASE WHEN move_kind = 'DSCH' THEN a.FM_pos_locid WHEN move_kind = 'LOAD' THEN a.TO_pos_locid END AS visitId, COUNT(*) AS totalExecutedMoves FROM inv_move_event a WHERE a.move_kind IN ('DSCH', 'LOAD') GROUP BY CASE WHEN move_kind = 'DSCH' THEN a.FM_pos_locid WHEN move_kind = 'LOAD' THEN a.TO_pos_locid END ) em ON v.visitId = em.visitId LEFT JOIN ( SELECT wi.carrier_locid AS visitId, COUNT(*) AS totalPlannedMoves FROM inv_wi wi WHERE wi.move_kind IN ('DSCH', 'LOAD') GROUP BY wi.carrier_locid ) pm ON v.visitId = pm.visitId ORDER BY CASE WHEN v.phase = '20INBOUND' THEN v.eta ELSE v.ata END DESC LIMIT 100 `, // Get inbound vessels for current year INBOUND_VESSELS_CURRENT_YEAR: ` SELECT acv.ID AS VISITID, vsl.NAME AS VESSELNAME, acv.PHASE AS PHASE, service.id AS SERVICE, op.id AS LINE, YEAR(avd.etd) AS YEAR, MONTH(avd.etd) AS MONTH, WEEK(avd.etd, 3) AS WEEK, avd.ETA AS ETA, avd.ETD AS ETD, ROUND(TIMESTAMPDIFF(HOUR, avd.ETA, avd.ETD), 2) AS PORTHOURS, COALESCE(avd.EST_DISCHARGE, 0) + COALESCE(avd.EST_LOAD, 0) + COALESCE(avd.EST_RESTOW, 0) + COALESCE(avd.EST_SHIFT, 0) AS ESTIMATEDMOVES FROM argo_carrier_visit acv JOIN argo_visit_details avd ON acv.CVCVD_GKEY = avd.GKEY LEFT JOIN ref_carrier_service service ON service.GKEY = avd.SERVICE LEFT JOIN vsl_vessel_visit_details vvd ON vvd.VVD_GKEY = avd.GKEY LEFT JOIN vsl_vessels vsl ON vvd.VESSEL_GKEY = vsl.GKEY LEFT JOIN ref_bizunit_scoped op ON op.GKEY = vsl.OWNER_GKEY WHERE acv.CARRIER_MODE = 'VESSEL' AND acv.PHASE != '80CANCELED' AND YEAR(avd.etd) = YEAR(CURRENT_TIMESTAMP) ORDER BY avd.ETA ASC `, // Get vessel details by visit ID VESSEL_DETAILS_BY_ID: ` SELECT srv.id AS service, argo.id AS visitId, vslnm.name AS name, SUBSTRING(argo.phase, 3) AS phase, argo.ata AS allfast, vvd.start_work AS firstlift, vvd.FLEX_DATE07 AS firstLine, argo.atd AS atd, vd.eta AS eta, vd.etd AS etd, ROUND(TIMESTAMPDIFF(HOUR, vd.eta, vd.etd), 2) AS PORTHOURS, COALESCE(vd.EST_DISCHARGE, 0) + COALESCE(vd.EST_LOAD, 0) + COALESCE(vd.EST_RESTOW, 0) + COALESCE(vd.EST_SHIFT, 0) AS ESTIMATEDMOVES, ROUND(TIMESTAMPDIFF(HOUR, argo.ata, argo.atd), 2) AS portstayExecuted, ROUND(TIMESTAMPDIFF(MINUTE, argo.ata, vvd.start_work), 0) AS idleArrival, ROUND(TIMESTAMPDIFF(MINUTE, vvd.end_work, argo.atd), 0) AS idleDeparture FROM vsl_vessel_visit_details vvd LEFT JOIN argo_carrier_visit argo ON argo.cvcvd_gkey = vvd.vvd_gkey LEFT JOIN argo_visit_details vd ON vd.gkey = argo.cvcvd_gkey LEFT JOIN ref_carrier_service srv ON srv.gkey = vd.service LEFT JOIN vsl_vessels vslnm ON vslnm.gkey = vvd.vessel_gkey WHERE argo.carrier_mode = 'VESSEL' AND argo.id = ? `, // Get visits by terminal (filtered) VISITS_BY_TERMINAL: ` SELECT vslnm.name AS vesselName, argo.id AS visitId, argo.phase AS phase, argo.ata AS ata, vd.eta AS eta, vd.etd AS etd FROM argo_carrier_visit argo LEFT JOIN argo_visit_details vd ON vd.gkey = argo.cvcvd_gkey LEFT JOIN vsl_vessel_visit_details vvd ON argo.cvcvd_gkey = vvd.vvd_gkey LEFT JOIN vsl_vessels vslnm ON vslnm.gkey = vvd.vessel_gkey WHERE argo.carrier_mode = 'VESSEL' AND DATE(vd.eta) = CURDATE() ORDER BY vd.eta DESC `, // Get vessel productivity (CMPH - Container Moves Per Hour) VESSEL_PRODUCTIVITY: ` SELECT argo.id AS visitId, vslnm.name AS vesselName, COUNT(CASE WHEN ime.move_kind IN ('DSCH', 'LOAD') THEN 1 END) AS totalMoves, ROUND(TIMESTAMPDIFF(HOUR, vvd.start_work, vvd.end_work), 2) AS workingHours, ROUND( COUNT(CASE WHEN ime.move_kind IN ('DSCH', 'LOAD') THEN 1 END) / NULLIF(TIMESTAMPDIFF(HOUR, vvd.start_work, vvd.end_work), 0), 2 ) AS cmph FROM vsl_vessel_visit_details vvd LEFT JOIN argo_carrier_visit argo ON argo.cvcvd_gkey = vvd.vvd_gkey LEFT JOIN vsl_vessels vslnm ON vslnm.gkey = vvd.vessel_gkey LEFT JOIN inv_move_event ime ON (ime.FM_pos_locid = argo.id AND ime.move_kind = 'DSCH') OR (ime.TO_pos_locid = argo.id AND ime.move_kind = 'LOAD') WHERE argo.carrier_mode = 'VESSEL' AND vslnm.name LIKE ? AND vvd.start_work IS NOT NULL AND vvd.end_work IS NOT NULL GROUP BY argo.id, vslnm.name, vvd.start_work, vvd.end_work ORDER BY argo.ata DESC LIMIT 10 `, // Get vessel cranes with first and last move times VESSEL_CRANES: ` SELECT qc.full_name AS crane, DATE_FORMAT(MIN( CASE WHEN a.move_kind = 'LOAD' THEN a.t_put WHEN a.move_kind = 'DSCH' THEN t_discharge END ), '%Y-%m-%dT%H:%i:%s') AS first_move, DATE_FORMAT(MAX( CASE WHEN a.move_kind = 'LOAD' THEN a.t_put WHEN a.move_kind = 'DSCH' THEN t_discharge END ), '%Y-%m-%dT%H:%i:%s') AS latest_move FROM inv_move_event a JOIN xps_che qc ON ( CASE WHEN a.move_kind = 'DSCH' THEN a.che_fetch WHEN a.move_kind = 'LOAD' THEN a.che_put END ) = qc.gkey WHERE ( CASE WHEN a.move_kind = 'DSCH' THEN a.FM_pos_locid WHEN a.move_kind = 'LOAD' THEN a.TO_pos_locid END ) = ? AND ( CASE WHEN a.move_kind = 'LOAD' THEN a.t_put WHEN a.move_kind = 'DSCH' THEN t_discharge END ) IS NOT NULL AND qc.full_name LIKE '%QC%' GROUP BY qc.full_name `, // Get vessel's longest working crane VESSEL_LONGEST_CRANE: ` SELECT a.carrier_locid AS VesselVisitId, b.CraneName AS CraneName FROM ( SELECT MAX(est_move_time) AS topp, carrier_locid FROM ( SELECT pow.name AS CraneName, wi.carrier_locid, wi.est_move_time FROM inv_wi wi LEFT JOIN inv_wq wq ON wi.work_queue_gkey = wq.gkey LEFT JOIN argo_carrier_visit argo ON argo.id = wi.carrier_locid LEFT JOIN xps_craneshift cs ON cs.gkey = wq.first_shift_gkey LEFT JOIN xps_pointofwork pow ON cs.owner_pow_gkey = pow.gkey WHERE wi.move_kind IN ('LOAD', 'DSCH') AND argo.phase = '40WORKING' ) lgcr GROUP BY carrier_locid ) a LEFT JOIN ( SELECT pow.name AS CraneName, wi.carrier_locid, wi.est_move_time FROM inv_wi wi LEFT JOIN inv_wq wq ON wi.work_queue_gkey = wq.gkey LEFT JOIN argo_carrier_visit argo ON argo.id = wi.carrier_locid LEFT JOIN xps_craneshift cs ON cs.gkey = wq.first_shift_gkey LEFT JOIN xps_pointofwork pow ON cs.owner_pow_gkey = pow.gkey WHERE wi.move_kind IN ('LOAD', 'DSCH') AND argo.phase = '40WORKING' ) b ON a.topp = b.est_move_time AND a.carrier_locid = b.carrier_locid `, // Get inbound vessels for date range INBOUND_VESSELS_DATE_RANGE: ` SELECT acv.ID AS VISITID, vsl.NAME AS VESSELNAME, acv.PHASE AS PHASE, service.id AS SERVICE, op.id AS LINE, YEAR(avd.etd) AS YEAR, MONTH(avd.etd) AS MONTH, WEEK(avd.etd, 3) AS WEEK, avd.ETA AS ETA, avd.ETD AS ETD, ROUND(TIMESTAMPDIFF(HOUR, avd.ETA, avd.ETD), 2) AS PORTHOURS, COALESCE(avd.EST_DISCHARGE, 0) + COALESCE(avd.EST_LOAD, 0) + COALESCE(avd.EST_RESTOW, 0) + COALESCE(avd.EST_SHIFT, 0) AS ESTIMATEDMOVES FROM argo_carrier_visit acv JOIN argo_visit_details avd ON acv.CVCVD_GKEY = avd.GKEY LEFT JOIN ref_carrier_service service ON service.GKEY = avd.SERVICE LEFT JOIN vsl_vessel_visit_details vvd ON vvd.VVD_GKEY = avd.GKEY LEFT JOIN vsl_vessels vsl ON vvd.VESSEL_GKEY = vsl.GKEY LEFT JOIN ref_bizunit_scoped op ON op.GKEY = vsl.OWNER_GKEY WHERE acv.CARRIER_MODE = 'VESSEL' AND acv.PHASE != '80CANCELED' AND avd.ETD >= ? AND avd.ETD <= ? ORDER BY avd.ETA ASC `, // Get crane delays (historical) CRANE_DELAYS_HISTORICAL: ` SELECT crane, start_time, SEC_TO_TIME(SUM(duration_min) * 60) AS duration, delay_code, delay_description, vessel_visit_id FROM ( SELECT acv.id AS vessel_visit_id, che.short_name AS crane, csd.delay_date AS start_time, csd.time AS duration_min, cdt.id AS delay_code, cdt.description AS delay_description, cdt.delay_category AS delay_category FROM vsl_crane_statistics_delays csd LEFT JOIN ref_crane_delay_types cdt ON cdt.gkey = csd.crane_delay_type_gkey LEFT JOIN vsl_crane_statistics vcs ON vcs.gkey = csd.cstat_gkey LEFT JOIN vsl_vessel_visit_details vvd ON vvd.vvd_gkey = vcs.vvd_gkey LEFT JOIN argo_visit_details avd ON avd.gkey = vvd.vvd_gkey LEFT JOIN argo_carrier_visit acv ON acv.cvcvd_gkey = avd.gkey LEFT JOIN xps_che che ON che.gkey = vcs.crane_gkey WHERE (? IS NULL OR acv.id = ?) ) Delays_raw GROUP BY vessel_visit_id, crane, start_time, delay_code, delay_description ORDER BY start_time DESC, crane, vessel_visit_id ` };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/UNES97/mcp-db-demo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server