From 7da4caa40befd523033b8a1d01246ae468674680 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 12 九月 2022 08:57:59 +0800
Subject: [PATCH] 更新用户端接口

---
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |  150 ++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 108 insertions(+), 42 deletions(-)

diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 5e4af87..70242da 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -17,6 +17,9 @@
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
 import com.stylefeng.guns.modular.system.util.*;
+import com.stylefeng.guns.modular.system.util.GoogleMap.DistancematrixVo;
+import com.stylefeng.guns.modular.system.util.GoogleMap.GoogleMapUtil;
+import com.stylefeng.guns.modular.system.util.GoogleMap.ReverseGeocodeVo;
 import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
 import com.stylefeng.guns.modular.system.warpper.EndPushWarpper;
 import com.stylefeng.guns.modular.system.warpper.OrderInfoWarpper;
@@ -253,8 +256,9 @@
         orderPrivateCar.setOrderNum(this.getOrderNum());
         orderPrivateCar.setPlacementLon(Double.valueOf(placementLon));
         orderPrivateCar.setPlacementLat(Double.valueOf(placementLat));
-        Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat);
-        orderPrivateCar.setPlacementAddress(geocode.get("address"));
+
+        ReverseGeocodeVo reverseGeocode = GoogleMapUtil.getReverseGeocode(Double.valueOf(placementLat), Double.valueOf(placementLon));
+        orderPrivateCar.setPlacementAddress(reverseGeocode.getAddress());
         orderPrivateCar.setStartLon(Double.valueOf(startLon));
         orderPrivateCar.setStartLat(Double.valueOf(startLat));
         orderPrivateCar.setStartAddress(startAddress);
@@ -312,18 +316,18 @@
             orderPrivateCar.setSnatchOrderTime(new Date());
 
             //调用高德创建轨迹
-            String s = gdFalconUtil.selectTerminal(driver.getPhone());
-            String track = gdFalconUtil.createTrack(s);
-            orderPrivateCar.setTrackId(track);
+//            String s = gdFalconUtil.selectTerminal(driver.getPhone());
+//            String track = gdFalconUtil.createTrack(s);
+//            orderPrivateCar.setTrackId(track);
 
             //调用移动的小号接口
            /* Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
             Region region = regionMapper.query(geocode1.get("districtCode"));*/
-            Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), null);
-            if(String.valueOf(map.get("code")).equals("200")){
-                orderPrivateCar.setTelX(map.get("telX"));
-                orderPrivateCar.setBindId(map.get("bindId"));
-            }
+//            Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), null);
+//            if(String.valueOf(map.get("code")).equals("200")){
+//                orderPrivateCar.setTelX(map.get("telX"));
+//                orderPrivateCar.setBindId(map.get("bindId"));
+//            }
 
             driver.setState(3);
             driverService.updateById(driver);
@@ -361,19 +365,17 @@
                         List<Driver> ds = new ArrayList<>();//存储直线距离最近的几个司机
                         for(int i = 0; i < assignOrder.getPeople(); i++){
                             Driver driver = null;
-                            int m = 0;
+                            long m = 0;
                             int index = 0;
                             for(int j = 0; j < drivers.size(); j++){
                                 String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId());
                                 if(null != value){
-//                                Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 0);//计算距离
-//                                Integer d = Integer.valueOf(distance1.get("distance"));
                                     String[] split = value.split(",");
-                                    double distance = GDMapGeocodingUtil.getDistance(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0]));
-                                    int d = Double.valueOf(distance).intValue();
-                                    if((0 == m && null == driver) || (d < m)){
+                                    DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0]));
+                                    Long distance = distancematrix.getDistance();
+                                    if((0 == m && null == driver) || (distance < m)){
                                         driver = drivers.get(j);
-                                        m = d;
+                                        m = distance;
                                         index = j;
                                     }
                                 }
@@ -383,12 +385,13 @@
                         }
 
                         //再根据直线距离最短的司机中找出行驶距离最短的司机
-                        Integer m = 0;
+                        Long m = 0L;
                         for(Driver driver : ds){
                             String value = redisUtil.getValue("DRIVER" + driver.getId());
                             if(null != value){
-                                Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1);//计算距离
-                                Integer d = Integer.valueOf(distance1.get("distance"));
+                                String[] split = value.split(",");
+                                DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0]));
+                                Long d = distancematrix.getDistance();
                                 if((0 == m && null == dr) || (d.intValue() < m.intValue())){
                                     dr = driver;
                                     m = d;
@@ -409,25 +412,23 @@
                     orderPrivateCar.setSnatchOrderTime(new Date());
 
                     //调用高德创建轨迹
-                    String s = gdFalconUtil.selectTerminal(dr.getPhone());
-                    String track = gdFalconUtil.createTrack(s);
-                    orderPrivateCar.setTrackId(track);
+//                    String s = gdFalconUtil.selectTerminal(dr.getPhone());
+//                    String track = gdFalconUtil.createTrack(s);
+//                    orderPrivateCar.setTrackId(track);
 
                     //调用移动的小号接口
                /* Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
                 Region region = regionMapper.query(geocode1.get("districtCode"));*/
-                    Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), dr.getPhone(), null);
-                    if(String.valueOf(map.get("code")).equals("200")){
-                        orderPrivateCar.setTelX(map.get("telX"));
-                        orderPrivateCar.setBindId(map.get("bindId"));
-                    }
+//                    Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), dr.getPhone(), null);
+//                    if(String.valueOf(map.get("code")).equals("200")){
+//                        orderPrivateCar.setTelX(map.get("telX"));
+//                        orderPrivateCar.setBindId(map.get("bindId"));
+//                    }
 
                     dr.setState(3);
                     driverService.updateById(dr);
                     this.updateById(orderPrivateCar);
 
