liujie
2023-08-31 8d7dbd6d2c0775d45043474c1525ad827b4cd3bd
用户端代码  49码头
21个文件已修改
11个文件已添加
2128 ■■■■ 已修改文件
src/main/java/com/stylefeng/guns/core/common/exception/BizExceptionEnum.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java 455 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/controller/OrderController.java 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/dao/TOrderMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/enums/UserFeeSettingEnum.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/model/OrderDriverInfo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/model/OrderInfo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/model/ReceivableVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/model/TCompanyResp.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/TPrice.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/model/TransportInfo.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/service/impl/TCompanyServiceImpl.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/ChassisRentalDaysUtil.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/GoogleMap/GoogleMapUtil.java 128 ●●●●● 补丁 | 查看 | 原始文档 | 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 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FMSStrategy.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FortyNineUtil.java 170 ●●●●● 补丁 | 查看 | 原始文档 | 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/utils/TerminalInterfaceAcquisitionUtil.java 270 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/stylefeng/guns/modular/system/warpper/TerminaleDataWarpper.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | 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
@@ -11,13 +11,10 @@
import com.stylefeng.guns.modular.system.enums.UserFeeSettingEnum;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.utils.AddressLookup;
import com.stylefeng.guns.modular.system.utils.ExcelUtil;
import com.stylefeng.guns.modular.system.utils.*;
import com.stylefeng.guns.modular.system.utils.GoogleMap.DistancematrixVo;
import com.stylefeng.guns.modular.system.utils.GoogleMap.GeocodeVo;
import com.stylefeng.guns.modular.system.utils.GoogleMap.GoogleMapUtil;
import com.stylefeng.guns.modular.system.utils.PointInPolygon;
import com.stylefeng.guns.modular.system.utils.UserInfoUtil;
import com.stylefeng.guns.modular.system.utils.tips.SuccessTip;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -34,6 +31,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -133,14 +131,14 @@
        tQuote.setUserId(demandDto.getUserId());
        quoteService.insert(tQuote);
//        List<TUserFeeSetting> tUserFeeSettings=null;
//        //获取当前用户的sale
//        Integer userId = demandDto.getUserId();
        List<TUserFeeSetting> tUserFeeSettings=null;
        //获取当前用户的sale
        Integer userId = demandDto.getUserId();
//        TUser tUser = userService.selectById(userId);
//        if(tUser.getGroupId()!=null){
//            TGroup tGroup = groupService.selectById(tUser.getGroupId());
//             tUserFeeSettings = userFeeSettingService.selectList(new EntityWrapper<TUserFeeSetting>().eq("user_id",tGroup.getSalesId()));
//
        tUserFeeSettings = userFeeSettingService.selectList(new EntityWrapper<TUserFeeSetting>().eq("user_id",userId).isNotNull("fee").gt("fee",0));
//        }
@@ -224,7 +222,6 @@
        TCountry city = countryService.selectById(tPort.getCity());
        TCountry state = countryService.selectById(city.getParentId());
        String address = tPort.getAddress();
//        GeocodeVo geocode = googleMapUtil.getGeocode(address);
        List<TCompanyCalculationResp> tCompanyCalculationRespList = new ArrayList<>(tCompanyList.size());
