liujie
2023-05-15 6225c37d2f53adf26daf6b4859af5fb5c6fad088
src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java
@@ -14,7 +14,6 @@
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.UserInfoUtil;
import com.stylefeng.guns.modular.system.utils.tips.ErrorTip;
import com.stylefeng.guns.modular.system.utils.tips.SuccessTip;
import io.swagger.annotations.Api;
@@ -24,7 +23,6 @@
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@@ -110,7 +108,7 @@
    @PostMapping(value = "/addDemand")
    @ResponseBody
    public Object addDemand(@RequestBody DemandDto demandDto) throws Exception {
        Integer id = UserInfoUtil.getId();
        Integer id = demandDto.getId();
        String s1 = System.currentTimeMillis() + ToolUtil.getRandomString(5);
        String s2 = System.currentTimeMillis() + ToolUtil.getRandomString(5);
        // 生成需求
@@ -124,87 +122,72 @@
        tQuote.setCreateId(id);
        quoteService.insert(tQuote);
        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()));
        }
        String accessorialStr = demandDto.getAccessorialStr();
        String[] split = accessorialStr.split(",");
        Map<String,String> map = new HashMap<>(split.length);
        for (String s :split){
            map.put(s,s);
        }
        List<TCompanyService> companyServiceList = new ArrayList<>();
//        Map<String,String> map = new HashMap<>(split.length);
//        for (String s :split){
//            map.put(s,s);
//        }
        //
        for (Map.Entry<String, String> entry : map.entrySet()) {
                companyServiceList.addAll(tCompanyServiceService.selectList(new EntityWrapper<TCompanyService>()
                    .eq("service_name", entry.getKey()).ne("service_value", 0)));
        }
        // TODO size 是否包含   收费  收费站、收费基础
        // 根据公司id去重
        List<TCompanyService> companyServices = companyServiceList.stream().collect(Collectors.
                collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(TCompanyService::getCompanyId))),ArrayList::new));
        // 拿出符合规则的公司id
        List<Integer> companyIds = companyServices.stream().map(TCompanyService::getCompanyId).collect(Collectors.toList());
        List<TCompany> tCompanyList = new ArrayList<>();
        for (Integer companyId : companyIds) {
            List<TCompanyService> collect = companyServiceList.stream().filter(company -> company.getCompanyId().equals(companyId)).collect(Collectors.toList());
            if(map.size() == collect.size()){
                // 找出符合规则的公司
                TCompany company = tCompanyService.selectOne(new EntityWrapper<TCompany>().eq("status", 1)
                        .eq("id",companyId));
                if(Objects.nonNull(company)){
                    tCompanyList.add(company);
                }
            }
        }
        // 符合规则的公司id集合
        List<Integer> companyIdList = tCompanyList.stream().map(TCompany::getId).collect(Collectors.toList());
        HashSet<Integer> set = new HashSet<>();
        // 找出目前公司是否符合添加的码头
        // 看当前码头是否为特殊码头
        // 找出当前码头所在的cityid
