Pu Zhibing
2025-02-10 4c62b64cc158ed07f18ae7060dae71f9d1e3d9fd
修改bug
10个文件已修改
320 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 192 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
@@ -182,6 +182,11 @@
            }
    
            @Override
            public R<List<TChargingOrder>> getCarChargingOrderByPlateNum(String plateNum, String startTime, String endTime) {
                return R.fail("根据车牌号查询指定时间范围内的数据失败:" + throwable.getMessage());
            }
            @Override
            public R addTripartitePlatformOrder(AddTripartitePlatformOrder query) {
                return R.fail("添加三方平台充电订单数据失败:" + throwable.getMessage());
            }
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
@@ -249,6 +249,19 @@
                                                @RequestParam("endTime") String endTime);
    
    
    /**
     * 根据车牌号查询指定时间范围内的数据
     * @param plateNum
     * @param startTime
     * @param endTime
     * @return
     */
    @PostMapping("/t-charging-order/getCarChargingOrderByPlateNum")
    R<List<TChargingOrder>> getCarChargingOrderByPlateNum(@RequestParam("plateNum") String plateNum, @RequestParam("startTime") String startTime,
                                                @RequestParam("endTime") String endTime);
    
    /**
     * 添加三方平台充电订单数据
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java
@@ -29,6 +29,8 @@
    private Long appUserId;
    @ApiModelProperty(value = "用户车辆id")
    private Long appUserCarId;
    @ApiModelProperty(value = "车牌号")
    private String plateNum;
    @ApiModelProperty(value = "充电枪id")
    private Integer chargingGunId;
    @ApiModelProperty(value = "订单编号")
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -455,6 +455,8 @@
                        settlementExportVO.setVehicleBrand(data5.get(0).getVehicleBrand());
                    }
                }else{
                    settlementExportVO.setLicensePlate(chargingOrder.getPlateNum());
                }
                settlementExportVO.setSiteCode(data3.get(0).getCode());
                settlementExportVO.setSiteName(data3.get(0).getName());
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -608,6 +608,8 @@
                    if(null != appUserCarId){
                        TAppUserCar tAppUserCar = appUserCarClient.getCarByIds(Arrays.asList(appUserCarId)).getData().get(0);
                        gunMonitoring.setLicensePlate(tAppUserCar.getLicensePlate());
                    }else{
                        gunMonitoring.setLicensePlate(chargingOrder.getPlateNum());
                    }
                    UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData();
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java
@@ -9,6 +9,7 @@
import com.ruoyi.chargingPile.api.model.TParkingLot;
import com.ruoyi.chargingPile.api.model.TParkingRecord;
import com.ruoyi.chargingPile.api.vo.GetParkingRecord;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.integration.barrierGate.model.CloudParkingOrder;
import com.ruoyi.integration.barrierGate.model.CloudParkingSpace;
import com.ruoyi.integration.barrierGate.model.OfflineParkingOrder;
@@ -98,24 +99,33 @@
        parkingRecord.setOutParkingType(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 1);
        parkingRecord.setTitle("【停车缴费】" + payment + "元");
        TAppUserCar appUserCar = appUserCarClient.getAppUserCarByLicensePlate(parkingRecord.getLicensePlate()).getData();
        TChargingOrder chargingOrder = null;
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        if(null != appUserCar){
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            List<TChargingOrder> data = chargingOrderClient.getCarChargingOrder(appUserCar.getId(), parkingRecord.getInParkingTime().format(formatter), LocalDateTime.now().format(formatter)).getData();
            if(null != data && data.size() > 0){
                TChargingOrder chargingOrder = data.get(0);
                parkingRecord.setAppUserId(chargingOrder.getAppUserId());
                parkingRecord.setChargingOrderId(chargingOrder.getId());
                TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
                parkingRecord.setPhone(appUser.getPhone());
                parkingRecord.setFreeDuration(parkingLot.getChargeFreeDuration());
                long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
                parkingRecord.setTimeoutAmount(m > parkingLot.getChargeFreeDuration() ? new BigDecimal(m - parkingLot.getChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
            }else{
                parkingRecord.setFreeDuration(parkingLot.getNonChargeFreeDuration());
                long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
                parkingRecord.setTimeoutAmount(m > parkingLot.getNonChargeFreeDuration() ? new BigDecimal(m - parkingLot.getNonChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
                chargingOrder = data.get(0);
            }
        }else if(StringUtils.isNotEmpty(parkingRecord.getLicensePlate())){
            List<TChargingOrder> data = chargingOrderClient.getCarChargingOrderByPlateNum(parkingRecord.getLicensePlate(), parkingRecord.getInParkingTime().format(formatter), LocalDateTime.now().format(formatter)).getData();
            if(null != data && data.size() > 0){
                chargingOrder = data.get(0);
            }
        }
        if(null != chargingOrder){
            parkingRecord.setAppUserId(chargingOrder.getAppUserId());
            parkingRecord.setChargingOrderId(chargingOrder.getId());
            TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
            parkingRecord.setPhone(appUser.getPhone());
            parkingRecord.setFreeDuration(parkingLot.getChargeFreeDuration());
            long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
            parkingRecord.setTimeoutAmount(m > parkingLot.getChargeFreeDuration() ? new BigDecimal(m - parkingLot.getChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
        }else{
            parkingRecord.setFreeDuration(parkingLot.getNonChargeFreeDuration());
            long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
            parkingRecord.setTimeoutAmount(m > parkingLot.getNonChargeFreeDuration() ? new BigDecimal(m - parkingLot.getNonChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
        }
        parkingRecord.setFreeAmount(parkingRecord.getOrderAmount().subtract(parkingRecord.getPayment()));
        parkingRecordClient.updateParkingRecord(parkingRecord);
@@ -174,25 +184,35 @@
        parkingRecord.setOutParkingType(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 1);
        parkingRecord.setTitle("【停车缴费】" + payment + "元");
        TAppUserCar appUserCar = appUserCarClient.getAppUserCarByLicensePlate(parkingRecord.getLicensePlate()).getData();
        TChargingOrder chargingOrder = null;
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        if(null != appUserCar){
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            List<TChargingOrder> data = chargingOrderClient.getCarChargingOrder(appUserCar.getId(), parkingRecord.getInParkingTime().format(formatter), LocalDateTime.now().format(formatter)).getData();
            if(null != data && data.size() > 0){
                TChargingOrder chargingOrder = data.get(0);
                parkingRecord.setAppUserId(chargingOrder.getAppUserId());
                parkingRecord.setChargingOrderId(chargingOrder.getId());
                TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
                parkingRecord.setPhone(appUser.getPhone());
                parkingRecord.setFreeDuration(parkingLot.getChargeFreeDuration());
                long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
                parkingRecord.setTimeoutAmount(m > parkingLot.getChargeFreeDuration() ? new BigDecimal(m - parkingLot.getChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
            }else{
                parkingRecord.setFreeDuration(parkingLot.getNonChargeFreeDuration());
                long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
                parkingRecord.setTimeoutAmount(m > parkingLot.getNonChargeFreeDuration() ? new BigDecimal(m - parkingLot.getNonChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
                chargingOrder = data.get(0);
            }
        }else if(StringUtils.isNotEmpty(parkingRecord.getLicensePlate())){
            List<TChargingOrder> data = chargingOrderClient.getCarChargingOrderByPlateNum(parkingRecord.getLicensePlate(), parkingRecord.getInParkingTime().format(formatter), LocalDateTime.now().format(formatter)).getData();
            if(null != data && data.size() > 0){
                chargingOrder = data.get(0);
            }
        }
        if(null != chargingOrder){
            parkingRecord.setAppUserId(chargingOrder.getAppUserId());
            parkingRecord.setChargingOrderId(chargingOrder.getId());
            TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
            parkingRecord.setPhone(appUser.getPhone());
            parkingRecord.setFreeDuration(parkingLot.getChargeFreeDuration());
            long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
            parkingRecord.setTimeoutAmount(m > parkingLot.getChargeFreeDuration() ? new BigDecimal(m - parkingLot.getChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
        }else{
            parkingRecord.setFreeDuration(parkingLot.getNonChargeFreeDuration());
            long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
            parkingRecord.setTimeoutAmount(m > parkingLot.getNonChargeFreeDuration() ? new BigDecimal(m - parkingLot.getNonChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
        }
        parkingRecord.setFreeAmount(parkingRecord.getOrderAmount().subtract(parkingRecord.getPayment()));
        parkingRecordClient.updateParkingRecord(parkingRecord);
    }
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -251,8 +251,6 @@
                tChargingOrderExport.setCarNumber(data1.get(0).getLicensePlate());
                tChargingOrderExport.setCarType(data1.get(0).getVehicleModel());
                tChargingOrderExport.setCarBrand(data1.get(0).getVehicleBrand());
            }
            tChargingOrderExport.setOrderCode(chargingOrderListVO.getCode());
            tChargingOrderExport.setIsSingle("是");
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -361,6 +361,8 @@
        if (byId.getAppUserCarId()!=null) {
            List<TAppUserCar> data3 = appUserCarClient.getCarByIds(Collections.singletonList(byId.getAppUserCarId())).getData();
            payOrderChargingInfo.setCarNum(data3.get(0).getLicensePlate());
        }else{
            payOrderChargingInfo.setCarNum(byId.getPlateNum());
        }
        payOrderChargingInfo.setTChargingOrder(byId);
@@ -371,6 +373,8 @@
            carid.add(byId.getAppUserCarId());
            R<List<TAppUserCar>> carByIds = appUserCarClient.getCarByIds(carid);
            payOrderChargingInfo.setCarNum(carByIds.getData().get(0).getLicensePlate());
        }else{
            payOrderChargingInfo.setCarNum(byId.getPlateNum());
        }
        payOrderChargingInfo.setStartTime(byId.getStartTime());
        payOrderChargingInfo.setEndTime(byId.getEndTime());
@@ -515,6 +519,8 @@
                chargingOrderInfoVO.setVehicleModel(data.getVehicleModel());
                chargingOrderInfoVO.setVehicleUse(data.getVehicleUse());
            }
        }else{
            chargingOrderInfoVO.setLicensePlate(byId.getPlateNum());
        }
        // 时段总服务费
        List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.lambdaQuery().eq(TChargingOrderAccountingStrategy::getChargingOrderId, strategyId).orderByDesc(TChargingOrderAccountingStrategy::getStartTime).list();
@@ -2096,6 +2102,22 @@
    
    
    /**
     * 根据车牌号查询指定时间范围内的数据
     * @param plateNum
     * @param startTime
     * @param endTime
     * @return
     */
    @PostMapping("/getCarChargingOrderByPlateNum")
    public R<List<TChargingOrder>> getCarChargingOrderByPlateNum(@RequestParam("plateNum") String plateNum, @RequestParam("startTime") String startTime,
                                                          @RequestParam("endTime") String endTime){
        List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getPlateNum, plateNum).eq(TChargingOrder::getDelFlag, 0)
                .in(TChargingOrder::getStatus, Arrays.asList(4, 5)).between(TChargingOrder::getStartTime, startTime, endTime));
        return R.ok(list);
    }
    /**
     * 添加三方平台充电订单数据
     * @return
     */
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
@@ -316,6 +316,8 @@
                        tChargingOrder.setLicensePlate(data4.get(0).getLicensePlate());
                        tChargingOrder.setVehicleModel(data4.get(0).getVehicleModel());
                    }
                }else{
                    tChargingOrder.setLicensePlate(tChargingOrder.getPlateNum());
                }
                if (data3!=null)tChargingOrder.setUserName(data3.getName());
                // 累加实收金额 支付结算金额
