liujie
2023-08-16 db7fa6a91b9534ac90e219b6f554c54c43c83a5a
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -114,6 +114,9 @@
    @Autowired
    private IOrderPositionService orderPositionService;
    @Autowired
    private ICompanyFundFlowService companyFundFlowService;
    @Value("${callbackPath}")
    private String callbackPath;//支付回调网关地址
@@ -247,14 +250,14 @@
     * @param city          查询天气的城市
     * @return
     */
    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city) throws Exception{
    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city) {
        order = getOrderInitialPrice(order);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
        if(null == systemConfig){
            if(type == 1){//预估金额
        if (null == systemConfig) {
            if (type == 1) {//预估金额
                order.setEstimatedPrice(0D);
            }
            if(type == 2){//订单金额
            if (type == 2) {//订单金额
                order.setOrderMoney(0D);
            }
            return order;
@@ -294,19 +297,19 @@
            e.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
            e.set(Calendar.SECOND, 0);
            if(hour1 > hour2){
                if(s.getTimeInMillis() > date.getTime()){
            if (hour1 > hour2) {
                if (s.getTimeInMillis() > date.getTime()) {
                    s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
                }else{
                } else {
                    e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
                }
            }
            if(date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
                if(num3.compareTo(distance) >= 0){//起步里程内
            if (date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()) {
                if (num3.compareTo(distance) >= 0) {//起步里程内
                    order.setStartDistance(distance);//起步里程
                    order.setStartPrice(num4);//起步价
                }else{
                } else {
                    Double distance1 = distance;//原始里程
                    order.setStartDistance(num3);//起步里程
                    order.setStartPrice(num4);//起步价
@@ -318,7 +321,7 @@
                    order.setOverDrivePrice(multiply.doubleValue());//超出起步里程费
                    //计算长途费(超出长途起始公里,费用开始按照长途规则计算。)
                    if(distance.compareTo(num7) > 0){
                    if (distance.compareTo(num7) > 0) {
                        order.setStartDistance(0D);//起步里程
                        order.setStartPrice(0D);//起步价
                        order.setOverDriveDistance(0D);//超出起步里程
@@ -328,7 +331,7 @@
                        order.setLongDistancePrice(num9);//长途费
                    }
                    //计算长途里程超出的部分
                    if(distance.compareTo(num8) > 0){
                    if (distance.compareTo(num8) > 0) {
                        order.setOverLongDistance(new BigDecimal(distance1 - num8).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//超出长途里程
                        BigDecimal divide1 = new BigDecimal(distance - num8).divide(new BigDecimal(num10), 2, BigDecimal.ROUND_HALF_EVEN);
@@ -352,7 +355,7 @@
        Double num9 = extraCost.getDouble("num9");//恶劣天气最高收取金额
        //等待费用
        if(waitTime.compareTo(num1 * 60) >= 0){
        if (waitTime.compareTo(num1 * 60) >= 0) {
            order.setWaitTime(num1 * 60);//等待时长
            order.setWaitTimePrice(num2);//等待费用
@@ -367,15 +370,15 @@
        //恶劣天气
        systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 8));
        if(null != systemConfig) {
        if (null != systemConfig) {
            JSONObject jsonObject1 = JSON.parseObject(systemConfig.getContent());
            Integer num11 = jsonObject1.getInteger("num1");//开启恶劣天气计价
            if(1 == num11){
            if (1 == num11) {
                boolean badWeather = WeatherUtil.isBadWeather(city);
                if(badWeather){
                if (badWeather) {
                    order.setBadWeatherDistance(num5);//恶劣天气公里
                    order.setBadWeatherPrice(num6);//恶劣天气费
                    if(distance.compareTo(num7) > 0){
                    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());//恶劣天气超出公里
@@ -383,37 +386,39 @@
                    }
                    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){//如果恶劣天气费大于最高金额
                    if (num9.compareTo(add) < 0) {//超出最高金额(重新调整金额)
                        if (num9.compareTo(num6) < 0) {//如果恶劣天气费大于最高金额
                            order.setBadWeatherPrice(num9);//恶劣天气费
                            order.setOverBadWeatherPrice(0D);//恶劣天气超出公里费
                        }else{
                        } else {
                            BigDecimal subtract = new BigDecimal(num9).subtract(new BigDecimal(add));
                            order.setOverBadWeatherPrice(subtract.doubleValue());//恶劣天气超出公里费
                        }
                    }
                }
            }
        }
        //计算折扣
        if(null != order.getUserId()){
            //计算折扣
            if (null != order.getUserId()) {
        }
            }
        //计算总金额
        BigDecimal bigDecimal = new BigDecimal(order.getStartPrice() + order.getOverDrivePrice() + order.getLongDistancePrice() + order.getOverLongDistancePrice() +
                order.getWaitTimePrice() + order.getOutWaitTimePrice() + order.getBadWeatherPrice() + order.getOverBadWeatherPrice() - order.getDiscountAmount()).setScale(2, BigDecimal.ROUND_HALF_EVEN);
            //计算总金额
            BigDecimal bigDecimal = new BigDecimal(order.getStartPrice() + order.getOverDrivePrice() + order.getLongDistancePrice() + order.getOverLongDistancePrice() +
                    order.getWaitTimePrice() + order.getOutWaitTimePrice() + order.getBadWeatherPrice() + order.getOverBadWeatherPrice() - order.getDiscountAmount()).setScale(2, BigDecimal.ROUND_HALF_EVEN);
        if(type == 1){//预估价
            order.setEstimatedPrice(bigDecimal.doubleValue());
        }
        if(type == 2){//订单金额
            order.setOrderMoney(bigDecimal.doubleValue());
            if (type == 1) {//预估价
                order.setEstimatedPrice(bigDecimal.doubleValue());
            }
            if (type == 2) {//订单金额
                order.setOrderMoney(bigDecimal.doubleValue());
            }
            return order;
        }
        return order;
    }
    /**
@@ -1156,8 +1161,26 @@
     * @throws Exception
     */
    @Override
    public ResultUtil transferOrder(Integer uid, Long orderId, String cause) throws Exception {
    public ResultUtil transferOrder(Integer uid, Long orderId, String cause, String phone) throws Exception {
        // 7.13改动
        OrderTransfer orderTransfer = new OrderTransfer();
        Order order = this.selectById(orderId);
        if(phone!=null && !"".equals(phone)) {
            List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("phone", phone));
            if (drivers.size() == 0) {
                return ResultUtil.error("暂无该司机,无法转单");
            } else {
                Driver driver = drivers.get(0);
                if (driver.getServerStatus() != 1) {
                    return ResultUtil.error("司机正在服务中,无法转单。");
                }
                if (driver.getStatus() != 1) {
                    return ResultUtil.error("该司机已被冻结,无法转单。");
                }
                order.setDriverId(driver.getId());
                orderTransfer.setNewDriverId(driver.getId());
            }
        }
        if(order.getDriverId().compareTo(uid) != 0){
            return ResultUtil.error("无权操作");
        }
@@ -1168,22 +1191,24 @@
        order.setState(201);
        this.updateById(order);
        OrderTransfer orderTransfer = new OrderTransfer();
        orderTransfer.setOrderId(orderId);
        orderTransfer.setOldDriverId(order.getDriverId());
        orderTransfer.setCause(cause);
        orderTransfer.setStatus(1);
        orderTransfer.setCreateTime(new Date());
        orderTransferService.insert(orderTransfer);
        if(phone==null ||"".equals(phone)){
            //开始派单
            Order finalOrder = order;
            new Thread(new Runnable() {
                @Override
                public void run() {
                    pushOrder(finalOrder.getId());
                }
            }).start();
        }
        //开始派单
        Order finalOrder = order;
        new Thread(new Runnable() {
            @Override
            public void run() {
                pushOrder(finalOrder.getId());
            }
        }).start();
        return ResultUtil.success();
    }
@@ -1415,6 +1440,8 @@
                    accountChangeDetailService.insert(accountChangeDetail);
                    //补贴中分账
                    Double balance = revenueService.queryCompanyBalance();//平台账户余额
                    Double discountedPrice = order.getDiscountedPrice();
                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                    for (RechargeRecord rechargeRecord : rechargeRecords) {
@@ -1439,6 +1466,14 @@
                            }
                        }
                    }
                    CompanyFundFlow companyFundFlow = new CompanyFundFlow();
                    companyFundFlow.setType(5);
                    companyFundFlow.setObjectType(1);
                    companyFundFlow.setBalance(new BigDecimal(balance));
                    companyFundFlow.setMoney(new BigDecimal(order.getDiscountedPrice()));
                    companyFundFlow.setCreateTime(new Date());
                    companyFundFlowService.insert(companyFundFlow);
                }
            }
            this.updateById(order);
@@ -1964,6 +1999,7 @@
                    }
                    //处理代理商抽佣
                    if(num3 > 0){
                        Double balance = revenueService.queryAgentBalance(driver.getAgentId());
                        Revenue revenue = new Revenue();
                        revenue.setType(1);
                        revenue.setUserType(3);
@@ -1995,6 +2031,15 @@
                                }
                            }
                        }
                        CompanyFundFlow companyFundFlow = new CompanyFundFlow();
                        companyFundFlow.setType(3);
                        companyFundFlow.setObjectType(2);
                        companyFundFlow.setObjectId(driver.getAgentId());
                        companyFundFlow.setBalance(new BigDecimal(balance));
                        companyFundFlow.setMoney(new BigDecimal(num3));
                        companyFundFlow.setCreateTime(new Date());
                        companyFundFlowService.insert(companyFundFlow);
                    }
                }
            }
@@ -2153,6 +2198,14 @@
        }
        if(type == 3){//收入
            performanceRankingWarppers = revenueService.queryDriverRank(1, time, dayType);
            // 通过司机id 去差订单的优惠金额
            for (PerformanceRankingWarpper performanceRankingWarpper : performanceRankingWarppers) {
                List<Order> orders = this.baseMapper.selectList(new EntityWrapper<Order>().eq("driverId", performanceRankingWarpper.getDriverId()).isNotNull("payMoney"));
                double sum = orders.stream().mapToDouble(Order::getDiscountedPrice).sum();
                double sum1 = orders.stream().mapToDouble(Order::getDiscountAmount).sum();
                performanceRankingWarpper.setAmountOfData(new BigDecimal(performanceRankingWarpper.getAmountOfData()+sum+sum1).setScale(2,RoundingMode.HALF_UP).doubleValue());
            }
        }
        for (int i = 0; i < performanceRankingWarppers.size(); i++) {
            PerformanceRankingWarpper performanceRankingWarpper = performanceRankingWarppers.get(i);
@@ -2192,10 +2245,6 @@
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
            if(i == performanceRankingWarppers.size() - 1){
                position = 0;
                d = 0D;
            }
        }
        MyAchievementWarpper myAchievementWarpper = new MyAchievementWarpper();
        myAchievementWarpper.setType("订单");
@@ -2218,10 +2267,6 @@
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
            if(i == performanceRankingWarppers.size() - 1){
                position = 0;
                d = 0D;
            }
        }
        myAchievementWarpper = new MyAchievementWarpper();
        myAchievementWarpper.setType("收入");
@@ -2243,10 +2288,6 @@
            }
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
            if(i == performanceRankingWarppers.size() - 1){
                position = 0;
                d = 0D;
            }
        }
        myAchievementWarpper = new MyAchievementWarpper();