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