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