From 8ca33caf9f4c2bef4c6775d7d9eb7002673110b5 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 13 十一月 2025 18:01:02 +0800
Subject: [PATCH] 增加退款金额超出剩余金额的逻辑
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 68 ++++++++++++++++++++-------------
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/UploadRealTimeMonitoringDataService.java | 12 ++++++
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java | 4 ++
ruoyi-service/ruoyi-jianguan/src/main/resources/bootstrap.yml | 8 ++--
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java | 16 ++++++++
5 files changed, 77 insertions(+), 31 deletions(-)
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
index daec325..0cb076f 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -173,6 +173,10 @@
@ApiOperation(value = "选择车辆列表", tags = {"小程序-扫一扫"})
@PostMapping(value = "/scan/carList")
public R<List<TAppUserCar>> carList() {
+ String token = SecurityUtils.getToken(ServletUtils.getRequest());
+ if(!StringUtils.hasLength(token)){
+ return R.ok(new ArrayList<>());
+ }
List<TAppUserCar> appUserId = appUserCarService.list(new QueryWrapper<TAppUserCar>()
.eq("app_user_id",tokenService.getLoginUserApplet().getUserId()));
appUserId.forEach(s->s.setId_(s.getId().toString()));
diff --git a/ruoyi-service/ruoyi-jianguan/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-jianguan/src/main/resources/bootstrap.yml
index e0d0a05..073be15 100644
--- a/ruoyi-service/ruoyi-jianguan/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-jianguan/src/main/resources/bootstrap.yml
@@ -57,14 +57,14 @@
service: ${spring.application.name}
group: DEFAULT_GROUP
namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
- username: nacos
- password: nacos
+ username: mxcd
+ password: Mxdlcdz@#2024&
config:
# 配置中心地址
server-addr: 192.168.0.137:8848,192.168.0.123:8848
namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
- username: nacos
- password: nacos
+ username: mxcd
+ password: Mxdlcdz@#2024&
group: DEFAULT_GROUP
name: ${spring.application.name}
# 配置文件格式
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 070bbbc..ff3a2bc 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
@@ -1804,7 +1804,11 @@
PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
List<Site> sites = siteClient.getSiteAll().getData();
-
+ List<Long> collect1 = list.stream().map(ChargingOrderListVO::getId).collect(Collectors.toList());
+ if(collect1.isEmpty()){
+ collect1.add(-1L);
+ }
+ List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
for (ChargingOrderListVO chargingOrderListVO : list) {
if (roleType == 2) {
List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
@@ -1840,21 +1844,13 @@
}
// 获取开始SOC 结束soc
if (chargingOrderListVO.getCode() != null) {
- List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode());
-
- if (data6 != null && !data6.isEmpty()) {
- int min = 100;
- int max = 0;
- for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
- if (uploadRealTimeMonitoringData.getSoc() > max) {
- max = uploadRealTimeMonitoringData.getSoc();
- }
- if (uploadRealTimeMonitoringData.getSoc() != 0 && uploadRealTimeMonitoringData.getSoc() < min) {
- min = uploadRealTimeMonitoringData.getSoc();
- }
- }
- chargingOrderListVO.setEndSoc(max + "");
- chargingOrderListVO.setStartSoc(min + "");
+ UploadRealTimeMonitoringData asc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode(), "asc");
+ UploadRealTimeMonitoringData desc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode(), "desc");
+ if(null != asc){
+ chargingOrderListVO.setStartSoc(asc.getSoc().toString());
+ }
+ if(null != desc){
+ chargingOrderListVO.setEndSoc(desc.getSoc().toString());
}
}
@@ -1876,8 +1872,7 @@
chargingOrderListVO.setPhone(data3.getPhone());
}
}
- List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery()
- .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrderListVO.getId()).list();
+ List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(s->s.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList());
// 尖峰平谷充电量 度数
BigDecimal jian = new BigDecimal("0");
BigDecimal feng = new BigDecimal("0");
@@ -1925,6 +1920,9 @@
chargingOrderListVO.setSharingAmount(new BigDecimal("0"));
}
}
+
+
+
// 不分页
PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1, 999999999);
List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(pageInfo1, dto, startTime1, startTime2, endTime1, endTime2);
@@ -1975,7 +1973,6 @@
BigDecimal feng = new BigDecimal("0");
BigDecimal ping = new BigDecimal("0");
BigDecimal gu = new BigDecimal("0");
- List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
for (ChargingOrderListVO chargingOrderListVO : list1) {
List<TChargingOrderAccountingStrategy> collect = chargingOrderAccountingStrategies.stream().filter(s -> s.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList());
BigDecimal periodServicePrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -1991,9 +1988,7 @@
paymentAmount = paymentAmount.add(periodElectricPrice).add(periodServicePrice);
}
if (!chargingOrderListVO.getOrderSource().equals(2)) {
- List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
- .collect(Collectors.toList());
- for (TChargingOrderAccountingStrategy temp : list2) {
+ for (TChargingOrderAccountingStrategy temp : collect) {
switch (temp.getType()) {
case 1:
jian = jian.add(temp.getChargingCapacity());
@@ -2018,9 +2013,7 @@
}
}
} else {
- List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
- .collect(Collectors.toList());
- for (TChargingOrderAccountingStrategy temp : list2) {
+ for (TChargingOrderAccountingStrategy temp : collect) {
BigDecimal multiply = temp.getPeriodServicePrice().multiply(new BigDecimal("0.8"));
switch (temp.getType()) {
case 1:
@@ -2684,15 +2677,14 @@
//开始构建退款费用
refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
+ Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
if (refundAmount.compareTo(BigDecimal.ZERO) > 0) {
- Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
//构建退款明细
TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
chargingOrderRefund.setRefundAmount(refundAmount);
- chargingOrderRefund.setRefundStatus(1);
chargingOrderRefund.setPayType(rechargePaymentType);
chargingOrderRefund.setRefundStatus(1);
chargingOrderRefund.setCode(chargingOrder.getCode());
@@ -2748,6 +2740,28 @@
this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
}
}
+ }else{
+ //构建退款明细
+ TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
+ chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+ chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+ chargingOrderRefund.setRefundAmount(refundAmount);
+ chargingOrderRefund.setRefundStatus(2);
+ chargingOrderRefund.setPayType(rechargePaymentType);
+ chargingOrderRefund.setCode(chargingOrder.getCode());
+ chargingOrderRefund.setRefundTitle("充电完成退款");
+ chargingOrderRefund.setRefundContent("充电完成退款");
+ chargingOrderRefund.setRefundReason("充电完成退款");
+ chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
+ chargingOrderRefund.setRefundTotalAmount(refundAmount);
+ chargingOrderRefund.setPayAmount(rechargeAmount);
+ chargingOrderRefund.setRefundTime(LocalDateTime.now());
+ chargingOrderRefundService.save(chargingOrderRefund);
+
+ chargingOrder.setRefundStatus(2);
+ chargingOrder.setRefundTime(LocalDateTime.now());
+ this.updateById(chargingOrder);
}
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/UploadRealTimeMonitoringDataService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/UploadRealTimeMonitoringDataService.java
index ae90d10..5343237 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/UploadRealTimeMonitoringDataService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/UploadRealTimeMonitoringDataService.java
@@ -16,6 +16,18 @@
* @return
*/
List<UploadRealTimeMonitoringData> getDataByOrderCode(String code);
+
+
+ /**
+ * 查询数据,排序
+ * @param code
+ * @param sort
+ * @return
+ */
+ UploadRealTimeMonitoringData getDataByOrderCode(String code, String sort);
+
+
+
UploadRealTimeMonitoringPageData getDataAll(MongoChargingOrderQuery mongoChargingOrderQuery) throws ParseException;
/**
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
index 1e0b313..fb4bdd8 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
@@ -60,6 +60,22 @@
return uploadRealTimeMonitoringData;
}
+
+ @Override
+ public UploadRealTimeMonitoringData getDataByOrderCode(String code, String sort) {
+ Query query = new Query();
+ if(StringUtils.isNotEmpty(code)){
+ query = query.addCriteria(Criteria.where("transaction_serial_number").is(code));
+ }
+ if("asc".equals(sort)){
+ query = query.with(Sort.by(Sort.Order.asc("create_time")));
+ }else{
+ query = query.with(Sort.by(Sort.Order.desc("create_time")));
+ }
+ query = query.limit(1);
+ return mongoTemplate.findOne(query, UploadRealTimeMonitoringData.class);
+ }
+
@Override
public UploadRealTimeMonitoringPageData getDataAll(MongoChargingOrderQuery mongoChargingOrderQuery) throws ParseException {
Query query = new Query();
--
Gitblit v1.7.1