Pu Zhibing
1 天以前 bf174ea0bf750cf0818bc7b3472cbdc7485fdf18
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -5,22 +5,25 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.supersavedriving.driver.core.util.ToolUtil;
import com.supersavedriving.driver.modular.system.dao.OrderMapper;
import com.supersavedriving.driver.modular.system.model.*;
import com.supersavedriving.driver.modular.system.service.*;
import com.supersavedriving.driver.modular.system.util.*;
import com.supersavedriving.driver.modular.system.util.GaoDe.MapUtil;
import com.supersavedriving.driver.modular.system.util.GaoDe.model.District;
import com.supersavedriving.driver.modular.system.util.MallBook.model.*;
import com.supersavedriving.driver.modular.system.util.MallBook.util.TrhRequest;
import com.supersavedriving.driver.modular.system.util.mongodb.model.Location;
import com.supersavedriving.driver.modular.system.util.qianyuntong.EmployeeUtil;
import com.supersavedriving.driver.modular.system.util.qianyuntong.OrderUtil;
import com.supersavedriving.driver.modular.system.util.qianyuntong.model.AddAccountInfoRequest;
import com.supersavedriving.driver.modular.system.util.qianyuntong.model.CreateTravelItineraryRequest;
import com.supersavedriving.driver.modular.system.util.qianyuntong.model.ModifyTravelItineraryRequest;
import com.supersavedriving.driver.modular.system.util.zhenglian.ZhengLianUtil;
import com.supersavedriving.driver.modular.system.util.zhenglian.model.TradeTerminalInfo;
import com.supersavedriving.driver.modular.system.util.zhenglian.model.ZLUserInfo;
import com.supersavedriving.driver.modular.system.warpper.*;
import com.supersavedriving.driver.core.util.ToolUtil;
import com.supersavedriving.driver.modular.system.util.GaoDe.model.District;
import com.supersavedriving.driver.modular.system.util.juhe.WeatherUtil;
import com.supersavedriving.driver.modular.system.util.PushUtil;
import com.supersavedriving.driver.modular.system.warpper.AddOrderWarpper;
import com.supersavedriving.driver.modular.system.warpper.HallOrderList;
import com.supersavedriving.driver.modular.system.warpper.OrderInfoWarpper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@@ -37,6 +40,8 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -246,9 +251,23 @@
            order.setState(null == order.getDriverId() ? 101 : 102);
        }
        order.setStatus(1);
        this.insert(order);
        driverService.updateById(driver);
        if(null != appUser && null != order.getDriverId()){
            BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId());
            //调三方订单中心创建行程单
            CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
            request.setOrderNo("DJ" + order.getId());
            request.setCustomerId(appUser.getOnconUUID());
            request.setDriverId(driver.getEmpId().toString());
            request.setSupplierShopId(branchOffice.getEnterCode());
            request.setServiceType(5);
            String travelItinerary = OrderUtil.createTravelItinerary(request);
            order.setTravelId(travelItinerary);
            this.updateById(order);
        }
        //推送状态
        if(null != order.getDriverId()){
            //推动订单数据
@@ -548,7 +567,7 @@
                        .eq("state", 2).last(" and surplusQuantity > 0 and now() < endTime and now() < failureTime"));
                Double d = null;
                for (YouTuiDriver youTuiDriver : youTuiDrivers) {
                    String value = redisUtil.getValue("DRIVER" + youTuiDriver.getDriverId());
                    String value = redisUtil.getValue("daijia:DRIVER" + youTuiDriver.getDriverId());
                    if(ToolUtil.isEmpty(value)){
                        continue;
                    }
@@ -602,7 +621,7 @@
                        Double score = null;//评分
                        Double d = null;
                        for (Driver driver1 : drivers) {
                            String value = redisUtil.getValue("DRIVER" + driver1.getId());
                            String value = redisUtil.getValue("daijia:DRIVER" + driver1.getId());
                            if(ToolUtil.isEmpty(value)){
                                continue;
                            }
@@ -729,7 +748,7 @@
            return;
        }
        for (Driver driver1 : drivers) {
            String value = redisUtil.getValue("DRIVER" + driver1.getId());
            String value = redisUtil.getValue("daijia:DRIVER" + driver1.getId());
            if (ToolUtil.isEmpty(value)) {
                continue;
            }
@@ -751,8 +770,45 @@
     */
    @Override
    public List<HallOrderList> queryOrderHall(Integer uid, Integer pageNum, Integer pageSize) throws Exception {
        Driver driver = driverService.selectById(uid);
        //获取证联数据
        if(null == driver.getCustId() || 0 == driver.getAccOpenFlag()){
            TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo();
            tradeTerminalInfo.setTerminal("1");
            InetAddress inetAddress = InetAddress.getLocalHost();
            String ip = inetAddress.getHostAddress();
            tradeTerminalInfo.setIp(ip);
            NetworkInterface networkInterface = NetworkInterface.getByInetAddress(inetAddress);
            byte[] mac = networkInterface.getHardwareAddress();
            StringBuilder macAddress = new StringBuilder();
            for (int i = 0; i < mac.length; i++) {
                macAddress.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
            }
            tradeTerminalInfo.setMac(macAddress.toString());
            ZLUserInfo userInfo = ZhengLianUtil.getUserInfo(driver.getEmpId().toString(), tradeTerminalInfo);
            if(null != userInfo){
                driver.setCustId(userInfo.getCustId());
                driver.setAccOpenFlag(userInfo.getAccOpenFlag());
                driverService.updateById(driver);
            }
        }
        //同步到中台
        if(null != driver.getAccOpenFlag() && 1 == driver.getAccOpenFlag() && 0 == driver.getIsSynchronous()){
            AddAccountInfoRequest request = new AddAccountInfoRequest();
            request.setCustId(driver.getCustId());
            request.setAccountNo(driver.getEmpId().toString());
            request.setAccountName(driver.getName());
            request.setMobile(driver.getPhone());
            Integer status = EmployeeUtil.addAccountInfo(request);
            if(0 == status){
                driver.setIsSynchronous(1);
                driverService.updateById(driver);
            }
        }
        pageNum = (pageNum - 1) * pageSize;
        String value = redisUtil.getValue("DRIVER" + uid);
        String value = redisUtil.getValue("daijia:DRIVER" + uid);
        List<HallOrderList> hallOrderLists = this.baseMapper.queryOrderHall(pageNum, pageSize);
        List<HallOrderList> lists = new ArrayList<>();
        hallOrderLists.forEach(hallOrderList -> {
@@ -894,6 +950,7 @@
            order.setState(102);
            order.setOrderTakingTime(new Date());
            this.updateById(order);
            redisUtil.unlock(orderId.toString());
            if(null != order.getUserId()){
@@ -901,6 +958,27 @@
                appUser.setCancelCount(0);
                appUser.setIsException(1);
                appUserService.updateById(appUser);
                BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId());
                if(null == order.getTravelId()){
                    //调三方订单中心创建行程单
                    CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
                    request.setOrderNo("DJ" + order.getId());
                    request.setCustomerId(appUser.getOnconUUID());
                    request.setDriverId(driver.getEmpId().toString());
                    request.setSupplierShopId(branchOffice.getEnterCode());
                    request.setServiceType(5);
                    String travelItinerary = OrderUtil.createTravelItinerary(request);
                    order.setTravelId(travelItinerary);
                    this.updateById(order);
                }else{
                    //中台修改订单状态
                    ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
                    request.setOrderId(order.getTravelId());
                    request.setStatus(getState(order.getState()));
                    request.setDriverId(driver.getEmpId().toString());
                    request.setSupplierShopId(branchOffice.getEnterCode());
                    OrderUtil.modifyTravelItinerary(request);
                }
            }
            driver.setServerStatus(2);
@@ -990,7 +1068,7 @@
        if(ToolUtil.isEmpty(orderInfoWarpper.getAvatar())){
            orderInfoWarpper.setAvatar("https://csxdj.obs.cn-south-1.myhuaweicloud.com:443/66cc269703a84e4da87fb21e2c21ab1f.png");
        }
        String value = redisUtil.getValue("DRIVER" + uid);
        String value = redisUtil.getValue("daijia:DRIVER" + uid);
        orderInfoWarpper.setPickUpTime(0);
        if(ToolUtil.isNotEmpty(value)){
            Map<String, Double> distance = GeodesyUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value);
@@ -999,6 +1077,17 @@
            Map<String, String> distance1 = MapUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value, 0);
            orderInfoWarpper.setPickUpTime(Integer.valueOf(distance1.get("duration")) / 60);
        }
        Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1);
        if(null != distance){
            Double d = Double.valueOf(distance.get("distance")) / 1000;
            orderInfoWarpper.setEstimatedMileage(d);
            orderInfoWarpper.setEstimatedTime(Double.valueOf(Integer.valueOf(distance.get("duration")) / 60));
            Driver driver = driverService.selectById(uid);
            Order orderPrice = getOrderPrice(1, d, 0, order, "", driver.getBranchOfficeId());
            orderInfoWarpper.setEstimatedPrice(orderPrice.getEstimatedPrice());
        }
        orderInfoWarpper.setDriverId(order.getDriverId());
        return orderInfoWarpper;
    }
