Pu Zhibing
5 天以前 88f8a06039ddb14cb1c8ac0c012b6d1ee8bd933a
修改bug
3个文件已修改
107 ■■■■ 已修改文件
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -2323,6 +2323,10 @@
            return R.ok();
        }
        try {
            Object cacheObject = redisService.getCacheObject("chargingOrderStatus:" + vo.getTransaction_serial_number());
            if(null != cacheObject && 5 == (int)cacheObject){
                return R.ok();
            }
            TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
            if (null == chargingOrder) {
                return R.ok();
@@ -2533,31 +2537,28 @@
            //退款金额=充值金额-实际支付金额
            BigDecimal refundAmount = rechargeAmount.subtract(payAmount);
            
            TChargingOrder order = new TChargingOrder();
            order.setId(chargingOrder.getId());
            order.setAppUserId(chargingOrder.getAppUserId());
            UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(chargingOrder.getCode());
            if (null != uploadRealTimeMonitoringData && null == chargingOrder.getEndMode()) {
                Integer soc = uploadRealTimeMonitoringData.getSoc();
                if (soc >= 98) {
                    order.setEndMode(2);
                    chargingOrder.setEndMode(2);
                } else if (chargingOrder.getResidualAmount().compareTo(new BigDecimal(1)) <= 0) {
                    order.setEndMode(3);
                    chargingOrder.setEndMode(3);
                } else {
                    order.setEndMode(0);
                    chargingOrder.setEndMode(0);
                }
            }
            order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
            order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
            order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
            order.setStatus(5);
            order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
            order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
            order.setChargingCapacity(vo.getTotal_electricity());
            order.setElectricity(vo.getTotal_electricity());
            order.setVipDiscountAmount(vipDiscountAmount_total);
            chargingOrder.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
            chargingOrder.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
            chargingOrder.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
            chargingOrder.setStatus(5);
            chargingOrder.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
            chargingOrder.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
            chargingOrder.setChargingCapacity(vo.getTotal_electricity());
            chargingOrder.setElectricity(vo.getTotal_electricity());
            chargingOrder.setVipDiscountAmount(vipDiscountAmount_total);
            if (vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0) {
                order.setVipDiscount(BigDecimal.valueOf(1));
                chargingOrder.setVipDiscount(BigDecimal.valueOf(1));
            }
            
            //计算优惠券
@@ -2582,9 +2583,9 @@
                        appCoupon.setStatus(2);
                        appCouponClient.updateAppCoupon(appCoupon);
                    } else {
                        order.setAppCouponId(null);
                        order.setCouponDiscountAmount(BigDecimal.ZERO);
                        appCouponClient.refund(chargingOrder.getAppCouponId().toString());
                        chargingOrder.setAppCouponId(null);
                        chargingOrder.setCouponDiscountAmount(BigDecimal.ZERO);
                    }
                }
                if (2 == preferentialMode) {
@@ -2604,8 +2605,8 @@
                        appCoupon.setStatus(2);
                        appCouponClient.updateAppCoupon(appCoupon);
                    } else {
                        order.setAppCouponId(null);
                        order.setCouponDiscountAmount(BigDecimal.ZERO);
                        chargingOrder.setAppCouponId(null);
                        chargingOrder.setCouponDiscountAmount(BigDecimal.ZERO);
                        appCouponClient.refund(chargingOrder.getAppCouponId().toString());
                    }
                }
