From d6811336d546e4963a9af3bd7cd8654d14193bce Mon Sep 17 00:00:00 2001
From: liujie <liujie>
Date: 星期四, 31 八月 2023 11:58:57 +0800
Subject: [PATCH] broker 卡车公司端  49码头

---
 src/main/java/com/stylefeng/guns/modular/system/controller/RatesController.java                      |    9 
 src/main/java/com/stylefeng/guns/modular/system/model/GoodsListDto.java                              |    3 
 src/main/java/com/stylefeng/guns/modular/system/service/IWarehouseService.java                       |    4 
 src/main/java/com/stylefeng/guns/modular/system/service/TYardService.java                            |    2 
 src/main/java/com/stylefeng/guns/modular/system/controller/TCarriersController.java                  |    4 
 src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TYardMapper.xml                          |    2 
 src/main/java/com/stylefeng/guns/modular/system/service/impl/TYardServiceImpl.java                   |    4 
 src/main/java/com/stylefeng/guns/modular/system/model/TransportInfo.java                             |   13 
 src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WarehouseMapper.xml                      |    6 
 src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FortyNineUtil.java                    |  172 ++++++++++
 src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/SCACEnum.java                         |  140 ++++++++
 src/main/java/com/stylefeng/guns/core/common/exception/BizExceptionEnum.java                         |    1 
 src/main/java/com/stylefeng/guns/modular/system/dao/TYardMapper.java                                 |    2 
 src/main/java/com/stylefeng/guns/modular/system/controller/TYardController.java                      |    5 
 src/main/java/com/stylefeng/guns/modular/system/utils/HttpRequest.java                               |    2 
 src/main/java/com/stylefeng/guns/modular/system/service/impl/WareHouseServiceImpl.java               |    6 
 src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/LBCTStrategy.java                     |  125 +++++++
 src/main/java/com/stylefeng/guns/modular/system/controller/OrderController.java                      |   73 +++
 src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/APMStrategy.java                      |   93 +++--
 src/main/java/com/stylefeng/guns/modular/system/dao/TOrderMapper.java                                |    3 
 src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java                  |    8 
 src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfStrategy.java                    |    7 
 src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java                     |    1 
 src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml                         |    7 
 src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FMSStrategy.java                      |   79 ++++
 src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/StrategyContext.java                  |   30 +
 src/main/java/com/stylefeng/guns/modular/system/model/TGoods.java                                    |   30 +
 src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/TerminalInterfaceAcquisitionUtil.java |   20 +
 src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfEnum.java                        |   16 
 src/main/java/com/stylefeng/guns/modular/system/dao/WareHouseMapper.java                             |    5 
 src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/ITSStrategy.java                      |  130 +++++++
 src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java                          |    2 
 src/main/java/com/stylefeng/guns/modular/system/warpper/TerminaleDataWarpper.java                    |   13 
 33 files changed, 942 insertions(+), 75 deletions(-)

diff --git a/src/main/java/com/stylefeng/guns/core/common/exception/BizExceptionEnum.java b/src/main/java/com/stylefeng/guns/core/common/exception/BizExceptionEnum.java
index ae1bc3e..e4ac564 100644
--- a/src/main/java/com/stylefeng/guns/core/common/exception/BizExceptionEnum.java
+++ b/src/main/java/com/stylefeng/guns/core/common/exception/BizExceptionEnum.java
@@ -34,6 +34,7 @@
     CANT_DELETE_ADMIN(600, "不能删除超级管理员"),
     CANT_FREEZE_ADMIN(600, "不能冻结超级管理员"),
     CANT_CHANGE_ADMIN(600, "不能修改超级管理员角色"),