@@ -1122,6 +1211,18 @@
        }
        this.updateAllColumnById(order);
        if(null != order.getTravelId()){
            Driver driver = driverService.selectById(order.getDriverId());
            //中台修改订单状态
            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
            request.setOrderId(order.getTravelId());
            request.setStatus(getState(order.getState()));
            BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId());
            request.setDriverId(driver.getEmpId().toString());
            request.setSupplierShopId(branchOffice.getEnterCode());
            OrderUtil.modifyTravelItinerary(request);
        }
        //推送订单状态
        pushUtil.pushOrderStatus(order.getDriverId(), 2, order.getId(), order.getState());
        if(null != order.getUserId()){
@@ -1168,7 +1269,8 @@
                        .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
                city = null != weatherCity ? weatherCity.getId().toString() : "";
            }
            boolean badWeather = WeatherUtil.isBadWeather(city);
//            boolean badWeather = WeatherUtil.isBadWeather(city);
            boolean badWeather = false;
            if(badWeather){
                Integer num8 = JSON.parseObject(systemConfig.getContent()).getInteger("num8");
                if(num8 > 0){
@@ -1203,7 +1305,7 @@
            return;
        }
        Integer driverId = order.getDriverId();
        String value = redisUtil.getValue("DRIVER" + driverId);
        String value = redisUtil.getValue("daijia:DRIVER" + driverId);
        if(order.getState() == 106 || order.getState() == 301){
            redisUtil.delSetValue("orderService", orderId.toString());
            return;
@@ -1250,7 +1352,7 @@
            return;
        }
        Integer driverId = order.getDriverId();
        String value = redisUtil.getValue("DRIVER" + driverId);
        String value = redisUtil.getValue("daijia:DRIVER" + driverId);
        if(order.getState() == 108 || order.getState() == 111){
            redisUtil.delSetValue("orderService_check", orderId.toString());
            return;
@@ -1323,6 +1425,17 @@
        }
        this.updateById(order);
        if(null != order.getTravelId()){
            //中台修改订单状态
            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
            request.setOrderId(order.getTravelId());
            request.setStatus(getState(order.getState()));
            BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId());
            request.setDriverId(driver.getEmpId().toString());
            request.setSupplierShopId(branchOffice.getEnterCode());
            OrderUtil.modifyTravelItinerary(request);
        }
        orderTransfer.setOrderId(orderId);
        orderTransfer.setOldDriverId(order.getDriverId());