@@ -756,6 +758,8 @@
                        tChargingOrder.setLicensePlate(data4.get(0).getLicensePlate());
                        tChargingOrder.setVehicleModel(data4.get(0).getVehicleModel());
                    }
                }else{
                    tChargingOrder.setLicensePlate(tChargingOrder.getPlateNum());
                }
                if (data3!=null)tChargingOrder.setUserName(data3.getName());
                if ( tChargingOrder.getPaymentAmount()!=null){
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -276,6 +276,8 @@
            }else{
                myChargingOrderInfo.setLicensePlate("无");
            }
        }else{
            myChargingOrderInfo.setLicensePlate(chargingOrder.getPlateNum());
        }
        myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
        myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
@@ -459,9 +461,11 @@
        chargingOrder.setOrderClassification(1);
        chargingOrder.setAppUserId(userId);
        chargingOrder.setAppUserCarId(addChargingOrder.getAppUserCarId());
        TAppUserCar userCar = appUserCarClient.getCarById(addChargingOrder.getAppUserCarId().toString()).getData();
        if(null != userCar){
            chargingOrder.setPlateNum(userCar.getLicensePlate());
        if(null != addChargingOrder.getAppUserCarId()){
            TAppUserCar userCar = appUserCarClient.getCarById(addChargingOrder.getAppUserCarId().toString()).getData();
            if(null != userCar){
                chargingOrder.setPlateNum(userCar.getLicensePlate());
            }
        }
        TChargingGun tChargingGun = chargingGunClient.getChargingGunById(addChargingOrder.getId()).getData();
        TChargingPile chargingPile = chargingPileClient.getChargingPileById(tChargingGun.getChargingPileId()).getData();
@@ -1345,6 +1349,8 @@
                    if (!data1.isEmpty()){
                        chargingOrderVO.setLicensePlate(data1.get(0).getLicensePlate());
                    }
                }else{
                    chargingOrderVO.setLicensePlate(chargingOrderVO.getPlateNum());
                }
            }