+    REQUEST_EMPTY_ERROR(500, "请求参数不能为空"),
 
     /**
      * 账户问题
diff --git a/src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java b/src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java
index e1993e3..fe59cae 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java
@@ -172,6 +172,7 @@
                         e.setOurRef(goodsListDto.getOurRef());
                         e.setPo(goodsListDto.getPo());
                         e.setSb(goodsListDto.getSb());
+                        e.setBillNumber(goodsListDto.getBillNumber());
                         TOrder tOrder = new TOrder();
                         tOrder.setUserId(demandDto.getUserId());
                         tOrder.setAccessorial(demandDto.getAccessorial());
diff --git a/src/main/java/com/stylefeng/guns/modular/system/controller/OrderController.java b/src/main/java/com/stylefeng/guns/modular/system/controller/OrderController.java
index 93ad8b2..55cf215 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/controller/OrderController.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/controller/OrderController.java
@@ -1,14 +1,16 @@
 package com.stylefeng.guns.modular.system.controller;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.system.enums.FacilityCodeEnum;
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
-import com.stylefeng.guns.modular.system.utils.TerminalInterfaceAcquisitionUtil;
+import com.stylefeng.guns.modular.system.utils.PortUtil.FortyNineUtil;
+import com.stylefeng.guns.modular.system.utils.PortUtil.SCACEnum;
+import com.stylefeng.guns.modular.system.utils.PortUtil.TerminalInterfaceAcquisitionUtil;
 import com.stylefeng.guns.modular.system.utils.tips.ErrorTip;
 import com.stylefeng.guns.modular.system.utils.tips.SuccessTip;
 import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
@@ -156,6 +158,22 @@
         return new SuccessTip();
     }
 
+    @ApiOperation(value = "获取订单司机位置",notes="获取订单司机位置")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType     = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
+            @ApiImplicitParam(name = "orderId", value = "orderId", required = true, dataType = "Long"),
+            @ApiImplicitParam(name = "lon", value = "lon", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "lat", value = "lat", required = true, dataType = "String"),
+    })
+    @GetMapping(value = "/getLonLat")
+    @ResponseBody
+    public Object getLonLat(Long orderId){
+        //  通过司机id获取订单
+        List<Map<String,Object>> orders = orderService.getLonLat(orderId);
+        return new SuccessTip(orders);
+    }
+
+
     @Resource
     private TTransportationService tTransportationService;
 
@@ -174,6 +192,8 @@
         ArrayList<OrderDriverInfo> orderDriverInfos = new ArrayList<>();
         ArrayList<Integer> driverIds = new ArrayList<>();
         TOrder tOrder = orderService.selectById(orderId);
+        TPort tPort = portService.selectById(tOrder.getPort());
+
         // 第一个开始司机id
         Integer sDriverid = tOrder.getsDriverid();
         if(sDriverid!=null){
@@ -193,11 +213,42 @@
             driverIds.add(driverIdOne);
         }
         TGoods tGoods = goodsService.selectOne(new EntityWrapper<TGoods>().eq("order_id", tOrder.getId()));
-        List<TTransportation> tTransportations = tTransportationService.selectList(new EntityWrapper<TTransportation>().eq("order_id", orderId).in("driver_id", driverIds));
+        List<TTransportation> tTransportations = tTransportationService.selectList(new EntityWrapper<TTransportation>().eq("order_id", orderId).in("driver_id", driverIds).orderBy("type"));
         TerminaleDataWarpper terminalStatus =new TerminaleDataWarpper();
         try {
-            terminalStatus = TerminalInterfaceAcquisitionUtil.getTerminalStatus(tGoods.getContainerNumber(), FacilityCodeEnum.USLAX.getMsg());
+            if("LBCT".equals(tPort.getName()) || "APM".equals(tPort.getName())){
+                terminalStatus  = TerminalInterfaceAcquisitionUtil.getTerminalStatus(tPort.getName(),tGoods.getContainerNumber(), FacilityCodeEnum.USLAX.getMsg());
+            }else {
+                // 去查是否存了containerid
+                if(ToolUtil.isNotEmpty(tGoods.getShipmentId()) && !"0".equals(tGoods.getShipmentId())){
+                    terminalStatus = FortyNineUtil.getContainerNo(tGoods.getShipmentId(), tGoods.getContainerNumber());
+                }else {
 
+                    String shippingLine = tGoods.getShippingLine();
+                    SCACEnum scacEnum = SCACEnum.fromCode(shippingLine);
+                    String s;
+                    if(ToolUtil.isEmpty(tGoods.getTrackingId()) || "0".equals(tGoods.getTrackingId())){
+                        s = FortyNineUtil.trackingRequest(tGoods.getBillNumber(), scacEnum.getDesc());
+                        if(ToolUtil.isEmpty(s)){
+                            s = FortyNineUtil.trackingList(tGoods.getBillNumber());
+                        }
+                        tGoods.setTrackingId(s);
+                        goodsService.updateById(tGoods);
+                    }else {
+                        s = tGoods.getTrackingId();
+                    }
+                    String shipmentId = FortyNineUtil.getShipmentId(s);
+                    if(ToolUtil.isNotEmpty(shipmentId)){
+                        tGoods.setShipmentId(shipmentId);
+                        goodsService.updateById(tGoods);
+                    }else {
+                        tGoods.setShipmentId("0");
+                        tGoods.setTrackingId("0");
+                        goodsService.updateById(tGoods);
+                    }
+                    terminalStatus = FortyNineUtil.getContainerNo(shipmentId, tGoods.getContainerNumber());
+                }
+            }
         }catch (Exception e){
             e.printStackTrace();
             terminalStatus =new TerminaleDataWarpper();
@@ -207,13 +258,16 @@
             OrderDriverInfo orderDriverInfo = new OrderDriverInfo();
             orderDriverInfo.setId(tDriver.getId());
             orderDriverInfo.setDriverId(tDriver.getDriverId());
-            if(tDriver.getId().equals(sDriverIdOne)&&tDriver.getType()==2){
+            if(tDriver.getDriverId().equals(sDriverIdOne)&&tDriver.getType()==1){
                 orderDriverInfo.setPickUp(tDriver.getPickDate());
             }
-            if(tDriver.getId().equals(driverid) &&tDriver.getType()==3){
+            if(tDriver.getDriverId().equals(sDriverIdOne)&&tDriver.getType()==2){
+                orderDriverInfo.setPickUp(tDriver.getPickDate());
+            }
+            if(tDriver.getDriverId().equals(driverid) &&tDriver.getType()==3){
                 orderDriverInfo.setEmptyDate(tDriver.getEmptyDate());
             }
-            if(tDriver.getId().equals(driverIdOne) &&tDriver.getType()==4){
+            if(tDriver.getDriverId().equals(driverIdOne) &&tDriver.getType()==4){
                 orderDriverInfo.setReturnDate(tDriver.getReturnDate());
             }
             orderDriverInfo.setContactEmail(tDriver.getEmail());
@@ -237,6 +291,7 @@
         transportInfo.setCTF(terminalStatus.getCtf());
         transportInfo.setClosedArea(terminalStatus.getClosedArea());
         transportInfo.setLFD(terminalStatus.getLfd());
+        transportInfo.setAvailable(terminalStatus.getAvailability());
 
         transportInfo.setList(orderDriverInfos);
         Integer examSite = tOrder.getExamSite();
@@ -434,7 +489,7 @@
             TOrder tOrder = orderService.selectById(orderId);
             TTransportation list = companySelectDriverSingleDto.getList();
             list.setOrderId(companySelectDriverSingleDto.getOrderId());
-            Integer type = companySelectDriverSingleDto.getType();
+            Integer type = companySelectDriverSingleDto.getList().getType();
             if(type==1){
                 tTransportationService.delete(new EntityWrapper<TTransportation>().eq("order_id",orderId).eq("driver_id",tOrder.getsDriverid()).eq("type",1));
                 tOrder.setsDriverid(list.getDriverId());
@@ -448,7 +503,7 @@
                 tTransportationService.delete(new EntityWrapper<TTransportation>().eq("order_id",orderId).eq("driver_id",tOrder.geteDriverIdOne()).eq("type",4));
                 tOrder.seteDriverIdOne(list.getDriverId());
             }
-            tTransportationService.insert(list);
+                tTransportationService.insert(list);
             // 删除原来的司机信息
             // 更改订单信息
             orderService.updateById(tOrder);
diff --git a/src/main/java/com/stylefeng/guns/modular/system/controller/RatesController.java b/src/main/java/com/stylefeng/guns/modular/system/controller/RatesController.java
index fd8cbff..9b49fd9 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/controller/RatesController.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/controller/RatesController.java
@@ -249,12 +249,9 @@
     @ResponseBody
     public Object getWarehouseFromId(int id,int pageNumber,int pageSize,String code) {
         Page<TWarehouse> tWarehousePage = new Page<>(pageNumber, pageSize);
-        Wrapper<TWarehouse> warehouseWrapper = new EntityWrapper<TWarehouse>().eq("port_id", id);
-        if(ToolUtil.isNotEmpty(code)){
-            warehouseWrapper.like("code",code).or().like("state",code);
-        }
-        Page<TWarehouse> tWarehouses = warehouseService.selectPage(tWarehousePage,warehouseWrapper);
-        return new SuccessTip(tWarehouses);
+        List<TWarehouse> tWarehouses = warehouseService.getWarehouseFromId(tWarehousePage,id,code);
+        tWarehousePage.setRecords(tWarehouses);
+        return new SuccessTip(tWarehousePage);
     }
 
     @ApiOperation(value = "卡车公司- 根据id统一设置亚马逊价格",notes="卡车公司-根据id统一设置亚马逊价格")
diff --git a/src/main/java/com/stylefeng/guns/modular/system/controller/TCarriersController.java b/src/main/java/com/stylefeng/guns/modular/system/controller/TCarriersController.java
index 4b277e6..fcbb4d5 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/controller/TCarriersController.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/controller/TCarriersController.java
@@ -64,14 +64,16 @@
             @ApiImplicitParam(name = "name", value = "powerUnitNumber", required = false, dataType = "String",paramType = "query"),
             @ApiImplicitParam(name = "pageNumber", value = "pageNumber", required = true, dataType = "int",paramType = "query"),
             @ApiImplicitParam(name = "pageSize", value = "pageSize", required = true, dataType = "int",paramType = "query"),
+            @ApiImplicitParam(name = "companyId", value = "companyId", required = true, dataType = "int",paramType = "query"),
     })
     @GetMapping(value = "/list")
     @ResponseBody
-        public Object list(String time,String name,int pageNumber,int pageSize) {
+        public Object list(String time,String name,int pageNumber,int pageSize,int companyId) {
         Page<TCarriers> tCarriersPage = new Page<>(pageNumber, pageSize);
         String sTime=null;
         String eTime=null;
         EntityWrapper<TCarriers> wrapper = new EntityWrapper<>();
+        wrapper.eq("company_id",companyId);
         wrapper.eq("remove",0);
         if(ToolUtil.isNotEmpty(name)){
             wrapper.like("company_name",name).or().like("account",name);
diff --git a/src/main/java/com/stylefeng/guns/modular/system/controller/TYardController.java b/src/main/java/com/stylefeng/guns/modular/system/controller/TYardController.java
index 633786c..179bb41 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/controller/TYardController.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/controller/TYardController.java
@@ -45,12 +45,13 @@
             @ApiImplicitParam(name = "city", value = "country/state/city/zipcode", required = false, dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "pageNumber", value = "pageNumber", required = true, dataType = "int", paramType = "query"),
             @ApiImplicitParam(name = "pageSize", value = "pageSize", required = true, dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "companyId", value = "companyId", required = true, dataType = "int", paramType = "query"),
     })
     @GetMapping(value = "/list")
     @ResponseBody
-    public Object list(String name, String city, int pageNumber, int pageSize) {
+    public Object list(String name, String city, int pageNumber, int pageSize,int companyId) {
         Page<TYardVo> tYardPage = new Page<>(pageNumber, pageSize);
-        List<TYardVo> tYardVoPage = yardService.getList(name,city,tYardPage);
+        List<TYardVo> tYardVoPage = yardService.getList(name,city,tYardPage,companyId);
         tYardPage.setRecords(tYardVoPage);
         return new SuccessTip(tYardPage);
     }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderMapper.java b/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderMapper.java
index 282fd0c..6b70797 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderMapper.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderMapper.java
@@ -60,4 +60,7 @@
     Double getCompanyIncome(@Param("companyId") Integer companyId, @Param("sTime") String sTime, @Param("eTime") String eTime);
 
     List<Map<String, Object>> queryAllOrderDatas();
+
+    List<Map<String, Object>> getLonLat(@Param("orderId") Long orderId);
+
 }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/dao/TYardMapper.java b/src/main/java/com/stylefeng/guns/modular/system/dao/TYardMapper.java
index 82eaf1b..257d9b5 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/dao/TYardMapper.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/dao/TYardMapper.java
@@ -19,6 +19,6 @@
  */
 public interface TYardMapper extends BaseMapper<TYard> {
 
-    List<TYardVo> getList(@Param("name") String name, @Param("city") String city, @Param("tYardPage") Page<TYardVo> tYardPage);
+    List<TYardVo> getList(@Param("name") String name, @Param("city") String city, @Param("tYardPage") Page<TYardVo> tYardPage, @Param("companyId") int companyId);
 
 }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/dao/WareHouseMapper.java b/src/main/java/com/stylefeng/guns/modular/system/dao/WareHouseMapper.java