@@ -264,18 +261,37 @@
                    List<GoodsDto> list = goodsListDto.getList();
                    ArrayList<TGoods> tGoods1 = new ArrayList<>();
                    objects = new ArrayList<>();
                    Long orderId= null;
                    for (GoodsDto goodsDto : list) {
                        tPrices = new ArrayList<>();
                        objects = new ArrayList<>();
                        TCompanyResp tCompanyResp = new TCompanyResp();
                        if("0".equals(demandDto.getWarehouse())){
                            tCompanyResp=new TCompanyResp();
                            TCompanyFeeSetting feeSetting = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", demandDto.getDelivery()));
                            if(feeSetting==null){
                                breakNum=1;
                                count++;
                                break;
//                                breakNum=1;
//                                count++;
//                                break;
                            }else {
                                tCompanyResp.setName(demandDto.getDelivery());
                                if(tUserFeeSettings!=null){
                                    List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(demandDto.getDelivery())).collect(Collectors.toList());
                                    if(collect.size()>0){
                                        BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(feeSetting.getSetValue()).setScale(2, RoundingMode.HALF_UP);
                                        tCompanyResp.setAdminPrice(feeSetting.getSetValue().add(bigDecimal));
                                tCompanyResp.setPrice(feeSetting.getSetValue());
                                    }else {
                                        tCompanyResp.setAdminPrice(feeSetting.getSetValue());
                                        tCompanyResp.setPrice(feeSetting.getSetValue());
                                    }
                                }else {
                                    tCompanyResp.setAdminPrice(feeSetting.getSetValue());
                                    tCompanyResp.setPrice(feeSetting.getSetValue());
                                }
//                                tCompanyResp.setPrice(feeSetting.getSetValue());
//                                tCompanyResp.setAdminPrice(feeSetting.getSetValue());
                                objects.add(tCompanyResp);
                            }
@@ -283,33 +299,69 @@
                            String zipCode = demandDto.getZipCode();
                            // 地址信息
                            String address1 = AddressLookup.getAddress(zipCode);
                            System.out.println("地址信息+"+address1);
                            if(address1==null){
                                return new com.stylefeng.guns.modular.system.utils.tips.ErrorTip(5001,"Please enter the correct zipcode");
                            }
                            List<TCompanyBasic> tCompanyBasic = companyBasicService.selectList(new EntityWrapper<TCompanyBasic>().eq("port_id",ratesId).eq("zip_code", zipCode).eq("type", 1));
                            System.out.println(tCompanyBasic);
                            if(tCompanyBasic.size()>0){
                                System.out.println("点对点++++++++++++");
                                tCompanyResp=new TCompanyResp();
                                if(tUserFeeSettings!=null){
                                    List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals("LH+FSC")).collect(Collectors.toList());
                                    if(collect.size()>0){
                                        BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(tCompanyBasic.get(0).getFee()).setScale(2, RoundingMode.HALF_UP);
                                tCompanyResp.setPrice(tCompanyBasic.get(0).getFee());
                                        tCompanyResp.setAdminPrice(tCompanyBasic.get(0).getFee().add(bigDecimal));
                                    }else {
                                        tCompanyResp.setPrice(tCompanyBasic.get(0).getFee());
                                        tCompanyResp.setAdminPrice(tCompanyBasic.get(0).getFee());
                                    }
                                }else {
                                    tCompanyResp.setPrice(tCompanyBasic.get(0).getFee());
                                    tCompanyResp.setAdminPrice(tCompanyBasic.get(0).getFee());
                                }
                                tCompanyResp.setName("LH+FSC");
                                objects.add(tCompanyResp);
                            }else {
                                // 画圈 拿到的zipcode集合 去对比当前zipcode是否在集合中
                                List<TCompanyBasic> type = companyBasicService.selectList(new EntityWrapper<TCompanyBasic>().eq("type", 2).eq("port_id",ratesId).orderBy("fee",true));
                                System.out.println(type);
                                tCompanyResp=new TCompanyResp();
                                if(type.size()>0){
                                    GeocodeVo geocode1 = googleMapUtil.getGeocode(address1  );
                                    System.out.println("谷歌终点经纬度"+geocode1.getLat()+"|"+geocode1.getLng());
                                    for (TCompanyBasic companyBasic : type) {
                                        boolean inPolygon = PointInPolygon.isInPolygon(geocode1.getLat(), geocode1.getLng(), companyBasic.getLonLat());
                                        if(inPolygon){
                                            tCompanyResp=new TCompanyResp();
                                            tCompanyResp.setPrice(type.get(0).getFee());
                                            if(tUserFeeSettings!=null){
                                                List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals("LH+FSC")).collect(Collectors.toList());
                                                if(collect.size()>0){
                                                    BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(companyBasic.getFee()).setScale(2, RoundingMode.HALF_UP);
                                                    tCompanyResp.setPrice(companyBasic.getFee());
                                                    tCompanyResp.setAdminPrice(companyBasic.getFee().add(bigDecimal));
                                                }else {
                                                    tCompanyResp.setPrice(companyBasic.getFee());
                                                    tCompanyResp.setAdminPrice(companyBasic.getFee());
                                                }
                                            }else {
                                                tCompanyResp.setPrice(companyBasic.getFee());
                                                tCompanyResp.setAdminPrice(companyBasic.getFee());
                                            }
//                                            tCompanyResp.setPrice(companyBasic.getFee());
//                                            tCompanyResp.setAdminPrice(companyBasic.getFee());
                                            tCompanyResp.setName("LH+FSC");
                                            objects.add(tCompanyResp);
                                            break;
                                        }
                                    }
                                    if(tCompanyResp==null){
                                    if(tCompanyResp==null || "".equals(tCompanyResp.getName()) || tCompanyResp.getName()==null){
                                        // 距离
                                        tCompanyResp=new TCompanyResp();
                                        // 1条数据  不需要zipcode
@@ -319,7 +371,23 @@
                                        List<TCompanyBasic> type1 = companyBasicService.selectList(new EntityWrapper<TCompanyBasic>().eq("type", 3).eq("port_id",ratesId).le("start",bigDecimal.doubleValue()).orderBy("start",true));
                                        if(type1.size()>0) {
                                            BigDecimal multiply = type1.get(0).getFee().multiply(bigDecimal);
                                            if(tUserFeeSettings!=null){
                                                List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals("LH+FSC")).collect(Collectors.toList());
                                                if(collect.size()>0){
                                                    BigDecimal bigDecimal1 = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(multiply).setScale(2, RoundingMode.HALF_UP);
                                            tCompanyResp.setPrice(multiply);
                                                    tCompanyResp.setAdminPrice(multiply.add(bigDecimal1));
                                                }else {
                                                    tCompanyResp.setPrice(multiply);
                                                    tCompanyResp.setAdminPrice(multiply);
                                                }
                                            }else {
                                                tCompanyResp.setPrice(multiply);
                                                tCompanyResp.setAdminPrice(multiply);
                                            }
//                                            tCompanyResp.setPrice(multiply);
//                                            tCompanyResp.setAdminPrice(multiply);
                                            tCompanyResp.setName("LH+FSC");
                                            objects.add(tCompanyResp);
                                        }else {
@@ -338,7 +406,20 @@
                                    List<TCompanyBasic> type1 = companyBasicService.selectList(new EntityWrapper<TCompanyBasic>().eq("type", 3).eq("port_id",ratesId).le("start",bigDecimal.doubleValue()).orderBy("start",true));
                                    if(type1.size()>0) {
                                        BigDecimal multiply = type1.get(0).getFee().multiply(bigDecimal);
                                        if(tUserFeeSettings!=null){
                                            List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals("LH+FSC")).collect(Collectors.toList());
                                            if(collect.size()>0){
                                                BigDecimal bigDecimal1 = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(multiply).setScale(2, RoundingMode.HALF_UP);
                                        tCompanyResp.setPrice(multiply);
                                                tCompanyResp.setAdminPrice(multiply.add(bigDecimal1));
                                            }else {
                                                tCompanyResp.setPrice(multiply);
                                                tCompanyResp.setAdminPrice(multiply);
                                            }
                                        }else {
                                            tCompanyResp.setPrice(multiply);
                                            tCompanyResp.setAdminPrice(multiply);
                                        }
                                        tCompanyResp.setName("LH+FSC");
                                        objects.add(tCompanyResp);
                                    }else {
@@ -353,37 +434,57 @@
                            tCompanyResp=new TCompanyResp();
                            TWarehouse tWarehouse = warehouseService.selectOne(new EntityWrapper<TWarehouse>().eq("company_id", company.getId()).eq("code", demandDto.getWarehouse()).eq("port_id",ratesId));
                            tCompanyResp.setName(UserFeeSettingEnum.LH_FSH.getDesc());
                            if(Objects.nonNull(tWarehouse)){
                            if(Objects.nonNull(tWarehouse) && tWarehouse.getWarePrice().doubleValue()>0){
                                tCompanyResp.setPrice(tWarehouse.getWarePrice());
                                tCompanyResp.setAdminPrice(tWarehouse.getWarePrice());
                            }else {
                                tCompanyResp.setPrice(new BigDecimal("0"));
                                breakNum=1;
                                count++;
                                break;
                            }
                            objects.add(tCompanyResp);
                        }
                        // 是否超重
                        Integer weight = goodsDto.getWeight();
                        long between = DateUtil.between(demandDto.getShipmentDate(), demandDto.getDeliveryDate(), DateUnit.DAY);
//                        long between = DateUtil.between(demandDto.getShipmentDate(), demandDto.getDeliveryDate(), DateUnit.DAY);
                        String arg1 = tPort.getName();
                        String arg2="";
                        if(!"0".equals(demandDto.getWarehouse())){
                            System.out.println("公司id:"+company.getId());
                            System.out.println("公司ratesId:"+ratesId);
                            TWarehouse tWarehouse = warehouseService.selectOne(new EntityWrapper<TWarehouse>().eq("company_id", company.getId()).eq("code", demandDto.getWarehouse()).eq("port_id",ratesId));
                            arg2=tWarehouse.getCity();
                            if(tWarehouse==null){
                                breakNum=1;
                                count++;
                                break;
                            }
                            arg2=tWarehouse.getZipCode();
                        }else {
                            arg2 = AddressLookup.getAddress(demandDto.getZipCode());
                            arg2 = demandDto.getZipCode();
                        }
//                        DistancematrixVo distancematrix = googleMapUtil.getDistancematrix(tPort.getAddress(), arg2);
//                        String arg3=String.valueOf(distancematrix.getDistance());
//                        String arg4= demandDto.getList().get(0).getShippingLine();
//                        String arg5 = demandDto.getType();
//                        GoodsDto goodsDto1 = demandDto.getList().get(0).getList().get(0);
//                        String arg6 =goodsDto1.getType();
//                        String arg7="None";
//                        String arg8 = goodsDto1.getKg();
//                        BigDecimal days = new BigDecimal(ChassisRentalDaysUtil.chassisRentalDays(1, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8));
                        if(between==0){
                            between=1;
                        }
                        System.out.println("arg2:"+arg2);
                        DistancematrixVo distancematrix = googleMapUtil.getDistancematrix(tPort.getAddress(), arg2);
                        String arg3=String.valueOf(distancematrix.getDistance()/1609);
                        String arg4= demandDto.getList().get(0).getShippingLine();
                        String arg5 = demandDto.getType();
                        GoodsDto goodsDto1 = demandDto.getList().get(0).getList().get(0);
                        String arg6 =goodsDto1.getSize()+"ft";
                        String arg7="None";
                        String arg8 = goodsDto1.getKg();
                        System.out.println("参数:"+arg1+"|"+arg2+"|"+arg3+"|"+arg4+"|"+arg5+"|"+arg6+"|"+arg7+"|"+arg8);
//                        arg1="WBCT";
//                        arg2="Ontario";
//                        arg3="55";
//                        arg4="COSCO";
//                        arg5="Drop & hook";
//                        arg6="40ft";
//                        arg7="None";
//                        arg8="44806";
                        BigDecimal days = new BigDecimal(ChassisRentalDaysUtil.chassisRentalDays(1, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)).setScale(0, RoundingMode.HALF_UP);
//                        if(between==0){
//                            between=1;
//                        }
                        if(weight==1){
                            TCompanyFeeSetting feeSetting = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id",ratesId).eq("set_name", UserFeeSettingEnum.OVERWEIGHT.getDesc()));
                            if(feeSetting==null){
@@ -393,7 +494,20 @@
                            }else {
                                tCompanyResp=new TCompanyResp();
                                tCompanyResp.setName(UserFeeSettingEnum.OVERWEIGHT.getDesc());
                                if(tUserFeeSettings!=null){
                                    List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(UserFeeSettingEnum.OVERWEIGHT.getDesc())).collect(Collectors.toList());
                                    if(collect.size()>0){
                                        BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(feeSetting.getSetValue()).setScale(2, RoundingMode.HALF_UP);
                                        tCompanyResp.setAdminPrice(feeSetting.getSetValue().add(bigDecimal));
                                tCompanyResp.setPrice(feeSetting.getSetValue());
                                    }else {
                                        tCompanyResp.setAdminPrice(feeSetting.getSetValue());
                                        tCompanyResp.setPrice(feeSetting.getSetValue());
                                    }
                                }else {
                                    tCompanyResp.setAdminPrice(feeSetting.getSetValue());
                                    tCompanyResp.setPrice(feeSetting.getSetValue());
                                }
                                objects.add(tCompanyResp);
                            }
                            TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id",ratesId).eq("set_name", "trl-axle chassis"));
@@ -404,8 +518,21 @@
                            }else {
                                tCompanyResp=new TCompanyResp();
                                tCompanyResp.setName(UserFeeSettingEnum.CHASSIS_FEE.getDesc());
//                                tCompanyResp.setPrice(feeSetting1.getSetValue().multiply(days));
                                tCompanyResp.setPrice(feeSetting1.getSetValue().multiply(new BigDecimal(between)));
                                if(tUserFeeSettings!=null){
                                    List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(UserFeeSettingEnum.CHASSIS_FEE.getDesc())).collect(Collectors.toList());
                                    if(collect.size()>0){
                                        BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(feeSetting1.getSetValue()).setScale(2, RoundingMode.HALF_UP);
                                        tCompanyResp.setAdminPrice(feeSetting1.getSetValue().add(bigDecimal));
                                        tCompanyResp.setPrice(feeSetting1.getSetValue());
                                    }else {
                                        tCompanyResp.setAdminPrice(feeSetting1.getSetValue());
                                        tCompanyResp.setPrice(feeSetting1.getSetValue());
                                    }
                                }else {
                                    tCompanyResp.setAdminPrice(feeSetting1.getSetValue());
                                    tCompanyResp.setPrice(feeSetting1.getSetValue());
                                }
                                tCompanyResp.setDay(days.toString());
                                objects.add(tCompanyResp);
                            }
                        }else {
@@ -417,8 +544,23 @@
                                count++;
                                break;
                            }else {
//                                tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days));
                                tCompanyResp.setPrice(feeSetting.getSetValue().multiply(new BigDecimal(between)));
                                if(tUserFeeSettings!=null){
                                    List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(UserFeeSettingEnum.CHASSIS_FEE.getDesc())).collect(Collectors.toList());
                                    if(collect.size()>0){
                                        BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(feeSetting.getSetValue().multiply(days)).setScale(2, RoundingMode.HALF_UP);
                                        tCompanyResp.setAdminPrice(feeSetting.getSetValue().multiply(days).add(bigDecimal));
                                        tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days));
                                    }else {
                                        tCompanyResp.setAdminPrice(feeSetting.getSetValue().multiply(days));
                                        tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days));
                                    }
                                }else {
                                    tCompanyResp.setAdminPrice(feeSetting.getSetValue().multiply(days));
                                    tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days));
                                }
                                tCompanyResp.setDay(days.toString());