@@ -1612,6 +1618,8 @@
                                chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate());
                            }
                        }
                    }else{
                        chargingOrderListVO.setLicensePlate(chargingOrderListVO.getPlateNum());
                    }
                    chargingOrderListVO.setPhone(data3.getPhone());
                }
@@ -1881,7 +1889,11 @@
        if (chargingOrder.getAppUserCarId()!=null){
            List<TAppUserCar> data3 = appUserCarClient.getCarByIds(Collections.singletonList(chargingOrder.getAppUserCarId())).getData();
            if (data3!=null && !data3.isEmpty())chargingOrderListInfoVO.setLicensePlate(data3.get(0).getLicensePlate());
            if (data3!=null && !data3.isEmpty()) {
                chargingOrderListInfoVO.setLicensePlate(data3.get(0).getLicensePlate());
            }
        }else{
            chargingOrderListInfoVO.setLicensePlate(chargingOrder.getPlateNum());
        }
        chargingOrderListInfoVO.setStartTime(chargingOrder.getStartTime());
        chargingOrderListInfoVO.setEndTime(chargingOrder.getEndTime());
@@ -2318,92 +2330,96 @@
        chargingGun.setChargingPower(BigDecimal.ZERO);
        chargingGunClient.updateChargingGunById(chargingGun);
        //推送状态给三方平台
        tcecClient.pushChargingGunStatus(chargingGun.getId(), chargingGun.getStatus());
        if(2 == chargingOrder.getOrderSource()){
            tcecClient.pushChargingGunStatus(chargingGun.getId(), chargingGun.getStatus());
        }
        
        //添加积分
        TIntegralRule integralRule = integralRuleClient.getSet().getData();
        if(null != integralRule){
            TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
            Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
            Integer integral = chargingOrder.getServiceCharge().intValue() * num1;
            if(null != appUser.getVipId()){
                TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
                Integer doubleIntegration = vip.getDoubleIntegration();
                //双倍积分
                if(1 == doubleIntegration){
                    integral *= 2;
        if(1 == chargingOrder.getOrderSource()){
            TIntegralRule integralRule = integralRuleClient.getSet().getData();
            if(null != integralRule){
                TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
                Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
                Integer integral = chargingOrder.getServiceCharge().intValue() * num1;
                if(null != appUser.getVipId()){
                    TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
                    Integer doubleIntegration = vip.getDoubleIntegration();
                    //双倍积分
                    if(1 == doubleIntegration){
                        integral *= 2;
                    }
                }
                if(integral > 0){
                    TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
                    appUserIntegralChange.setAppUserId(appUser.getId());
                    appUserIntegralChange.setChangeType(2);
                    appUserIntegralChange.setHistoricalIntegral(appUser.getPoints());
                    appUser.setPoints(appUser.getPoints() + integral);
                    appUserIntegralChange.setCurrentIntegral(appUser.getPoints());
                    appUserIntegralChange.setCreateTime(LocalDateTime.now());
                    appUserIntegralChange.setOrderCode(chargingOrder.getCode());
                    appUserIntegralChange.setExtension(chargingOrder.getId().toString());
                    appUserClient.updateAppUser(appUser);
                    appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
                }
            }
            
            if(integral > 0){
                TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
                appUserIntegralChange.setAppUserId(appUser.getId());
                appUserIntegralChange.setChangeType(2);
                appUserIntegralChange.setHistoricalIntegral(appUser.getPoints());
                appUser.setPoints(appUser.getPoints() + integral);
                appUserIntegralChange.setCurrentIntegral(appUser.getPoints());
                appUserIntegralChange.setCreateTime(LocalDateTime.now());
                appUserIntegralChange.setOrderCode(chargingOrder.getCode());
                appUserIntegralChange.setExtension(chargingOrder.getId().toString());
                appUserClient.updateAppUser(appUser);
                appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
            }
        }
        //计算用户标签
        editUserTag(chargingOrder);
        //用户推荐奖励
        referralReward(chargingOrder);
        //开始构建退款费用
        refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
        if(refundAmount.compareTo(BigDecimal.ZERO) > 0){
            Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
            //构建退款明细
            TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
            chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
            chargingOrderRefund.setRefundAmount(refundAmount);
            chargingOrderRefund.setRefundStatus(1);
            chargingOrderRefund.setPayType(rechargePaymentType);
            chargingOrderRefund.setRefundStatus(1);
            chargingOrderRefund.setCode(chargingOrder.getCode());
            chargingOrderRefund.setRefundTitle("充电完成退款");
            chargingOrderRefund.setRefundContent("充电完成退款");
            chargingOrderRefund.setRefundReason("充电完成退款");
            chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
            chargingOrderRefund.setRefundTotalAmount(refundAmount);
            chargingOrderRefund.setPayAmount(rechargeAmount);
            if(1 == rechargePaymentType){
                WxPaymentRefundModel model = new WxPaymentRefundModel();
                model.setOut_trade_no(chargingOrder.getCode());
                model.setOut_refund_no(chargingOrderRefund.getRefundCode());
                model.setReason("充电完成退款");
                model.setNotify_url("/payment/wx/refund/notify");
                WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
                amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
                amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
                amount.setCurrency("CNY");
                model.setAmount(amount);
                R<String> orderR = wxPaymentClient.refundOrderR(model);
                if(200 == orderR.getCode()){
                    chargingOrderRefundService.save(chargingOrderRefund);
                }
            }
            if(2 == rechargePaymentType){
                RefundReq dto = new RefundReq();
                dto.setOutTradeNo(chargingOrder.getCode());
                dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
                dto.setRefundAmount(refundAmount.toString());
                dto.setRefundReason("充电完成退款");
                RefundResp resp = aliPaymentClient.refund(dto).getData();
                if(null != resp){
                    chargingOrderRefundService.save(chargingOrderRefund);
                    this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
                }
            }
            //计算用户标签
            editUserTag(chargingOrder);
            //用户推荐奖励
            referralReward(chargingOrder);
            
            //开始构建退款费用
            refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
            if(refundAmount.compareTo(BigDecimal.ZERO) > 0){
                Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
                //构建退款明细
                TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
                chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
                chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
                chargingOrderRefund.setRefundAmount(refundAmount);
                chargingOrderRefund.setRefundStatus(1);
                chargingOrderRefund.setPayType(rechargePaymentType);
                chargingOrderRefund.setRefundStatus(1);
                chargingOrderRefund.setCode(chargingOrder.getCode());
                chargingOrderRefund.setRefundTitle("充电完成退款");
                chargingOrderRefund.setRefundContent("充电完成退款");
                chargingOrderRefund.setRefundReason("充电完成退款");
                chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
                chargingOrderRefund.setRefundTotalAmount(refundAmount);
                chargingOrderRefund.setPayAmount(rechargeAmount);
                if(1 == rechargePaymentType){
                    WxPaymentRefundModel model = new WxPaymentRefundModel();
                    model.setOut_trade_no(chargingOrder.getCode());
                    model.setOut_refund_no(chargingOrderRefund.getRefundCode());
                    model.setReason("充电完成退款");
                    model.setNotify_url("/payment/wx/refund/notify");
                    WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
                    amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
                    amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
                    amount.setCurrency("CNY");
                    model.setAmount(amount);
                    R<String> orderR = wxPaymentClient.refundOrderR(model);
                    if(200 == orderR.getCode()){
                        chargingOrderRefundService.save(chargingOrderRefund);
                    }
                }
                if(2 == rechargePaymentType){
                    RefundReq dto = new RefundReq();
                    dto.setOutTradeNo(chargingOrder.getCode());
                    dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
                    dto.setRefundAmount(refundAmount.toString());
                    dto.setRefundReason("充电完成退款");
                    RefundResp resp = aliPaymentClient.refund(dto).getData();
                    if(null != resp){
                        chargingOrderRefundService.save(chargingOrderRefund);
                        this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
                    }
                }
            }
        }
    }
    
@@ -3154,11 +3170,7 @@
     */
    @Override
    public TChargingOrder getChargingOrderByLicensePlate(GetChargingOrderByLicensePlate query) {
        TAppUserCar appUserCar = appUserCarClient.getAppUserCarByLicensePlate(query.getLicensePlate()).getData();
        if(null == appUserCar){
            return null;
        }
        TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserCarId, appUserCar.getId())
        TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getPlateNum, query.getLicensePlate())
                .eq(TChargingOrder::getDelFlag, 0).between(TChargingOrder::getStartTime, query.getStartTime(), LocalDateTime.now())
                .eq(TChargingOrder::getRechargePaymentStatus, 2).in(TChargingOrder::getStatus, Arrays.asList(4, 5)));
        return one;
@@ -4034,7 +4046,7 @@
            return R.fail("充电枪正在充电中,启动失败");
        }
        
        //构建新的待支付订单
        //构建订单数据
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        TChargingOrder chargingOrder = new TChargingOrder();
        String code = "CD" + Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date());