Pu Zhibing
2025-01-04 4bf9185195316791f0339af501f12d97d8519c2c
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -60,6 +60,8 @@
import com.ruoyi.payment.api.model.RefundResp;
import com.ruoyi.payment.api.model.WxPaymentRefundModel;
import com.ruoyi.payment.api.vo.*;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
import io.seata.spring.annotation.GlobalTransactional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -100,7 +102,8 @@
   private ChargingGunClient chargingGunClient;
   @Resource
   private TSettlementConfirmMapper tSettlementConfirmMapper;
   @Resource
   private PartnerClient partnerClient;
   @Resource
   private SiteClient siteClient;
   
@@ -884,8 +887,7 @@
            dto.setRefundReason("充电失败,取消充电订单");
            RefundResp resp = aliPaymentClient.refund(dto).getData();
            if(null != resp){
               SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
               AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date()));
               AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", null);
               if(success.isSuccess()){
                  chargingOrderRefundService.save(chargingOrderRefund);
               }
@@ -935,7 +937,7 @@
      Long userId = tokenService.getLoginUserApplet().getUserId();
      TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, userId).eq(TChargingOrder::getChargingGunId, id)
            .eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getDelFlag, 0).orderByDesc(TChargingOrder::getStartTime).last(" limit 0, 1"));
      if(null == one){
      if(null == one || !one.getAppUserId().equals(userId)){
         return null;
      }
      ChargingDetails chargingDetails = new ChargingDetails();
@@ -959,12 +961,12 @@
         Integer h = Integer.valueOf(data.getCumulative_charging_time() / 60);
         Integer m = Integer.valueOf(data.getCumulative_charging_time() % 60);
         chargingDetails.setChargedTime(String.format("%02d", h) + ":" + String.format("%02d", m));
      }
      if(null != data && null != one.getAppUserCarId()){
         TAppUserCar appUserCar = appUserCarClient.getCarByIds(Arrays.asList(one.getAppUserCarId())).getData().get(0);
         //   续航 = 续航里程 * soc
         BigDecimal multiply = new BigDecimal(data.getSoc() / 100).multiply(new BigDecimal(appUserCar.getEndurance()));
         chargingDetails.setEndurance(multiply);
         if(null != one.getAppUserCarId()){
            TAppUserCar appUserCar = appUserCarClient.getCarById(one.getAppUserCarId().toString()).getData();
            //   续航 = 续航里程 * soc
            BigDecimal multiply = new BigDecimal(data.getSoc()).divide(new BigDecimal(100)).multiply(new BigDecimal(appUserCar.getEndurance()));
            chargingDetails.setEndurance(multiply.setScale(2, RoundingMode.HALF_EVEN));
         }
      }
      return chargingDetails;
   }
@@ -985,6 +987,10 @@
      }
      if(status == 4 || status == 5){
         return AjaxResult.error("不能重复操作");
      }
      Long userId = tokenService.getLoginUserApplet().getUserId();
      if(!order.getAppUserId().equals(userId)){
         return AjaxResult.error("权限不足");
      }
      TChargingOrder chargingOrder = new TChargingOrder();
      chargingOrder.setId(Long.valueOf(id));
@@ -1208,7 +1214,10 @@
         }
         dto.setUserIds(data);
      }
      Long userId = SecurityUtils.getUserId();
      Long userId = tokenService.getLoginUser().getUserid();
      // 查询当前登陆人按钮权限
      SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
      Integer roleType = sysUser.getRoleType();
      //如果没传siteId,获取当前登陆人所有的siteIds
      List<Integer> siteIds = new ArrayList<>();
      if (dto.getSiteId()==null){
@@ -1221,6 +1230,24 @@
      }else {
         siteIds.add(dto.getSiteId());
      }
      if (siteIds.isEmpty()){
         siteIds.add(-1);
      }else{
         if (roleType == 2){
            List<Integer> integers = new ArrayList<>();
            for (Integer siteId : siteIds) {
               // 校验有没有这个站点的权限
               List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
               Boolean b = t1.get(1);
               if (b){
                  integers.add(siteId);
               }
            }
            siteIds = integers;
         }
      }
      if (siteIds.isEmpty())siteIds.add(-1);
      dto.setSiteIds(siteIds);
      List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
      List<ChargingOrderVO> list1 = this.baseMapper.chargingOrder(pageInfo1,dto,startTime1,startTime2,endTime1,endTime2);
