From fae0d05a554efbf92ca5c425009a8a4d2ef89aea Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 14 十月 2024 13:33:29 +0800 Subject: [PATCH] 修改bug --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 665 +++++++++++++++++++++++++++++-------------------------- 1 files changed, 349 insertions(+), 316 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 f479f12..53455e0 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 @@ -47,6 +47,7 @@ import com.ruoyi.order.service.TChargingOrderService; import com.ruoyi.order.service.TOrderEvaluateService; import com.ruoyi.order.service.*; +import com.ruoyi.order.vo.EndOfChargePageInfo; import com.ruoyi.other.api.domain.*; import com.ruoyi.order.vo.ChargingOrderListInfoVO; import com.ruoyi.other.api.feignClient.*; @@ -56,7 +57,6 @@ 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.feignClient.SysUserClient; import io.seata.spring.annotation.GlobalTransactional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,6 +73,8 @@ import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; +import java.time.format.TextStyle; +import java.time.temporal.WeekFields; import java.util.*; import java.util.concurrent.*; import java.util.stream.Collectors; @@ -97,8 +99,7 @@ @Resource private SiteClient siteClient; - - + @Resource private AppUserCarClient appUserCarClient; @Resource @@ -139,8 +140,7 @@ @Resource private TOrderEvaluateService orderEvaluateService; - - + @Resource private AccountingStrategyDetailClient accountingStrategyDetailClient; @@ -532,9 +532,9 @@ @GlobalTransactional(rollbackFor = Exception.class) public AjaxResult chargingOrderCallback(Integer paymentType, String out_trade_no, String transaction_id, String attach) { TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, out_trade_no)); - if(chargingOrder.getRechargePaymentStatus() == 2){ - return AjaxResult.success(); - } +// if(chargingOrder.getRechargePaymentStatus() == 2){ +// return AjaxResult.success(); +// } chargingOrder.setRechargePaymentStatus(2); chargingOrder.setRechargeSerialNumber(transaction_id); chargingOrder.setStatus(2); @@ -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(2, RoundingMode.HALF_EVEN); - discountAmount = discountAmount.setScale(2, 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,11 +646,9 @@ 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() + ":-------------------远程调起开始充电请求-------------------"); - log.error(platformStartCharging.toString()); - + log.error(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString()); sendMessageClient.platformStartCharging(platformStartCharging); //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 Long id = chargingOrder.getId(); @@ -679,17 +680,19 @@ if(null != securityDetection){ PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingOrder.getChargingGunId()); if(null != preChargeCheck1){ - preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock()); + 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); } } List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData(); - log.error(code + ":-------------------开始检查调起充电结果-------------------"); - log.error(data.toString()); + if(null == data){ + return false; + } + log.error(code + ":-------------------开始检查调起充电结果-------------------" + data.toString()); if(data.size() != 0){ PlatformStartChargingReply platformStartChargingReply = data.get(1); Integer startup_result = platformStartChargingReply.getStartup_result(); @@ -728,9 +731,8 @@ redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); return true; }else{ - log.error(code + ":-------------------未上传开启充电结果-------------------"); - Integer counter = boot_failed_map.get(code); + log.error(code + ":-------------------未上传开启充电结果-------------------" + counter); PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); //5分钟内未启动成功,退回金额。 if(null == counter || counter < 300){ @@ -770,18 +772,17 @@ code.setCharging_pile_code(securityDetection.getCharging_pile_code()); code.setCharging_gun_code(securityDetection.getCharging_gun_code()); TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData(); - PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingGun.getId()); + PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingGun.getId()); if(null != preChargeCheck1){ - preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock()); + 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); } } /** - * 启动充电应发 + * 启动充电应答 * @param message */ @Override @@ -795,9 +796,8 @@ String code = order.getCode(); PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + order.getChargingGunId()); if(null != preChargeCheck1){ - preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock()); + preChargeCheck1.setElectronicLockLock(true); preChargeCheck1.setInsulationTesting(true); - preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection()); preChargeCheck1.setStartupSuccess(1); } if(0 == startup_result){ @@ -893,7 +893,7 @@ TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getRefundCode, out_refund_no)); one.setRefundSerialNumber(refund_id); one.setRefundStatus(2); - one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE"))); + one.setRefundTime(LocalDateTime.now()); chargingOrderRefundService.updateById(one); } return AjaxResult.success(); @@ -911,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::getEndTime).last(" limit 0, 1")); if(null == one){ return null; } @@ -969,6 +969,98 @@ 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); + //计算费用,处理退款 + endCharge(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(); //累计充电次数 @@ -1025,79 +1117,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 + ":-------------------查询远程停止充电应答-------------------"); - log.error(reply.toString()); - if(null == reply){ - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - continue; - } - - 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()) @@ -1141,13 +1168,12 @@ 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); } - - return AjaxResult.success(); } @@ -1167,6 +1193,7 @@ if(null != order && order.getStatus() != 3){ return; } + String code1 = order.getCode(); if(0 == platformStopChargingReply.getStop_result()){ String failure_cause = ""; @@ -1185,14 +1212,21 @@ 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); + //计算费用,处理退款 + endCharge(order); + // 将枪状态重置为空闲 + chargingGun.setStatus(2); + chargingGunClient.updateChargingGunById(chargingGun); } - - // 将枪状态重置为空闲 - chargingGun.setStatus(2); - chargingGunClient.updateChargingGunById(chargingGun); - //计算费用,处理退款 - endCharge(order); } @@ -1208,28 +1242,95 @@ //根据实际的充电金额计算退款金额 退回费用=(原金额/总金额)*(总金额-实际充电金额) //退款金额=优惠券金额+剩余充电金额 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 payAmount = BigDecimal.valueOf(total.doubleValue()); BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue()); + BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue()); + //折扣金额 + BigDecimal discountAmount = BigDecimal.ZERO; if(null != chargingOrder.getVipDiscount()){ - orderAmount = orderAmount.divide(chargingOrder.getVipDiscount().divide(new BigDecimal(10))); - chargingOrder.setOrderAmount(total); + //服务费折扣 + 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); @@ -1255,51 +1356,12 @@ 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(); @@ -1532,13 +1594,8 @@ public List<Map<String, Object>> getYearData(List<Long> chargingOrderIds) { return this.baseMapper.getYearData(chargingOrderIds); } - @Resource - private SysUserClient sysUserClient; - @Resource - private UserSiteClient userSiteClient; - @Resource - private RoleSiteClient roleSiteClient; + @Override public ChargingOrderTimeVO chargingList(ChargingListQuery dto) { String startTime1 = null; @@ -1753,10 +1810,8 @@ return chargingOrderTimeVO; } -// @Override -// public R payRefund(PayOrderRefundDto payOrderQueryDto) { -// return null; -// } + + @Override public ChargingOrderListInfoVO chargingInfo(String uid) { @@ -1845,23 +1900,23 @@ */ @Override public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) { - if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getCharging_gun_code())){ + if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())){ //获取当前的计费策略 - TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, query.getCharging_gun_code())); + TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, query.getTransaction_serial_number())); AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderClient.getNowAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = chargingOrderAccountingStrategyService.getOne(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()).orderByDesc(TChargingOrderAccountingStrategy::getCreateTime).last(" limit 0, 1")); - SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); if(null == chargingOrderAccountingStrategy){ chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy(); chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId()); chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId()); chargingOrderAccountingStrategy.setType(strategyDetail.getType()); - chargingOrderAccountingStrategy.setStartTime(sdf.format(chargingOrder.getStartTime())); - chargingOrderAccountingStrategy.setEndTime(sdf.format(new Date())); + 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); @@ -1878,9 +1933,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); @@ -1889,24 +1942,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.setEndTime(sdf.format(new Date())); + 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(sdf.format(chargingOrderAccountingStrategy.getEndTime())); - chargingOrderAccountingStrategy1.setEndTime(sdf.format(new Date())); - 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); @@ -1915,22 +1967,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); @@ -1953,60 +2006,19 @@ } chargingOrder.setStatus(5); chargingOrder.setEndMode(endMode); + chargingOrder.setEndTime(LocalDateTime.now()); this.updateById(chargingOrder); - + // 将枪状态重置为空闲 + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + chargingGun.setStatus(2); + chargingGunClient.updateChargingGunById(chargingGun); + + //计算用户标签 + editUserTag(chargingOrder); + //用户推荐奖励 + referralReward(chargingOrder); //计算费用,处理退款 endCharge(chargingOrder); - - //处理推荐奖励(被推荐首单奖励) - 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()); - appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); - - appUser1.setPoints(appUser1.getPoints() + num1); - appUserClient.updateAppUser(appUser1); - } - } /** @@ -2662,12 +2674,33 @@ public List<Map<String, Object>> needElec1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) { return this.baseMapper.needElec1(siteIds,statisticsQueryDto); } - - public static void main(String[] args) { -// String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); -// String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); -// System.err.println(format+"至"+format1); -// LocalDateTime parse = LocalDateTime.parse("2024-01-12 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); -// System.err.println(parse.format(DateTimeFormatter.ofPattern("yyyy-dd"))); + + /** + * 获取充电结束页面详情 + * @param id + * @return + */ + @Override + public EndOfChargePageInfo getEndOfChargePageInfo(String id) { + EndOfChargePageInfo info = new EndOfChargePageInfo(); + TChargingOrder chargingOrder = this.getById(id); + info.setId(id); + info.setCode(chargingOrder.getCode()); + info.setPaymentAmount(chargingOrder.getPaymentAmount()); + info.setCouponDiscountAmount(chargingOrder.getCouponDiscountAmount()); + TAppUserIntegralChange integralChange = appUserIntegralChangeClient.getTAppUserIntegralChangeByOrderCode(chargingOrder.getCode()).getData(); + info.setIntegral(null == integralChange ? 0 : integralChange.getCurrentIntegral() - integralChange.getHistoricalIntegral()); + info.setRechargeAmount(chargingOrder.getRechargeAmount()); + info.setRefundAmount(chargingOrder.getRefundAmount()); + LocalDateTime startTime = chargingOrder.getStartTime(); + LocalDateTime endTime = chargingOrder.getEndTime(); + info.setStartDay(startTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " 周" + startTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE)); + info.setStartHour(startTime.format(DateTimeFormatter.ofPattern("HH:mm"))); + info.setEndDay(endTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " 周" + endTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE)); + info.setEndHour(endTime.format(DateTimeFormatter.ofPattern("HH:mm"))); + int hour = endTime.getHour() - startTime.getHour(); + int second = endTime.getSecond() - startTime.getSecond(); + info.setDuration(0 == hour ? String.format("%s分钟", second) : String.format("%s小时%s分钟", hour, second)); + return info; } } -- Gitblit v1.7.1