From e9f36d42efaa757c7f93b00ba3ff9fb0d0bf46c9 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期一, 14 十月 2024 17:11:26 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 796 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 404 insertions(+), 392 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index a0b4ccd..be2102b 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -557,80 +557,83 @@ //根据支付金额,获取出使用的计费策略明细 //计算电费金额和服务费 BigDecimal serviceCharge = BigDecimal.ZERO; - BigDecimal electrovalence = BigDecimal.ZERO; BigDecimal discountAmount = BigDecimal.ZERO; BigDecimal discount = chargingOrder.getVipDiscount(); //先根据额定功率计算出每秒充电度数,然后计算出支付金额能充多少度电 TChargingGun tChargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + //1秒充电度数 BigDecimal s_degrees = tChargingGun.getRatedPower().divide(new BigDecimal(3600), 6, RoundingMode.HALF_EVEN); - + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); - List<AccountingStrategyDetailOrder> list = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); - for (AccountingStrategyDetailOrder accountingStrategyDetailOrder : list) { - Integer start = Integer.valueOf(accountingStrategyDetailOrder.getStartTime().replaceAll(":", "")); - Integer end = Integer.valueOf(accountingStrategyDetailOrder.getEndTime().replaceAll(":", "")); - String[] split = accountingStrategyDetailOrder.getEndTime().split(":"); - if(now >= start && now < end){ - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0])); - calendar.set(Calendar.MINUTE, Integer.valueOf(split[1])); - //到此策略结束的秒数 - if(null == nowTimeMillis){ - String[] split1 = accountingStrategyDetailOrder.getStartTime().split(":"); - Calendar calendar1 = Calendar.getInstance(); - calendar1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0])); - calendar1.set(Calendar.MINUTE, Integer.valueOf(split1[1])); - nowTimeMillis = calendar.getTimeInMillis(); + //判断会员是否还有充电优惠次数,计算会员优惠的折扣金额 + if(null != appUser.getVipId()){ + GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); + getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId()); + getAppUserVipDetail.setVipId(appUser.getVipId()); + TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData(); + if(null != data && data.getChargeNum() > 0){ + //计算折扣 + List<AccountingStrategyDetailOrder> list = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); + //将数据叠加两份,处理跨天的情况 + list.addAll(list); + boolean sta = false; + for (AccountingStrategyDetailOrder accountingStrategyDetailOrder : list) { + Integer start = Integer.valueOf(accountingStrategyDetailOrder.getStartTime().replaceAll(":", "")); + Integer end = Integer.valueOf(accountingStrategyDetailOrder.getEndTime().replaceAll(":", "")); + String[] split = accountingStrategyDetailOrder.getEndTime().split(":"); + if(sta || now >= start){ + sta = true; + + Calendar end_calendar = Calendar.getInstance(); + end_calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0])); + end_calendar.set(Calendar.MINUTE, Integer.valueOf(split[1])); + //到此策略结束的秒数 + if(null == nowTimeMillis){ + String[] split1 = accountingStrategyDetailOrder.getStartTime().split(":"); + Calendar start_calendar = Calendar.getInstance(); + start_calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0])); + start_calendar.set(Calendar.MINUTE, Integer.valueOf(split1[1])); + nowTimeMillis = start_calendar.getTimeInMillis(); + } + //间隔秒数 + long m = (end_calendar.getTimeInMillis() - nowTimeMillis) / 1000; + //每秒需要支付的服务费金额 + BigDecimal total_until = accountingStrategyDetailOrder.getElectrovalence().add(accountingStrategyDetailOrder.getServiceCharge()); + BigDecimal s_total_amount = s_degrees.multiply(total_until); + //每秒需要支付的服务费金额 + BigDecimal s_server_amount = s_degrees.multiply(accountingStrategyDetailOrder.getServiceCharge()); + //计算剩余金额能充多长时间的电 + long times = rechargeAmount1.divide(s_server_amount, 0, RoundingMode.DOWN).longValue(); + if(times > m){ + //充电时间跨度两个计费策略,需要继续对下一个策略进行计算 + serviceCharge = s_server_amount.multiply(new BigDecimal(m)); + discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(10).subtract(discount)).divide(new BigDecimal(10)))); + rechargeAmount1 = rechargeAmount1.subtract(s_total_amount.multiply(new BigDecimal(m))); + nowTimeMillis = null; + }else{ + serviceCharge = s_server_amount.multiply(new BigDecimal(times)); + discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(10).subtract(discount)).divide(new BigDecimal(10)))); + break; + } + } } - long m = (calendar.getTimeInMillis() - nowTimeMillis) / 1000; - //每度电的单价 - BigDecimal total_unit = accountingStrategyDetailOrder.getElectrovalence().add(accountingStrategyDetailOrder.getServiceCharge()); - //每秒需要支付的金额 - BigDecimal multiply = s_degrees.multiply(total_unit); - //计算充值金额能充多长时间的电 - long times = rechargeAmount1.divide(multiply, 0, RoundingMode.DOWN).longValue(); - if(times > m){ - //充电时间跨度两个计费策略,需要继续对下一个策略进行计算 - electrovalence = accountingStrategyDetailOrder.getElectrovalence().multiply(s_degrees).multiply(new BigDecimal(m)); - serviceCharge = accountingStrategyDetailOrder.getServiceCharge().multiply(s_degrees).multiply(new BigDecimal(m)); - discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(10).subtract(discount)).divide(new BigDecimal(10)))); - rechargeAmount1 = rechargeAmount1.subtract(multiply.multiply(new BigDecimal(m))); - nowTimeMillis = null; - }else{ - electrovalence = accountingStrategyDetailOrder.getElectrovalence().multiply(s_degrees).multiply(new BigDecimal(times)); - serviceCharge = accountingStrategyDetailOrder.getServiceCharge().multiply(s_degrees).multiply(new BigDecimal(times)); - discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(10).subtract(discount)).divide(new BigDecimal(10)))); - break; + if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){ + //计算会员最大优惠金额 + TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); + BigDecimal maximumDeduction = vip.getMaximumDeduction(); + //普通会员有最高优惠限制 + if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){ + discountAmount = maximumDeduction; + } } - } - } - if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){ - //计算会员最大优惠金额 - if(null != appUser.getVipId()){ - TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); - BigDecimal maximumDeduction = vip.getMaximumDeduction(); - //普通会员有最高优惠限制 - if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){ - discountAmount = maximumDeduction; - } - - //判断会员是否还有充电优惠次数 - GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); - getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId()); - getAppUserVipDetail.setVipId(appUser.getVipId()); - TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData(); - if(null != data && data.getChargeNum() > 0){ - data.setChargeNum(data.getChargeNum() - 1); - appUserVipDetailClient.updateAppUserVipDetail(data); - //会员有充电优惠次数,直接将优惠金额加入到充电费用中增加充电时长 - electrovalence = electrovalence.add(discountAmount); - } + discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN); } } - electrovalence = electrovalence.setScale(4, RoundingMode.HALF_EVEN); - discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN); - chargingOrder.setChargeAmount(electrovalence); + + //机子上显示的金额为用户充值的金额+会员折扣金额 + BigDecimal account_balance = chargingOrder.getRechargeAmount().add(discountAmount).setScale(4, RoundingMode.HALF_EVEN); + chargingOrder.setChargeAmount(account_balance); chargingOrder.setVipDiscountAmount(discountAmount); this.updateById(chargingOrder); @@ -643,7 +646,7 @@ platformStartCharging.setCharging_gun_code(tChargingGun.getCode()); //使用订单id作为逻辑卡号 platformStartCharging.setCard_number(chargingOrder.getId().toString()); - platformStartCharging.setAccount_balance(electrovalence); + platformStartCharging.setAccount_balance(account_balance); log.error(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString()); sendMessageClient.platformStartCharging(platformStartCharging); @@ -679,7 +682,7 @@ if(null != preChargeCheck1){ preChargeCheck1.setElectronicLockLock(true); preChargeCheck1.setInsulationTesting(true); - preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection()); + preChargeCheck1.setSecureConnectionDetection(securityDetection.getSecure_connection() == 1); preChargeCheck1.setStartupSuccess(1); redisService.setCacheObject("AQJC_" + chargingOrder.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS); } @@ -773,8 +776,7 @@ if(null != preChargeCheck1){ preChargeCheck1.setElectronicLockLock(true); preChargeCheck1.setInsulationTesting(true); - preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection()); - preChargeCheck1.setStartupSuccess(1); + preChargeCheck1.setSecureConnectionDetection(securityDetection.getSecure_connection() == 1); redisService.setCacheObject("AQJC_" + chargingGun.getId(), preChargeCheck1, 24L, TimeUnit.HOURS); } } @@ -796,7 +798,6 @@ if(null != preChargeCheck1){ preChargeCheck1.setElectronicLockLock(true); preChargeCheck1.setInsulationTesting(true); - preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection()); preChargeCheck1.setStartupSuccess(1); } if(0 == startup_result){ @@ -910,7 +911,7 @@ public ChargingDetails getChargingDetails(Integer id) { Long userId = tokenService.getLoginUserApplet().getUserId(); TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, userId).eq(TChargingOrder::getChargingGunId, id) - .in(TChargingOrder::getStatus, Arrays.asList(1, 2, 3)).eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getDelFlag, 0)); + .eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getDelFlag, 0).orderByDesc(TChargingOrder::getStartTime).last(" limit 0, 1")); if(null == one){ return null; } @@ -968,6 +969,96 @@ chargingOrder.setEndMode(1); this.updateById(chargingOrder); + String code1 = chargingOrder.getCode(); + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + //异步线程处理停机 + ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1); + cachedThreadPool.execute(()->{ + //调用硬件停止充电,停止成功后开始计算费用退款 + TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingOrder.getChargingPileId()).getData(); + PlatformStopCharging platformStopCharging = new PlatformStopCharging(); + platformStopCharging.setCharging_pile_code(chargingPile.getCode()); + platformStopCharging.setCharging_gun_code(chargingGun.getCode()); + sendMessageClient.platformStopCharging(platformStopCharging); + log.error(code1 + ":-------------------远程停止充电请求-------------------"); + log.error(platformStopCharging.toString()); + //开始查询停机应答,成功后开始计费费用 + boolean stop_status = false; + for (int i = 0; i < 60; i++) { + TChargingOrder chargingOrder1 = this.getById(id); + if(chargingOrder1.getStatus() != 3){ + break; + } + GetPlatformStopChargingReply query = new GetPlatformStopChargingReply(); + query.setCharging_gun_code(chargingGun.getCode()); + query.setCharging_pile_code(chargingPile.getCode()); + query.setEnd_time(chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData(); + log.error(code1 + ":-------------------查询远程停止充电应答-------------------"); + if(null == reply){ + log.error(code1 + ":-------------------远程停止充电应答无数据-------------------"); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + continue; + } + log.error(reply.toString()); + + if(0 == reply.getStop_result()){ + String failure_cause = ""; + switch (reply.getFailure_cause()){ + case 0: + failure_cause = "无"; + break; + case 1: + failure_cause = "设备编号不匹配"; + break; + case 2: + failure_cause = "枪未处于充电状态"; + break; + case 3: + failure_cause = "其他"; + break; + } + log.error(code1 + ":停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + continue; + }else{ + log.error(code1 + ":-------------------远程停止充电请求成功-------------------"); + stop_status = true; + } + break; + } + if(stop_status){ + chargingOrder.setStatus(5); + this.updateById(chargingOrder); + + //计算用户标签 + editUserTag(chargingOrder); + //用户推荐奖励 + referralReward(chargingOrder); + // 将枪状态重置为空闲 + chargingGun.setStatus(2); + chargingGunClient.updateChargingGunById(chargingGun); + }else{ + log.error(code1 + ":-------------------远程停止充电应答最终失败-------------------"); + } + }); + return AjaxResult.success(); + } + + + /** + * 结束充电后处理用户标签数据 + * @param chargingOrder + */ + public void editUserTag(TChargingOrder chargingOrder){ //处理用户标签数据 List<TUserTag> data = userTagClient.getAllUserTag().getData(); //累计充电次数 @@ -1024,79 +1115,14 @@ } } } - String code1 = chargingOrder.getCode(); - - //异步线程处理停机 - ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1); - cachedThreadPool.execute(()->{ - //调用硬件停止充电,停止成功后开始计算费用退款 - TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingOrder.getChargingPileId()).getData(); - TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); - PlatformStopCharging platformStopCharging = new PlatformStopCharging(); - platformStopCharging.setCharging_pile_code(chargingPile.getCode()); - platformStopCharging.setCharging_gun_code(chargingGun.getCode()); - sendMessageClient.platformStopCharging(platformStopCharging); - log.error(code1 + ":-------------------远程停止充电请求-------------------"); - log.error(platformStopCharging.toString()); - //开始查询停机应答,成功后开始计费费用 - for (int i = 0; i < 60; i++) { - GetPlatformStopChargingReply query = new GetPlatformStopChargingReply(); - query.setCharging_gun_code(chargingGun.getCode()); - query.setCharging_pile_code(chargingPile.getCode()); - query.setEnd_time(chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData(); - log.error(code1 + ":-------------------查询远程停止充电应答-------------------"); - if(null == reply){ - log.error(code1 + ":-------------------远程停止充电应答无数据-------------------"); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - continue; - } - log.error(reply.toString()); - TChargingOrder chargingOrder1 = this.getById(id); - if(chargingOrder1.getStatus() != 3){ - break; - } - - if(0 == reply.getStop_result()){ - String failure_cause = ""; - switch (reply.getFailure_cause()){ - case 0: - failure_cause = "无"; - break; - case 1: - failure_cause = "设备编号不匹配"; - break; - case 2: - failure_cause = "枪未处于充电状态"; - break; - case 3: - failure_cause = "其他"; - break; - } - log.error(code1 + ":停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - continue; - } - - // 将枪状态重置为空闲 - chargingGun.setStatus(2); - chargingGunClient.updateChargingGunById(chargingGun); - //计算费用,处理退款 - endCharge(chargingOrder); - log.error(code1 + ":-------------------远程停止充电请求成功-------------------"); - break; - } - }); - - + } + + + /** + * 推荐奖励(被推荐首单奖励) + * @param chargingOrder + */ + public void referralReward(TChargingOrder chargingOrder){ //处理推荐奖励(被推荐首单奖励) TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); long count = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId()) @@ -1140,14 +1166,12 @@ appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints()); appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1); appUserIntegralChange.setCreateTime(LocalDateTime.now()); - appUserIntegralChange.setOrderCode(code1); + appUserIntegralChange.setOrderCode(chargingOrder.getCode()); appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); - + appUser1.setPoints(appUser1.getPoints() + num1); appUserClient.updateAppUser(appUser1); } - - return AjaxResult.success(); } @@ -1167,6 +1191,7 @@ if(null != order && order.getStatus() != 3){ return; } + String code1 = order.getCode(); if(0 == platformStopChargingReply.getStop_result()){ String failure_cause = ""; @@ -1185,177 +1210,22 @@ break; } log.error(code1 + ":停机失败:订单号:{},失败原因:{}", order.getCode(), failure_cause); - return; + }else{ + order.setEndTime(LocalDateTime.now()); + order.setStatus(5); + order.setEndMode(1); + this.updateById(order); + //计算用户标签 + editUserTag(order); + //用户推荐奖励 + referralReward(order); + // 将枪状态重置为空闲 + chargingGun.setStatus(2); + chargingGunClient.updateChargingGunById(chargingGun); } - - // 将枪状态重置为空闲 - chargingGun.setStatus(2); - chargingGunClient.updateChargingGunById(chargingGun); - //计算费用,处理退款 - endCharge(order); } - - - - /** - * 手动结束后的费用计算和退款逻辑 - */ - @GlobalTransactional(rollbackFor = Exception.class) - public void endCharge(TChargingOrder chargingOrder){ - //如果使用优惠券需要判断优惠券是否满足使用条件 - //根据实际的充电金额计算退款金额 退回费用=(原金额/总金额)*(总金额-实际充电金额) - //退款金额=优惠券金额+剩余充电金额 - List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())); - BigDecimal total = BigDecimal.ZERO; - for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) { - BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice(); - BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice(); - total = total.add(periodElectricPrice).add(periodServicePrice); - } - BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); - BigDecimal vipDiscountAmount = chargingOrder.getVipDiscountAmount(); - BigDecimal decimal = rechargeAmount.add(vipDiscountAmount); - //退款金额(已经计算了折扣优惠部分) - BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total)); - BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue()); - BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue()); - if(null != chargingOrder.getVipDiscount()){ - orderAmount = orderAmount.divide(chargingOrder.getVipDiscount().divide(new BigDecimal(10))); - chargingOrder.setOrderAmount(total); - } - - if(chargingOrder.getEndMode() == 2){ - chargingOrder.setEndMode(refundAmount.compareTo(BigDecimal.ZERO) > 0 ? 2 : 3); - } - chargingOrder.setStatus(5); - chargingOrder.setPaymentAmount(payAmount); - this.updateById(chargingOrder); - - //添加积分 - 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 = payAmount.multiply(new BigDecimal(num1)).intValue(); - if(null != appUser.getVipId()){ - TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); - Integer doubleIntegration = vip.getDoubleIntegration(); - //双倍积分 - if(1 == doubleIntegration){ - integral *= 2; - } - } - - 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()); - appUserClient.updateAppUser(appUser); - appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); - } - - //计算优惠券 - if(null != chargingOrder.getAppCouponId()){ - //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。 - TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData(); - String couponJson = appCoupon.getCouponJson(); - TCoupon tCoupon = JSON.parseObject(couponJson, TCoupon.class); - Integer preferentialMode = tCoupon.getPreferentialMode(); - if(1 == preferentialMode){ - //满减 - if(total.compareTo(tCoupon.getMeetTheConditions()) >= 0){ - refundAmount = refundAmount.add(tCoupon.getDiscountAmount()); - chargingOrder.setCouponDiscountAmount(tCoupon.getDiscountAmount()); - payAmount = payAmount.subtract(tCoupon.getDiscountAmount()); - }else{ - chargingOrder.setAppCouponId(null); - chargingOrder.setCouponDiscountAmount(BigDecimal.ZERO); - appCouponClient.refund(chargingOrder.getAppCouponId().toString()); - } - } - if(2 == preferentialMode){ - //抵扣 - if(total.compareTo(tCoupon.getMeetTheConditions()) >= 0){ - //折扣金额 - BigDecimal divide = total.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10)); - divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide; - refundAmount = refundAmount.add(divide); - chargingOrder.setCouponDiscountAmount(divide); - payAmount = payAmount.subtract(divide); - }else{ - chargingOrder.setAppCouponId(null); - chargingOrder.setCouponDiscountAmount(BigDecimal.ZERO); - appCouponClient.refund(chargingOrder.getAppCouponId().toString()); - } - } - } - - if(null != chargingOrder.getVipDiscount()){ - BigDecimal subtract = orderAmount.subtract(total); - chargingOrder.setVipDiscountAmount(subtract); - payAmount = payAmount.subtract(subtract); - } - //开始构建退款费用 - 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("充电完成退款"); - 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.getCode()); - dto.setRefundAmount(rechargeAmount.toString()); - 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())); - if(success.isSuccess()){ - chargingOrderRefundService.save(chargingOrderRefund); - } - } - } - - } - - - } @@ -1855,6 +1725,7 @@ chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence()); chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge()); chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge()); + //已充电总度数 BigDecimal charging_degree = query.getCharging_degree(); BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree); BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree); @@ -1871,9 +1742,7 @@ chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy); }else{ if(chargingOrderAccountingStrategy.getAccountingStrategyDetailId().equals(strategyDetail.getId())){ - BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice(); - BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice(); - BigDecimal periodOriginalServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice(); + //已充电总度数 BigDecimal charging_degree = query.getCharging_degree(); BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree); BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree); @@ -1882,24 +1751,23 @@ if(null != chargingOrder.getVipDiscount()){ serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10))); } - periodServicePrice = periodServicePrice.add(serviceCharge); - periodOriginalServicePrice = periodOriginalServicePrice.add(originalServicePrice); - periodElectricPrice = periodElectricPrice.add(electrovalenc); - chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice); - chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(periodOriginalServicePrice); - chargingOrderAccountingStrategy.setPeriodElectricPrice(periodElectricPrice); + chargingOrderAccountingStrategy.setChargingCapacity(charging_degree); + chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc); + chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge); + chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice); chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm"))); chargingOrderAccountingStrategyService.updateById(chargingOrderAccountingStrategy); }else{ - TChargingOrderAccountingStrategy chargingOrderAccountingStrategy1 = new TChargingOrderAccountingStrategy(); - chargingOrderAccountingStrategy1.setChargingOrderId(chargingOrder.getId()); - chargingOrderAccountingStrategy1.setAccountingStrategyDetailId(strategyDetail.getId()); - chargingOrderAccountingStrategy1.setType(strategyDetail.getType()); - chargingOrderAccountingStrategy1.setStartTime(chargingOrderAccountingStrategy.getEndTime()); - chargingOrderAccountingStrategy1.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm"))); - chargingOrderAccountingStrategy1.setElectrovalence(strategyDetail.getElectrovalence()); - chargingOrderAccountingStrategy1.setServiceCharge(strategyDetail.getServiceCharge()); - chargingOrderAccountingStrategy1.setCostServiceCharge(strategyDetail.getCostServiceCharge()); + chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy(); + chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId()); + chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId()); + chargingOrderAccountingStrategy.setType(strategyDetail.getType()); + chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm"))); + chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm"))); + chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence()); + chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge()); + chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge()); + //已充电总度数 BigDecimal charging_degree = query.getCharging_degree(); BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree); BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree); @@ -1908,22 +1776,23 @@ if(null != chargingOrder.getVipDiscount()){ serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10))); } - chargingOrderAccountingStrategy1.setChargingCapacity(charging_degree); - chargingOrderAccountingStrategy1.setPeriodElectricPrice(electrovalenc); - chargingOrderAccountingStrategy1.setPeriodOriginalServicePrice(originalServicePrice); - chargingOrderAccountingStrategy1.setPeriodServicePrice(serviceCharge); - chargingOrderAccountingStrategy1.setCreateTime(LocalDateTime.now()); - chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy1); + chargingOrderAccountingStrategy.setChargingCapacity(charging_degree); + chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc); + chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge); + chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice); + chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); + chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy); } } List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())); + //总充电金额 BigDecimal t = BigDecimal.ZERO; for (TChargingOrderAccountingStrategy coas : list) { t = t.add(coas.getPeriodServicePrice()).add(coas.getPeriodElectricPrice()); } - BigDecimal residualAmount = chargingOrder.getRechargeAmount().subtract(t).setScale(2, RoundingMode.HALF_EVEN); + BigDecimal residualAmount = chargingOrder.getRechargeAmount().subtract(t).setScale(4, RoundingMode.HALF_EVEN); chargingOrder.setResidualAmount(residualAmount); BigDecimal divide = query.getOutput_current().multiply(query.getOutput_voltage()).divide(new BigDecimal(1000)); chargingOrder.setChargingPower(divide); @@ -1946,61 +1815,17 @@ } chargingOrder.setStatus(5); chargingOrder.setEndMode(endMode); + chargingOrder.setEndTime(LocalDateTime.now()); this.updateById(chargingOrder); - - //计算费用,处理退款 - endCharge(chargingOrder); + // 将枪状态重置为空闲 + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + chargingGun.setStatus(2); + chargingGunClient.updateChargingGunById(chargingGun); - //处理推荐奖励(被推荐首单奖励) - TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); - long count = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId()) - .eq(TChargingOrder::getStatus, 5).isNull(TChargingOrder::getEndMode).eq(TChargingOrder::getDelFlag, 0)); - if(null != appUser.getInviteUserId() && 1 == count){ - TIntegralRule integralRule = integralRuleClient.getSet().getData(); - String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints(); - JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints); - Integer num1 = jsonObject.getInteger("num1"); - - TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); - if(null != appUser1.getVipId()){ - TVip vip = vipClient.getInfo1(appUser1.getVipId()).getData(); - Integer doubleIntegration = vip.getDoubleIntegration(); - //双倍积分 - if(1 == doubleIntegration){ - num1 *= 2; - } - } - - GetInviteUser query = new GetInviteUser(); - query.setAppUserId(appUser1.getId()); - query.setBeInvitedAppUserId(chargingOrder.getAppUserId()); - TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData(); - if(null == inviteUser){ - inviteUser = new TInviteUser(); - inviteUser.setAppUserId(appUser1.getId()); - inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId()); - inviteUser.setAward(num1); - inviteUser.setCreateTime(LocalDateTime.now()); - inviteUserClient.saveInviteUser(inviteUser); - }else{ - inviteUser.setAward(num1); - inviteUserClient.updateInviteUser(inviteUser); - } - TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); - String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); - appUserIntegralChange.setCode(code); - appUserIntegralChange.setAppUserId(appUser1.getId()); - appUserIntegralChange.setChangeType(5); - appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints()); - appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1); - appUserIntegralChange.setCreateTime(LocalDateTime.now()); - appUserIntegralChange.setOrderCode(chargingOrder.getCode()); - appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); - - appUser1.setPoints(appUser1.getPoints() + num1); - appUserClient.updateAppUser(appUser1); - } - + //计算用户标签 + editUserTag(chargingOrder); + //用户推荐奖励 + referralReward(chargingOrder); } /** @@ -2011,7 +1836,194 @@ public void excelEndCharge(String orderCode) { endCharge(orderCode, 0); } - + + + /** + * 停止充电返回账单后计算费用 + * @param vo + */ + @Override + @GlobalTransactional(rollbackFor = Exception.class) + public void endChargeBillingCharge(TransactionRecordMessageVO vo) { + //如果使用优惠券需要判断优惠券是否满足使用条件 + //根据实际的充电金额计算退款金额 退回费用=(原金额/总金额)*(总金额-实际充电金额) + //退款金额=优惠券金额+剩余充电金额 + TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number())); + List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())); + BigDecimal periodElectricPrice_total = BigDecimal.ZERO; + BigDecimal periodServicePrice_total = BigDecimal.ZERO; + BigDecimal total = BigDecimal.ZERO; + for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) { + BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice(); + BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice(); + periodElectricPrice_total = periodElectricPrice_total.add(periodElectricPrice); + periodServicePrice_total = periodServicePrice_total.add(periodServicePrice); + total = total.add(periodElectricPrice).add(periodServicePrice); + } + //原金额 + BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); + BigDecimal vipDiscountAmount = chargingOrder.getVipDiscountAmount(); + //总金额(充值金额+会员折扣金额) + BigDecimal decimal = rechargeAmount.add(vipDiscountAmount); + //退款金额(已经计算了折扣优惠部分) + BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total)); + BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue()); + BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue()); + //折扣金额 + BigDecimal discountAmount = BigDecimal.ZERO; + if(null != chargingOrder.getVipDiscount()){ + //服务费折扣 + discountAmount = periodServicePrice_total.multiply((new BigDecimal(10).subtract(chargingOrder.getVipDiscount())).divide(new BigDecimal(10))); + + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); + if(null != appUser.getVipId()){ + //判断会员是否还有充电优惠次数 + GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); + getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId()); + getAppUserVipDetail.setVipId(appUser.getVipId()); + TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData(); + if(null != data && data.getChargeNum() > 0){ + data.setChargeNum(data.getChargeNum() - 1); + appUserVipDetailClient.updateAppUserVipDetail(data); + } + + TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); + BigDecimal maximumDeduction = vip.getMaximumDeduction(); + //普通会员有最高优惠限制 + if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){ + discountAmount = maximumDeduction; + } + } + payAmount = payAmount.subtract(discountAmount); + } + + if(chargingOrder.getEndMode() == 2){ + chargingOrder.setEndMode(refundAmount.compareTo(BigDecimal.ZERO) > 0 ? 2 : 3); + } + chargingOrder.setStatus(5); + chargingOrder.setOrderAmount(orderAmount); + chargingOrder.setVipDiscountAmount(discountAmount); + + //计算优惠券 + if(null != chargingOrder.getAppCouponId()){ + //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。 + TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData(); + String couponJson = appCoupon.getCouponJson(); + TCoupon tCoupon = JSON.parseObject(couponJson, TCoupon.class); + Integer preferentialMode = tCoupon.getPreferentialMode(); + if(1 == preferentialMode){ + //满减 + if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){ + refundAmount = refundAmount.add(tCoupon.getDiscountAmount()); + chargingOrder.setCouponDiscountAmount(tCoupon.getDiscountAmount()); + payAmount = payAmount.subtract(tCoupon.getDiscountAmount()); + }else{ + chargingOrder.setAppCouponId(null); + chargingOrder.setCouponDiscountAmount(BigDecimal.ZERO); + appCouponClient.refund(chargingOrder.getAppCouponId().toString()); + } + } + if(2 == preferentialMode){ + //抵扣 + if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){ + //折扣金额 + BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10)); + divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide; + refundAmount = refundAmount.add(divide); + chargingOrder.setCouponDiscountAmount(divide); + payAmount = payAmount.subtract(divide); + }else{ + chargingOrder.setAppCouponId(null); + chargingOrder.setCouponDiscountAmount(BigDecimal.ZERO); + appCouponClient.refund(chargingOrder.getAppCouponId().toString()); + } + } + } + chargingOrder.setPaymentAmount(payAmount); + this.updateById(chargingOrder); + + //添加积分 + 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 = payAmount.multiply(new BigDecimal(num1)).intValue(); + if(null != appUser.getVipId()){ + TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); + Integer doubleIntegration = vip.getDoubleIntegration(); + //双倍积分 + if(1 == doubleIntegration){ + integral *= 2; + } + } + + 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()); + appUserClient.updateAppUser(appUser); + appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); + } + + + //开始构建退款费用 + 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("充电完成退款"); + 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.getCode()); + dto.setRefundAmount(rechargeAmount.toString()); + 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())); + if(success.isSuccess()){ + chargingOrderRefundService.save(chargingOrderRefund); + } + } + } + + } + } + @Override public List<Map<String, Object>> getByDate(List<Long> chargingOrderIds) { return this.baseMapper.getByDate(chargingOrderIds); -- Gitblit v1.7.1