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 | 365 ++++++++++++++++++++++++++++----------------------- 1 files changed, 200 insertions(+), 165 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 d88a463..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 @@ -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(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); @@ -965,19 +968,9 @@ chargingOrder.setStatus(4); chargingOrder.setEndMode(1); this.updateById(chargingOrder); - //计算用户标签 - editUserTag(chargingOrder); - //用户推荐奖励 - referralReward(chargingOrder); - //计算费用,处理退款 - endCharge(chargingOrder); - TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); - // 将枪状态重置为空闲 - chargingGun.setStatus(2); - chargingGunClient.updateChargingGunById(chargingGun); String code1 = chargingOrder.getCode(); - + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); //异步线程处理停机 ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1); cachedThreadPool.execute(()->{ @@ -990,6 +983,7 @@ 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){ @@ -1035,13 +1029,28 @@ throw new RuntimeException(e); } continue; + }else{ + log.error(code1 + ":-------------------远程停止充电请求成功-------------------"); + stop_status = true; } - log.error(code1 + ":-------------------远程停止充电请求成功-------------------"); break; } - - chargingOrder.setStatus(5); - this.updateById(chargingOrder); + 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(); } @@ -1185,20 +1194,6 @@ return; } - 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); - String code1 = order.getCode(); if(0 == platformStopChargingReply.getStop_result()){ String failure_cause = ""; @@ -1217,6 +1212,20 @@ break; } log.error(code1 + ":停机失败:订单号:{},失败原因:{}", order.getCode(), failure_cause); + }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); } } @@ -1233,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); @@ -1285,47 +1361,7 @@ 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(); @@ -1880,6 +1916,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); @@ -1896,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); @@ -1907,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.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); @@ -1933,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); -- Gitblit v1.7.1