-                    //发送短信给司机
-                    aLiSendSms.sendSms(dr.getPhone(), "SMS_216832951", "{\"" + orderPrivateCar.getStartAddress() + "\"}");
                     new Thread(new Runnable() {
                         @Override
                         public void run() {
@@ -891,7 +892,7 @@
 
         }
 
-        if(payType == 1){//微信支付
+        if(payType == 1){//手机支付
             //Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",1", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, userInfo.getAppletsOpenId());
             resultUtil =  payMoneyUtil.weixinpay("完成订单",orderId +"",orderId + "_1_fei",orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
 
@@ -903,7 +904,7 @@
             }
 
         }
-        if(payType == 2) {//支付宝支付
+        if(payType == 2) {//银行卡支付
             resultUtil =  payMoneyUtil.alipay("完成订单","完成订单",orderId + "_1_fei",orderMoney+"","/base/aliPayOrderTaxi");
             //Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",1", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null);
             if (resultUtil.getCode()==200) {
@@ -978,6 +979,69 @@
             }).start();
 
             systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1);
+        }
+
+
+        if(payType == 4){//现金支付
+            SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
+            userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
+
+            //添加交易明细
+            transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 1, orderId);
+            userInfoService.updateById(userInfo);
+
+            orderPrivateCar.setState(8);
+            orderPrivateCar.setPayType(4);
+            orderPrivateCar.setDriverPay(1);
+            orderPrivateCar.setPayMoney(orderMoney);
+            orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue());
+
+            //处理优惠券和红包
+            if(null != userCouponRecord){
+                userCouponRecord.setState(2);
+                userCouponRecord.setEndTime(new Date());
+                userCouponRecordService.updateById(userCouponRecord);
+            }
+            if(null != query){
+                query.setState(2);
+                query.setEndTime(new Date());
+                userRedPacketRecordService.updateById(query);
+            }
+            if(orderPrivateCar.getIsplatPay()==1){
+                //添加已收入明细
+                Company company = companyService.selectById(orderPrivateCar.getCompanyId());
+                Double speMoney = company.getSpeMoney();
+                BigDecimal d = null;//企业收入
+                BigDecimal c = null;//司机收入
+                if(company.getIsSpeFixedOrProportional() == 2){//固定
+                    d = new BigDecimal(speMoney);
+                    c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机
+                }
+                if(company.getIsSpeFixedOrProportional() == 1){//比例
+                    Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney();
+                    d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
+                incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
+                incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
+                Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+                driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                driverService.updateById(driver);
+            }
+
+
+            // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+                    pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+                }
+            }).start();
+
+            systemNoticeService.addSystemNotice(1, "您已使用现金成功完成出行订单支付,谢谢使用!", uid, 1);
         }
 
         this.updateAllColumnById(orderPrivateCar);
@@ -1301,21 +1365,23 @@
             }
 
         }
-        Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1);
+        String lnt = (null != value ? value.split(",")[0] : "0.0");
+        String lat = (null != value ? value.split(",")[0] : "0.0");
+        DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(lat), Double.valueOf(lnt));
         String d = "0";
         String t = "0";
-        if(null == distance){
+        if(null == distancematrix){
             System.err.println("查询距离出错了");
         }else{
-            d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
-            t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + "";
+            d = new BigDecimal(distancematrix.getDistance()).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
+            t = new BigDecimal(distancematrix.getDuration()).divide(new BigDecimal(60)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + "";
         }
         OrderServerWarpper orderServerWarpper = new OrderServerWarpper();
         orderServerWarpper.setOrderId(orderPrivateCar.getId());
         orderServerWarpper.setOrderType(1);
         orderServerWarpper.setState(orderPrivateCar.getState());
-        orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0");
-        orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0");
+        orderServerWarpper.setLon(lnt);
+        orderServerWarpper.setLat(lat);
         orderServerWarpper.setReassignNotice(orderPrivateCar.getReassignNotice());
         if(orderPrivateCar.getState() == 2 || orderPrivateCar.getState() == 3){//前往预约地
             orderServerWarpper.setReservationMileage(d);
@@ -1326,12 +1392,12 @@
             orderServerWarpper.setLaveTime("0");
         }
         if(orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6){//服务中
-            distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
-            if(null == distance){
+            distancematrix = GoogleMapUtil.getDistancematrix(Double.valueOf(lat), Double.valueOf(lnt), orderPrivateCar.getEndLat(), orderPrivateCar.getEndLon());
+            if(null == distancematrix){
                 System.err.println("查询距离出错了");
             }else{
-                d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
-                t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + "";
+                d = new BigDecimal(distancematrix.getDistance()).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
+                t = new BigDecimal(distancematrix.getDuration()).divide(new BigDecimal(60)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + "";
             }
             orderServerWarpper.setReservationMileage("0");
             orderServerWarpper.setReservationTime("0");

--
Gitblit v1.7.1