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 ++++++++++++++++++++++++++++-----------------------
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java | 17 ++
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 14 -
3 files changed, 220 insertions(+), 176 deletions(-)
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
index c81d516..badb3e7 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -144,6 +144,9 @@
private AppUserCarClient appUserCarClient;
@Resource
private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
+
+ @Resource
+ private TOrderInvoiceService invoiceService;
/**
@@ -1303,8 +1306,7 @@
}
- @Resource
- private TOrderInvoiceService invoiceService;
+
@ResponseBody
@GetMapping(value = "/work/shopOrder")
@ApiOperation(value = "购物订单统计", tags = {"管理后台-工作台"})
@@ -1349,14 +1351,6 @@
return R.ok(gunIds);
}
- public static void main(String[] args) {
- // 示例数据
- List<TChargingOrder> list = getSampleData();
- System.err.println(list);
- List<Map<String, BigDecimal>> result = processData(list);
-
- result.forEach(System.out::println);
- }
private static List<TChargingOrder> getSampleData() {
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);
diff --git a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
index 101afd4..85979cd 100644
--- a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
+++ b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
@@ -1,8 +1,23 @@
package com.ruoyi.order;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.order.service.TChargingOrderService;
+import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.io.PrintWriter;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiOrderApplication.class)
public class RuoYiOrderApplicationTests {
-
+
+ @Resource
+ private TChargingOrderService chargingOrderService;
+
+
+ @Test
+ public void test(){
+ AjaxResult ajaxResult = chargingOrderService.chargingOrderCallback(2, "CD55720241011143234718", "4200002400202410113181486798", "");
+
+ }
}
--
Gitblit v1.7.1