@@ -1232,7 +1259,16 @@
       BigDecimal commissionMoney = new BigDecimal("0");
       BigDecimal refundMoney = new BigDecimal("0");
       BigDecimal paymentMoney = new BigDecimal("0");
      for (ChargingOrderVO chargingOrderVO : list) {
         if (roleType == 2){
            for (Integer siteId : siteIds) {
               // 校验有没有这个站点的权限
               List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
               chargingOrderVO.setAuthRecord(t1.get(0));
            }
         }
         chargingOrderVO.setCommissionAmount(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
         chargingOrderVO.setPlatFormMoney(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
         chargingOrderVO.setUid(chargingOrderVO.getId()+"");
@@ -1251,7 +1287,7 @@
         List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>()
               .eq("charging_order_id", chargingOrderVO.getId()));
         UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData();
         if (data5!=null){
         if (data5!=null && data5.getCumulative_charging_time()!=null){
            long l = data5.getCumulative_charging_time() * 60L;
            chargingOrderVO.setChargingSecond(l);
         }
@@ -1278,13 +1314,13 @@
         paymentMoney= paymentMoney.add(chargingOrderVO.getPaymentAmount()!=null?chargingOrderVO.getPaymentAmount():new BigDecimal("0"));
         commissionMoney = commissionMoney.add(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
         if (chargingOrderVO.getChargingCapacity()!=null){
            total = total.add(chargingOrderVO.getElectricity());
            total = total.add(chargingOrderVO.getElectricity()!=null?chargingOrderVO.getElectricity():new BigDecimal("0"));
         }
         // 充电订单 明细记录
         List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>()
               .eq("charging_order_id", chargingOrderVO.getId()));
         UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData();
         if (data5!=null){
         if (data5!=null && data5.getCumulative_charging_time()!=null){
            long l = data5.getCumulative_charging_time() * 60L;
            chargingOrderVO.setChargingSecond(l);
            time+=l;
@@ -1353,8 +1389,8 @@
   }
   @Override
   public Map<String, Object> countAll(LocalDate sixBefore) {
      return this.baseMapper.countAll(sixBefore);
   public Map<String, Object> countAll(LocalDate sixBefore,List<Integer> siteIds) {
      return this.baseMapper.countAll(sixBefore,siteIds);
   }
   @Override
@@ -1382,7 +1418,8 @@
      return this.baseMapper.getYearData(chargingOrderIds);
   }
   @Resource
   private SysUserClient sysUserClient;
   @Override
   public ChargingOrderTimeVO chargingList(ChargingListQuery dto) {
      String startTime1 = null;
@@ -1426,7 +1463,10 @@
            dto.setCarIds(carIds);
         }
      }
      Long userId = SecurityUtils.getUserId();
      Long userId = tokenService.getLoginUser().getUserid();
      // 查询当前登陆人按钮权限
      SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
      Integer roleType = sysUser.getRoleType();
      //如果没传siteId,获取当前登陆人所有的siteIds
      List<Integer> siteIds = new ArrayList<>();
      if (dto.getSiteId()==null){
@@ -1439,10 +1479,33 @@
      }else {
         siteIds.add(dto.getSiteId());
      }
      if (siteIds.isEmpty()){
         siteIds.add(-1);
      }else{
         if (roleType == 2){
            List<Integer> integers = new ArrayList<>();
            for (Integer siteId : siteIds) {
               // 校验有没有这个站点的权限
               List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
               Boolean b = t1.get(1);
               if (b){
                  integers.add(siteId);
               }
            }
            siteIds = integers;
         }
      }
      dto.setSiteIds(siteIds);
      PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
      List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
      for (ChargingOrderListVO chargingOrderListVO : list) {
         if (roleType==2){
            List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
            chargingOrderListVO.setAuthInfo(data.get(0));
            chargingOrderListVO.setAuthCurve(data.get(1));
         }
         chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
         BigDecimal bigDecimal = new BigDecimal("0.006");
         if (chargingOrderListVO.getOrderAmount()!=null){
@@ -1865,68 +1928,132 @@
      chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
      SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
      for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
         Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
         try {
            AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
            //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
            Object invoke = null;
            switch (strategyDetail.getType()){
               case 1:
                  //充电度数
                  invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
                  break;
               case 2:
                  //充电度数
                  invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
                  break;
               case 3:
                  //充电度数
                  invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
                  break;
               case 4:
                  //充电度数
                  invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
                  break;
      try {
         //跨天
         if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
            //当天的
            //开始通过计费策略遍历解析每个时段的费用明细
            String start_time = vo.getStart_time();
            String end_time = vo.getEnd_time();
            long start = sdfs.parse(start_time).getTime();
            long end = sdfs.parse(end_time).getTime();
            boolean b = false;
            Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
            for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
               AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
               long time = sdfs.parse(start_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime();
               if(start >= time){
                  b = true;
               }
               //开始充电
               if(b){
                  //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
                  Object invoke = null;
                  switch (strategyDetail.getType()){
                     case 1:
                        //充电度数
                        invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
                        break;
                     case 2:
                        //充电度数
                        invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
                        break;
                     case 3:
                        //充电度数
                        invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
                        break;
                     case 4:
                        //充电度数
                        invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
                        break;
                  }
                  if(null == invoke || Double.valueOf(invoke.toString()) == 0){
                     continue;
                  }
                  BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
                  AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
                  BeanUtils.copyProperties(strategyDetail, vo1);
                  vo1.setChargingCapacity(sharp_peak_charge);
                  lists.add(vo1);
               }
            }
            if(null == invoke || Double.valueOf(invoke.toString()) == 0){
               continue;
            //第二天的
            //开始通过计费策略遍历解析每个时段的费用明细
            for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
               AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
               long time = sdfs.parse(end_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime();
               if(time > end){
                  break;
               }
               //开始充电
               if(b){
                  //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
                  Object invoke = null;
                  switch (strategyDetail.getType()){
                     case 1:
                        //充电度数
                        invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
                        break;
                     case 2:
                        //充电度数
                        invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
                        break;
                     case 3:
                        //充电度数
                        invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
                        break;
                     case 4:
                        //充电度数
                        invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
                        break;
                  }
                  if(null == invoke || Double.valueOf(invoke.toString()) == 0){
                     continue;
                  }
                  BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
                  AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
                  BeanUtils.copyProperties(strategyDetail, vo1);
                  vo1.setChargingCapacity(sharp_peak_charge);
                  lists.add(vo1);
               }
            }
            BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
            AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
            BeanUtils.copyProperties(strategyDetail, vo1);
            vo1.setStart(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime());
            vo1.setEnd(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime());
            vo1.setChargingCapacity(sharp_peak_charge);
            lists.add(vo1);
         } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
         } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
         } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
         } catch (ParseException e) {
            throw new RuntimeException(e);
         }else{
            for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
               Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
               AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
               //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
               Object invoke = null;
               switch (strategyDetail.getType()){
                  case 1:
                     //充电度数
                     invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
                     break;
                  case 2:
                     //充电度数
                     invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
                     break;
                  case 3:
                     //充电度数
                     invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
                     break;
                  case 4:
                     //充电度数
                     invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
                     break;
               }
               if(null == invoke || Double.valueOf(invoke.toString()) == 0){
                  continue;
               }
               BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
               AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
               BeanUtils.copyProperties(strategyDetail, vo1);
               vo1.setChargingCapacity(sharp_peak_charge);
               lists.add(vo1);
            }
         }
      }
      Collections.sort(lists, new Comparator<AccountingStrategyDetailOrderVo>() {
         public int compare(AccountingStrategyDetailOrderVo s1, AccountingStrategyDetailOrderVo s2) {
            return s1.getStart() < s2.getStart() ? -1 : s1.getStart() == s2.getStart() ? 0 : 1;
         }
      });
      if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
         List<AccountingStrategyDetailOrderVo> list1 = new ArrayList<>(lists);
         for (AccountingStrategyDetailOrderVo orderVo : list1) {
            Calendar start = Calendar.getInstance();
            start.setTimeInMillis(orderVo.getStart());
            start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1);
            orderVo.setStart(start.getTimeInMillis());
            Calendar end = Calendar.getInstance();
            end.setTimeInMillis(orderVo.getEnd());
            end.set(Calendar.DAY_OF_YEAR, end.get(Calendar.DAY_OF_YEAR) + 1);
            orderVo.setEnd(end.getTimeInMillis());
         }
         lists.addAll(list1);
      }catch (Exception e){
         e.printStackTrace();
      }
      
      //开始处理明细
@@ -2210,8 +2337,7 @@
            dto.setRefundReason("充电完成退款");
            RefundResp resp = aliPaymentClient.refund(dto).getData();
            if(null != resp){
               SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
               AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date()));
               AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", null);
               if(success.isSuccess()){
                  chargingOrderRefundService.save(chargingOrderRefund);
               }