//                                tCompanyResp.setPrice(feeSetting.getSetValue().multiply(new BigDecimal(between)));
                            }
                            objects.add(tCompanyResp);
                        }
@@ -431,9 +573,21 @@
                                tCompanyResp.setName(UserFeeSettingEnum.PREPULL.getDesc());
                                tCompanyResp.setPrice(new BigDecimal(0));
                            }else {
                                BigDecimal setValue = feeSetting.getSetValue();
                                if(tUserFeeSettings!=null){
                                    List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(UserFeeSettingEnum.PREPULL.getDesc())).collect(Collectors.toList());
                                    if(collect.size()>0){
                                        BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(feeSetting.getSetValue()).setScale(2, RoundingMode.HALF_UP);
                                        tCompanyResp.setAdminPrice(feeSetting.getSetValue().add(bigDecimal));
                                        tCompanyResp.setPrice(feeSetting.getSetValue());
                                    }else {
                                        tCompanyResp.setAdminPrice(feeSetting.getSetValue());
                                        tCompanyResp.setPrice(feeSetting.getSetValue());
                                    }
                                }else {
                                    tCompanyResp.setAdminPrice(feeSetting.getSetValue());
                                    tCompanyResp.setPrice(feeSetting.getSetValue());
                                }
                                tCompanyResp.setName(UserFeeSettingEnum.PREPULL.getDesc());
                                tCompanyResp.setPrice(setValue);
                            }
//                            BigDecimal setValue = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id",ratesId).eq("set_name", UserFeeSettingEnum.PREPULL.getDesc())).getSetValue();
@@ -443,34 +597,91 @@
                        tCompanyResp=new TCompanyResp();
                        TCompanyFeeSetting feeSetting = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.DETENTION_CONGESTION.getDesc()));
                        if(feeSetting!=null){
                            days = new BigDecimal(ChassisRentalDaysUtil.chassisRentalDays(4, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)).setScale(0, RoundingMode.HALF_UP);
                            tCompanyResp.setName(UserFeeSettingEnum.DETENTION_CONGESTION.getDesc());
                            tCompanyResp.setPrice(feeSetting.getSetValue());
//                            tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days));
                            tCompanyResp.setDay(days.toString());
                            if(tUserFeeSettings!=null){
                                List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(UserFeeSettingEnum.DETENTION_CONGESTION.getDesc())).collect(Collectors.toList());
                                if(collect.size()>0){
                                    BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(feeSetting.getSetValue().multiply(days)).setScale(2, RoundingMode.HALF_UP);
                                    tCompanyResp.setAdminPrice(feeSetting.getSetValue().multiply(days).add(bigDecimal));
                                    tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days));
                                }else {
                                    tCompanyResp.setAdminPrice(feeSetting.getSetValue().multiply(days));
                                    tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days));
                                }
                            }else {
                                tCompanyResp.setAdminPrice(feeSetting.getSetValue().multiply(days));
                                tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days));
                            }
                        }else {
                            tCompanyResp.setName(UserFeeSettingEnum.DETENTION_CONGESTION.getDesc());
                            tCompanyResp.setPrice(new BigDecimal(0));
                            tCompanyResp.setAdminPrice(new BigDecimal(0));
                        }
//                        BigDecimal setValue = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id",ratesId).eq("set_name", UserFeeSettingEnum.DETENTION_CONGESTION.getDesc())).getSetValue();
                        objects.add(tCompanyResp);
                        // 仓储费
//                        tCompanyResp=new TCompanyResp();
//                        days = new BigDecimal(ChassisRentalDaysUtil.chassisRentalDays(3, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8));
//                        TCompanyFeeSetting storage = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.STORAGE.getDesc()));
//                        if(storage!=null){
//                            tCompanyResp.setName(UserFeeSettingEnum.STORAGE.getDesc());
//                            tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days));
//                        }else {
//                            tCompanyResp.setName(UserFeeSettingEnum.STORAGE.getDesc());
//                            tCompanyResp.setPrice(new BigDecimal(0));
//                        }
                        tCompanyResp=new TCompanyResp();
                        days = new BigDecimal(ChassisRentalDaysUtil.chassisRentalDays(2, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)).add(new BigDecimal(ChassisRentalDaysUtil.chassisRentalDays(3, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8))).setScale(0, RoundingMode.HALF_UP);
                        System.out.println("仓储费"+days);
                        TCompanyFeeSetting storage = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.STORAGE.getDesc()));
                        System.out.println(storage);
                        if(storage!=null){
                            tCompanyResp.setName(UserFeeSettingEnum.STORAGE.getDesc());
//                            tCompanyResp.setPrice(storage.getSetValue().multiply(days));
                            if(tUserFeeSettings!=null){
                                List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(UserFeeSettingEnum.STORAGE.getDesc())).collect(Collectors.toList());
                                if(collect.size()>0){
                                    BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(storage.getSetValue().multiply(days)).setScale(2, RoundingMode.HALF_UP);
                                    tCompanyResp.setAdminPrice(storage.getSetValue().multiply(days).add(bigDecimal));
                                    tCompanyResp.setPrice(storage.getSetValue().multiply(days));
                                }else {
                                    tCompanyResp.setAdminPrice(storage.getSetValue().multiply(days));
                                    tCompanyResp.setPrice(storage.getSetValue().multiply(days));
                                }
                            }else {
                                tCompanyResp.setAdminPrice(storage.getSetValue().multiply(days));
                                tCompanyResp.setPrice(storage.getSetValue().multiply(days));
                            }
                            tCompanyResp.setDay(days.toString());
                            objects.add(tCompanyResp);
                        }else {
                            tCompanyResp.setName(UserFeeSettingEnum.STORAGE.getDesc());
                            tCompanyResp.setPrice(new BigDecimal(0));
                            objects.add(tCompanyResp);
                        }
                        if(goodsDto.getDanger()==1){
                            tCompanyResp=new TCompanyResp();
                            TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.HAZMAT.getDesc()));
                            if(feeSetting1!=null){
                                tCompanyResp.setName(UserFeeSettingEnum.HAZMAT.getDesc());
//                                tCompanyResp.setPrice(feeSetting1.getSetValue());
                                if(tUserFeeSettings!=null){
                                    List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(UserFeeSettingEnum.HAZMAT.getDesc())).collect(Collectors.toList());
                                    if(collect.size()>0){
                                        BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(feeSetting1.getSetValue()).setScale(2, RoundingMode.HALF_UP);
                                        tCompanyResp.setAdminPrice(feeSetting1.getSetValue().add(bigDecimal));
                                tCompanyResp.setPrice(feeSetting1.getSetValue());
                                    }else {
                                        tCompanyResp.setAdminPrice(feeSetting1.getSetValue());
                                        tCompanyResp.setPrice(feeSetting1.getSetValue());
                                    }
                                }else {
                                    tCompanyResp.setAdminPrice(feeSetting1.getSetValue());
                                    tCompanyResp.setPrice(feeSetting1.getSetValue());
                                }
                                objects.add(tCompanyResp);
                            }else {
                                breakNum=1;
@@ -485,7 +696,23 @@
                            TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.URGENT_SEE.getDesc()));
                            if(feeSetting1!=null){
                                tCompanyResp.setName(UserFeeSettingEnum.URGENT_SEE.getDesc());
                                if(tUserFeeSettings!=null){
                                    List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(UserFeeSettingEnum.URGENT_SEE.getDesc())).collect(Collectors.toList());
                                    if(collect.size()>0){
                                        BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(feeSetting1.getSetValue()).setScale(2, RoundingMode.HALF_UP);
                                        tCompanyResp.setAdminPrice(feeSetting1.getSetValue().add(bigDecimal));
                                tCompanyResp.setPrice(feeSetting1.getSetValue());
                                    }else {
                                        tCompanyResp.setAdminPrice(feeSetting1.getSetValue());
                                        tCompanyResp.setPrice(feeSetting1.getSetValue());
                                    }
                                }else {
                                    tCompanyResp.setAdminPrice(feeSetting1.getSetValue());
                                    tCompanyResp.setPrice(feeSetting1.getSetValue());
                                }