//        List<TCompanyService> companyServiceList = new ArrayList<>();
//        //
//        for (Map.Entry<String, String> entry : map.entrySet()) {
//                companyServiceList.addAll(tCompanyServiceService.selectList(new EntityWrapper<TCompanyService>()
//                    .eq("service_name", entry.getKey()).ne("service_value", 0)));
//        }
//
//        // TODO size 是否包含   收费  收费站、收费基础
//
//        // 根据公司id去重
//        List<TCompanyService> companyServices = companyServiceList.stream().collect(Collectors.
//                collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(TCompanyService::getCompanyId))),ArrayList::new));
//        // 拿出符合规则的公司id
//        List<Integer> companyIds = companyServices.stream().map(TCompanyService::getCompanyId).collect(Collectors.toList());
//
//        List<TCompany> tCompanyList = new ArrayList<>();
//        for (Integer companyId : companyIds) {
//            List<TCompanyService> collect = companyServiceList.stream().filter(company -> company.getCompanyId().equals(companyId)).collect(Collectors.toList());
//            if(map.size() == collect.size()){
//                // 找出符合规则的公司
//                TCompany company = tCompanyService.selectOne(new EntityWrapper<TCompany>().eq("status", 1)
//                        .eq("id",companyId));
//                if(Objects.nonNull(company)){
//                    tCompanyList.add(company);
//                }
//            }
//        }
//
//        // 符合规则的公司id集合
//        List<Integer> companyIdList = tCompanyList.stream().map(TCompany::getId).collect(Collectors.toList());
//
//        HashSet<Integer> set = new HashSet<>();
//
//        // 找出目前公司是否符合添加的码头
//        // 看当前码头是否为特殊码头
//        // 找出当前码头所在的cityid
        TPort tPort1 = portService.selectById(demandDto.getPortId());
        TCountry tCountry = countryService.selectById(tPort1.getCity());
        List<Integer> integers = Arrays.asList(demandDto.getPortId(), tCountry.getId());
        List<TRates> tRates = ratesService.selectList(new EntityWrapper<TRates>().in("metro_id", integers));
        // 满足码头的公司
        companyIdList.stream().forEach(t->{
            for (TRates tRate : tRates) {
                if(tRate.getCompanyId().equals(t)){
                    set.add(t);
                }
            }
        });
//        List<Integer> integers = Arrays.asList(demandDto.getPortId(), tCountry.getId());
//        List<TRates> tRates = ratesService.selectList(new EntityWrapper<TRates>().in("metro_id", integers));
//        // 满足码头的公司
//        companyIdList.stream().forEach(t->{
//            for (TRates tRate : tRates) {
//                if(tRate.getCompanyId().equals(t)){
//                    set.add(t);
//                }
//            }
//        });
        Integer portId = demandDto.getPortId();
        TPort tPort = itPortService.selectById(portId);
        String address = tPort.getAddress();
//        GeocodeVo geocode = googleMapUtil.getGeocode(address);
        List<TCompanyCalculationResp> tCompanyCalculationRespList = new ArrayList<>(tCompanyList.size());
        List<TCompanyCalculationResp> tCompanyCalculationRespList = new ArrayList<>();