@@ -2619,13 +2620,15 @@
            if (serviceCharge_total.compareTo(BigDecimal.ZERO) > 0) {
                serviceCharge_total = serviceCharge_total.subtract(couponDiscount);
            }
            order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
            order.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN));
            order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
            order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
            order.setRefundStatus(1);
            this.updateById(order);
            chargingOrder = this.getById(order.getId());
            chargingOrder.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
            chargingOrder.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN));
            chargingOrder.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
            chargingOrder.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
            chargingOrder.setRefundStatus(1);
            this.updateById(chargingOrder);
            redisService.setCacheObject("chargingOrderStatus:" + vo.getTransaction_serial_number(), 5, 100L, TimeUnit.SECONDS);
            chargingOrder = this.getById(chargingOrder.getId());
            
            //推送三方平台
            if (2 == chargingOrder.getOrderSource()) {
@@ -2642,9 +2645,9 @@
            }
            
            //开始将优惠券优惠的金额添加到明细中
            BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
            BigDecimal couponDiscountAmount = chargingOrder.getCouponDiscountAmount();
            if (null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0) {
                List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
                List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
                BigDecimal reduce = list.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
                for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
                    BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -80,30 +80,36 @@
            List<TChargingOrder> failedStartupOrder = chargingOrderService.findFailedStartupOrder();
            log.info("定时任务执行,查询到启动失败的订单数量:{}", failedStartupOrder.size());
            for (TChargingOrder order : failedStartupOrder) {
                log.info("定时任务执行,查询到启动失败的订单:{}", order.getCode());
                //查询是否有充电信息
                List<UploadRealTimeMonitoringData> dataByOrderCode = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode());
                log.info("充电实时数据:{}", JSON.toJSONString(dataByOrderCode));
                log.info("充电实时数据:{}", dataByOrderCode.size());
                //没有充电数据,则执行退款
                if(null == dataByOrderCode || dataByOrderCode.isEmpty()){
                    log.info("定时任务执行,查询到启动失败的订单,执行退款:{}", order.getCode());
                    chargingOrderService.refund(order.getCode());
                    int num = 0;
                    while (true){
                        TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getChargingOrderId, order.getId()));
                        if(null != one && 2 == one.getRefundStatus()){
                            order.setStatus(-1);
                            chargingOrderService.updateById(order);
                            break;
                    if(1 == order.getOrderSource()){
                        chargingOrderService.refund(order.getCode());
                        int num = 0;
                        while (true){
                            TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getChargingOrderId, order.getId()));
                            if(null != one && 2 == one.getRefundStatus()){
                                order.setStatus(-1);
                                chargingOrderService.updateById(order);
                                break;
                            }
                            try {
                                Thread.sleep(5000);
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                            num++;
                            if(num > 10){
                                break;
                            }
                        }
                        try {
                            Thread.sleep(5000);
                        } catch (InterruptedException e) {
                            throw new RuntimeException(e);
                        }
                        num++;
                        if(num > 10){
                            break;
                        }
                    }else{
                        order.setStatus(-1);
                        chargingOrderService.updateById(order);
                    }
                }
            }
@@ -111,6 +117,7 @@
            List<TChargingOrder> stoppedOrder = chargingOrderService.findStoppedOrder();
            log.info("定时任务执行,查询到停止中的订单数量:{}", stoppedOrder.size());
            for (TChargingOrder order : stoppedOrder) {
                log.info("定时任务执行,查询到停止中的订单:{}", order.getCode());
                TransactionRecord one = transactionRecordService.findOne(order.getCode());
                if(null != one){
                    log.info("定时任务执行,查询到停止中的订单账单数据:{}", JSON.toJSONString(one));
@@ -124,6 +131,7 @@
            List<TChargingOrder> chargingOrder = chargingOrderService.findChargingOrder();
            log.info("定时任务执行,查询到充电中的订单数量:{}", chargingOrder.size());
            for (TChargingOrder order : chargingOrder) {
                log.info("定时任务执行,查询到充电中的订单:{}", order.getCode());
                TransactionRecord one = transactionRecordService.findOne(order.getCode());
                if(null != one && StringUtils.isNotEmpty(one.getResult())){
                    log.info("定时任务执行,查询到充电中的订单账单数据:{}", JSON.toJSONString(one));
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -1783,10 +1783,8 @@
        WHERE
            `status` = 2
          AND recharge_payment_status = 2
          AND recharge_serial_number IS NOT NULL
          AND NOW() >= ADDDATE(pay_time, INTERVAL 15 MINUTE )
          AND del_flag = 0
          AND order_source = 1
          AND id NOT IN (
            SELECT
                charging_order_id