zhibing.pu
2024-04-12 a075cdd2f76fae321ecf95dce363141ade30f0f1
UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -437,6 +437,22 @@
        //推单操作
        if(orderPrivateCar.getState() == 1){
            this.pushOrder(orderPrivateCar);
        }else{
            //接单后定时任务判断司机是否去接乘客,没有则推送提醒
            CancleOrder cancleOrder = cancleOrderService.query(orderPrivateCar.getCompanyId());
            if(null != cancleOrder){
                JSONObject object = JSON.parseObject(cancleOrder.getContent());
                long time = object.getInteger("driverTimeout") * 60000L;
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        OrderPrivateCar orderPrivateCar1 = OrderPrivateCarServiceImpl.this.selectById(orderPrivateCar.getId());
                        if(orderPrivateCar1.getState() == 2){
                            pushUtil.pushDriverTimeOut(1, orderPrivateCar1.getUserId(), orderPrivateCar1.getId(), 1);
                        }
                    }
                }, time);
            }
        }
@@ -500,28 +516,89 @@
        }
        return ResultUtil.success();
    }
    /**
     * 获取取消需要支付的金额
     * @param id
     * @param language
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil<BaseWarpper> queryCancleAmount(Integer id, Integer language) throws Exception {
        OrderPrivateCar orderPrivateCar = this.selectById(id);
        if(null == orderPrivateCar){
            return ResultUtil.error(language == 1 ? "获取数据失败,订单信息有误" : language == 2 ? "Failed to obtain data, order-information error." : "Impossible d’obtenir les données, erreur d’information de commande. ");
        }
        BaseWarpper baseWarpper = new BaseWarpper();
        double amount = 0;
        CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
        if(null != orderPrivateCar.getDriverId() && orderPrivateCar.getSnatchOrderTime()!=null &&
                (orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()){//收费的情况
            if(null != query){
                amount += query.getMoney();
        CancleOrder query = cancleOrderService.query(orderPrivateCar.getCompanyId());
        if(null == query || null == orderPrivateCar.getDriverId()){
            baseWarpper.setAmount(amount);
            return ResultUtil.success(baseWarpper);
        }
        JSONObject object = JSON.parseObject(query.getContent());
        long t = object.getInteger("driverTimeout") * 60000L;
        //司机超时未到达起点,免费取消
        if(orderPrivateCar.getState() < 3 && orderPrivateCar.getSnatchOrderTime().getTime() + t < System.currentTimeMillis()){
            baseWarpper.setAmount(amount);
            return ResultUtil.success(baseWarpper);
        }
        //普通单
        if(1 == orderPrivateCar.getOrderType()){
            JSONObject order = object.getJSONObject("order");
            long m = order.getInteger("orderAcceptanceTime") * 60000L;
            //超过免费时间,计算费用
            if(orderPrivateCar.getSnatchOrderTime().getTime() + m < System.currentTimeMillis()){
                BigDecimal money = order.getBigDecimal("money");
                if(null != orderPrivateCar.getSetOutTime()){
                    //里程费
                    BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderPrivateCar.getMileage() / 1000));
                    //时长费
                    int s = Double.valueOf((System.currentTimeMillis() - orderPrivateCar.getSetOutTime().getTime()) / 60000).intValue();
                    BigDecimal durationFee = order.getBigDecimal("durationFee").multiply(new BigDecimal(s));
                    money = money.add(durationFee).add(mileageFee);
                }
                amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue();
            }
        }
        BaseWarpper baseWarpper = new BaseWarpper();
        //预约单
        if(2 == orderPrivateCar.getOrderType()){
            JSONObject order = object.getJSONObject("reservationOrder");
            long m = order.getInteger("orderAcceptanceTime") * 60000L;
            //超过免费时间,计算费用
            if(System.currentTimeMillis() + m > orderPrivateCar.getTravelTime().getTime()){
                BigDecimal money = order.getBigDecimal("money");
                if(null != orderPrivateCar.getSetOutTime()){
                    //里程费
                    BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderPrivateCar.getMileage() / 1000));
                    //时长费
                    int s = Double.valueOf((System.currentTimeMillis() - orderPrivateCar.getSetOutTime().getTime()) / 60000).intValue();
                    BigDecimal durationFee = order.getBigDecimal("durationFee").multiply(new BigDecimal(s));
                    //预定费用
                    BigDecimal reservationFee = order.getBigDecimal("reservationFee");
                    money = money.add(durationFee).add(mileageFee).add(reservationFee);
                }
                amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue();
            }
        }
        baseWarpper.setAmount(amount);
        return ResultUtil.success(baseWarpper);
    }
    /**
     * 添加取消操作
     * @param id
     * @param reason
     * @param remark
     * @param uid
     * @param language
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil addCancle(Integer id, String reason, String remark, Integer uid, Integer language) throws Exception {
    public ResultUtil addCancle(Integer id, String reason, String remark, Integer uid, Double lon, Double lat, String address, Integer language) throws Exception {
        if(ToolUtil.isNotEmpty(remark)){
            if(ToolUtil.isNotEmpty(remark)){
                List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null);
@@ -540,6 +617,8 @@
        if(orderPrivateCar.getState() > 5 && orderPrivateCar.getState() != 11){
            return ResultUtil.error(language == 1 ? "取消订单失败,不合法的操作" : language == 2 ? "Failed to cancel order, illegal operation." : "Échec de l’annulation de la commande, opération illégale.");
        }
        //服务中也可以取消订单,所以取消订单时需要计算订单费用
        if(null == orderPrivateCar.getDriverId()){//没有接单的情况
            if(orderPrivateCar.getType() == 2){//摆渡车
                OrderCrossCityServiceImpl.pushEndMap.remove(orderPrivateCar.getCrossCityOrderId());//删除标识数据
@@ -561,36 +640,48 @@
                this.updateById(orderPrivateCar);
            }
        }else {
            CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
            if (null != query) {
                if ((orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < System.currentTimeMillis() && query.getMoney().compareTo(0D) > 0) {//收费的情况
                    orderPrivateCar.setState(12);
                    this.updateById(orderPrivateCar);
                    integer = orderCancelService.saveData(id, 1, reason, remark, null, query.getMoney(), 1, 1, uid);
                } else {
                    integer = orderCancelService.saveData(id, 1, reason, remark, null, null, 2, 1, uid);
            BaseWarpper data = queryCancleAmount(id, language).getData();
            Double amount = data.getAmount();
            if(0 == amount){
                integer = orderCancelService.saveData(id, 1, reason, remark, null, null, 2, 1, uid);
                if(5 == orderPrivateCar.getState()){
                    orderPrivateCar.setState(6);
                    orderPrivateCar.setGetoffLon(lon);
                    orderPrivateCar.setGetoffLat(lat);
                    orderPrivateCar.setGetoffAddress(address);
                    orderPrivateCar.setGetoffTime(new Date());
                    orderPrivateCar.setEndServiceTime(new Date());
                }else{
                    orderPrivateCar.setState(10);
                    this.updateById(orderPrivateCar);
                }
                this.deleteTask(id);//删除定时任务
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
                        System.err.println("推送取消操作---------------------");
                    }
                }).start();
                //修改司机为空闲
                Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
                driver.setState(2);
                driverService.updateById(driver);
                this.updateById(orderPrivateCar);
            }else{
                return ResultUtil.error(language == 1 ? "请完善后台取消规则设置" : language == 2 ? "Please complete the setting of cancellation rules from the background." : "Veuillez compléter le réglage des règles d’annulation à partir de l’arrière-plan.");
                if(5 == orderPrivateCar.getState()){
                    orderPrivateCar.setGetoffLon(lon);
                    orderPrivateCar.setGetoffLat(lat);
                    orderPrivateCar.setGetoffAddress(address);
                    orderPrivateCar.setGetoffTime(new Date());
                    orderPrivateCar.setEndServiceTime(new Date());
                }
                orderPrivateCar.setOldState(6);
                orderPrivateCar.setState(12);
                this.updateById(orderPrivateCar);
                integer = orderCancelService.saveData(id, 1, reason, remark, null, amount, 1, 1, uid);
            }
            this.deleteTask(id);//删除定时任务
            new Thread(new Runnable() {
                @Override
                public void run() {
                    pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
                    System.err.println("推送取消操作---------------------");
                }
            }).start();
            //修改司机为空闲
            Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
            driver.setState(2);
            driverService.updateById(driver);
        }
        //添加消息
@@ -626,9 +717,9 @@
        }else{
            orderCancel = orderCancelService.selectById(cancleId);
        }
        CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
        if(null != query){
        Double amount = queryCancleAmount(id, language).getData().getAmount();
        if(0 < amount){
            if(payType == 1){//手机支付
                orderCancel.setPayType(1);
                orderCancelService.updateById(orderCancel);
@@ -640,7 +731,7 @@
                checkoutRequest.setAccountNumber(userInfo.getPhone());
                checkoutRequest.setCustomerFirstName(userInfo.getFirstName());
                checkoutRequest.setCustomerLastName(userInfo.getLastName());
                checkoutRequest.setRequestAmount(query.getMoney());
                checkoutRequest.setRequestAmount(amount);
                checkoutRequest.setMerchantTransactionId(merchantTransactionId);
                checkoutRequest.setRequestDescription("Cancel a trip");
                checkoutRequest.setCallbackUrl(callbackPath + "/base/wxCancelOrderTaxi");
@@ -649,7 +740,7 @@
                checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html");
                resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
                if(resultUtil.getCode()==200){
                    paymentRecordService.saveData(1, null, null, id, 1, 1, query.getMoney(), null, 1);//添加预支付数据
                    paymentRecordService.saveData(1, null, null, id, 1, 1, amount, null, 1);//添加预支付数据
                }
            }
@@ -665,7 +756,7 @@
                checkoutRequest.setAccountNumber(bankCard.getCode());
                checkoutRequest.setCustomerFirstName(bankCard.getFirstName());
                checkoutRequest.setCustomerLastName(bankCard.getLastName());
                checkoutRequest.setRequestAmount(query.getMoney());
                checkoutRequest.setRequestAmount(amount);
                checkoutRequest.setMerchantTransactionId(merchantTransactionId);
                checkoutRequest.setRequestDescription("Cancel a trip");
                checkoutRequest.setCallbackUrl(callbackPath + "/base/wxCancelOrderTaxi");
@@ -674,26 +765,30 @@
                checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html");
                resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
                if(resultUtil.getCode()==200){
                    paymentRecordService.saveData(1, null, null, id, 1, 2, query.getMoney(), null, 1);//添加预支付数据
                    paymentRecordService.saveData(1, null, null, id, 1, 2, amount, null, 1);//添加预支付数据
                }
            }
            if(payType == 3){//余额支付
                if(userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()){
                if(userInfo.getBalance() != null && userInfo.getBalance() < amount){
                    return ResultUtil.error((language == 1 ? "账户余额不足" : language == 2 ? "Insufficient balance" : "Solde insuffisant"), "");
                }
                userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(amount)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                //添加交易明细
                transactionDetailsService.saveData(uid, "取消订单", query.getMoney(), 2, 1, 1, 1, id);
                transactionDetailsService.saveData(uid, "取消订单", amount, 2, 1, 1, 1, id);
                userInfoService.updateById(userInfo);
                //解除小号绑定
                if(orderPrivateCar.getBindId() != null){
                    chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX());
                    ChinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX());
                }
                orderPrivateCar.setState(10);
                if(5 == orderPrivateCar.getOldState()){
                    orderPrivateCar.setState(6);
                }else{
                    orderPrivateCar.setState(10);
                }
                orderPrivateCar.setTelX("");
                orderPrivateCar.setBindId("");
                this.updateById(orderPrivateCar);
@@ -702,20 +797,19 @@
                orderCancel.setPayType(3);
                orderCancelService.updateById(orderCancel);
//                //添加已收入明细
//                incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getMoney());
//                //添加已收入明细
//                Company company = companyService.selectById(orderPrivateCar.getCompanyId());
//                Double taxi = company.getSpeMoney();
                BigDecimal c =new BigDecimal(query.getMoney());//司机收入
                incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, 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);
                this.deleteTask(id);//删除定时任务
                if(null != orderPrivateCar.getDriverId()){
                    BigDecimal c =new BigDecimal(amount);//司机收入
                    incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, 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);
                    this.deleteTask(id);//删除定时任务
                    pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
                }
                pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
                //添加消息
                systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功支付取消订单费用,谢谢使用!" : language == 2
@@ -1901,10 +1995,14 @@
        if(null != query){
            //添加交易明细
            transactionDetailsService.saveData(orderPrivateCar.getUserId(), "取消订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId());
            orderPrivateCar.setState(10);
            if(5 == orderPrivateCar.getOldState()){
                orderPrivateCar.setState(6);
            }else{
                orderPrivateCar.setState(10);
            }
            //解除小号绑定
            if(orderPrivateCar.getBindId() != null){
                chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX());
                ChinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX());
            }
            orderPrivateCar.setBindId("");
            orderPrivateCar.setTelX("");
@@ -1920,27 +2018,19 @@
                orderCancelService.updateById(query1);
            }
//            //添加已收入明细
//            incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getAmount());
//            //添加已收入明细
//            Company company = companyService.selectById(orderPrivateCar.getCompanyId());
//            Double taxi = company.getSpeMoney();
            BigDecimal c =new BigDecimal(query.getAmount());//司机收入
            incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, 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);
            this.deleteTask(orderPrivateCar.getId());//删除定时任务
            // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
//            new Thread(new Runnable() {
//                @Override
//                public void run() {
//                    pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
//                }
//            }).start();
            if(null != orderPrivateCar.getDriverId()){
                BigDecimal c =new BigDecimal(query.getAmount());//司机收入
                incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, 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);
                this.deleteTask(orderPrivateCar.getId());//删除定时任务
                pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
            }
            pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
            //添加消息
            systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功支付取消订单费用,谢谢使用!" : language == 2
@@ -2563,4 +2653,29 @@
        }
        return endPushWarpper;
    }
    /**
     * 修改目的地
     * @param orderId
     * @param endLon
     * @param endLat
     * @param endAddress
     */
    @Override
    public void updateEndAddress(Integer orderId, String endLon, String endLat, String endAddress) {
        OrderPrivateCar orderPrivateCar = this.selectById(orderId);
        if(null != orderPrivateCar.getDriverId()){
            orderPrivateCar.setDestination(endAddress);
            orderPrivateCar.setDestinationLat(endLat);
            orderPrivateCar.setDestinationLon(endLon);
            this.updateById(orderPrivateCar);
            pushUtil.pushModifyAddress(2, orderPrivateCar.getDriverId(), orderId, 1, 1);
        }else{
            orderPrivateCar.setEndAddress(endAddress);
            orderPrivateCar.setEndLat(Double.valueOf(endLat));
            orderPrivateCar.setEndLon(Double.valueOf(endLon));
            this.updateById(orderPrivateCar);
        }
    }
}