From eaa20cb58afc80e3612fd6e93d6f27e181a027e7 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 07 四月 2023 17:38:29 +0800
Subject: [PATCH] 提交用户端开发版本

---
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java |  178 +++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 148 insertions(+), 30 deletions(-)

diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
index 51f0934..49c1200 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -118,7 +118,8 @@
         String city = "";
         District geocode = MapUtil.geocode(estimatedCosts.getStartLng().toString(), estimatedCosts.getStartLat().toString());
         if(null != geocode){
-            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>().where(" '" + geocode.getDistrict() + "' like district"));
+            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
+                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
             city = null != weatherCity ? weatherCity.getId().toString() : "";
         }
         Order order = getOrderPrice(1, d, 0, new Order(), city);
@@ -270,28 +271,36 @@
         }
 
         //恶劣天气
-        boolean badWeather = WeatherUtil.isBadWeather(city);
-        if(badWeather){
-            order.setBadWeatherDistance(num5);//恶劣天气公里
-            order.setBadWeatherPrice(num6);//恶劣天气费
-            if(distance.compareTo(num7) > 0){
-                BigDecimal subtract = new BigDecimal(distance).subtract(new BigDecimal(num7));
-                BigDecimal multiply = subtract.multiply(new BigDecimal(num8));
-                order.setOverBadWeatherDistance(subtract.doubleValue());//恶劣天气超出公里
-                order.setOverBadWeatherPrice(multiply.doubleValue());//恶劣天气超出公里费
-            }
+        systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 8));
+        if(null != systemConfig){
+            JSONObject jsonObject1 = JSON.parseObject(systemConfig.getContent());
+            Integer num11 = jsonObject1.getInteger("num1");//开启恶劣天气计价
+            if(1 == num11){
+                boolean badWeather = WeatherUtil.isBadWeather(city);
+                if(badWeather){
+                    order.setBadWeatherDistance(num5);//恶劣天气公里
+                    order.setBadWeatherPrice(num6);//恶劣天气费
+                    if(distance.compareTo(num7) > 0){
+                        BigDecimal subtract = new BigDecimal(distance).subtract(new BigDecimal(num7));
+                        BigDecimal multiply = subtract.multiply(new BigDecimal(num8));
+                        order.setOverBadWeatherDistance(subtract.doubleValue());//恶劣天气超出公里
+                        order.setOverBadWeatherPrice(multiply.doubleValue());//恶劣天气超出公里费
+                    }
 
-            double add = new BigDecimal(order.getOverBadWeatherPrice()).add(new BigDecimal(order.getBadWeatherPrice())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
-            if(num9.compareTo(add) < 0){//超出最高金额(重新调整金额)
-                if(num9.compareTo(num6) < 0){//如果恶劣天气费大于最高金额
-                    order.setBadWeatherPrice(num9);//恶劣天气费
-                    order.setOverBadWeatherPrice(0D);//恶劣天气超出公里费
-                }else{
-                    BigDecimal subtract = new BigDecimal(num9).subtract(new BigDecimal(add));
-                    order.setOverBadWeatherPrice(subtract.doubleValue());//恶劣天气超出公里费
+                    double add = new BigDecimal(order.getOverBadWeatherPrice()).add(new BigDecimal(order.getBadWeatherPrice())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+                    if(num9.compareTo(add) < 0){//超出最高金额(重新调整金额)
+                        if(num9.compareTo(num6) < 0){//如果恶劣天气费大于最高金额
+                            order.setBadWeatherPrice(num9);//恶劣天气费
+                            order.setOverBadWeatherPrice(0D);//恶劣天气超出公里费
+                        }else{
+                            BigDecimal subtract = new BigDecimal(num9).subtract(new BigDecimal(add));
+                            order.setOverBadWeatherPrice(subtract.doubleValue());//恶劣天气超出公里费
+                        }
+                    }
                 }
             }
         }
+
 
         //计算总金额
         BigDecimal bigDecimal = new BigDecimal(order.getStartPrice() + order.getOverDrivePrice() + order.getLongDistancePrice() + order.getOverLongDistancePrice() +
@@ -357,6 +366,16 @@
         if(null != order){
             return ResultUtil.error("您还有正在进行的订单");
         }
+
+        String startAddress = travelOrder.getStartAddress();
+        startAddress = startAddress.replaceAll("& #40;", "(");
+        startAddress = startAddress.replaceAll("& #41;", ")");
+        travelOrder.setStartAddress(startAddress);;
+        String endAddress = travelOrder.getEndAddress();
+        endAddress = endAddress.replaceAll("& #40;", "(");
+        endAddress = endAddress.replaceAll("& #41;", ")");
+        travelOrder.setEndAddress(endAddress);
+
         order = new Order();
         BeanUtils.copyProperties(travelOrder, order);
         if(ToolUtil.isEmpty(travelOrder.getUserPhone())){
@@ -382,7 +401,8 @@
         String city = "";
         District geocode = MapUtil.geocode(order.getStartLng(), order.getStartLat());
         if(null != geocode){
-            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>().where(" '" + geocode.getDistrict() + "' like district"));
+            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
+                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
             city = null != weatherCity ? weatherCity.getId().toString() : "";
         }
         order = getOrderPrice(1, d, 0, order, city);
@@ -409,8 +429,11 @@
 
             //推送状态
             pushUtil.pushOrderStatus(uid, 1, order.getId(), order.getState());
-            if(null != travelOrder.getDriverId()){
-                pushUtil.pushOrderStatus(travelOrder.getDriverId(), 2, order.getId(), order.getState());
+            if(null != order.getDriverId()){
+                PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
+                pushOrderInfoWarpper.setId(order.getId());
+                pushOrderInfoWarpper.setState(order.getState());
+                pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
             }else{
                 //推单
                 pushOrder(order);
@@ -446,7 +469,7 @@
 
         //1
         //找到中心点
-        GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(startLat), Double.valueOf(startLng));
+        GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(startLng), Double.valueOf(startLat));
         Double num = num3 / 1000;//范围公里
         //构造半径
         Distance distanceR = new Distance(num, Metrics.KILOMETERS);
@@ -467,6 +490,10 @@
                 if(ToolUtil.isEmpty(value)){
                     continue;
                 }
+                Driver driver1 = driverService.selectById(youTuiDriver.getDriverId());
+                if(driver1.getServerStatus() == 2){
+                    continue;
+                }
                 Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
                 Double wgs84 = distance.get("WGS84");
                 if(d == null || d.compareTo(wgs84) > 0){
@@ -484,6 +511,9 @@
         //开始范围查找
         if(null == driver){
             for (int i = 1; i < 4; i++) {
+                if(null != driver){
+                    break;
+                }
                 num = jsonObject.getDouble("num" + i) / 1000;//范围公里
                 //构造半径
                 distanceR = new Distance(num, Metrics.KILOMETERS);
@@ -504,6 +534,10 @@
                     Double score = null;
                     Double d = null;
                     for (Driver driver1 : drivers) {
+                        String value = redisUtil.getValue("DRIVER" + driver1.getId());
+                        if(ToolUtil.isEmpty(value)){
+                            continue;
+                        }
                         if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
                             integral = driver1.getIntegral();
                             score = driver1.getScore();
@@ -517,10 +551,6 @@
                             continue;
                         }
                         if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) == 0){//积分相同/评分相同对比距离
-                            String value = redisUtil.getValue("DRIVER" + driver1.getId());
-                            if(ToolUtil.isEmpty(value)){
-                                continue;
-                            }
                             Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
                             Double wgs84 = distance.get("WGS84");
                             if(d == null || d.compareTo(wgs84) > 0){
@@ -577,9 +607,24 @@
         cancelOrder.setStatus(1);
         cancelOrder.setCreateTime(new Date());
         cancelOrderService.insert(cancelOrder);
+        order.setState(301);
+        this.updateById(order);
         AppUser appUser = appUserService.selectById(uid);
         appUser.setCancelCount(appUser.getCancelCount() + 1);
         appUserService.updateById(appUser);
+        Driver driver = driverService.selectById(order.getDriverId());
+        if(null != driver){
+            driver.setServerStatus(1);
+            driverService.updateById(driver);
+        }
+
+        pushUtil.pushOrderStatus(uid, 1, orderId, order.getState());
+        if(null != order.getDriverId()){
+            PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
+            pushOrderInfoWarpper.setId(order.getId());
+            pushOrderInfoWarpper.setState(order.getState());
+            pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
+        }
         return ResultUtil.success();
     }
 
@@ -593,7 +638,19 @@
      */
     @Override
     public OrderInfoWarpper queryOrderInfo(Integer uid, Long orderId) throws Exception {
-        return this.baseMapper.queryOrderInfo(uid, orderId);
+        OrderInfoWarpper orderInfoWarpper = this.baseMapper.queryOrderInfo(uid, orderId);
+        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 7));
+        if(null != systemConfig){
+            JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
+            orderInfoWarpper.setServiceCell(jsonObject.getString("num1"));
+        }
+        String value = redisUtil.getValue("DRIVER" + orderInfoWarpper.getDriverId());
+        if(ToolUtil.isNotEmpty(value)){
+            String[] split = value.split(",");
+            orderInfoWarpper.setDriverLon(split[0]);
+            orderInfoWarpper.setDriverLat(split[1]);
+        }
+        return orderInfoWarpper;
     }
 
 
@@ -623,7 +680,8 @@
         String city = "";
         District geocode = MapUtil.geocode(order.getStartLng().toString(), order.getStartLat().toString());
         if(null != geocode){
-            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>().where(" '" + geocode.getDistrict() + "' like district"));
+            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
+                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
             city = null != weatherCity ? weatherCity.getId().toString() : "";
         }
         Order order1 = new Order();
@@ -827,6 +885,15 @@
         order.setState(108);
         this.updateById(order);
 
+        pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
+        if(null != order.getDriverId()) {
+            PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
+            pushOrderInfoWarpper.setId(order.getId());
+            pushOrderInfoWarpper.setState(order.getState());
+            pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
+        }
+
+
         AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
         accountChangeDetail.setUserType(1);
         accountChangeDetail.setUserId(appUser.getId());
@@ -834,6 +901,7 @@
         accountChangeDetail.setOldData(appUser.getAccountBalance());
         accountChangeDetail.setType(1);
         accountChangeDetail.setChangeType(2);
+        accountChangeDetail.setOrderId(order.getId());
         accountChangeDetail.setExplain("代驾服务费");
         appUser.setAccountBalance(appUser.getAccountBalance() - payMoney);
         accountChangeDetail.setNewData(appUser.getAccountBalance());
@@ -878,6 +946,7 @@
         accountChangeDetail.setOldData(appUser.getAccountBalance());
         accountChangeDetail.setType(1);
         accountChangeDetail.setChangeType(2);
+        accountChangeDetail.setOrderId(order.getId());
         accountChangeDetail.setExplain("代驾服务费");
         appUser.setAccountBalance(appUser.getAccountBalance() > payMoney ? appUser.getAccountBalance() - payMoney : 0);
         accountChangeDetail.setNewData(appUser.getAccountBalance());
@@ -943,6 +1012,18 @@
                                     Thread.sleep(wait);
                                     num++;
                                 }
+                            }else{
+                                Thread.sleep(wait);
+                                num++;
+                            }
+                            if(10 == num){
+                                AccountChangeDetail accountChangeDetail1 = accountChangeDetailService.selectById(accountChangeDetail.getId());
+                                AppUser appUser1 = appUserService.selectById(accountChangeDetail1.getUserId());
+                                Double b = accountChangeDetail1.getOldData() - accountChangeDetail1.getNewData();
+                                appUser1.setAccountBalance(appUser1.getAccountBalance() + b);
+                                appUserService.updateById(appUser1);
+
+                                accountChangeDetailService.deleteById(accountChangeDetail.getId());
                             }
                         }
                     }catch (Exception e){
@@ -977,6 +1058,14 @@
         this.updateById(order);
         //添加收入明细
         saveCommission(order);
+
+        pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
+        if(null != order.getDriverId()) {
+            PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
+            pushOrderInfoWarpper.setId(order.getId());
+            pushOrderInfoWarpper.setState(order.getState());
+            pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
+        }
         return ResultUtil.success();
     }
 
