liujie
2023-08-31 d6811336d546e4963a9af3bd7cd8654d14193bce
broker 卡车公司端  49码头
1 文件已重命名
23个文件已修改
9个文件已添加
1017 ■■■■■ 已修改文件
src/main/java/com/stylefeng/guns/core/common/exception/BizExceptionEnum.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/controller/OrderController.java 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/controller/RatesController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/controller/TCarriersController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/controller/TYardController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/dao/TOrderMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/dao/TYardMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/dao/WareHouseMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TYardMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WarehouseMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/model/GoodsListDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/model/TGoods.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/model/TransportInfo.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/service/IWarehouseService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/service/TYardService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/service/impl/TYardServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/service/impl/WareHouseServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/HttpRequest.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/APMStrategy.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FMSStrategy.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FortyNineUtil.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/ITSStrategy.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/LBCTStrategy.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/SCACEnum.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/StrategyContext.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/TerminalInterfaceAcquisitionUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfEnum.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfStrategy.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/warpper/TerminaleDataWarpper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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, "请求参数不能为空"),
    /**
     * 账户问题
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());
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);
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统一设置亚马逊价格")
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);
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);
    }
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);
}
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);
}
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);
}
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>
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>
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>
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;
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;
    }
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;
}
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);
}
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);
}
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);
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 {
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);
    }
}
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);
    }
}
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);
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/APMStrategy.java
File was renamed from src/main/java/com/stylefeng/guns/modular/system/utils/TerminalInterfaceAcquisitionUtil.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;
        }
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FMSStrategy.java
New file
@@ -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;
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FortyNineUtil.java
New file
@@ -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;
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/ITSStrategy.java
New file
@@ -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;
        }
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/LBCTStrategy.java
New file
@@ -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;
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/SCACEnum.java
New file
@@ -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();
//        }
//    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/StrategyContext.java
New file
@@ -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);
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/TerminalInterfaceAcquisitionUtil.java
New file
@@ -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);
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfEnum.java
New file
@@ -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;
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/WharfStrategy.java
New file
@@ -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);
}
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;
}