puzhibing
2023-06-12 d4f8078c2a062864dab885d6bd54fbe1195f85e2
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -195,10 +195,10 @@
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        order.setCreateTime(new Date());
        order = getOrderPrice(1, d, 0, order, city);
        order.setState(null == order.getDriverId() ? 101 : 102);
        order.setStatus(1);
        order.setCreateTime(new Date());
        this.insert(order);
        driverService.updateById(driver);
        //推送状态
@@ -242,7 +242,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();
        boolean b = true;
        for (int i = 1; i < chargeStandard.size(); i++) {//各种时间段
@@ -257,18 +257,28 @@
            Double num8 = jsonObject1.getDouble("num8");//超过num8每num10公里收取num11
            String[] split = num1.split(":");
            Integer hour1 = Integer.valueOf(split[0]);
            Calendar s = Calendar.getInstance();
            s.setTime(date);
            s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
            s.set(Calendar.HOUR_OF_DAY, hour1);
            s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
            s.set(Calendar.SECOND, 0);
            split = num2.split(":");
            Integer hour2 = Integer.valueOf(split[0]);
            Calendar e = Calendar.getInstance();
            e.setTime(date);
            e.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
            e.set(Calendar.HOUR_OF_DAY, hour2);
            e.set(Calendar.MINUTE, Integer.valueOf(split[1]));
            e.set(Calendar.SECOND, 0);
            if(hour1 > hour2){
                if(s.getTimeInMillis() > date.getTime()){
                    s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
                }else{
                    e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
                }
            }
            if(date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
                b = false;
@@ -296,8 +306,8 @@
                    }
                    //计算长途里程超出的部分
                    if(distance.compareTo(num5) > 0){
                        BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5));
                        BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), new MathContext(2, RoundingMode.HALF_EVEN));
                        BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5)).setScale(2, BigDecimal.ROUND_HALF_EVEN);
                        BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), 2, BigDecimal.ROUND_HALF_EVEN);
                        BigDecimal multiply1 = divide1.multiply(new BigDecimal(num8));
                        order.setOverLongDistance(subtract1.doubleValue());//超出长途里程
                        order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费
@@ -340,8 +350,8 @@
                }
                //计算长途里程超出的部分
                if(distance.compareTo(num5) > 0){
                    BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5));
                    BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), new MathContext(2, RoundingMode.HALF_EVEN));
                    BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5)).setScale(2, BigDecimal.ROUND_HALF_EVEN);
                    BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), 2, BigDecimal.ROUND_HALF_EVEN);
                    BigDecimal multiply1 = divide1.multiply(new BigDecimal(num8));
                    order.setOverLongDistance(subtract1.doubleValue());//超出长途里程
                    order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费
@@ -494,6 +504,10 @@
                if(ToolUtil.isEmpty(value)){
                    continue;
                }
                DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", youTuiDriver.getDriverId()).eq("status", 1));
                if(null == driverWork){
                    continue;
                }
                Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
                Double wgs84 = distance.get("WGS84");
                if(d == null || d.compareTo(wgs84) > 0){
@@ -535,6 +549,10 @@
                    Double score = null;
                    Double d = null;
                    for (Driver driver1 : drivers) {
                        DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver1.getId()).eq("status", 1));
                        if(null == driverWork){
                            continue;
                        }
                        if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
                            integral = driver1.getIntegral();
                            score = driver1.getScore();
@@ -942,6 +960,8 @@
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(order.getDriverId());
                accountChangeDetail.setType(2);
                accountChangeDetail.setChangeType(5);
                accountChangeDetail.setOrderId(order.getId());
                accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
                driver.setIntegral(driver.getIntegral() + num5);
                accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