//        List<Integer> collect1 = set.stream().filter(e -> e.equals(demandDto.getId())).collect(Collectors.toList());
        // 没有满足公司
        if(CollectionUtils.isEmpty(set)){
            quoteService.deleteById(tQuote.getId());
            return  new ErrorTip(5001,"No truck company was matched to meet the demand");
        }else {
            for (TCompany company : tCompanyList) {
            TCompany company = companyService.selectById(demandDto.getId());
                TCompanyCalculationResp tCompanyCalculationResp = new TCompanyCalculationResp();
                ArrayList<TOrder> tOrders = new ArrayList<>();
                // 超重 价格
@@ -218,10 +201,12 @@
                }else {
                    ratesId=tCountry.getId();
                }
                for (GoodsListDto goodsListDto : list1) {
                    ArrayList<TPrice> tPrices = new ArrayList<>();
                    // 生成订单
                    List<TGoods> list = goodsListDto.getList();
                    for (TGoods e : list) {
                    TOrder tOrder = new TOrder();
                    tOrder.setUserId(demandDto.getUserId());
                    tOrder.setAccessorial(demandDto.getAccessorial());
@@ -241,99 +226,129 @@
                    tOrder.setInvoiceNumber(s2);
                    tOrder.setCompanyId(company.getId());
                    tOrder.setCreateTime(new Date());
                        tOrder.seteAddress(demandDto.getEAddress());
                        tOrder.setOrderType(1);
                    orderService.insert(tOrder);
                    tOrders.add(tOrder);
                    List<GoodsDto> list = goodsListDto.getList();
                    ArrayList<TGoods> tGoods1 = new ArrayList<>();
                    for (GoodsDto goodsDto : list) {
                        TGoods tGoods = new TGoods();
                        tGoods.setShippingLine(goodsListDto.getShippingLine());
                        tGoods.setDanger(goodsListDto.getDanger());
                        tGoods.setKg(goodsDto.getKg());
                        tGoods.setOrderId(tOrder.getId());
                        tGoods.setSize(goodsDto.getSize());
                        tGoods.setType(goodsDto.getType());
                        tGoods.setWeight(goodsListDto.getWeight());
                        tGoods.setTypeClass(goodsDto.getTypeClass());
                        tGoods1.add(tGoods);
                    }
                    goodsService.insertBatch(tGoods1);
                        e.setOrderId(tOrder.getId());
                    TCompanyResp tCompanyResp = new TCompanyResp();
                    // 是否超重
                    Integer weight = goodsListDto.getWeight();
                        // 相差天数
                    long between = DateUtil.between(demandDto.getShipmentDate(), demandDto.getDeliveryDate(), DateUnit.DAY);
                    if(between==0){
                        between=1;
                    }
                    if(weight==1){
                        TCompanyFeeSetting feeSetting = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("set_name", UserFeeSettingEnum.OVERWEIGHT.getDesc()));
                            TCompanyFeeSetting feeSetting = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id",ratesId).eq("set_name", UserFeeSettingEnum.OVERWEIGHT.getDesc()));
                        tCompanyResp.setName(UserFeeSettingEnum.OVERWEIGHT.getDesc());
                            if(feeSetting==null){
                                tCompanyResp.setPrice(new BigDecimal(0));
                            }else {
                        tCompanyResp.setPrice(feeSetting.getSetValue());
                            }
                        objects.add(tCompanyResp);
                        TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("set_name", "trl-axle chassis"));
                            TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id",ratesId).eq("set_name", "trl-axle chassis"));
                        tCompanyResp=new TCompanyResp();
                        tCompanyResp.setName(UserFeeSettingEnum.CHASSIS_FEE.getDesc());
                            if(feeSetting1==null){
                                tCompanyResp.setPrice(new BigDecimal(0));
                            }else {
                        tCompanyResp.setPrice(feeSetting1.getSetValue().multiply(new BigDecimal(between)));
                            }
                        objects.add(tCompanyResp);
                    }else {
                        tCompanyResp=new TCompanyResp();
                        tCompanyResp.setName(UserFeeSettingEnum.CHASSIS_FEE.getDesc());
                        TCompanyFeeSetting feeSetting = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("set_name", "Pool chassis"));
                            TCompanyFeeSetting feeSetting = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id",ratesId).eq("set_name", "Pool chassis"));
                            if(feeSetting==null){
                                tCompanyResp.setPrice(new BigDecimal(0));
                            }else {
                        tCompanyResp.setPrice(feeSetting.getSetValue().multiply(new BigDecimal(between)));
                            }
                        objects.add(tCompanyResp);
                    }
                    // type
                    if ("Live Unload".equals(demandDto.getType())) {
                        // 计算当前公司的价格
                        tCompanyResp=new TCompanyResp();
                        BigDecimal setValue = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("set_name", UserFeeSettingEnum.PREPULL.getDesc())).getSetValue();
                            TCompanyFeeSetting feeSetting = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.PREPULL.getDesc()));
                        tCompanyResp.setName(UserFeeSettingEnum.PREPULL.getDesc());
                        tCompanyResp.setPrice(setValue);
                            if(feeSetting==null){
                                tCompanyResp.setPrice(new BigDecimal(0));
                            }else {
                                tCompanyResp.setPrice(feeSetting.getSetValue());
                            }
                        objects.add(tCompanyResp);
                    }
                    // 滞留费
                    tCompanyResp=new TCompanyResp();
                    BigDecimal setValue = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("set_name", UserFeeSettingEnum.DETENTION_CONGESTION.getDesc())).getSetValue();
                        TCompanyFeeSetting feeSetting = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.DETENTION_CONGESTION.getDesc()));
                    tCompanyResp.setName(UserFeeSettingEnum.DETENTION_CONGESTION.getDesc());
                    tCompanyResp.setPrice(setValue);
                        if(feeSetting==null){
                            tCompanyResp.setPrice(new BigDecimal(0));
                        }else {
                            tCompanyResp.setPrice(feeSetting.getSetValue());
                        }
                    objects.add(tCompanyResp);
                    if(goodsListDto.getDanger()==1){
                        tCompanyResp=new TCompanyResp();
                        BigDecimal setValue1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("set_name", UserFeeSettingEnum.HAZMAT.getDesc())).getSetValue();
                            TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.HAZMAT.getDesc()));
                        tCompanyResp.setName(UserFeeSettingEnum.HAZMAT.getDesc());
                        tCompanyResp.setPrice(setValue1);
                            if(feeSetting1==null){
                                tCompanyResp.setPrice(new BigDecimal(0));
                            }else {
                                tCompanyResp.setPrice(feeSetting1.getSetValue());
                            }
                        objects.add(tCompanyResp);
                    }
                    if(demandDto.getUrgent()==1){
                        tCompanyResp=new TCompanyResp();
                        BigDecimal setValue1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("set_name", UserFeeSettingEnum.URGENT_SEE.getDesc())).getSetValue();
                            TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.URGENT_SEE.getDesc()));
                        tCompanyResp.setName(UserFeeSettingEnum.URGENT_SEE.getDesc());
                        tCompanyResp.setPrice(setValue1);
                            if(feeSetting1==null){
                                tCompanyResp.setPrice(new BigDecimal(0));
                            }else {
                                tCompanyResp.setPrice(feeSetting1.getSetValue());
                            }
                        objects.add(tCompanyResp);
                    }
                    if(demandDto.getPiperpass()==1){
                        tCompanyResp=new TCompanyResp();
                        BigDecimal setValue1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("set_name", UserFeeSettingEnum.PIERPASS.getDesc())).getSetValue();
                            TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.PIERPASS.getDesc()));
                        tCompanyResp.setName(UserFeeSettingEnum.PIERPASS.getDesc());
                        tCompanyResp.setPrice(setValue1);
                            if(feeSetting1==null){
                                tCompanyResp.setPrice(new BigDecimal(0));
                            }else {
                                tCompanyResp.setPrice(feeSetting1.getSetValue());
                            }
                        objects.add(tCompanyResp);
                    }
                    if(demandDto.getCTF()==1){
                        tCompanyResp=new TCompanyResp();
                        BigDecimal setValue1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("set_name", UserFeeSettingEnum.CTF.getDesc())).getSetValue();
                            TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", UserFeeSettingEnum.CTF.getDesc()));
                        tCompanyResp.setName(UserFeeSettingEnum.CTF.getDesc());
                        tCompanyResp.setPrice(setValue1);
                            if(feeSetting1==null){
                                tCompanyResp.setPrice(new BigDecimal(0));
                            }else {
                                tCompanyResp.setPrice(feeSetting1.getSetValue());
                            }
                        objects.add(tCompanyResp);
                    }
                    if("0".equals(demandDto.getWarehouse())){
                        tCompanyResp=new TCompanyResp();
                        BigDecimal setValue1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("set_name", demandDto.getDelivery())).getSetValue();
                            BigDecimal setValue1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id",ratesId).eq("set_name", demandDto.getDelivery())).getSetValue();
                        tCompanyResp.setName(demandDto.getDelivery());
                        tCompanyResp.setPrice(setValue1);
                        objects.add(tCompanyResp);