//                                tCompanyResp.setPrice(feeSetting1.getSetValue());
                                objects.add(tCompanyResp);
                            }else {
                                breakNum=1;
@@ -500,7 +727,20 @@
                            TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.PIERPASS.getDesc()));
                            if(feeSetting1!=null){
                                tCompanyResp.setName(UserFeeSettingEnum.PIERPASS.getDesc());
                                if(tUserFeeSettings!=null){
                                    List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(UserFeeSettingEnum.PIERPASS.getDesc())).collect(Collectors.toList());
                                    if(collect.size()>0){
                                        BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(feeSetting1.getSetValue()).setScale(2, RoundingMode.HALF_UP);
                                        tCompanyResp.setAdminPrice(feeSetting1.getSetValue().add(bigDecimal));
                                tCompanyResp.setPrice(feeSetting1.getSetValue());
                                    }else {
                                        tCompanyResp.setAdminPrice(feeSetting1.getSetValue());
                                        tCompanyResp.setPrice(feeSetting1.getSetValue());
                                    }
                                }else {
                                    tCompanyResp.setAdminPrice(feeSetting1.getSetValue());
                                    tCompanyResp.setPrice(feeSetting1.getSetValue());
                                }
                                objects.add(tCompanyResp);
                            }else {
                                breakNum=1;
@@ -514,7 +754,20 @@
                            TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.CTF.getDesc()));
                            if(feeSetting1!=null){
                                tCompanyResp.setName(UserFeeSettingEnum.CTF.getDesc());
                                if(tUserFeeSettings!=null){
                                    List<TUserFeeSetting> collect = tUserFeeSettings.stream().filter(e -> e.getName().equals(UserFeeSettingEnum.CTF.getDesc())).collect(Collectors.toList());
                                    if(collect.size()>0){
                                        BigDecimal bigDecimal = new BigDecimal(collect.get(0).getFee().doubleValue() / 100).multiply(feeSetting1.getSetValue()).setScale(2, RoundingMode.HALF_UP);
                                        tCompanyResp.setAdminPrice(feeSetting1.getSetValue().add(bigDecimal));
                                tCompanyResp.setPrice(feeSetting1.getSetValue());
                                    }else {
                                        tCompanyResp.setAdminPrice(feeSetting1.getSetValue());
                                        tCompanyResp.setPrice(feeSetting1.getSetValue());
                                    }
                                }else {
                                    tCompanyResp.setAdminPrice(feeSetting1.getSetValue());
                                    tCompanyResp.setPrice(feeSetting1.getSetValue());
                                }
                                objects.add(tCompanyResp);
                            }else {
                                breakNum=1;
@@ -549,7 +802,7 @@
                        tOrder.setType(demandDto.getType());
                        tOrder.setZipCode(demandDto.getZipCode());
                        if("0".equals(demandDto.getWarehouse())){
                            tOrder.seteAddress(demandDto.getZipCode());
                            tOrder.seteAddress(AddressLookup.getAddress(demandDto.getZipCode()));
                        }else {
                            TWarehouse tWarehouse = warehouseService.selectOne(new EntityWrapper<TWarehouse>().eq("company_id", company.getId()).eq("code", demandDto.getWarehouse()).eq("port_id",ratesId));
                            tOrder.seteAddress(tWarehouse.getAddress());
@@ -565,7 +818,7 @@
                        tOrder.setAllTotal(bigDecimal);
                        orderService.updateById(tOrder);
                        objects.stream().forEach(e->e.setOrderId(tOrder.getId()));
                        orderId= tOrder.getId();
                        TGoods tGoods = new TGoods();
                        tGoods.setShippingLine(goodsListDto.getShippingLine());
                        tGoods.setDanger(goodsListDto.getDanger());
@@ -577,6 +830,24 @@
                        tGoods.setTypeClass(goodsDto.getTypeClass());
                        tGoods.setLineStr(goodsDto.getLineStr());
                        tGoods1.add(tGoods);
                        String randomNumber = ToolUtil.getRandomNumber(10);
                        for (TCompanyResp object : objects) {
                            TPrice tPrice = new TPrice();
                            tPrice.setCreateTime(new Date());
                            tPrice.setOrderId(orderId);
                            tPrice.setState("1");
                            tPrice.setPrice(object.getAdminPrice());
                            tPrice.setCarPrice(object.getPrice());
                            tPrice.setType(object.getName());
                            tPrice.setStatus(1);
                            tPrice.setNumber(randomNumber);
                            tPrice.setDay(object.getDay());
                            tPrices.add(tPrice);
                        }
                        if(tPrices.size()>0){
                            priceService.insertBatch(tPrices);
                        }
                    }
                    if(tGoods1.size()>0){
@@ -584,21 +855,7 @@
                    }
                    String randomNumber = ToolUtil.getRandomNumber(10);
                    for (TCompanyResp object : objects) {
                        TPrice tPrice = new TPrice();
                        tPrice.setCreateTime(new Date());
                        tPrice.setOrderId(object.getOrderId());
                        tPrice.setState("1");
                        tPrice.setPrice(object.getPrice());
                        tPrice.setType(object.getName());
                        tPrice.setStatus(1);
                        tPrice.setNumber(randomNumber);
                        tPrices.add(tPrice);
                    }
                    if(tPrices.size()>0){
                        priceService.insertBatch(tPrices);
                    }
                }
                tCompanyCalculationResp.setOrderList(tOrders);