@@ -949,52 +969,35 @@
                accountChangeDetailService.saveData(accountChangeDetail);
            }
            //恶劣天气完成订单奖励
            Integer num8 = JSON.parseObject(systemConfig.getContent()).getInteger("num8");
            if(num8 > 0){
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(order.getDriverId());
                accountChangeDetail.setType(2);
                accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
                driver.setIntegral(driver.getIntegral() + num8);
                accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
                accountChangeDetail.setExplain("恶劣天气完成订单奖励");
                accountChangeDetailService.saveData(accountChangeDetail);
            String city = "";
            District geocode = MapUtil.geocode(order.getStartLng(), order.getStartLat());
            if(null != geocode){
                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() : "";
            }
            boolean badWeather = WeatherUtil.isBadWeather(city);
            if(badWeather){
                Integer num8 = JSON.parseObject(systemConfig.getContent()).getInteger("num8");
                if(num8 > 0){
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                    accountChangeDetail.setUserType(2);
                    accountChangeDetail.setUserId(order.getDriverId());
                    accountChangeDetail.setType(2);
                    accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
                    driver.setIntegral(driver.getIntegral() + num8);
                    accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
                    accountChangeDetail.setExplain("恶劣天气完成订单奖励");
                    accountChangeDetailService.saveData(accountChangeDetail);
                }
            }
            driverService.updateById(driver);
            if(null == order.getUserId()){
                return;
            }
            //推荐用户首单完成奖励
            Integer num4 = JSON.parseObject(systemConfig.getContent()).getInteger("num4");
            if(num4 > 0){
                List<Integer> state = Arrays.asList(105);
                int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state));
                if(count > 1){
                    return;
                }
                AppUser appUser = appUserService.selectById(order.getUserId());
                if(null != appUser && null != appUser.getInviterType()){
                    if(appUser.getInviterType() == 1){
                        return;
                    }
                    Driver driver1 = driverService.selectById(appUser.getInviterId());
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                    accountChangeDetail.setUserType(2);
                    accountChangeDetail.setUserId(driver1.getId());
                    accountChangeDetail.setType(2);
                    accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
                    driver1.setIntegral(driver1.getIntegral() + num4);
                    accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
                    accountChangeDetail.setExplain("推荐用户完成首单奖励");
                    accountChangeDetailService.saveData(accountChangeDetail);
                    driverService.updateById(driver1);
                }
            }
        }
    }
@@ -1292,7 +1295,7 @@
        }
        this.updateById(order);
        if(state == 108){//计算抽成
        if(payType == 2 && state == 108){//计算抽成
            saveRevenue(order);
        }
@@ -1316,6 +1319,33 @@
        //司机分佣和司机推荐用户首单奖励都在平台的抽佣中扣除,剩余的为平台抽佣。
        Driver driver = driverService.selectById(order.getDriverId());
        AppUser appUser = appUserService.selectById(order.getUserId());
        //司机推荐首单收入
        List<Integer> state = Arrays.asList(108, 109);
        int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state));
        if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
            Driver driver1 = driverService.selectById(appUser.getInviterId());
            //首单积分奖励
            SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
            JSONObject jsonObject2 = JSON.parseObject(systemConfig1.getContent());
            Integer num4 = jsonObject2.getInteger("num4");
            AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
            accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
            accountChangeDetail.setUserType(2);
            accountChangeDetail.setUserId(driver1.getId());
            accountChangeDetail.setType(2);
            accountChangeDetail.setChangeType(5);
            accountChangeDetail.setOrderId(order.getId());
            accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
            accountChangeDetail.setExplain("邀请用户首单积分奖励");
            accountChangeDetail.setCreateTime(new Date());
            driver1.setIntegral(driver1.getIntegral() + num4);
            accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
            accountChangeDetailService.insert(accountChangeDetail);
            driverService.updateById(driver1);
        }
        Double payMoney = order.getPayMoney();
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 3));
        Double n = 0D;
@@ -1519,6 +1549,7 @@
        }
        //司机余额扣减抽佣金额
        if(n > 0){
            driver = driverService.selectById(order.getDriverId());
            AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
            accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
            accountChangeDetail.setUserType(2);
@@ -1632,6 +1663,10 @@
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
            if(i == performanceRankingWarppers.size() - 1){
                position = 0;
                d = 0D;
            }
        }
        MyAchievementWarpper myAchievementWarpper = new MyAchievementWarpper();
        myAchievementWarpper.setType("订单");
@@ -1653,6 +1688,10 @@
            }
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
            if(i == performanceRankingWarppers.size() - 1){
                position = 0;
                d = 0D;
            }
        }
        myAchievementWarpper = new MyAchievementWarpper();
@@ -1676,6 +1715,10 @@
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
            if(i == performanceRankingWarppers.size() - 1){
                position = 0;
                d = 0D;
            }
        }
        myAchievementWarpper = new MyAchievementWarpper();
        myAchievementWarpper.setType("佣金");
@@ -1692,7 +1735,8 @@
     */
    @Override
    public void completeCollection() {
        List<Order> orders = this.selectList(new EntityWrapper<Order>().eq("state", 107).eq("status", 1).eq("payType", 3));
        List<Order> orders = this.selectList(new EntityWrapper<Order>().eq("state", 107).eq("status", 1)
                .eq("payType", 3).last(" and UNIX_TIMESTAMP(getoffTime) + 120 <= UNIX_TIMESTAMP(now())"));
        for (Order order : orders) {
            order.setState(108);
            order.setPayTime(new Date());