@@ -2242,8 +2368,8 @@
   }
   @Override
   public List<Map<String, Object>> usersDay() {
      return this.baseMapper.usersDay();
   public List<Map<String, Object>> usersDay(ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.usersDay(statisticsQueryDto);
   }
   @Override
@@ -2709,7 +2835,10 @@
      }
      dto.setStartTime(startTime);
      dto.setEndTime(endTime);
      Long userId = SecurityUtils.getUserId();
      Long userId = tokenService.getLoginUser().getUserid();
      // 查询当前登陆人按钮权限
      SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
      Integer roleType = sysUser.getRoleType();
      //如果没传siteId,获取当前登陆人所有的siteIds
      List<Integer> siteIds = new ArrayList<>();
      if (dto.getSiteIds()==null){
@@ -2722,10 +2851,33 @@
      }else {
         siteIds.add(dto.getSiteIds());
      }
      if (siteIds.isEmpty()){
         siteIds.add(-1);
      }else{
         if (roleType == 2){
            List<Integer> integers = new ArrayList<>();
            for (Integer siteId : siteIds) {
               // 校验有没有这个站点的权限
               List<Boolean> t1= partnerClient.getSettlementListMenu(sysUser.getObjectId(),siteId).getData();
               Boolean b = t1.get(2);
               if (b){
                  integers.add(siteId);
               }
            }
            siteIds = integers;
         }
      }
      dto.setSiteIdss(siteIds);
      PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
      List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
      for (TSettlementConfirm tSettlementConfirm : list) {
         if (roleType==2){
            List<Boolean> data = partnerClient.getSettlementListMenu(sysUser.getObjectId(), tSettlementConfirm.getSiteId()).getData();
            tSettlementConfirm.setAuthDownLoad(data.get(0));
            tSettlementConfirm.setAuthDelete(data.get(1));
         }
         tSettlementConfirm.setUid(tSettlementConfirm.getId().toString());
         List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
         if (!data1.isEmpty()){
@@ -2748,7 +2900,7 @@
   @Override
   public SettlementTotalVO settlementTotal(String time) {
      Long userId = SecurityUtils.getUserId();
      Long userId = tokenService.getLoginUser().getUserid();
      //如果没传siteId,获取当前登陆人所有的siteIds
      List<Integer> siteIds = new ArrayList<>();
      if (userId != null){
@@ -2756,6 +2908,9 @@
            for (GetSiteListDTO datum : data) {
               siteIds.add(datum.getId());
            }
      }
      if (siteIds.isEmpty()){
         siteIds.add(-1);
      }
      SettlementTotalVO res = new SettlementTotalVO();
      List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
@@ -2994,6 +3149,9 @@
            for (GetSiteListDTO datum : data) {
               siteIds.add(datum.getId());
            }
      }
      if (siteIds.isEmpty()){
         siteIds.add(-1);
      }
      SettlementTotalVO res = new SettlementTotalVO();
      List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
@@ -3303,6 +3461,10 @@
   public EndOfChargePageInfo getEndOfChargePageInfo(String id) {
      EndOfChargePageInfo info = new EndOfChargePageInfo();
      TChargingOrder chargingOrder = this.getById(id);
      Long userId = tokenService.getLoginUserApplet().getUserId();
      if(!chargingOrder.getAppUserId().equals(userId)){
         throw new RuntimeException("权限不足");
      }
      info.setId(id);
      info.setCode(chargingOrder.getCode());
      info.setPaymentAmount(chargingOrder.getPaymentAmount());