@@ -1349,6 +1462,35 @@
        }
        return ResultUtil.success();
    }
    private Integer getState(Integer state){
        switch (state){
            case 101://待接单
                return 1;
            case 102://已接单
                return 2;
            case 103://前往预约点
                return 3;
            case 104://到达预约点
                return 4;
            case 105://开始服务
                return 5;
            case 106://到达目的地
                return 6;
            case 107://待支付
                return 7;
            case 108://待评价
                return 8;
            case 109://已完成
                return 9;
            case 201://转单中
                return 11;
            case 301://已取消
                return 10;
        }
        return null;
    }
@@ -1419,6 +1561,18 @@
        order.setState(order.getOldState());
        order.setOldState(null);
        this.updateAllColumnById(order);
        Driver driver = driverService.selectById(order.getDriverId());
        if(null != order.getTravelId()){
            //中台修改订单状态
            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
            request.setOrderId(order.getTravelId());
            request.setStatus(getState(order.getState()));
            BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId());
            request.setDriverId(driver.getEmpId().toString());
            request.setSupplierShopId(branchOffice.getEnterCode());
            OrderUtil.modifyTravelItinerary(request);
        }
        OrderTransfer orderTransfer = orderTransferService.selectOne(new EntityWrapper<OrderTransfer>().eq("orderId", orderId)
                .eq("status", 1).isNull("successTime").orderBy("createTime desc limit 0, 1"));