@@ -1007,7 +1096,7 @@
         evaluate.setUserId(uid);
         evaluateService.insert(evaluate);
         Driver driver = driverService.selectById(order.getDriverId());
-        driver.setScore((driver.getScore() + score) / 2);
+        driver.setScore(((null == driver.getScore() ? 0 : driver.getScore()) + score) / 2);
         if(score == 5){//司机积分奖励
             SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
             if(null != systemConfig){
@@ -1306,6 +1395,7 @@
         accountChangeDetail.setUserId(driver.getId());
         accountChangeDetail.setType(1);
         accountChangeDetail.setChangeType(1);
+        accountChangeDetail.setOrderId(order.getId());
         accountChangeDetail.setOldData(driver.getBalance() + driver.getCouponBalance());
         accountChangeDetail.setExplain("订单收入");
         accountChangeDetail.setCreateTime(new Date());
@@ -1317,4 +1407,32 @@
         driverService.updateById(driver);
         accountChangeDetailService.saveData(accountChangeDetail);
     }
+
+
+    /**
+     * 获取乘客行程
+     * @param uid
+     * @param pageNum
+     * @param pageSize
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<OrderListWarpper> queryMyOrder(Integer uid, Integer pageNum, Integer pageSize) throws Exception {
+        pageNum = (pageNum - 1) * pageSize;
+        return this.baseMapper.queryMyOrder(uid, pageNum, pageSize);
+    }
+
+
+    /**
+     * 获取未开票订单
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<OrderListWarpper> queryNotInvoiceOrder(Integer uid, NotInvoiceOrder notInvoiceOrder) throws Exception {
+        notInvoiceOrder.setPageNum((notInvoiceOrder.getPageNum() - 1) * notInvoiceOrder.getPageSize());;
+        return this.baseMapper.queryNotInvoiceOrder(uid, notInvoiceOrder);
+    }
 }

--
Gitblit v1.7.1