Pu Zhibing
2025-02-10 4c62b64cc158ed07f18ae7060dae71f9d1e3d9fd
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());