@@ -679,7 +936,11 @@
    }
    private String getStr(String str){
        if(str==null){
            return null;
        }
        String s = "";
        String[] split = str.split(",");
        if(split.length==1){
@@ -691,7 +952,7 @@
            }
        }else {
            for (int i = 0; i < split.length; i++) {
                if(!split[i].equals("CTF")&&!split[i].equals("URGENT FEE") && !split[i].equals("CTF")){
                if(!split[i].equals("CTF")&&!split[i].equals("URGENT FEE") && !split[i].equals("PIPERPASS")){
                    if(i==split.length-1){
                        s+=split[i];
                    }else {
@@ -775,9 +1036,22 @@
        List<TOrder> orders = new ArrayList<>();
        for (DemandDtoTwo dtoTwo : demandDtoTwo.getDemandDtoTwo()) {
            TOrder tOrder = new TOrder();
            BeanUtil.copyProperties(dtoTwo,tOrder);
            orders.add(tOrder);
            TOrder tOrder1 = orderService.selectById(dtoTwo.getId());
            List<TOrder> orders1 = orderService.selectList(new EntityWrapper<TOrder>().eq("e_zip_z", tOrder1.geteZipZ()));
            for (TOrder order : orders1) {
                order.setsName(dtoTwo.getSName());
                order.setsPhone(dtoTwo.getSPhone());
                order.setsEmail(dtoTwo.getSEmail());
                order.setePhone(dtoTwo.getEPhone());
                order.seteEmail(dtoTwo.getEEmail());
                order.seteName(dtoTwo.getEName());
                if(dtoTwo.getEAddress()!=null && !"".equals(dtoTwo.getEAddress())){
                    order.seteAddress(dtoTwo.getEAddress());
        }
                orders.add(order);
            }
        }
        orderService.updateBatchById(orders);
        List<TUserFeeSetting> tUserFeeSettings =null;
        Long next = integers.iterator().next();
        TOrder tOrder1 = orderService.selectById(next);
@@ -785,7 +1059,9 @@
        TUser tUser = userService.selectById(userId);
        if(tUser.getGroupId()!=null){
            TGroup tGroup = groupService.selectById(tUser.getGroupId());
            if(tGroup!=null) {
            tUserFeeSettings = userFeeSettingService.selectList(new EntityWrapper<TUserFeeSetting>().eq("user_id", tGroup.getSalesId()));
            }
        }
        for (Long order : integers) {
@@ -797,27 +1073,30 @@
            tOrder.setStatus("0");
            BigDecimal bigDecimal = new BigDecimal(0);
            // 通过每个订单  找出当前的用户的sale  找出提成算出应给卡车公司的价格
            List<TPrice> prices = priceService.selectList(new EntityWrapper<TPrice>().eq("order_id", order));
            if(tUserFeeSettings!=null){
                for (TUserFeeSetting tUserFeeSetting : tUserFeeSettings) {
            List<TPrice> prices = priceService.selectList(new EntityWrapper<TPrice>().eq("order_id", order).eq("status",1));
//            if(tUserFeeSettings!=null && tUserFeeSettings.size()>0){
//                for (TUserFeeSetting tUserFeeSetting : tUserFeeSettings) {
//                    for (TPrice price : prices) {
//                        if(tUserFeeSetting.getName().equals(price.getType())){
//                            double v = (double) tUserFeeSetting.getFee() / 100;
//                            BigDecimal multiply = price.getPrice().multiply(new BigDecimal(v));
//                            // 付卡车的钱
//                            BigDecimal subtract = price.getPrice().subtract(multiply);
//                            price.setCarPrice(subtract);
//                            bigDecimal = bigDecimal.add(subtract);
//                        }else {
//                            price.setCarPrice(price.getPrice());
//                            bigDecimal = bigDecimal.add(price.getPrice());
//                        }
//                    }
//                }
//            }else {
//                prices.stream().forEach(e->e.setCarPrice(e.getPrice()));
//            }
//            priceService.updateBatchById(prices);
                    for (TPrice price : prices) {
                        if(tUserFeeSetting.getName().equals(price.getType())){
                            double v = (double) tUserFeeSetting.getFee() / 100;
                            BigDecimal multiply = price.getPrice().multiply(new BigDecimal(v));
                            // 付卡车的钱
                            BigDecimal subtract = price.getPrice().subtract(multiply);
                            price.setCarPrice(subtract);
                            bigDecimal = bigDecimal.add(subtract);
                        }else {
                            price.setCarPrice(price.getPrice());
                            bigDecimal = bigDecimal.add(price.getPrice());
                        }
                    }
                }
            }else {
                prices.stream().forEach(e->e.setCarPrice(e.getPrice()));
            }
            priceService.updateBatchById(prices);
            tOrder.setPayMoney(bigDecimal);
            orderService.updateById(tOrder);
src/main/java/com/stylefeng/guns/modular/system/controller/OrderController.java
@@ -3,10 +3,13 @@
import cn.hutool.core.bean.BeanUtil;
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;
@@ -24,10 +27,7 @@
import java.math.BigDecimal;
import java.net.FileNameMap;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.*;
@Controller
@Api(tags = "订单")
@@ -259,10 +259,21 @@
    @GetMapping(value = "/getOrderInfo")
    @ResponseBody
    public Object getOrderInfo( Long orderId) {
        OrderInfo orderInfo = orderService.getOrderInfo(orderId);
        HashMap<String, Object> orderInfo = orderService.getOrderInfo(orderId);
        return new SuccessTip(orderInfo);
    }
    @ApiOperation(value = "根据zipcode获取用户地址",notes="根据zipcode获取用户地址")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(name = "zipcode", value = "zipcode", required = true, dataType = "String"),
            @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Integer"),
    })
    @GetMapping(value = "/getAddressByCode")
    @ResponseBody
    public Object getAddressByCode( String  zipcode,Integer id) {
        List<TUserAddress> addresses = addressService.selectList(new EntityWrapper<TUserAddress>().eq("user_id", id).eq("zip_code", zipcode).eq("remove",0));
        return new SuccessTip(addresses);
    }
    @ApiOperation(value = "订单详情--修改reference numbers",notes="订单详情--修改reference numbers")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
@@ -291,6 +302,7 @@
        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){
@@ -309,18 +321,61 @@
        if(driverIdOne!=null){
            driverIds.add(driverIdOne);
        }
        List<TTransportation> tTransportations = tTransportationService.selectList(new EntityWrapper<TTransportation>().eq("order_id", orderId).in("driver_id", driverIds));
        TerminaleDataWarpper terminalStatus = TerminalInterfaceAcquisitionUtil.getTerminalStatus("WFHU5080179", FacilityCodeEnum.USLAX.getMsg());
        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).orderBy("type"));
        TerminaleDataWarpper terminalStatus=new TerminaleDataWarpper();
        try {
            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();
        }
        for (TTransportation tDriver : tTransportations) {
            OrderDriverInfo orderDriverInfo = new OrderDriverInfo();
            orderDriverInfo.setId(tDriver.getId());
            if(tDriver.getId().equals(sDriverIdOne)&&tDriver.getType()==2){
            orderDriverInfo.setDriverId(tDriver.getDriverId());
            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());
@@ -346,6 +401,7 @@
        transportInfo.setCTF(terminalStatus.getCtf());
        transportInfo.setClosedArea(terminalStatus.getClosedArea());
        transportInfo.setLFD(terminalStatus.getLfd());
        transportInfo.setAvailable(terminalStatus.getAvailability());
        transportInfo.setList(orderDriverInfos);
        Integer examSite = tOrder.getExamSite();
@@ -359,6 +415,23 @@
        }
        return new SuccessTip(transportInfo);
    }
    @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);
    }
    @ApiOperation(value = "获取费用明细",notes="获取费用明细")
    @ApiImplicitParams({
@@ -498,7 +571,6 @@
        return new ErrorTip(500,"ERROR");
    }
    @ApiOperation(value = "卡车公司--修改安排司机(单个)",notes="卡车公司--修改安排司机(单个)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType     = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
@@ -512,18 +584,19 @@
            // 找出这个订单
            TOrder tOrder = orderService.selectById(orderId);
            TTransportation list = companySelectDriverSingleDto.getList();
            Integer type = companySelectDriverSingleDto.getType();
            list.setOrderId(companySelectDriverSingleDto.getOrderId());
            Integer type = companySelectDriverSingleDto.getList().getType();
            if(type==1){
                tTransportationService.delete(new EntityWrapper<TTransportation>().eq("order_id",orderId).eq("driver_id",tOrder.getsDriverid()));
                tTransportationService.delete(new EntityWrapper<TTransportation>().eq("order_id",orderId).eq("driver_id",tOrder.getsDriverid()).eq("type",1));
                tOrder.setsDriverid(list.getDriverId());
            }else if(type==2){
                tTransportationService.delete(new EntityWrapper<TTransportation>().eq("order_id",orderId).eq("driver_id",tOrder.getsDriverIdOne()));
                tTransportationService.delete(new EntityWrapper<TTransportation>().eq("order_id",orderId).eq("driver_id",tOrder.getsDriverIdOne()).eq("type",2));
                tOrder.setsDriverIdOne(list.getDriverId());
            }else if(type==3){
                tTransportationService.delete(new EntityWrapper<TTransportation>().eq("order_id",orderId).eq("driver_id",tOrder.geteDriverid()));
                tTransportationService.delete(new EntityWrapper<TTransportation>().eq("order_id",orderId).eq("driver_id",tOrder.geteDriverid()).eq("type",3));
                tOrder.seteDriverid(list.getDriverId());
            }else {
                tTransportationService.delete(new EntityWrapper<TTransportation>().eq("order_id",orderId).eq("driver_id",tOrder.geteDriverIdOne()));
                tTransportationService.delete(new EntityWrapper<TTransportation>().eq("order_id",orderId).eq("driver_id",tOrder.geteDriverIdOne()).eq("type",4));
                tOrder.seteDriverIdOne(list.getDriverId());
            }
            tTransportationService.insert(list);
@@ -536,7 +609,6 @@
        }
        return new ErrorTip(500,"ERROR");
    }
    @Resource
    private TYardService yardService;
@@ -638,6 +710,9 @@
        return new SuccessTip(page);
    }
    @ApiOperation(value = "获取订单文件",notes="获取订单文件")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType     = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
@@ -662,7 +737,20 @@
            }
            record.setType(type);
        }
        TOrder tOrder = orderService.selectById(orderId);
        if("9".equals(tOrder.getStatus()) || "18".equals(tOrder.getStatus())){
            ArrayList<TOrderFile> tOrderFiles = new ArrayList<>();
            TOrderFile tOrderFile = new TOrderFile();
            tOrderFile.setName("Bill of lading.pdf");
            tOrderFile.setId(0);
            tOrderFile.setType("file");
            tOrderFiles.add(tOrderFile);
            tOrderFiles.addAll(records);
            orderFilePage.setRecords(tOrderFiles);
        }else {
        orderFilePage.setRecords(records);
        }
        return new SuccessTip(orderFilePage);
    }
src/main/java/com/stylefeng/guns/modular/system/dao/TOrderMapper.java
@@ -8,6 +8,7 @@
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -62,4 +63,6 @@
    List<TOrder> getNoPayOrder(@Param("userId") int userId);
    List<Map<String, Object>> getLonLat(@Param("orderId") Long orderId);
}
src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml
@@ -82,7 +82,7 @@
    </update>
    <select id="getReceivable" resultType="com.stylefeng.guns.modular.system.model.ReceivableVo">
      select id,invoice_number invoiceNumber,pay_time invoiceTime ,allTotal total, case 1 when paid=allTotal THEN 1 else  2 end as state   from t_order
      select id,invoice_number invoiceNumber,pay_time invoiceTime ,allTotal total, case 1 when paid=allTotal THEN 1 else  2 end as state ,change  from t_order
      where user_id =#{userId} and status !=17
      <if test="sTime !=null">
          and pay_time between #{sTime} and #{eTime}
@@ -223,4 +223,7 @@
        select * from t_order where user_id =#{userId} and  allTotal > paid and status !=17
    </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/enums/UserFeeSettingEnum.java
@@ -2,7 +2,7 @@
public enum UserFeeSettingEnum {
    LH_FSH(1, "LH+FSH"),
    LH_FSH(1, "LH+FSC"),
    CHASSIS_FEE(2, "Chassis fee"),
    PREPULL(3, "Prepull"),
    CHASSIS_SPLIT(4, "Chassis split"),
src/main/java/com/stylefeng/guns/modular/system/model/OrderDriverInfo.java
@@ -27,4 +27,6 @@
    private TPowerUnits chassiess;
    private Integer driverId;
}
src/main/java/com/stylefeng/guns/modular/system/model/OrderInfo.java
@@ -82,4 +82,6 @@
    private String status;
    private String driverLat;
}
src/main/java/com/stylefeng/guns/modular/system/model/ReceivableVo.java
@@ -21,4 +21,6 @@
    private Date invoiceTime;
    private Double total;
    private Integer state;
    private Integer change;
}
src/main/java/com/stylefeng/guns/modular/system/model/TCompanyResp.java
@@ -38,4 +38,7 @@
    @ApiModelProperty(value = "计算出的价格")
    private BigDecimal price;
    private String day;
    private BigDecimal adminPrice;
}
src/main/java/com/stylefeng/guns/modular/system/model/TGoods.java
@@ -78,6 +78,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/TPrice.java
@@ -50,6 +50,17 @@
     */
    private String state;
    private String day;
    public String getDay() {
        return day;
    }
    public void setDay(String day) {
        this.day = day;
    }
    public BigDecimal getCarPrice() {
        return carPrice;
    }
