puzhibing
2023-06-16 7a9e05846c5e37f7278f242857056d0623532379
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -145,7 +145,9 @@
                    .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);
        Order order1 = new Order();
        order1.setCreateTime(new Date());
        Order order = getOrderPrice(1, d, 0D, order1, city);
        Double estimatedPrice = order.getEstimatedPrice();
        Coupon coupon = userToCouponService.queryCoupon(uid, estimatedPrice);
        if(null != coupon){
@@ -198,8 +200,9 @@
     * @param city          查询天气的城市
     * @return
     */
    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){
    public Order getOrderPrice(Integer type, Double distance, Double waitTime, Order order, String city){
        distance = new BigDecimal(distance).setScale(0, BigDecimal.ROUND_UP).doubleValue();
        waitTime = new BigDecimal(waitTime).setScale(0, BigDecimal.ROUND_UP).doubleValue();
        order = getOrderInitialPrice(order);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
        if(null == systemConfig){
@@ -214,7 +217,7 @@
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
        JSONObject extraCost = jsonObject.getJSONObject("ExtraCost");
        Date date = new Date();
        Date date = order.getCreateTime();
        for (int i = 0; i < chargeStandard.size(); i++) {//计算各个时段
            JSONObject jsonObject1 = chargeStandard.getJSONObject(i);
            String num1 = jsonObject1.getString("num1");
@@ -291,9 +294,9 @@
        }
        //计算额外费用
        Integer num1 = extraCost.getInteger("num1");//等待时长
        Double num1 = extraCost.getDouble("num1");//等待时长
        Double num2 = extraCost.getDouble("num2");//等待费
        Integer num3 = extraCost.getInteger("num3");//等待超出时长
        Double num3 = extraCost.getDouble("num3");//等待超出时长
        Double num4 = extraCost.getDouble("num4");//等到超出时长费用单价 X/分钟
        Double num5 = extraCost.getDouble("num5");//恶劣天气公里
        Double num6 = extraCost.getDouble("num6");//恶劣天气费
@@ -306,7 +309,7 @@
            order.setWaitTime(num1);//等待时长
            order.setWaitTimePrice(num2);//等待费用
            Integer w = waitTime - num3;
            Double w = waitTime - num3;
            BigDecimal multiply = new BigDecimal(w).multiply(new BigDecimal(num4));
            order.setOutWaitTime(w);//等待时长超出分钟
            order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用
@@ -375,7 +378,7 @@
        order.setOverLongDistancePrice(0d);//超出长途里程费
//        order.setWaitTime(0);//等待时长
        order.setWaitTimePrice(0D);//等待费
        order.setOutWaitTime(0);//超出等待时长
        order.setOutWaitTime(0D);//超出等待时长
        order.setOutWaitTimePrice(0D);//超出等待时长费
        order.setBadWeatherDistance(0D);//恶劣天气里程
        order.setBadWeatherPrice(0D);//恶劣天气里程费
@@ -449,7 +452,8 @@
                    .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);
        order.setCreateTime(new Date());
        order = getOrderPrice(1, d, 0D, order, city);
        if(null != travelOrder.getDriverId()){
            DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", travelOrder.getDriverId()).eq("status", 1));
            if(null == driverWork){
@@ -500,6 +504,14 @@
     */
    public void pushOrder(Long orderId){
        try {
            Order order = this.selectById(orderId);
            /**
             * 1.先找最大推单范围内的优推司机 -》 距离最近
             * 没有1 - 》
             *      2.按照后台推送配置在范围内查找合适司机
             *        合适司:积分 > 评分 > 距离
             *      3.司机没有接单直接将订单置入大厅
             */
            boolean lock = redisUtil.lock(5);
            if(!lock){
                int num1 = 1;
@@ -513,14 +525,12 @@
                    }
                }
            }
            Order order = this.selectById(orderId);
            /**
             * 1.先找最大推单范围内的优推司机 -》 距离最近
             * 没有1 - 》
             *      2.按照后台推送配置在范围内查找合适司机
             *        合适司:积分 > 评分 > 距离
             *      3.司机没有接单直接将订单置入大厅
             */
            if(!lock){
                order.setHallOrder(1);
                this.updateById(order);
                ExtraPushOrder(order);
                redisUtil.unlock();
            }
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
            if(null == systemConfig){
                redisUtil.unlock();
@@ -658,13 +668,13 @@
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        driver1.setServerStatus(1);
                        driverService.updateById(driver1);
                        Order order1 = OrderServiceImpl.this.selectById(order.getId());
                        if(order1.getState() == 101 || order1.getState() == 201){
                            order1.setHallOrder(1);
                            OrderServiceImpl.this.updateById(order1);
                            driver1.setServerStatus(1);
                            driverService.updateById(driver1);
                            ExtraPushOrder(order);
                        }
                    }
@@ -825,7 +835,7 @@
        }
        Order order1 = new Order();
        BeanUtils.copyProperties(order, order1);
        Order orderPrice = getOrderPrice(1, d, 0, order1, city);
        Order orderPrice = getOrderPrice(1, d, 0D, order1, city);
        order.setEstimatedPrice(orderPrice.getEstimatedPrice());
        this.updateById(order);
@@ -1478,8 +1488,8 @@
                SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 2));
                if(null != systemConfig1){
                    JSONObject jsonObject1 = JSON.parseObject(systemConfig1.getContent());
                    //司机推荐首单收入
                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
                    //司机推荐用户收入
                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2){
                        Double num1 = jsonObject1.getDouble("num1");
                        num1 = (num3 >= num1 ? num1 : num3);
@@ -1492,7 +1502,7 @@
                            accountChangeDetail.setType(1);
                            accountChangeDetail.setChangeType(5);
                            accountChangeDetail.setOldData(driver1.getCouponBalance() + driver1.getCommission());
                            accountChangeDetail.setExplain("邀请用户首单奖励");
                            accountChangeDetail.setExplain("邀请用户奖励");
                            accountChangeDetail.setCreateTime(new Date());
                            driver1.setCommission(driver1.getCommission() + num1);
                            accountChangeDetail.setNewData(driver1.getCouponBalance() + driver1.getCommission());