@@ -358,6 +373,7 @@
                                tCompanyResp=new TCompanyResp();
                                // 1条数据  不需要zipcode
                                TCompanyBasic type1 = companyBasicService.selectOne(new EntityWrapper<TCompanyBasic>().eq("type", 3).eq("port_id",ratesId));
                                    if(type1!=null) {
                                DistancematrixVo distancematrix = googleMapUtil.getDistancematrix(address, type1.getAddress());
                                double distance = distancematrix.getDistance().doubleValue();
                                BigDecimal bigDecimal = new BigDecimal(distance * 0.0006214);
@@ -365,6 +381,11 @@
                                tCompanyResp.setPrice(multiply);
                                tCompanyResp.setName("LH+FSC");
                                objects.add(tCompanyResp);
                                    }else {
                                        tCompanyResp.setPrice(new BigDecimal(0));
                                        tCompanyResp.setName("LH+FSC");
                                        objects.add(tCompanyResp);
                                    }
                            }
                        }
@@ -379,10 +400,10 @@
                        }
                        objects.add(tCompanyResp);
                    }
                    BigDecimal bigDecimal = objects.stream().map(e -> e.getPrice()).reduce(BigDecimal::add).get();
                        BigDecimal bigDecimal = objects.stream().map(e1 -> e1.getPrice()).reduce(BigDecimal::add).get();
                    tOrder.setAllTotal(bigDecimal);
                    orderService.updateById(tOrder);
                    objects.stream().forEach(e->e.setOrderId(tOrder.getId()));
                        objects.stream().forEach(e2->e2.setOrderId(tOrder.getId()));
                    for (TCompanyResp object : objects) {
                        TPrice tPrice = new TPrice();
@@ -395,39 +416,12 @@
                    }
                    priceService.insertBatch(tPrices);
                }
                    goodsService.insertBatch(list);
                }
                tCompanyCalculationResp.setOrderList(tOrders);