src/main/java/com/stylefeng/guns/modular/system/model/TransportInfo.java
@@ -27,15 +27,17 @@
    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;
}
src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java
@@ -4,7 +4,9 @@
import com.stylefeng.guns.modular.system.model.*;
import com.baomidou.mybatisplus.service.IService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -40,7 +42,7 @@
    List<GoodsInfoVo> getGoodsInfo(Long orderId);
    OrderInfo getOrderInfo(Long orderId);
    HashMap<String, Object> getOrderInfo(Long orderId);
    Boolean addOrderFile(Long orderId, String url, String name);
@@ -53,4 +55,7 @@
    List<TOrder> getNoPayOrder(int userId);
    List<Map<String, Object>> getLonLat(Long orderId);
}
src/main/java/com/stylefeng/guns/modular/system/service/impl/TCompanyServiceImpl.java
@@ -85,15 +85,11 @@
        tCompanyCalculationRespOne.setPickupStr(tOrder.getAccessorialStr());
        tCompanyCalculationRespOne.setDestinationStr(tOrder.getDeliveryStr());
        tCompanyCalculationRespOne.setCustomer(user.getCompanyName());
        System.out.println(quote.getCreateId());
        if(quote.getCreateId()!=null){
            User user1 = userMapper.selectById(quote.getCreateId());
            tCompanyCalculationRespOne.setCreateUser(user1.getName());
        }else {
            tCompanyCalculationRespOne.setCreateUser(user.getCompanyName());
            TCompany company = companyMapper.selectById(quote.getCreateId());
            tCompanyCalculationRespOne.setCreateUser(company.getName());
        }
        Integer port = tOrder.getPort();
        TPort tPort = tPortMapper.selectById(port);
        TCountry tCountry = tCountryMapper.selectById(tPort.getCity());
@@ -117,12 +113,13 @@
        ArrayList<LonLat> lonLats = new ArrayList<>();
        LonLat latLng = new LonLat();
        latLng.setLat("-113.6510249618184");
        latLng.setLng("37.8924429618184");
        latLng.setLat(orders1.get(0).getStartLat());
        latLng.setLng(orders1.get(0).getStartLon());
        lonLats.add(latLng);
        latLng=new LonLat();
        latLng.setLat("-113.066919618184");
        latLng.setLng("37.684389618184");
        GeocodeVo geocode = googleMapUtil.getGeocode(orders1.get(0).geteAddress());
        latLng.setLat(String.valueOf(geocode.getLat()));
        latLng.setLng(String.valueOf(geocode.getLng()));
        lonLats.add(latLng);
        tCompanyCalculationRespOne.setLonLats(lonLats);
        ArrayList<TGoods> tGoods = new ArrayList<>();
@@ -136,6 +133,13 @@
        ArrayList<CompanyInfo> companyInfos = new ArrayList<>();
        for (TOrder order : orders) {
            Integer port1 = order.getPort();
            // 获取码头的上级id
            TPort tPort1 = tPortMapper.selectById(port1);
            TCountry tCountry2 = tCountryMapper.selectById(tPort1.getCity());
            CompanyInfo tCompanyCalculationResp = new CompanyInfo();
            // 查询公司
            TCompany company = companyMapper.selectById(order.getCompanyId());
@@ -146,16 +150,18 @@
            tCompanyCalculationResp.setExpirationDate(company.getExpirationTime());
            // 查询公司下的价格集合
            List<TPrice> prices = priceMapper.selectList(new EntityWrapper<TPrice>().eq("order_id", order.getId()));
            List<TPrice> prices = priceMapper.selectList(new EntityWrapper<TPrice>().eq("order_id", order.getId()).eq("status",1));
            List<TCompanyResp> tCompanyRespList = new ArrayList<>();
            for (TPrice price : prices) {
                TCompanyResp tCompanyResp = new TCompanyResp();
                tCompanyResp.setOrderId(order.getId());
                tCompanyResp.setName(price.getType());
                tCompanyResp.setAdminPrice(price.getPrice());
                tCompanyResp.setPrice(price.getCarPrice());
                tCompanyResp.setDay(price.getDay());
                tCompanyRespList.add(tCompanyResp);
            }
            BigDecimal bigDecimal = tCompanyRespList.stream().map(e->e.getPrice()==null?new BigDecimal(0):e.getPrice()).reduce(BigDecimal::add).orElse(new BigDecimal(0.00));
            BigDecimal bigDecimal = tCompanyRespList.stream().map(TCompanyResp::getAdminPrice).reduce(BigDecimal::add).orElse(new BigDecimal(0.00));
            tCompanyCalculationResp.setAllTotal(bigDecimal);
            tCompanyCalculationResp.setList(tCompanyRespList);
            // 过滤订单
@@ -173,10 +179,30 @@
            companyInfos.add(tCompanyCalculationResp);
        }
        ArrayList<CompanyInfo> collect = companyInfos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CompanyInfo::getCompanyId))), ArrayList::new));
        for (CompanyInfo companyInfo : collect) {
            Map<String, BigDecimal> map = new HashMap<>();
            List<CompanyInfo> collect1 = companyInfos.stream().filter(e -> e.getCompanyId().equals(companyInfo.getCompanyId())).collect(Collectors.toList());
            BigDecimal bigDecimal1 = collect1.stream().map(CompanyInfo::getAllTotal).reduce(BigDecimal::add).get();
            companyInfo.setAllTotal(bigDecimal1);
            for (CompanyInfo info : collect1) {
                List<TCompanyResp> list = info.getList();
                for (TCompanyResp tCompanyResp : list) {
                    Object o = map.get(tCompanyResp.getName());
                    if(o!=null){
                        map.put(tCompanyResp.getName(),new BigDecimal(o.toString()).add(tCompanyResp.getAdminPrice()));
                    }else {
                        map.put(tCompanyResp.getName(),tCompanyResp.getAdminPrice());
                    }
                }
            }
            List<TCompanyResp> list = companyInfo.getList();
            for (TCompanyResp tCompanyResp : list) {
                tCompanyResp.setAdminPrice(map.get(tCompanyResp.getName()));
            }
        }
        tCompanyCalculationRespOne.setCompanyInfos(collect);
        return tCompanyCalculationRespOne;
    }
    @Override
    public TCompanyCalculationRespOne getQuotaFromIdAndCompanyId(Long id, Integer companyIds) {
        TQuote quote = quoteService.selectById(id);
@@ -255,9 +281,10 @@
                tCompanyResp.setOrderId(order.getId());
                tCompanyResp.setName(price.getType());
                tCompanyResp.setPrice(price.getPrice());
                tCompanyResp.setAdminPrice(price.getPrice());
                tCompanyRespList.add(tCompanyResp);
            }
            BigDecimal bigDecimal = tCompanyRespList.stream().map(TCompanyResp::getPrice).reduce(BigDecimal::add).orElse(new BigDecimal(0.00));
            BigDecimal bigDecimal = tCompanyRespList.stream().map(TCompanyResp::getAdminPrice).reduce(BigDecimal::add).orElse(new BigDecimal(0.00));
            tCompanyCalculationResp.setAllTotal(bigDecimal);
            tCompanyCalculationResp.setList(tCompanyRespList);
            // 过滤订单
src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
@@ -11,6 +11,7 @@
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.utils.GoogleMap.GeocodeVo;
import com.stylefeng.guns.modular.system.utils.GoogleMap.GoogleMapUtil;
import com.stylefeng.guns.modular.system.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -465,13 +466,77 @@
        }
        return goodsInfoVos;
    }