@@ -1453,6 +1607,20 @@
        order.setState(301);
        this.updateById(order);
        Driver driver = driverService.selectById(order.getDriverId());
        if(null != order.getTravelId()){
            //中台修改订单状态
            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
            request.setOrderId(order.getTravelId());
            request.setStatus(getState(order.getState()));
            BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId());
            request.setDriverId(driver.getEmpId().toString());
            request.setSupplierShopId(branchOffice.getEnterCode());
            OrderUtil.modifyTravelItinerary(request);
        }
        redisUtil.delSetValue("orderService", orderId.toString());
        CancelOrder cancelOrder = new CancelOrder();
@@ -1463,7 +1631,6 @@
        cancelOrder.setStatus(1);
        cancelOrder.setCreateTime(new Date());
        cancelOrderService.insert(cancelOrder);
        Driver driver = driverService.selectById(order.getDriverId());
        if(null != driver){
            driver.setServerStatus(1);
            driverService.updateById(driver);
@@ -1538,22 +1705,22 @@
    public ResultUtil setOrderStatus(Integer uid, Long orderId, Integer payType, Integer state) throws Exception {
        try {
            boolean lock = redisUtil.lock(orderId + "",5);
            if(!lock){
                int num1 = 1;
                while (num1 <= 10){
                    Thread.sleep(3000);//等待3秒
                    lock = redisUtil.lock(orderId + "",5);
                    if(lock){
                        break;
                    }else{
                        num1++;
                    }
                }
            }
            if(!lock){
                redisUtil.unlock(orderId + "");
                return ResultUtil.error("请稍后重试");
            }
//            if(!lock){
//                int num1 = 1;
//                while (num1 <= 10){
//                    Thread.sleep(3000);//等待3秒
//                    lock = redisUtil.lock(orderId + "",5);
//                    if(lock){
//                        break;
//                    }else{
//                        num1++;
//                    }
//                }
//            }
//            if(!lock){
//                redisUtil.unlock(orderId + "");
//                return ResultUtil.error("请稍后重试");
//            }
            Order order = this.selectById(orderId);
            if(state == 107 && order.getState() != 106){
@@ -1562,7 +1729,7 @@
            }
            if(state == 108 && order.getState() != 107){
                redisUtil.unlock(orderId + "");
                return ResultUtil.error("操作失败,请刷新数据");
//                return ResultUtil.error("操作失败,请刷新数据");
            }
            order.setState(state);
@@ -1571,13 +1738,14 @@
                order.setPayType(3);
            }
            Driver driver = driverService.selectById(order.getDriverId());
            if(payType == 2 && state == 108){
                order.setPayTime(new Date());
                if(null != order.getCouponId()){
                    UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
                    Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
                    Driver driver = driverService.selectById(order.getDriverId());
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
                    accountChangeDetail.setUserType(2);
@@ -1635,9 +1803,19 @@
            }
            this.updateById(order);
            if(null != order.getTravelId()){
                //中台修改订单状态
                ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
                request.setOrderId(order.getTravelId());
                request.setStatus(getState(order.getState()));
                BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId());
                request.setDriverId(driver.getEmpId().toString());
                request.setSupplierShopId(branchOffice.getEnterCode());
                OrderUtil.modifyTravelItinerary(request);
            }
            if((payType == 1 && state == 107) || (payType == 2 && state == 108)){
                //修改司机状态和积分
                Driver driver = driverService.selectById(order.getDriverId());
                driver.setServerStatus(1);
                driverService.updateById(driver);
            }