//                if(CollectionUtil.isNotEmpty(tUserFeeSettings)){
//                    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());
//                        tPrices.add(tPrice);
//                        for (TUserFeeSetting tUserFeeSetting : tUserFeeSettings) {
//                            if(object.getName().equals(tUserFeeSetting.getName())){
//                                double i = (double)tUserFeeSetting.getFee() / 100;
//                                BigDecimal multiply = object.getPrice().multiply(new BigDecimal(i));
//                            }
//                        }
//                    }
//                }else {
//                    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());
//                        tPrices.add(tPrice);
//
//                    }
//                }
//                priceService.insertBatch(tPrices);
                tCompanyCalculationResp.setList(objects);
                tCompanyCalculationResp.setCarGoNumber(String.valueOf(company.getMcNumber()));
                tCompanyCalculationResp.setCompanyId(company.getId());
@@ -457,11 +451,9 @@
                }
            }
        }
        for (TCompanyCalculationResp tCompanyCalculationResp : tCompanyCalculationRespList) {
            tCompanyCalculationResp.setQuoteId(tQuote.getId());
        for (TCompanyCalculationResp tCompanyCalculationResp1 : tCompanyCalculationRespList) {
            tCompanyCalculationResp1.setQuoteId(tQuote.getId());
        }
        return new SuccessTip(tCompanyCalculationRespList);
    }
@@ -523,11 +515,6 @@
            }
            tOrder.setPayMoney(bigDecimal);
            orderService.updateById(tOrder);
        }
        return new SuccessTip();
@@ -705,7 +692,7 @@
        Page<TWarehouse> tWarehousePage = new Page<>(pageNumber, pageSize);
        EntityWrapper<TWarehouse> tWarehouseEntityWrapper = new EntityWrapper<>();
        tWarehouseEntityWrapper.eq("company_id",1);
        tWarehouseEntityWrapper.eq("company_id",0);
        if(Objects.nonNull(address)){
            tWarehouseEntityWrapper.like("address",address);
        }
@@ -752,4 +739,17 @@
    }
    @ApiOperation(value = "根据亚马逊code获取地址",notes="根据亚马逊code获取地址")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(name = "code", value = "code", required = true, dataType = "String"),
    })
    @GetMapping(value = "/getWarehouseFromCode")
    @ResponseBody
    public Object getWarehouseFromCode(String code) {
        TWarehouse tWarehouse = warehouseService.selectList(new EntityWrapper<TWarehouse>().eq("code", code).eq("company_id", 0)).get(0);
        return new SuccessTip(tWarehouse.getAddress() );
    }
}