@Autowired
private RedisUtil redisUtil;
    @Autowired
    private ITExamSiteService examSiteService;
    @Autowired
    private TYardService yardService;
    private HashMap<String, String> getLat(String a){
        HashMap<String, String> map = new HashMap<>();
        try {
            GeocodeVo geocode = googleMapUtil.getGeocode(a);
            map.put("lon",String.valueOf(geocode.getLng()));
            map.put("lat",String.valueOf(geocode.getLat()));
        }catch (Exception e){
            e.printStackTrace();
            map.put("lon",null);
            map.put("lat",null);
        }
        return map;
    }
    @Override
    public OrderInfo getOrderInfo(Long orderId) {
    public   HashMap<String, Object> getOrderInfo(Long orderId) {
        OrderInfo orderInfo = new OrderInfo();
        ArrayList<LonLat> lonLats = new ArrayList<>();
        TOrder tOrder = this.baseMapper.selectById(orderId);
        String value = redisUtil.getValue(String.valueOf(orderId));
        orderInfo.setDriverLat(value);
        ArrayList<Map<String,String>> maps = new ArrayList<>();
        TTransportation tTransportations = tTransportationService.selectOne(new EntityWrapper<TTransportation>().eq("order_id", orderId).eq("type",1));
        if(tTransportations!=null) {
            TPort tPort1 = portMapper.selectById(tOrder.getPort());
            maps.add(getLat(tPort1.getAddress()));
        }
        if(tOrder.getExamSite()!=null){
            Integer examSite = tOrder.getExamSite();
            TExamSite tExamSite = examSiteService.selectById(examSite);
            // 第二个检查站
            maps.add(getLat(tExamSite.getAddress()));
        }
        TTransportation tTransportations1 = tTransportationService.selectOne(new EntityWrapper<TTransportation>().eq("order_id", orderId).eq("type",2));
        if(tTransportations1!=null){
            Integer yardId = tTransportations1.getYardId();
            if(yardId!=null){
                TYard tYard = yardService.selectById(yardId);
                maps.add(getLat(tYard.getStreetAddress()));
            }
        }
        if(tOrder.geteAddress()!=null){
            maps.add(getLat(tOrder.geteAddress()));
        }
        orderInfo.setSlat(tOrder.getStartLat());
        orderInfo.setSlon(tOrder.getStartLon());
@@ -514,7 +579,7 @@
        // 获取码头id  获取码头地址  pickup信息
        Integer portId = tOrder.getPort();
        TPort tPort = portMapper.selectById(portId);
        orderInfo.setAddress(tOrder.geteAddress());
        orderInfo.setAddress(tPort.getAddress());
        orderInfo.setContactName(tOrder.getsName());
        orderInfo.setContactPhone(tOrder.getsPhone());
        orderInfo.setContactEmail(tOrder.getsEmail());
@@ -565,7 +630,12 @@
        orderInfo.setNote(driverNoteVos);
        orderInfo.setTrouble(driverNoteVos1);
        orderInfo.setState(tOrder.getState());
        return orderInfo;
        HashMap<String, Object> map = new HashMap<>();
        map.put("lonlat",maps);
        map.put("data",orderInfo);
        return map;
    }
@@ -623,4 +693,10 @@
    }
    @Override
    public List<Map<String, Object>> getLonLat(Long orderId) {
        return this.baseMapper.getLonLat(orderId);
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/ChassisRentalDaysUtil.java
New file
@@ -0,0 +1,42 @@
package com.stylefeng.guns.modular.system.utils;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ChassisRentalDaysUtil {
    // TODO 线上替换linux路径
    private static  final String CHAISS="/usr/python/chassis_rental_days.py";
    private static  final String EMPTY="/usr/python/empty_storage_days.py";
    private static  final String PREPULL="/usr/python/prepull_storage_days.py";
    private static  final String UNLOADING="/usr/python/unloading_time.py";
    public static String chassisRentalDays(int type,String arg1,String arg2,String arg3,String agr4,String agr5,String arg6,String arg7,String arg8){
        try {
            String[] arg;
            if(type==1){
                 arg = new String[] { "python", CHAISS,arg1,arg2,arg3,agr4,agr5,arg6,arg7,arg8};
            }else if(type==2){
                arg = new String[] { "python", EMPTY,arg1,arg2,arg3,agr4,agr5,arg6,arg7,arg8};
            }else if(type==3){
                arg = new String[] { "python", PREPULL,arg1,arg2,arg3,agr4,agr5,arg6,arg7,arg8};
            }else {
                arg = new String[] { "python", UNLOADING,arg1,arg2,arg3,agr4,agr5,arg6,arg7,arg8};
            }
            Process exec = Runtime.getRuntime().exec(arg);
            BufferedReader in = new BufferedReader(new InputStreamReader(exec.getInputStream()));
            String line = null;
            String day=null;
            while ((line = in.readLine()) != null) {
                day=line;
            }
            String substring = day.substring(day.indexOf("[")+1, day.lastIndexOf("."));
            System.out.println(substring);
            in.close();
            return substring;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/GoogleMap/GoogleMapUtil.java
@@ -21,7 +21,8 @@
@Component
public class GoogleMapUtil {
    private static final String key = "AIzaSyBBW0XxW1FK7IXmmS7KFtAjX3o99eFPsss";
    //    private final String key = "AIzaSyBBW0XxW1FK7IXmmS7KFtAjX3o99eFPsss";
    private final String key = "AIzaSyBBW0XxW1FK7IXmmS7KFtAjX3o99eFPsss";
    @Autowired
    private HttpClientUtil httpClientUtil;
@@ -32,7 +33,8 @@
     * @param address       地址信息
     * @throws Exception
     */
    public static GeocodeVo getGeocode(String address){
    public GeocodeVo getGeocode(String address){
        log.info("谷歌地图  根据地址获取经纬度:"+address);
        GeoApiContext context = new GeoApiContext.Builder()
                .apiKey(key)
                .build();
@@ -68,40 +70,40 @@
     */
    public ReverseGeocodeVo getReverseGeocode(double lat, double lng) throws Exception{
        // TODO: 2022/10/22 临时用IGO跳转
        Map<String, Object> map = new HashMap<>();
        map.put("lat", lat);
        map.put("lng", lng);
        map.put("key", key);
        HttpResult httpResult = httpClientUtil.pushHttpRequset("POST", "http://182.160.16.251:1010/base/googleMap/getReverseGeocode", map, null, "form");
        ReverseGeocodeVo reverseGeocode = JSON.parseObject(httpResult.getData(), ReverseGeocodeVo.class);
        return reverseGeocode;
//        Map<String, Object> map = new HashMap<>();
//        map.put("lat", lat);
//        map.put("lng", lng);
//        map.put("key", key);
//        HttpResult httpResult = httpClientUtil.pushHttpRequset("POST", "http://182.160.16.251:1010/base/googleMap/getReverseGeocode", map, null, "form");
//        ReverseGeocodeVo reverseGeocode = JSON.parseObject(httpResult.getData(), ReverseGeocodeVo.class);
//        return reverseGeocode;
//        GeoApiContext context = new GeoApiContext.Builder()
//                .apiKey(key)
//                .build();
//        GeocodingApiRequest request = GeocodingApi.reverseGeocode(context, new LatLng(lat, lng));
//        GeocodingResult[] results = request.await();
//        ReverseGeocodeVo vo = null;
//        if(results.length > 0){
//            Gson gson = new GsonBuilder().setPrettyPrinting().create();
//            System.out.println(gson.toJson(results[0].addressComponents));
//
//
//            vo = new ReverseGeocodeVo();
//            AddressComponent[] addressComponents = results[0].addressComponents;
//            AddressComponentsVo[] addressComponentsVos = new AddressComponentsVo[addressComponents.length];
//            for (int i = 0; i < addressComponents.length; i++) {
//                AddressComponentsVo addressComponentsVos1 = new AddressComponentsVo();
//                addressComponentsVos1.setLongName(addressComponents[i].longName);
//                addressComponentsVos1.setShortName(addressComponents[i].shortName);
//                addressComponentsVos[i] = addressComponentsVos1;
//            }
//            String address = results[0].formattedAddress;
//            vo.setAddressComponentsVos(addressComponentsVos);
//            vo.setAddress(address);
//        }
//        context.shutdown();
//        return vo;
        GeoApiContext context = new GeoApiContext.Builder()
                .apiKey(key)
                .build();
        GeocodingApiRequest request = GeocodingApi.reverseGeocode(context, new LatLng(lat, lng));
        GeocodingResult[] results = request.await();
        ReverseGeocodeVo vo = null;
        if(results.length > 0){
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            System.out.println(gson.toJson(results[0].addressComponents));
            vo = new ReverseGeocodeVo();
            AddressComponent[] addressComponents = results[0].addressComponents;
            AddressComponentsVo[] addressComponentsVos = new AddressComponentsVo[addressComponents.length];
            for (int i = 0; i < addressComponents.length; i++) {
                AddressComponentsVo addressComponentsVos1 = new AddressComponentsVo();
                addressComponentsVos1.setLongName(addressComponents[i].longName);
                addressComponentsVos1.setShortName(addressComponents[i].shortName);
                addressComponentsVos[i] = addressComponentsVos1;
            }
            String address = results[0].formattedAddress;
            vo.setAddressComponentsVos(addressComponentsVos);
            vo.setAddress(address);
        }
        context.shutdown();
        return vo;
    }
@@ -197,29 +199,29 @@
     */
    public DistancematrixVo getDistancematrix(String origin, String destination) throws Exception{
        // TODO: 2022/10/22 临时用IGO跳转
        Map<String, Object> map = new HashMap<>();
        map.put("origin", origin);
        map.put("destination", destination);
        map.put("key", key);
        HttpResult httpResult = httpClientUtil.pushHttpRequset("POST", "http://182.160.16.251:1010/base/googleMap/getDistancematrix", map, null, "form");
        DistancematrixVo reverseGeocode = JSON.parseObject(httpResult.getData(), DistancematrixVo.class);
        return reverseGeocode;
//        Map<String, Object> map = new HashMap<>();
//        map.put("origin", origin);
//        map.put("destination", destination);
//        map.put("key", key);
//        HttpResult httpResult = httpClientUtil.pushHttpRequset("POST", "http://182.160.16.251:1010/base/googleMap/getDistancematrix", map, null, "form");
//        DistancematrixVo reverseGeocode = JSON.parseObject(httpResult.getData(), DistancematrixVo.class);
//        return reverseGeocode;
//        GeoApiContext context = new GeoApiContext.Builder()
//                .apiKey(key)
//                .build();
//        DistanceMatrixApiRequest request = DistanceMatrixApi.getDistanceMatrix(context, new String[]{origin}, new String[]{destination});
//        request.mode(TravelMode.DRIVING);//出行方式(驾车)
//        DistanceMatrix distanceMatrix = request.await();
//        Gson gson = new GsonBuilder().setPrettyPrinting().create();
//        System.out.println(gson.toJson(distanceMatrix));
//        context.shutdown();
//
//        DistanceMatrixElement elements = distanceMatrix.rows[0].elements[0];
//        DistancematrixVo vo = new DistancematrixVo();
//        vo.setDistance(elements.distance.inMeters);
//        vo.setDuration(elements.duration.inSeconds);
//        return vo;
        GeoApiContext context = new GeoApiContext.Builder()
                .apiKey(key)
                .build();
        DistanceMatrixApiRequest request = DistanceMatrixApi.getDistanceMatrix(context, new String[]{origin}, new String[]{destination});
        request.mode(TravelMode.DRIVING);//出行方式(驾车)
        DistanceMatrix distanceMatrix = request.await();
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        System.out.println(gson.toJson(distanceMatrix));
        context.shutdown();
        DistanceMatrixElement elements = distanceMatrix.rows[0].elements[0];
        DistancematrixVo vo = new DistancematrixVo();
        vo.setDistance(elements.distance.inMeters);
        vo.setDuration(elements.duration.inSeconds);
        return vo;
    }
@@ -264,4 +266,16 @@
    }
    public void main(String[] ages){
        try {
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
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
New file
@@ -0,0 +1,152 @@
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;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
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 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";
    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();
            return executeLogic();
        }
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonArray = null;
        TerminaleDataWarpper warpper = new TerminaleDataWarpper();
        try {
            jsonArray = objectMapper.readTree(body);
            for (JsonNode jsonNode : jsonArray) {
                String appointmentDateTimeLocal = jsonNode.get("appointmentDateTimeLocal").asText();
                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;
                }
                if (containerHolds.contains(",")){
                    String[] split = containerHolds.split(",");
                    collect =  Arrays.stream(split).collect(Collectors.toList());
                    if (collect.contains("LINE")){
                        warpper.setLineHold("1");
                    }
                    if (collect.contains("TMF")){
                        warpper.setCustomHold("1");
                    }
                    if (collect.contains("PIER")){
                        warpper.setPierpass("1");
                    }
                    if (collect.contains("CTF")){
                        warpper.setCtf("1");
                    }
                }else {
                    if (containerHolds.equals("LINE")){
                        warpper.setLineHold("1");
                    }
                    if (containerHolds.equals("TMF")){
                        warpper.setCustomHold("1");
                    }
                    if (containerHolds.equals("PIER")){
                        warpper.setPierpass("1");
                    }
                    if (containerHolds.equals("CTF")){
                        warpper.setCtf("1");
                    }
                    if (containerHolds.equals("AREA")){
                        warpper.setClosedArea("1");
                    }
                }
                break;
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return warpper;
    }
    public static void getAuth(){
        String us = auth_url+ "?grant_type=client_credentials";
        String body = HttpRequest.post(us)
                .form("client_id", KEY)
                .form("client_id", SECRET)
                .execute().body();
        JSONObject object = JSONObject.parseObject(body);
        Object o = object.get("access_token");
        if (ToolUtil.isNotEmpty(o)){
            bearerToken = (String) o;
        }
    }
}
src/main/java/com/stylefeng/guns/modular/system/utils/PortUtil/FMSStrategy.java
New file
@@ -0,0 +1,78 @@
package com.stylefeng.guns.modular.system.utils.PortUtil;
import cn.hutool.http.HttpRequest;
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 Exception {
        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 Exception {
        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 Exception(connection.getResponseMessage());
            }
        } catch (Exception e) {
            throw new Exception("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,170 @@
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.util.Date;
import java.util.HashMap;
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/utils/TerminalInterfaceAcquisitionUtil.java
@@ -1,135 +1,135 @@
package com.stylefeng.guns.modular.system.utils;
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.util.ToolUtil;
import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
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 {
    //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 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){
        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);
        }
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonArray = null;
        TerminaleDataWarpper warpper = new TerminaleDataWarpper();
        try {
            jsonArray = objectMapper.readTree(body);
            for (JsonNode jsonNode : jsonArray) {
                String appointmentDateTimeLocal = jsonNode.get("appointmentDateTimeLocal").asText();
                warpper.setLfd(appointmentDateTimeLocal);
                String appointmentNumber = jsonNode.get("containerId").asText();
                warpper.setAppointmentNumber(appointmentNumber);
                String containerHolds = jsonNode.get("containerHolds").asText();
                List<String> collect = new ArrayList<>();
                if (ToolUtil.isEmpty(containerHolds)){
                    return warpper;
                }
                if (containerHolds.contains(",")){
                    String[] split = containerHolds.split(",");
                    collect =  Arrays.stream(split).collect(Collectors.toList());
                    if (collect.contains("LINE")){
                        warpper.setLineHold(1);
                    }
                    if (collect.contains("TMF")){
                        warpper.setCustomHold(1);
                    }
                    if (collect.contains("PIER")){
                        warpper.setPierpass(1);
                    }
                    if (collect.contains("CTF")){
                        warpper.setCtf(1);
                    }
                    if (collect.contains("AREA")){
                        warpper.setClosedArea(1);
                    }
                }else {
                    if (containerHolds.equals("LINE")){
                        warpper.setLineHold(1);
                    }
                    if (containerHolds.equals("TMF")){
                        warpper.setCustomHold(1);
                    }
                    if (containerHolds.equals("PIER")){
                        warpper.setPierpass(1);
                    }
                    if (containerHolds.equals("CTF")){
                        warpper.setCtf(1);
                    }
                    if (containerHolds.equals("AREA")){
                        warpper.setClosedArea(1);
                    }
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return warpper;
    }
    public static void getAuth(){
        String us = auth_url+ "?grant_type=client_credentials";
        String body = HttpRequest.post(us)
                .form("client_id", KEY)
                .form("client_id", SECRET)
                .execute().body();
        JSONObject object = JSONObject.parseObject(body);
        Object o = object.get("access_token");
        if (ToolUtil.isNotEmpty(o)){
            bearerToken = (String) o;
        }
    }
}
//package com.stylefeng.guns.modular.system.utils;
//
//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.util.ToolUtil;
//import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.Arrays;
//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 {
//
//    //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 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){
//        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);
//        }
//        ObjectMapper objectMapper = new ObjectMapper();
//        JsonNode jsonArray = null;
//        TerminaleDataWarpper warpper = new TerminaleDataWarpper();
//        try {
//            jsonArray = objectMapper.readTree(body);
//            for (JsonNode jsonNode : jsonArray) {
//                String appointmentDateTimeLocal = jsonNode.get("appointmentDateTimeLocal").asText();
//                warpper.setLfd(appointmentDateTimeLocal);
//                String appointmentNumber = jsonNode.get("containerId").asText();
//                warpper.setAppointmentNumber(appointmentNumber);
//                String containerHolds = jsonNode.get("containerHolds").asText();
//                List<String> collect = new ArrayList<>();
//                if (ToolUtil.isEmpty(containerHolds)){
//                    return warpper;
//                }
//                if (containerHolds.contains(",")){
//                    String[] split = containerHolds.split(",");
//                    collect =  Arrays.stream(split).collect(Collectors.toList());
//                    if (collect.contains("LINE")){
//                        warpper.setLineHold(1);
//                    }
//                    if (collect.contains("TMF")){
//                        warpper.setCustomHold(1);
//                    }
//                    if (collect.contains("PIER")){
//                        warpper.setPierpass(1);
//                    }
//                    if (collect.contains("CTF")){
//                        warpper.setCtf(1);
//                    }
//                    if (collect.contains("AREA")){
//                        warpper.setClosedArea(1);
//                    }
//                }else {
//                    if (containerHolds.equals("LINE")){
//                        warpper.setLineHold(1);
//                    }
//                    if (containerHolds.equals("TMF")){
//                        warpper.setCustomHold(1);
//                    }
//                    if (containerHolds.equals("PIER")){
//                        warpper.setPierpass(1);
//                    }
//                    if (containerHolds.equals("CTF")){
//                        warpper.setCtf(1);
//                    }
//                    if (containerHolds.equals("AREA")){
//                        warpper.setClosedArea(1);
//                    }
//                }
//            }
//
//
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//        return warpper;
//    }
//
//
//    public static void getAuth(){
//        String us = auth_url+ "?grant_type=client_credentials";
//        String body = HttpRequest.post(us)
//                .form("client_id", KEY)
//                .form("client_id", SECRET)
//                .execute().body();
//        JSONObject object = JSONObject.parseObject(body);
//        Object o = object.get("access_token");
//        if (ToolUtil.isNotEmpty(o)){
//            bearerToken = (String) o;
//        }
//    }
//
//
//}
src/main/java/com/stylefeng/guns/modular/system/warpper/TerminaleDataWarpper.java
@@ -17,18 +17,19 @@
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;
}
src/main/resources/application.yml
@@ -25,6 +25,7 @@
    multipart:
      max-request-size: 100MB
      max-file-size: 100MB
      location: /home/temp
mybatis-plus:
  typeAliasesPackage: com.stylefeng.guns.modular.system.model
@@ -39,10 +40,10 @@
spring:
  profiles: local
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/broker?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://54.67.44.33:3306/broker?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    #password: 7rco.Zt8wXv7
    password: 123456
    password: 7rco.Zt8wXv7
#    password: 123456
    db-name: broker #用来搜集数据库的所有表
    filters: wall,mergeStat