From 434088b7d4ee12c1206cfb194da2b600f4815f94 Mon Sep 17 00:00:00 2001 From: liujie <liujie> Date: 星期二, 15 八月 2023 18:27:37 +0800 Subject: [PATCH] broker 卡车公司端 --- src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java | 177 +++++++++++++++++++++++++++++++++-------------------------- 1 files changed, 99 insertions(+), 78 deletions(-) diff --git a/src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java b/src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java index b1ebcea..e1993e3 100644 --- a/src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java +++ b/src/main/java/com/stylefeng/guns/modular/system/controller/DemandController.java @@ -11,6 +11,7 @@ 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.ChassisRentalDaysUtil; import com.stylefeng.guns.modular.system.utils.ExcelUtil; import com.stylefeng.guns.modular.system.utils.GoogleMap.DistancematrixVo; import com.stylefeng.guns.modular.system.utils.GoogleMap.GeocodeVo; @@ -25,11 +26,14 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; 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.*; @@ -109,6 +113,7 @@ }) @PostMapping(value = "/addDemand") @ResponseBody + @Transactional(propagation = Propagation.REQUIRES_NEW) public Object addDemand(@RequestBody DemandDto demandDto) throws Exception { Integer id = demandDto.getId(); String s1 = System.currentTimeMillis() + ToolUtil.getRandomString(5); @@ -127,64 +132,17 @@ 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<>(); -// // -// 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); -// } -// } -// }); Integer portId = demandDto.getPortId(); TPort tPort = itPortService.selectById(portId); String address = tPort.getAddress(); -// GeocodeVo geocode = googleMapUtil.getGeocode(address); + GeocodeVo geocode = googleMapUtil.getGeocode(address); List<TCompanyCalculationResp> tCompanyCalculationRespList = new ArrayList<>(); // List<Integer> collect1 = set.stream().filter(e -> e.equals(demandDto.getId())).collect(Collectors.toList()); @@ -198,17 +156,22 @@ // 判断是否特殊码头 TRates tRates1 = ratesService.selectOne(new EntityWrapper<TRates>().eq("metro_id", demandDto.getPortId()).eq("type", 2).eq("company_id", company.getId())); int ratesId=0; - if(tRates1!=null){ - ratesId=tRates1.getId(); - }else { - ratesId=tCountry.getId(); + if(tRates1!=null){ + ratesId=tRates1.getId(); + }else { + TRates t = ratesService.selectOne(new EntityWrapper<TRates>().eq("metro_id", tCountry.getId()).eq("type", 1).eq("company_id", company.getId())); + ratesId=t.getId(); } for (GoodsListDto goodsListDto : list1) { ArrayList<TPrice> tPrices = new ArrayList<>(); - - List<TGoods> list = goodsListDto.getList(); for (TGoods e : list) { + e.setShippingLine(goodsListDto.getShippingLine()); + e.setCustRef(goodsListDto.getCustRef()); + e.setEntry(goodsListDto.getEntry()); + e.setOurRef(goodsListDto.getOurRef()); + e.setPo(goodsListDto.getPo()); + e.setSb(goodsListDto.getSb()); TOrder tOrder = new TOrder(); tOrder.setUserId(demandDto.getUserId()); tOrder.setAccessorial(demandDto.getAccessorial()); @@ -218,8 +181,8 @@ tOrder.setDeliveryDate(demandDto.getDeliveryDate()); tOrder.seteZipZ(s1); tOrder.setCreateTime(new Date()); - tOrder.setStartLat("1"); - tOrder.setStartLon("1"); + tOrder.setStartLat(String.valueOf(geocode.getLat())); + tOrder.setStartLon(String.valueOf(geocode.getLng())); tOrder.setDeliveryStr(demandDto.getDelivery()); tOrder.setType(demandDto.getType()); tOrder.setZipCode(demandDto.getZipCode()); @@ -228,6 +191,13 @@ tOrder.setInvoiceNumber(s2); tOrder.setCompanyId(company.getId()); tOrder.setCreateTime(new Date()); + tOrder.setsName(demandDto.getContactName()); + tOrder.setsEmail(demandDto.getContactEmail()); + tOrder.setsPhone(demandDto.getContactPhone()); + tOrder.seteCompanyName(demandDto.getECompanyName()); + tOrder.seteName(demandDto.getEContactName()); + tOrder.seteEmail(demandDto.getEContactEmail()); + tOrder.setePhone(demandDto.getEContactPhone()); if("0".equals(demandDto.getWarehouse())){ tOrder.seteAddress(demandDto.getEAddress()); }else { @@ -241,14 +211,35 @@ TCompanyResp tCompanyResp = new TCompanyResp(); // 是否超重 Integer weight = goodsListDto.getWeight(); - // 相差天数 - long between = DateUtil.between(demandDto.getShipmentDate(), demandDto.getDeliveryDate(), DateUnit.DAY); - if(between==0){ - between=1; + 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)); + if(tWarehouse==null){ + return "Please set the relevant price first"; + } + arg2=tWarehouse.getZipCode(); + }else { + arg2 = demandDto.getZipCode(); } + 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(); + TGoods 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); + BigDecimal days = new BigDecimal(ChassisRentalDaysUtil.chassisRentalDays(1, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)).setScale(0, RoundingMode.HALF_UP); + // 相差天数 +// long between = DateUtil.between(demandDto.getShipmentDate(), demandDto.getDeliveryDate(), DateUnit.DAY); + 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())); - tCompanyResp.setName(UserFeeSettingEnum.OVERWEIGHT.getDesc()); if(feeSetting==null){ tCompanyResp.setPrice(new BigDecimal(0)); @@ -262,7 +253,8 @@ if(feeSetting1==null){ tCompanyResp.setPrice(new BigDecimal(0)); }else { - tCompanyResp.setPrice(feeSetting1.getSetValue().multiply(new BigDecimal(between))); + tCompanyResp.setPrice(feeSetting1.getSetValue().multiply(days)); + tCompanyResp.setDay(days.toString()); } objects.add(tCompanyResp); @@ -273,7 +265,8 @@ if(feeSetting==null){ tCompanyResp.setPrice(new BigDecimal(0)); }else { - tCompanyResp.setPrice(feeSetting.getSetValue().multiply(new BigDecimal(between))); + tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days)); + tCompanyResp.setDay(days.toString()); } objects.add(tCompanyResp); @@ -300,10 +293,30 @@ if(feeSetting==null){ tCompanyResp.setPrice(new BigDecimal(0)); }else { - tCompanyResp.setPrice(feeSetting.getSetValue()); + days = new BigDecimal(ChassisRentalDaysUtil.chassisRentalDays(4, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)).setScale(0, RoundingMode.HALF_UP); + tCompanyResp.setPrice(feeSetting.getSetValue().multiply(days)); + tCompanyResp.setDay(days.toString()); } objects.add(tCompanyResp); + + + // 仓储费 + 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)); + tCompanyResp.setDay(days.toString()); + objects.add(tCompanyResp); + }else { + tCompanyResp.setName(UserFeeSettingEnum.STORAGE.getDesc()); + tCompanyResp.setPrice(new BigDecimal(0)); + objects.add(tCompanyResp); + } if(goodsListDto.getDanger()==1){ tCompanyResp=new TCompanyResp(); @@ -355,9 +368,14 @@ if("0".equals(demandDto.getWarehouse())){ tCompanyResp=new TCompanyResp(); - 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); + TCompanyFeeSetting feeSetting1 = companyFeeSettingService.selectOne(new EntityWrapper<TCompanyFeeSetting>().eq("company_id", company.getId()).eq("rates_id", ratesId).eq("set_name", demandDto.getDelivery())); + if(feeSetting1!=null){ + tCompanyResp.setName(demandDto.getDelivery()); + tCompanyResp.setPrice(feeSetting1.getSetValue()); + }else { + tCompanyResp.setName(demandDto.getDelivery()); + tCompanyResp.setPrice(new BigDecimal(0)); + } objects.add(tCompanyResp); // 基础价格 @@ -379,7 +397,7 @@ boolean inPolygon = PointInPolygon.isInPolygon(geocode1.getLat(), geocode1.getLng(), companyBasic.getLonLat()); if(inPolygon){ tCompanyResp=new TCompanyResp(); - tCompanyResp.setPrice(type.get(0).getFee()); + tCompanyResp.setPrice(companyBasic.getFee()); tCompanyResp.setName("LH+FSC"); objects.add(tCompanyResp); break; @@ -389,8 +407,8 @@ // 距离 tCompanyResp=new TCompanyResp(); // 1条数据 不需要zipcode - DistancematrixVo distancematrix = googleMapUtil.getDistancematrix(address, address1); - double distance = distancematrix.getDistance().doubleValue(); + DistancematrixVo distancematrix2 = googleMapUtil.getDistancematrix(address, address1); + double distance = distancematrix2.getDistance().doubleValue(); BigDecimal bigDecimal = new BigDecimal(distance * 0.0006214); 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) { @@ -409,8 +427,8 @@ // 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(); + DistancematrixVo distancematrix1 = googleMapUtil.getDistancematrix(address, type1.getAddress()); + double distance = distancematrix1.getDistance().doubleValue(); BigDecimal bigDecimal = new BigDecimal(distance * 0.0006214); BigDecimal multiply = type1.getFee().multiply(bigDecimal); tCompanyResp.setPrice(multiply); @@ -437,6 +455,7 @@ } BigDecimal bigDecimal = objects.stream().map(e1 -> e1.getPrice()).reduce(BigDecimal::add).get(); tOrder.setAllTotal(bigDecimal); + tOrder.setPayMoney(bigDecimal); orderService.updateById(tOrder); objects.stream().forEach(e2->e2.setOrderId(tOrder.getId())); @@ -446,7 +465,9 @@ tPrice.setOrderId(object.getOrderId()); tPrice.setState("1"); tPrice.setPrice(object.getPrice()); + tPrice.setCarPrice(object.getPrice()); tPrice.setType(object.getName()); + tPrice.setDay(object.getDay()); tPrices.add(tPrice); } priceService.insertBatch(tPrices); @@ -470,18 +491,17 @@ // 目的地经纬度 - if("0".equals(demandDto.getWarehouse())){ + if(!"0".equals(demandDto.getWarehouse())){ TWarehouse tWarehouse = warehouseService.selectOne(new EntityWrapper<TWarehouse>().eq("company_id", company.getId()).eq("code", demandDto.getWarehouse()).eq("port_id",ratesId)); GeocodeVo geocode1 = googleMapUtil.getGeocode(tWarehouse.getAddress()); tCompanyCalculationResp.setEndLon(String.valueOf(geocode1.getLng())); tCompanyCalculationResp.setEndLat(String.valueOf(geocode1.getLat())); tCompanyCalculationRespList.add(tCompanyCalculationResp); }else { - // TODO String zipCode = demandDto.getZipCode(); -// GeocodeVo geocode1 = googleMapUtil.getGeocode(zipCode); - tCompanyCalculationResp.setEndLon(String.valueOf(1)); - tCompanyCalculationResp.setEndLat(String.valueOf(1)); + GeocodeVo geocode1 = googleMapUtil.getGeocode(AddressLookup.getAddress(zipCode)); + tCompanyCalculationResp.setEndLon(String.valueOf(geocode1.getLng())); + tCompanyCalculationResp.setEndLat(String.valueOf(geocode1.getLat())); tCompanyCalculationRespList.add(tCompanyCalculationResp); } @@ -750,8 +770,9 @@ EntityWrapper<TWarehouse> tWarehouseEntityWrapper = new EntityWrapper<>(); tWarehouseEntityWrapper.eq("company_id",companyId); tWarehouseEntityWrapper.eq("port_id",ratesId); + tWarehouseEntityWrapper.gt("ware_price",0); if(Objects.nonNull(address)){ - tWarehouseEntityWrapper.like("address",address); + tWarehouseEntityWrapper.like("code",address); } Page<TWarehouse> tWarehousePage1 = warehouseService.selectPage(tWarehousePage, tWarehouseEntityWrapper); -- Gitblit v1.7.1