From 8e680f301f31c91391579213661be4af04810e8c Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期五, 01 八月 2025 10:47:34 +0800 Subject: [PATCH] 特殊区域,价格修改 --- DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 72 ++++++++++++++++++++++++++++++++++++ 1 files changed, 72 insertions(+), 0 deletions(-) diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index 47a251a..999e374 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.annotation.Resource; @@ -32,6 +33,8 @@ import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; +import java.time.Duration; +import java.time.LocalDateTime; import java.util.*; @@ -89,6 +92,8 @@ @Autowired private IIncomeService incomeService; + @Autowired + private ISpecialAreaBillingService specialAreaBillingService; @Value("${filePath}") @@ -471,6 +476,47 @@ orderPrivateCar.setArriveTime(orderPrivateCar.getStartServiceTime()); } orderPrivateCar = this.setMoney(orderPrivateCar, 0D, 0D);//计算费用 + + // 查询起点或者终点在特殊区域中 + List<SpecialAreaBilling> specialAreaBillings = specialAreaBillingService.selectList(new EntityWrapper<SpecialAreaBilling>() + .eq("state", 1)); + if(!CollectionUtils.isEmpty(specialAreaBillings)){ + // 判断起点或者终点在特殊区域中 + Iterator<SpecialAreaBilling> iterator = specialAreaBillings.iterator(); + while (iterator.hasNext()) { + SpecialAreaBilling specialAreaBilling = iterator.next(); + // 起点 + Double startLon = orderPrivateCar.getStartLon(); + Double startLat = orderPrivateCar.getStartLat(); + boolean start = ElectricFenceUtil.monitorElectricFenc(specialAreaBilling.getCoordinate(), startLon + "," + startLat); + // 终点 + Double endLon = orderPrivateCar.getEndLon(); + Double endLat = orderPrivateCar.getEndLat(); + boolean end = ElectricFenceUtil.monitorElectricFenc(specialAreaBilling.getCoordinate(), endLon + "," + endLat); + if(!start && !end){ + iterator.remove(); + } + } + if(!CollectionUtils.isEmpty(specialAreaBillings)){ + // 拿到价格系数最高的特殊区域 + specialAreaBillings.sort(new Comparator<SpecialAreaBilling>() { + @Override + public int compare(SpecialAreaBilling o1, SpecialAreaBilling o2) { + return o2.getPriceCoefficient().compareTo(o1.getPriceCoefficient()); + } + }); + BigDecimal priceCoefficient = specialAreaBillings.get(0).getPriceCoefficient(); + orderPrivateCar.setOrderMoney(Objects.nonNull(orderPrivateCar.getOrderMoney())?new BigDecimal(orderPrivateCar.getOrderMoney()).multiply(priceCoefficient).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue():0D); + orderPrivateCar.setStartMoney(Objects.nonNull(orderPrivateCar.getStartMoney())?new BigDecimal(orderPrivateCar.getStartMoney()).multiply(priceCoefficient).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue():0D); + orderPrivateCar.setMileageMoney(Objects.nonNull(orderPrivateCar.getMileageMoney())?new BigDecimal(orderPrivateCar.getMileageMoney()).multiply(priceCoefficient).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue():0D); + orderPrivateCar.setDurationMoney(Objects.nonNull(orderPrivateCar.getDurationMoney())?new BigDecimal(orderPrivateCar.getDurationMoney()).multiply(priceCoefficient).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue():0D); + orderPrivateCar.setWaitMoney(Objects.nonNull(orderPrivateCar.getWaitMoney())?new BigDecimal(orderPrivateCar.getWaitMoney()).multiply(priceCoefficient).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue():0D); + orderPrivateCar.setLongDistanceMoney(Objects.nonNull(orderPrivateCar.getLongDistanceMoney())?new BigDecimal(orderPrivateCar.getLongDistanceMoney()).multiply(priceCoefficient).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue():0D); + orderPrivateCar.setParkMoney(Objects.nonNull(orderPrivateCar.getParkMoney())?new BigDecimal(orderPrivateCar.getParkMoney()).multiply(priceCoefficient).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue():0D); + orderPrivateCar.setRoadTollMoney(Objects.nonNull(orderPrivateCar.getRoadTollMoney())?new BigDecimal(orderPrivateCar.getRoadTollMoney()).multiply(priceCoefficient).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue():0D); + } + } + orderPrivateCar.setPayManner(type); orderPrivateCar.setParkMoney(null == parkingFee ? 0D : parkingFee); orderPrivateCar.setRoadTollMoney(null == crossingFee ? 0D : crossingFee); @@ -526,6 +572,13 @@ // orderPrivateCar.setTelX(""); // orderPrivateCar.setBindId(""); // } + // 判断预估金额和订单金额差异是否大于3元 + if(BigDecimal.valueOf(orderPrivateCar.getOrderMoney()).subtract(orderPrivateCar.getEstimatedPrice()).abs().doubleValue() > 3){ + orderPrivateCar.setIsException(1); + } + if(orderPrivateCar.getIsException() == 1){ + orderPrivateCar.setState(13); + } this.updateById(orderPrivateCar); @@ -605,6 +658,16 @@ @Override public boolean calculateMileage(Integer orderId, String lon, String lat) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(orderId); + // 判断距离上一次推送时间是否超过1分钟 + if(Objects.nonNull(orderPrivateCar.getLastPushTime())){ + LocalDateTime now = LocalDateTime.now(); + if(Duration.between(orderPrivateCar.getLastPushTime(), now).toMinutes() > 1){ + orderPrivateCar.setIsException(1); + } + orderPrivateCar.setLastPushTime(now); + }else { + orderPrivateCar.setLastPushTime(LocalDateTime.now()); + } OrderPosition orderPosition = orderPositionService.queryNew(orderId, 1); String now = lon + "," + lat; String old = null; @@ -866,4 +929,13 @@ orderPrivateCar.setTrackId(String.valueOf(trackId)); this.updateById(orderPrivateCar); } + + @Override + public void updatePrice(Integer orderId, Integer priceType, BigDecimal updatePrice) { + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + orderPrivateCar.setPriceType(priceType); + orderPrivateCar.setUpdatePrice(updatePrice); + orderPrivateCar.setPriceAuditState(1); + this.updateById(orderPrivateCar); + } } -- Gitblit v1.7.1