index 7504bed..6ab5d43 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/dao/WareHouseMapper.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/dao/WareHouseMapper.java
@@ -1,7 +1,12 @@
 package com.stylefeng.guns.modular.system.dao;
 
 import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.plugins.Page;
 import com.stylefeng.guns.modular.system.model.TWarehouse;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface WareHouseMapper extends BaseMapper<TWarehouse> {
+    List<TWarehouse> getWarehouseFromId(@Param("tWarehousePage") Page<TWarehouse> tWarehousePage, @Param("id") int id, @Param("code") String code);
 }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml b/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml
index 58da649..f5caa11 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml
+++ b/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml
@@ -182,7 +182,7 @@
 	LEFT JOIN t_user t3 on t1.user_id =t3.id
 	LEFT JOIN t_port t4 on t1.`port` = t4.id
     LEFT JOIN t_group t5 on t3.group_id = t5.id
-	where t1.company_id = #{companyId} and t1.order_type=#{type}
+	where t1.company_id = #{companyId} and t1.order_type=#{type} and t1.status != 17
 	<if test="sTime !=null">
         and (t1.shipment_date between  #{sTime} and #{eTime} or t1.delivery_date between  #{sTime} and #{eTime})
     </if>
@@ -203,6 +203,7 @@
     </if>
 GROUP BY
 	t1.id
+	order by t1.create_time desc
 
 
     </select>
@@ -225,4 +226,8 @@
         WHERE too.STATUS = 1
     </select>
 
+    <select id="getLonLat" resultType="java.util.Map">
+        select lon,lat from t_order_lonlat where orderId =#{orderId}
+    </select>
+
 </mapper>
diff --git a/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TYardMapper.xml b/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TYardMapper.xml
index 55fecca..aa30b15 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TYardMapper.xml
+++ b/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TYardMapper.xml
@@ -21,7 +21,7 @@
     </resultMap>
     <select id="getList" resultType="com.stylefeng.guns.modular.system.model.TYardVo">
         select id,yard_name,street_address,city,state,zip_code,country,contact_email,contact_name from t_yard
-        where remove=0
+        where remove=0 and company_id  =#{companyId}
         <if test="name!=null and name !=''">
             and (id like concat("%",#{name},"%") or yard_name like concat("%",#{name},"%"))
         </if>
diff --git a/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WarehouseMapper.xml b/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WarehouseMapper.xml
index 846ffb9..a8e48d5 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WarehouseMapper.xml
+++ b/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WarehouseMapper.xml
@@ -10,6 +10,12 @@
         <result column="type" property="type"/>
         <result column="address" property="address"/>
     </resultMap>
+    <select id="getWarehouseFromId" resultType="com.stylefeng.guns.modular.system.model.TWarehouse">
+        select * from t_warehouse where port_id =#{id}
+        <if test="code != null and code !=''">
+            and (code like concat ("%",#{code},"%") or state like concat ("%",#{code},"%") )
+        </if>
+    </select>
 
 
 </mapper>
diff --git a/src/main/java/com/stylefeng/guns/modular/system/model/GoodsListDto.java b/src/main/java/com/stylefeng/guns/modular/system/model/GoodsListDto.java
index 2bd9775..bc99e5c 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/model/GoodsListDto.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/model/GoodsListDto.java
@@ -23,6 +23,9 @@
     private String ourRef;
     private String po;
     private String sb;
+    private String lb;
+    private String billNumber;
+
 
 
 
diff --git a/src/main/java/com/stylefeng/guns/modular/system/model/TGoods.java b/src/main/java/com/stylefeng/guns/modular/system/model/TGoods.java
index e6f9fa3..5e3a5fb 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/model/TGoods.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/model/TGoods.java
@@ -80,6 +80,36 @@
 
     private String lineStr;
 
+    private String containerId;
+
+    public String getContainerId() {
+        return containerId;
+    }
+
+    public void setContainerId(String containerId) {
+        this.containerId = containerId;
+    }
+
+    public String getTrackingId() {
+        return trackingId;
+    }
+
+    public void setTrackingId(String trackingId) {
+        this.trackingId = trackingId;
+    }
+
+    public String getShipmentId() {
+        return shipmentId;
+    }
+
+    public void setShipmentId(String shipmentId) {
+        this.shipmentId = shipmentId;
+    }
+
+    private String trackingId;
+
+    private String shipmentId;
+
     public Integer getId() {
         return id;
     }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/model/TransportInfo.java b/src/main/java/com/stylefeng/guns/modular/system/model/TransportInfo.java
index b1bbad1..2009c42 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/model/TransportInfo.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/model/TransportInfo.java
@@ -23,21 +23,20 @@
     private String truckCompany;
 
     private Date pickupTime;
-
     private Integer streetTurn;
     @ApiModelProperty(value = "1:YES 2:NO")
-    private Integer lineHold;
+    private String lineHold;
     @ApiModelProperty(value = "1:YES 2:NO")
-    private Integer customHold;
+    private String customHold;
     @ApiModelProperty(value = "1:YES 2:NO")
-    private Integer pierpass;
+    private String pierpass;
     @ApiModelProperty(value = "1:YES 2:NO")
-    private Integer CTF;
+    private String CTF;
 
     private String LFD;
     @ApiModelProperty(value = "1:YES 2:NO")
-    private Integer closedArea;
+    private String closedArea;
 
+    private String available;
 
-    private Date shipmentDate;
 }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java b/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java
index 7aade0d..71fc44c 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java
@@ -49,4 +49,6 @@
     List<Map<String, Object>> queryAllOrderDatas();
 
 
+    List<Map<String, Object>> getLonLat(Long orderId);
+
 }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/service/IWarehouseService.java b/src/main/java/com/stylefeng/guns/modular/system/service/IWarehouseService.java
index ed7d151..6f9989d 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/service/IWarehouseService.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/service/IWarehouseService.java
@@ -1,5 +1,6 @@
 package com.stylefeng.guns.modular.system.service;
 
+import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.IService;
 import com.stylefeng.guns.core.node.ZTreeNode;
 import com.stylefeng.guns.modular.system.model.Dept;
@@ -17,4 +18,7 @@
  */
 public interface IWarehouseService extends IService<TWarehouse> {
 
+    List<TWarehouse> getWarehouseFromId(Page<TWarehouse> tWarehousePage, int id, String code);
+
+
 }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/service/TYardService.java b/src/main/java/com/stylefeng/guns/modular/system/service/TYardService.java
index 670e919..837124d 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/service/TYardService.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/service/TYardService.java
@@ -17,7 +17,7 @@
  */
 public interface TYardService extends IService<TYard> {
 
-    List<TYardVo> getList(String name, String city, Page<TYardVo> tYardPage);
+    List<TYardVo> getList(String name, String city, Page<TYardVo> tYardPage,int companyId);
 
 
 
diff --git a/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java b/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
index a0c98b0..aab7f61 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
@@ -502,7 +502,7 @@
             lonLat.setLat(tOrder.getStartLat());
             lonLat.setLng(tOrder.getStartLon());
             lonLats.add(lonLat);
-                String s = tOrder.geteAddress();
+            String s = tOrder.geteAddress();
             GeocodeVo geocode = googleMapUtil.getGeocode(s);
             orderInfo.setElat(String.valueOf(geocode.getLat()));
             orderInfo.setElon(String.valueOf(geocode.getLng()));
@@ -609,6 +609,12 @@
         }
 
 
+
+        @Override
+        public List<Map<String, Object>> getLonLat(Long orderId) {
+            return this.baseMapper.getLonLat(orderId);
+        }
+
         public static void main(String[] args) throws ParseException {
 
 
diff --git a/src/main/java/com/stylefeng/guns/modular/system/service/impl/TYardServiceImpl.java b/src/main/java/com/stylefeng/guns/modular/system/service/impl/TYardServiceImpl.java
index 8980a89..84e683e 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/service/impl/TYardServiceImpl.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/service/impl/TYardServiceImpl.java
@@ -22,7 +22,7 @@
 public class TYardServiceImpl extends ServiceImpl<TYardMapper, TYard> implements TYardService {
 
     @Override
-    public List<TYardVo> getList(String name, String city, Page<TYardVo> tYardPage) {
-        return this.baseMapper.getList(name,city,tYardPage);
+    public List<TYardVo> getList(String name, String city, Page<TYardVo> tYardPage,int companyId) {
+        return this.baseMapper.getList(name,city,tYardPage,companyId);
     }
 }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/service/impl/WareHouseServiceImpl.java b/src/main/java/com/stylefeng/guns/modular/system/service/impl/WareHouseServiceImpl.java
index 1873cd1..ae35d5f 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/service/impl/WareHouseServiceImpl.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/service/impl/WareHouseServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.stylefeng.guns.core.node.ZTreeNode;
 import com.stylefeng.guns.modular.system.dao.DeptMapper;
@@ -21,4 +22,9 @@
 @Transactional
 public class WareHouseServiceImpl extends ServiceImpl<WareHouseMapper, TWarehouse> implements IWarehouseService {
 
+    @Override
+    public List<TWarehouse> getWarehouseFromId(Page<TWarehouse> tWarehousePage, int id, String code) {
+
+        return this.baseMapper.getWarehouseFromId(tWarehousePage,id,code);
+    }
 }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/HttpRequest.java b/src/main/java/com/stylefeng/guns/modular/system/utils/HttpRequest.java
index 4076838..6581f04 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/utils/HttpRequest.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/HttpRequest.java
@@ -59,6 +59,7 @@
             connection.setRequestProperty("accept", "*/*");
             connection.setRequestProperty("connection", "Keep-Alive");
             connection.setRequestProperty("User-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36");
+            connection.setRequestProperty("Authorization", "Token iVXSeqMEhdYvAj2bgA8tiWdE");
             // 建立实际的连接
             connection.connect();
             // 获取所有响应头字段
@@ -110,6 +111,7 @@
             conn.setRequestProperty("accept", "*/*");
             conn.setRequestProperty("connection", "Keep-Alive");
             conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Authorization", "Token iVXSeqMEhdYvAj2bgA8tiWdE");
             // 发送POST请求必须设置如下两行
             conn.setDoOutput(true);
             conn.setDoInput(true);
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/TerminalInterfaceAcquisitionUtil.java b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/APMStrategy.java
similarity index 61%
rename from src/main/java/com/stylefeng/guns/modular/system/utils/TerminalInterfaceAcquisitionUtil.java
rename to src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/APMStrategy.java
index 478c5c1..f7076eb 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/utils/TerminalInterfaceAcquisitionUtil.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/APMStrategy.java
@@ -1,10 +1,12 @@
-package com.stylefeng.guns.modular.system.utils;
+package com.stylefeng.guns.modular.system.utils.PortUtil;
 
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
 import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
 
@@ -14,49 +16,58 @@
 import java.util.List;
 import java.util.stream.Collectors;
 
-/**
- * <p>
- *   码头-车场-客户 运输状态 第三方接口获取数据 APM码头——Import Availability
- *
- * </p>
- *
- * @Author: lisy
- * @date: 2023-05-18 16:52
- * @Description:
- */
-
-public class TerminalInterfaceAcquisitionUtil {
+public class APMStrategy implements WharfStrategy{
 
     //Sandbox Interface
     private static final String url  = "https://api-sandbox.apmterminals.com/import-availability";
 
     //Production Interface
-    private static final String proUrl  = "https://api.apmterminals.com/import-availability";
+//    private static final String url  = "https://api.apmterminals.com/import-availability";
+
     private static final String auth_url  = "https://api.apmterminals.com/oauth/client_credential/accesstoken";
 
     private static final String KEY  = "di3RgCcM9zlgb5BG1UiYSIxwYdmYUxTo";
     private static final String SECRET  = "AIJczPxBeocsEjtI";
+
     private static String bearerToken  = "5dDHq3LwPW3EYZ6rtPGK0zqWsRA5";
 
 
-    /**
-     *
-     * @param containerId 容器id
-     * @param enums 设施编码
-     * @return
-     */
-    public static TerminaleDataWarpper getTerminalStatus(String containerId,String enums){
+    public static void main(String[] args) {
+        getAuth();
+        String us = auth_url+ "?assetId="+"EITU1509974"+"&facilityCode="+"USLAX";
+        HttpResponse execute = HttpRequest.get(us).header("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36")
+                .header("cookie", "_ga=GA1.2.1226281326.1675309614; _gid=GA1.2.1467106222.1675309614; _ga=GA1.4.1226281326.1675309614; _gid=GA1.4.1467106222.1675309614; AWSALB=1bWqINVI+LJP87FTEXfEw1Ob1nkbr+I4baSbUGUmu5+/LdiqL9ic04Nj7F0Vz3rvharAG7a8dVe3MX6YMNEbUINVr++CCv/UBw6JeCRS0PcbRLxK7wVHb1lPT8Jl; AWSALBCORS=1bWqINVI+LJP87FTEXfEw1Ob1nkbr+I4baSbUGUmu5+/LdiqL9ic04Nj7F0Vz3rvharAG7a8dVe3MX6YMNEbUINVr++CCv/UBw6JeCRS0PcbRLxK7wVHb1lPT8Jl")
+                .header("path", "?assetId=" + "EITU1509974" + "&facilityCode=" + "USLAX")
+                .header("Authorization", "Bearer " + bearerToken)
+                .execute();
+        int status = execute.getStatus();
+        System.out.println(status);
+        System.out.println(execute.body());
+    }
+
+    @Override
+    public TerminaleDataWarpper executeLogic(String... params) {
+        String containerId = "";
+        String enums = "";
+        if (params.length == 0) {
+            throw new GunsException(BizExceptionEnum.REQUEST_EMPTY_ERROR);
+        } else {
+            containerId = params[0];
+            enums = params[1];
+        }
+
         String us = url+ "?assetId="+containerId+"&facilityCode="+enums;
         HttpResponse execute = HttpRequest.get(us).header("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36")
                 .header("cookie", "_ga=GA1.2.1226281326.1675309614; _gid=GA1.2.1467106222.1675309614; _ga=GA1.4.1226281326.1675309614; _gid=GA1.4.1467106222.1675309614; AWSALB=1bWqINVI+LJP87FTEXfEw1Ob1nkbr+I4baSbUGUmu5+/LdiqL9ic04Nj7F0Vz3rvharAG7a8dVe3MX6YMNEbUINVr++CCv/UBw6JeCRS0PcbRLxK7wVHb1lPT8Jl; AWSALBCORS=1bWqINVI+LJP87FTEXfEw1Ob1nkbr+I4baSbUGUmu5+/LdiqL9ic04Nj7F0Vz3rvharAG7a8dVe3MX6YMNEbUINVr++CCv/UBw6JeCRS0PcbRLxK7wVHb1lPT8Jl")
                 .header("path", "?assetId=" + containerId + "&facilityCode=" + enums)
                 .header("Authorization", "Bearer " + bearerToken)
                 .execute();
+
         String body = execute.body();
         int status = execute.getStatus();
         if (status != 200){
             getAuth();
-            getTerminalStatus(containerId,enums);
+            return executeLogic();
         }
         ObjectMapper objectMapper = new ObjectMapper();
         JsonNode jsonArray = null;
@@ -68,7 +79,17 @@
                 warpper.setLfd(appointmentDateTimeLocal);
                 String appointmentNumber = jsonNode.get("containerId").asText();
                 warpper.setAppointmentNumber(appointmentNumber);
+
+                String readyForDelivery = jsonNode.get("readyForDelivery").asText();
+                if (ToolUtil.isNotEmpty(readyForDelivery)) {
+                    warpper.setAvailability(readyForDelivery);
+                }
+
                 String containerHolds = jsonNode.get("containerHolds").asText();
+                String location = jsonNode.get("location").asText();
+                if (ToolUtil.isNotEmpty(location)){
+                    warpper.setClosedArea(location);
+                }
                 List<String> collect = new ArrayList<>();
                 if (ToolUtil.isEmpty(containerHolds)){
                     return warpper;
@@ -77,43 +98,41 @@
                     String[] split = containerHolds.split(",");
                     collect =  Arrays.stream(split).collect(Collectors.toList());
                     if (collect.contains("LINE")){
-                        warpper.setLineHold(1);
+                        warpper.setLineHold("1");
                     }
                     if (collect.contains("TMF")){
-                        warpper.setCustomHold(1);
+                        warpper.setCustomHold("1");
                     }
                     if (collect.contains("PIER")){
-                        warpper.setPierpass(1);
+                        warpper.setPierpass("1");
                     }
                     if (collect.contains("CTF")){
-                        warpper.setCtf(1);
+                        warpper.setCtf("1");
                     }
-                    if (collect.contains("AREA")){
-                        warpper.setClosedArea(1);
-                    }
+
                 }else {
                     if (containerHolds.equals("LINE")){
-                        warpper.setLineHold(1);
+                        warpper.setLineHold("1");
                     }
                     if (containerHolds.equals("TMF")){
-                        warpper.setCustomHold(1);
+                        warpper.setCustomHold("1");
                     }
                     if (containerHolds.equals("PIER")){
-                        warpper.setPierpass(1);
+                        warpper.setPierpass("1");
                     }
                     if (containerHolds.equals("CTF")){
-                        warpper.setCtf(1);
+                        warpper.setCtf("1");
                     }
                     if (containerHolds.equals("AREA")){
-                        warpper.setClosedArea(1);
+                        warpper.setClosedArea("1");
                     }
                 }
+                break;
             }
-
-
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
+
         return warpper;
     }
 
@@ -130,6 +149,4 @@
             bearerToken = (String) o;
         }
     }
-
-
 }
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FMSStrategy.java b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FMSStrategy.java
new file mode 100644
index 0000000..2a19432
--- /dev/null
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FMSStrategy.java
@@ -0,0 +1,79 @@
+package com.stylefeng.guns.modular.system.utils.PortUtil;
+
+import cn.hutool.http.HttpRequest;
+import com.intuit.ipp.exception.ServiceException;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class FMSStrategy implements WharfStrategy {
+
+
+
+    @Override
+    public TerminaleDataWarpper executeLogic(String... params) {
+        String enums = "";
+        if (params.length == 0) {
+            throw new GunsException(BizExceptionEnum.REQUEST_EMPTY_ERROR);
+        } else {
+            enums = params[0];
+        }
+        HttpRequest httpRequest = HttpRequest.get("http://n4.fenixmarineservices.com:9081/apex/api/codeextension?extensionname=FenixCheckCtrAvailability&operatorId=FMS&complexId=USSPQ&facilityId=FMS&yardId=FMS&PARM_filterName=UNIT_FINDER_QUERY&PARM_CTRNBR=" + enums);
+
+        System.out.println(httpRequest);
+
+        return null;
+    }
+
+
+    public static void main(String[] args) throws ServiceException {
+        String post = post("http://n4.fenixmarineservices.com:9081/apex/api/codeextension?extensionname=FenixCheckCtrAvailability&operatorId=FMS&complexId=USSPQ&facilityId=FMS&yardId=FMS&PARM_filterName=UNIT_FINDER_QUERY&PARM_CTRNBR=" + "TGHU9229633", "");
+        System.out.println(post);
+
+
+    }
+
+    public static String post(String strURL, String params) throws ServiceException {
+        System.out.println(strURL);
+        System.out.println(params);
+        String result = "";
+        BufferedReader reader = null;
+        try {
+            URL url = new URL(strURL);// 创建连接
+            HttpURLConnection connection = (HttpURLConnection) url
+                    .openConnection();
+            connection.setDoOutput(true);
+            connection.setDoInput(true);
+            connection.setUseCaches(false);
+            connection.setInstanceFollowRedirects(true);
+            connection.setRequestMethod("GET"); // 设置请求方式
+            connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式
+            connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式
+            connection.connect();
+            if (connection.getResponseCode() == 200) {
+                reader = new BufferedReader(
+                        new InputStreamReader(connection.getInputStream()));
+                result = reader.readLine();
+            } else {
+                throw new ServiceException(connection.getResponseMessage());
+            }
+        } catch (Exception e) {
+            throw new ServiceException("http的post请求异常!" + e.getMessage());
+        } finally {
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return result;
+    }
+}
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FortyNineUtil.java b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FortyNineUtil.java
new file mode 100644
index 0000000..c3082f6
--- /dev/null
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FortyNineUtil.java
@@ -0,0 +1,172 @@
+package com.stylefeng.guns.modular.system.utils.PortUtil;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.utils.HttpRequest;
+import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+
+public class FortyNineUtil {
+
+    public static  String trackingList(String blNo){
+        String trackingId="";
+        try {
+            String s = HttpRequest.sendGet("https://api.terminal49.com/v2/tracking_requests", "");
+            Object data = JSONObject.parseObject(s).get("data");
+            JSONArray array = JSONArray.parseArray(data.toString());
+            for (Object o : array) {
+                Object attributes = JSONObject.parseObject(o.toString()).get("attributes");
+                String request_number = JSONObject.parseObject(attributes.toString()).get("request_number").toString();
+                if(blNo.equals(request_number)){
+                    trackingId =  JSONObject.parseObject(o.toString()).get("id").toString();
+                }
+            }
+            System.out.println(trackingId);
+            return trackingId;
+        }catch (Exception e){
+            e.getCause();
+            return null;
+        }
+
+    }
+
+    // 根据bl 和 scac 获取tracking_request 请求id
+    public static String trackingRequest(String blNo,String scac) {
+        HashMap<String, Object> map2 = new HashMap<>();
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("type", "tracking_request");
+        HashMap<String, Object> map1 = new HashMap<>();
+        map1.put("request_number", blNo);
+        map1.put("request_type", "bill_of_lading");
+        map1.put("scac", scac);
+        map.put("attributes", map1);
+        map2.put("data",map);
+        JSONObject jsonObject = new JSONObject(map2);
+        try {
+            String s = HttpRequest.sendPost("https://api.terminal49.com/v2/tracking_requests", jsonObject);
+            Object data = JSONObject.parseObject(s).get("data");
+            String id = JSONObject.parseObject(data.toString()).get("id").toString();
+            return id;
+        }catch (Exception e){
+            return null;
+        }
+
+    }
+
+
+    public static String getShipmentId(String id) {
+        String s = HttpRequest.sendGet(" https://api.terminal49.com/v2/tracking_requests/"+id, "");
+        try {
+            JSONObject jsonObject = JSONObject.parseObject(s);
+            Object data = jsonObject.get("data");
+            Object relationships = JSONObject.parseObject(data.toString()).get("relationships");
+            Object trackedObject = JSONObject.parseObject(relationships.toString()).get("tracked_object");
+            Object data1 = JSONObject.parseObject(trackedObject.toString()).get("data");
+            Object value = JSONObject.parseObject(data1.toString()).get("id");
+            return value.toString();
+        }catch (Exception e){
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public static TerminaleDataWarpper getContainerNo(String shipmentId, String containerNo) {
+        int i=0;
+        String s = HttpRequest.sendGet("https://api.terminal49.com/v2/shipments/"+shipmentId, "");
+        TerminaleDataWarpper terminaleDataWarpper = new TerminaleDataWarpper();
+        try {
+        JSONObject jsonObject = JSONObject.parseObject(s);
+        Object data = jsonObject.get("data");
+        Object relationships = JSONObject.parseObject(data.toString()).get("relationships");
+        Object trackedObject = JSONObject.parseObject(relationships.toString()).get("containers");
+        Object data1 = JSONObject.parseObject(trackedObject.toString()).get("data");
+        JSONArray array = JSONObject.parseArray(data1.toString());
+        for (Object o : array) {
+            JSONObject dataInfo = JSONObject.parseObject(o.toString());
+            String id = dataInfo.get("id").toString();
+            String container = HttpRequest.sendGet("https://api.terminal49.com/v2/containers/"+id, "");
+            JSONObject containerJson = JSONObject.parseObject(container);
+            Object data2 = containerJson.get("data");
+            Object attributes = JSONObject.parseObject(data2.toString()).get("attributes");
+            Object number = JSONObject.parseObject(attributes.toString()).get("number");
+            // 匹配这个号码 匹配到
+            String containers = number.toString();
+            if(containerNo.equals(containers)){
+                i = 1;
+                String lfd = String.valueOf(JSONObject.parseObject(attributes.toString()).get("pickup_lfd"));
+                try {
+                    lfd= getTime(lfd);
+                    terminaleDataWarpper.setLfd(lfd);
+                }catch (Exception e){
+                    terminaleDataWarpper.setLfd(lfd);
+                }
+
+                String available = JSONObject.parseObject(attributes.toString()).get("available_for_pickup").toString();
+                terminaleDataWarpper.setAvailability(available);
+                String location = String.valueOf(JSONObject.parseObject(attributes.toString()).get("location_at_pod_terminal"));
+                terminaleDataWarpper.setClosedArea(location);
+                String freight = "";
+                String customs = "";
+                String TMF = "";
+                String CTF = "";
+                String holds = JSONObject.parseObject(attributes.toString()).get("holds_at_pod_terminal").toString();
+                JSONArray array1 = JSONObject.parseArray(holds);
+                for (Object o1 : array1) {
+                    JSONObject jsonObject1 = JSONObject.parseObject(o1.toString());
+                    if("freight".equals(jsonObject1.get("name").toString())){
+                        freight = jsonObject1.get("status").toString();
+                        terminaleDataWarpper.setLineHold(freight);
+                    }
+                    if("customs".equals(jsonObject1.get("name").toString())){
+                        customs = jsonObject1.get("status").toString();
+                        terminaleDataWarpper.setCustomHold(customs);
+                    }
+                    if("TMF".equals(jsonObject1.get("name").toString())){
+                        TMF = jsonObject1.get("status").toString();
+                        terminaleDataWarpper.setPierpass(TMF);
+                    }
+                    if("other".equals(jsonObject1.get("name").toString()) && "CTF - Clean Truck Fee".equals(jsonObject1.get("description").toString())){
+                        CTF = jsonObject1.get("status").toString();
+                        terminaleDataWarpper.setCtf(CTF);
+                    }
+                }
+                if("PENDING".equals(terminaleDataWarpper.getLineHold()) && ToolUtil.isNotEmpty(lfd)){
+                    terminaleDataWarpper.setLineHold("RELEASE");
+                }
+                if("PENDING".equals(terminaleDataWarpper.getCustomHold()) && ToolUtil.isNotEmpty(lfd)){
+                    terminaleDataWarpper.setCustomHold("RELEASE");
+                }
+                if("PENDING".equals(terminaleDataWarpper.getPierpass()) && ToolUtil.isNotEmpty(lfd)){
+                    terminaleDataWarpper.setPierpass("RELEASE");
+                }
+                if("PENDING".equals(terminaleDataWarpper.getCtf()) && ToolUtil.isNotEmpty(lfd)){
+                    terminaleDataWarpper.setCtf("RELEASE");
+                }
+                break;
+            }
+            if(i==0){
+                // 货柜号匹配不上
+                return null;
+            }
+        }
+        }catch (Exception e){
+            e.printStackTrace();
+            return terminaleDataWarpper;
+        }
+        return terminaleDataWarpper;
+    }
+
+    public static String getTime(String time) throws ParseException {
+        String t = time.substring(0, time.indexOf("T"))+" 00:00:00";
+        Date parse = new SimpleDateFormat("yyyy-MM-dd").parse(t);
+        String format = new SimpleDateFormat("dd/MM/yyyy").format(parse);
+        return format;
+    }
+}
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/ITSStrategy.java b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/ITSStrategy.java
new file mode 100644
index 0000000..6bdf81b
--- /dev/null
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/ITSStrategy.java
@@ -0,0 +1,130 @@
+package com.stylefeng.guns.modular.system.utils.PortUtil;
+
+import cn.hutool.core.util.XmlUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import java.io.IOException;
+
+public class ITSStrategy implements WharfStrategy {
+
+    private static final String authUrl = "https://api.itslb.com/tms2/Account/Login";
+    private static final String url = "https://api.itslb.com/tms2/Import/ContainerAvailability";
+
+    private static final String username = "Bcllc1441";
+    private static final String password = "Bcllc1441@";
+
+    private static String bearerToken = "";
+
+
+    @Override
+    public TerminaleDataWarpper executeLogic(String... params) {
+
+        String enums = "";
+        if (params.length == 0) {
+            throw new GunsException(BizExceptionEnum.REQUEST_EMPTY_ERROR);
+        } else {
+            enums = params[0];
+        }
+
+        String jsonBody = JSONUtil.createObj()
+                .put("refType", "CN")
+                .put("refNums", enums)
+                .toString();
+        HttpResponse execute = HttpRequest.post(url)
+                .header("Authorization", "Bearer " + bearerToken)
+                .body(jsonBody)
+                .execute();
+        int statusCode = execute.getStatus();
+        String body = execute.body();
+        if ("401".equals(statusCode)){
+            getAuth();
+            executeLogic(params);
+        }
+        TerminaleDataWarpper terminaleDataWarpper = new TerminaleDataWarpper();
+        if ("404".equals(statusCode)){
+            return terminaleDataWarpper;
+        }
+        if ("200".equals(statusCode)){
+            JSONObject jsonObject = JSONObject.parseObject(body);
+            Object o = jsonObject.get("containerAvailabilities");
+            if (ToolUtil.isNotEmpty(o)){
+                try {
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    JsonNode jsonNode = objectMapper.readTree(o.toString());
+                    for (JsonNode node : jsonNode) {
+                        String lineFeeStatusNote = node.get("lineFeeStatusNote").asText();
+                        if ("OK".equals(lineFeeStatusNote)){
+                            terminaleDataWarpper.setLineHold("");
+                        }
+
+                        String customsStatusNote = node.get("customsStatusNote").asText();
+                        if (ToolUtil.isNotEmpty(customsStatusNote) && "OK".equals(customsStatusNote)){
+                            terminaleDataWarpper.setCustomHold("");
+                        }
+
+                        String pierPassStatusNote = node.get("pierPassStatusNote").asText();
+                        if (ToolUtil.isNotEmpty(pierPassStatusNote) && "OK".equals(pierPassStatusNote)){
+                            terminaleDataWarpper.setPierpass("");
+                        }
+
+                        String estDischargeDateShift = node.get("estDischargeDateShift").asText();
+                        if (ToolUtil.isNotEmpty(estDischargeDateShift)){
+                            terminaleDataWarpper.setLfd(estDischargeDateShift);
+                        }
+
+                        String spotStatusNote = node.get("spotStatusNote").asText();
+                        if (ToolUtil.isNotEmpty(estDischargeDateShift) && "AREA CLOSED".equals(spotStatusNote)){
+                            terminaleDataWarpper.setClosedArea("");
+                        }
+
+                        String containerNumber = node.get("containerNumber").asText();
+                        if (ToolUtil.isNotEmpty(containerNumber) ){
+                            terminaleDataWarpper.setAppointmentNumber(containerNumber);
+                        }
+
+                        String isContainerAvailable = node.get("isContainerAvailable").asText();
+                        if (ToolUtil.isNotEmpty(isContainerAvailable) && "true".equals(isContainerAvailable)){
+                            terminaleDataWarpper.setAvailability(isContainerAvailable);
+                        }else {
+                            terminaleDataWarpper.setAvailability("false");
+                        }
+
+
+                        break;
+                    }
+
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
+
+            }
+        }
+
+        return terminaleDataWarpper;
+    }
+
+    public static void getAuth(){
+        String jsonInputString = "{\"userName\": \"Bcllc1441\", \"password\": \"Bcllc1441@\"}";
+        String body = HttpRequest.post(authUrl)
+                .body(jsonInputString)
+                .execute().body();
+        Document document = XmlUtil.parseXml(body);
+        Element rootElement = document.getDocumentElement();
+        String access_token = rootElement.getElementsByTagName("access_token").item(0).getTextContent();
+
+        if (ToolUtil.isNotEmpty(access_token)){
+            bearerToken = access_token;
+        }
+    }
+}
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/LBCTStrategy.java b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/LBCTStrategy.java
new file mode 100644
index 0000000..e0078b6
--- /dev/null
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/LBCTStrategy.java
@@ -0,0 +1,125 @@
+package com.stylefeng.guns.modular.system.utils.PortUtil;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
+
+import java.io.IOException;
+
+public class LBCTStrategy implements WharfStrategy {
+
+    private static final String url = "https://www.lbct.com/CargoSearch/GetMultiCargoSearchJson";
+
+
+//    public static void main(String[] args) throws IOException {
+//
+//        // 假设您有一个JSON字符串
+//        String jsonString = "{\"field1\":\"value1\",\"nestedObject\":{\"field2\":\"value2\"}}";
+//
+//// 创建ObjectMapper对象
+//        ObjectMapper objectMapper = new ObjectMapper();
+//
+//// 将JSON字符串解析为JsonNode对象
+//        JsonNode jsonNode = objectMapper.readTree(jsonString);
+//
+//// 获取嵌套对象中的字段值
+//        String field2Value = jsonNode.get("nestedObject").get("field2").asText();
+//
+//        System.out.println(field2Value);
+//
+//
+//    }
+
+    public static void main(String[] args) {
+        String us = url+ "?timestamp="+System.currentTimeMillis()+"&listOfSearchId="+"GCXU5491260";
+        HttpResponse execute = HttpRequest.get(us).header("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36")
+                .header("cookie", "_ga=GA1.2.1226281326.1675309614; _gid=GA1.2.1467106222.1675309614; _ga=GA1.4.1226281326.1675309614; _gid=GA1.4.1467106222.1675309614; AWSALB=1bWqINVI+LJP87FTEXfEw1Ob1nkbr+I4baSbUGUmu5+/LdiqL9ic04Nj7F0Vz3rvharAG7a8dVe3MX6YMNEbUINVr++CCv/UBw6JeCRS0PcbRLxK7wVHb1lPT8Jl; AWSALBCORS=1bWqINVI+LJP87FTEXfEw1Ob1nkbr+I4baSbUGUmu5+/LdiqL9ic04Nj7F0Vz3rvharAG7a8dVe3MX6YMNEbUINVr++CCv/UBw6JeCRS0PcbRLxK7wVHb1lPT8Jl")
+                .header("path", "?timestamp=" + System.currentTimeMillis() + "&listOfSearchId=" + "GCXU5491260")
+                .execute();
+        String body = execute.body();
+        System.out.println(body);
+    }
+    @Override
+    public TerminaleDataWarpper executeLogic(String... params) {
+        String enums = "";
+        if (params.length == 0) {
+            throw new GunsException(BizExceptionEnum.REQUEST_EMPTY_ERROR);
+        } else {
+            enums = params[0];
+        }
+        String us = url+ "?timestamp="+System.currentTimeMillis()+"&listOfSearchId="+enums;
+        HttpResponse execute = HttpRequest.get(us).header("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36")
+                .header("cookie", "_ga=GA1.2.1226281326.1675309614; _gid=GA1.2.1467106222.1675309614; _ga=GA1.4.1226281326.1675309614; _gid=GA1.4.1467106222.1675309614; AWSALB=1bWqINVI+LJP87FTEXfEw1Ob1nkbr+I4baSbUGUmu5+/LdiqL9ic04Nj7F0Vz3rvharAG7a8dVe3MX6YMNEbUINVr++CCv/UBw6JeCRS0PcbRLxK7wVHb1lPT8Jl; AWSALBCORS=1bWqINVI+LJP87FTEXfEw1Ob1nkbr+I4baSbUGUmu5+/LdiqL9ic04Nj7F0Vz3rvharAG7a8dVe3MX6YMNEbUINVr++CCv/UBw6JeCRS0PcbRLxK7wVHb1lPT8Jl")
+                .header("path", "?timestamp=" + System.currentTimeMillis() + "&listOfSearchId=" + enums)
+                .execute();
+        String body = execute.body();
+        ObjectMapper objectMapper = new ObjectMapper();
+        JsonNode jsonArray = null;
+        TerminaleDataWarpper warpper = new TerminaleDataWarpper();
+        if (ToolUtil.isEmpty(body)){
+            return warpper;
+        }
+        try {
+            jsonArray = objectMapper.readTree(body);
+            JsonNode jsonNode = jsonArray.get(0);
+            String appointmentDateTimeLocal = jsonNode.get("gateAppt").asText();
+            JSONObject jsonObject = JSONObject.parseObject(appointmentDateTimeLocal);
+            Object o = jsonObject.get("IsTMF");
+            if (o.equals("true")){
+                warpper.setPierpass("hold");
+            }
+
+            Object location = jsonObject.get("location");
+            if ("GROUNDED".equals(location)){
+                warpper.setClosedArea(location.toString());
+            }
+            Object lfd = jsonObject.get("freeTimeExpiration");
+            if (ToolUtil.isNotEmpty(lfd)){
+                warpper.setLfd(lfd.toString());
+            }
+
+            Object available = jsonObject.get("available");
+            if (ToolUtil.isNotEmpty(available)){
+                warpper.setAvailability(available.toString());
+            }
+
+            ObjectMapper insMapp = new ObjectMapper();
+            JsonNode gateAppt1 = insMapp.readTree(jsonObject.get("gateAppt").toString());
+            String gkey = gateAppt1.get("Gkey").asText();
+            if (ToolUtil.isNotEmpty(gkey)){
+                warpper.setAppointmentNumber(gkey);
+            }
+
+            Object listOfFlag = jsonNode.get(0).get("listOfFlag");
+            Gson gson = new Gson();
+            JsonArray jsonElements = gson.fromJson(listOfFlag.toString(), JsonArray.class);
+            for (JsonElement jsonElement : jsonElements) {
+                String holdName = jsonElement.getAsJsonObject().get("holdName").getAsString();
+                String type = jsonElement.getAsJsonObject().get("type").getAsString();
+                switch (holdName){
+                    case "CTF_CONTAINER_HOLD":
+                            warpper.setCtf(type);
+                        break;
+                    case "CUSTOMS_DEFAULT_HOLD":
+                            warpper.setCustomHold(type);
+                        break;
+                    case "FREIGHT_BL_HOLD":
+                            warpper.setLineHold(type);
+                        break;
+                }
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return warpper;
+    }
+}
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/SCACEnum.java b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/SCACEnum.java
new file mode 100644
index 0000000..bf13181
--- /dev/null
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/SCACEnum.java
@@ -0,0 +1,140 @@
+package com.stylefeng.guns.modular.system.utils.PortUtil;
+
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.modular.system.utils.HttpRequest;
+
+import java.util.HashMap;
+
+public enum SCACEnum {
+
+    MATS("MATSON", "MATS"),
+    MSCU("MSC", "MSCU"),
+    MAEU("MAERSK", "MAEU"),
+    CMDU("CMA CGM", "CMDU"),
+    COSU("COSCO", "COSU"),
+    HLCU("HAPAG-LLOYD", "HLCU"),
+    EGLV("EVERGREEN", "EGLV"),
+    ONEY("ONE", "ONEY"),
+    OOLU("OOCL", "OOLU"),
+    HDMU("HMM", "HDMU"),
+    YMLU("YANG MING", "YMLU"),
+    ZIMU("ZIM", "ZIMU"),
+    WHLC("WAN HAI", "WHLC"),
+    SMLM("SM LINES", "SMLM"),
+    CULU("CUL", "CULU"),
+    AZNG("AMAZON LINE", "AZNG"),
+    ANNU("ANL", "ANNU"),
+    APLU("APL", "APLU"),
+    PCIU("PIL","PCIU"),
+    SAFM("SAFMARINE", "SAFM"),
+    SEAU("SEALAND", "SEAU"),
+    CHVW("SWIRE SHIPPING", "CHVW"),
+    SUDU("HAMBURG SUD", "SUDU");
+
+    private String desc;
+
+
+    private String code;
+
+
+    SCACEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    /**
+     * 通过code获取枚举
+     *
+     * @param code
+     * @return
+     */
+    public static SCACEnum fromCode(String code) {
+        SCACEnum[] resultTypes = SCACEnum.values();
+        for (SCACEnum resultType : resultTypes) {
+            if (code.equals(resultType.getCode())) {
+                return resultType;
+            }
+        }
+        return null;
+    }
+
+    public static void main(String[] args) {
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("type","tracking_request");
+        HashMap<String, Object> map1 = new HashMap<>();
+        map1.put("request_number","HDMUNBOZ08657400");
+        map1.put("request_type","bill_of_lading");
+        map1.put("scac","HDMU");
+        map.put("attributes",map1);
+        JSONObject jsonObject = new JSONObject(map);
+        try {
+            String s = HttpRequest.sendPost("https://api.terminal49.com/v2/tracking_requests", jsonObject);
+            Object data = JSONObject.parseObject(s).get("data");
+            String id = JSONObject.parseObject(data.toString()).get("id").toString();
+            System.out.println(id);
+        }catch (Exception e){
+            e.getCause();
+        }
+
+    }
+
+
+//    public static void main(String[] args) {
+//        String s = HttpRequest.sendGet(" https://api.terminal49.com/v2/tracking_requests/fab66753-6398-4387-9559-7398346c51cc", "");
+//        JSONObject jsonObject = JSONObject.parseObject(s);
+//        Object data = jsonObject.get("data");
+//        Object relationships = JSONObject.parseObject(data.toString()).get("relationships");
+//        Object trackedObject = JSONObject.parseObject(relationships.toString()).get("tracked_object");
+//        Object data1 = JSONObject.parseObject(trackedObject.toString()).get("data");
+//        Object value = JSONObject.parseObject(data1.toString()).get("id");
+//        System.out.println(value.toString());
+//    }
+
+
+//    public static void main(String[] args) {
+//        String s = HttpRequest.sendGet("https://api.terminal49.com/v2/shipments/ee4427ff-5c7e-48d9-9e96-9f9a583a5c03", "");
+//        JSONObject jsonObject = JSONObject.parseObject(s);
+//        Object data = jsonObject.get("data");
+//        Object relationships = JSONObject.parseObject(data.toString()).get("relationships");
+//        Object trackedObject = JSONObject.parseObject(relationships.toString()).get("containers");
+//        Object data1 = JSONObject.parseObject(trackedObject.toString()).get("data");
+//        JSONArray array = JSONObject.parseArray(data1.toString());
+//        for (Object o : array) {
+//            JSONObject dataInfo = JSONObject.parseObject(o.toString());
+//            String id = dataInfo.get("id").toString();
+//            String container = HttpRequest.sendGet("https://api.terminal49.com/v2/containers/"+id, "");
+//            JSONObject containerJson = JSONObject.parseObject(container);
+//            Object data2 = containerJson.get("data");
+//            Object attributes = JSONObject.parseObject(data2.toString()).get("attributes");
+//            Object number = JSONObject.parseObject(attributes.toString()).get("number");
+//            // 匹配这个号码 匹配到
+//            String containers = number.toString();
+//        }
+//        String s = HttpRequest.sendGet("https://api.terminal49.com/v2/shipments/ee4427ff-5c7e-48d9-9e96-9f9a583a5c03", "");
+//        JSONObject jsonObject = JSONObject.parseObject(s);
+//        Object data = jsonObject.get("data");
+//        Object relationships = JSONObject.parseObject(data.toString()).get("relationships");
+//        Object trackedObject = JSONObject.parseObject(relationships.toString()).get("containers");
+//        Object data1 = JSONObject.parseObject(trackedObject.toString()).get("data");
+//        JSONArray array = JSONObject.parseArray(data1.toString());
+//        for (Object o : array) {
+//            JSONObject dataInfo = JSONObject.parseObject(o.toString());
+//            String id = dataInfo.get("id").toString();
+//            String container = HttpRequest.sendGet("https://api.terminal49.com/v2/containers/"+id, "");
+//            JSONObject containerJson = JSONObject.parseObject(container);
+//            Object data2 = containerJson.get("data");
+//            Object attributes = JSONObject.parseObject(data2.toString()).get("attributes");
+//            Object number = JSONObject.parseObject(attributes.toString()).get("number");
+//            // 匹配这个号码 匹配到
+//            String containers = number.toString();
+//        }
+//    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/StrategyContext.java b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/StrategyContext.java
new file mode 100644
index 0000000..98c5b6c
--- /dev/null
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/StrategyContext.java
@@ -0,0 +1,30 @@
+package com.stylefeng.guns.modular.system.utils.PortUtil;
+
+
+import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
+
+import static com.stylefeng.guns.modular.system.utils.PortUtil.WharfEnum.*;
+
+public class StrategyContext {
+
+    private static WharfStrategy strategy;
+
+    public StrategyContext(String dockName) {
+        if (APM.name.equals(dockName)) {
+            strategy = new APMStrategy();
+        }
+        if (LBCT.name.equals(dockName)) {
+            strategy = new LBCTStrategy();
+        }
+        if (FMS.name.equals(dockName)) {
+            strategy = new FMSStrategy();
+        }
+        if (ITS.name.equals(dockName)) {
+            strategy = new ITSStrategy();
+        }
+    }
+
+    public TerminaleDataWarpper executeAndGetResponse(String... params) {
+        return strategy.executeLogic(params);
+    }
+}
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/TerminalInterfaceAcquisitionUtil.java b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/TerminalInterfaceAcquisitionUtil.java
new file mode 100644
index 0000000..c02bdfc
--- /dev/null
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/TerminalInterfaceAcquisitionUtil.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.utils.PortUtil;
+
+import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
+
+public class TerminalInterfaceAcquisitionUtil {
+
+    /**
+     *
+     * @param containerId 容器id
+     * @param enums 设施编码
+     * @return
+     */
+    public static TerminaleDataWarpper getTerminalStatus(String portName, String containerId, String enums){
+        StrategyContext strategyContext = new StrategyContext(portName);
+        return strategyContext.executeAndGetResponse(containerId,enums);
+    }
+
+
+
+}
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfEnum.java b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfEnum.java
new file mode 100644
index 0000000..85d0499
--- /dev/null
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfEnum.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.utils.PortUtil;
+
+public enum WharfEnum {
+
+    APM("APM"),
+    LBCT("LBCT"),
+    FMS("FMS"),
+    ITS("ITS"),
+    ;
+
+    public final String name;
+
+    WharfEnum(String name) {
+        this.name = name;
+    }
+}
diff --git a/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfStrategy.java b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfStrategy.java
new file mode 100644
index 0000000..714bb68
--- /dev/null
+++ b/src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfStrategy.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.utils.PortUtil;
+
+import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
+
+public interface WharfStrategy {
+    TerminaleDataWarpper executeLogic(String... params);
+}
diff --git a/src/main/java/com/stylefeng/guns/modular/system/warpper/TerminaleDataWarpper.java b/src/main/java/com/stylefeng/guns/modular/system/warpper/TerminaleDataWarpper.java
index 88af94e..ad2e923 100644
--- a/src/main/java/com/stylefeng/guns/modular/system/warpper/TerminaleDataWarpper.java
+++ b/src/main/java/com/stylefeng/guns/modular/system/warpper/TerminaleDataWarpper.java
@@ -17,18 +17,21 @@
 public class TerminaleDataWarpper {
 
     @ApiModelProperty(value = "1:YES 2:NO")
-    private Integer lineHold = 2;
+    private String lineHold="PENDING";
     @ApiModelProperty(value = "1:YES 2:NO")
-    private Integer customHold = 2;
+    private String customHold="PENDING";
     @ApiModelProperty(value = "1:YES 2:NO")
-    private Integer pierpass = 2;
+    private String pierpass="PENDING";
     @ApiModelProperty(value = "1:YES 2:NO")
-    private Integer ctf = 2;
+    private String ctf="PENDING" ;
 
     private String lfd;
     @ApiModelProperty(value = "1:YES 2:NO")
-    private Integer closedArea = 2;
+    private String closedArea="ON VESSEL";
 
     private String appointmentNumber;
+    private String availability;
+
+
 
 }

--
Gitblit v1.7.1