From 17b48b4731e2ac2b6d571049718be724eb31972b Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期三, 19 三月 2025 20:52:35 +0800
Subject: [PATCH] 充电桩bug修改

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |  121 ++++++++++++++++++++++++----------------
 1 files changed, 73 insertions(+), 48 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 9910897..75c13ed 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
@@ -1287,7 +1287,6 @@
 			endTime2 = split[1];
 		}
 		PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
-		PageInfo<ChargingOrderVO> pageInfo1 = new PageInfo<>(1,999999999);
 
 		if (StringUtils.hasLength(dto.getPhone())){
 			List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
@@ -1333,7 +1332,7 @@
 		if (siteIds.isEmpty())siteIds.add(-1);
 		dto.setSiteIds(siteIds);
 		List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
-		List<ChargingOrderVO> list1 = this.baseMapper.chargingOrder(pageInfo1,dto,startTime1,startTime2,endTime1,endTime2);
+		List<ChargingOrderVO> list1 = this.baseMapper.chargingOrderNolimit(dto,startTime1,startTime2,endTime1,endTime2);
 		 BigDecimal total = new BigDecimal("0");
 		 long time = 0L;
 		 BigDecimal electronicMoney = new BigDecimal("0");
@@ -1351,7 +1350,6 @@
 					chargingOrderVO.setAuthRecord(t1.get(0));
 				}
 			}
-			chargingOrderVO.setSharingAmount(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
 			chargingOrderVO.setCommissionAmount(chargingOrderVO.getRechargeAmount()!=null?chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
 			chargingOrderVO.setPlatFormMoney(chargingOrderVO.getRechargeAmount()!=null?chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
 			chargingOrderVO.setUid(chargingOrderVO.getId()+"");
@@ -1374,7 +1372,17 @@
 				// 计算时间差 单位秒
 				long between = ChronoUnit.SECONDS.between(startTime, endTime);
 				chargingOrderVO.setChargingSecond(between);
-
+				
+				BigDecimal electronic_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+				chargingOrderVO.setElectrovalence(electronic_reduce);
+				BigDecimal service_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+				if (!chargingOrderVO.getOrderSource().equals(2)){
+					chargingOrderVO.setServiceCharge(service_reduce);
+					chargingOrderVO.setSharingAmount(BigDecimal.ZERO);
+				}else{
+					chargingOrderVO.setServiceCharge(service_reduce.multiply(new BigDecimal("0.8")));
+					chargingOrderVO.setSharingAmount(service_reduce.multiply(new BigDecimal("0.2")));
+				}
 			}
 			// 充电时段数
 			int size = chargingOrderId.size();
@@ -1403,15 +1411,17 @@
 				.eq(TChargingOrderRefund::getRefundStatus,2).list();
 
 		for (ChargingOrderVO chargingOrderVO : list1) {
+			List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
+			BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 			if (!chargingOrderVO.getOrderSource().equals(2)) {
 				paymentMoney = paymentMoney.add(chargingOrderVO.getPaymentAmount() != null ? chargingOrderVO.getPaymentAmount() : new BigDecimal("0"));
 			}else{
-				paymentMoney = paymentMoney.add(chargingOrderVO.getServiceCharge() != null ? chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN) : new BigDecimal("0"));
-
+				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
 			}
-			if (chargingOrderVO.getRechargeAmount()!=null){
-				commissionMoney = commissionMoney.add(chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
-			}
+//			if (chargingOrderVO.getRechargeAmount()!=null){
+//				commissionMoney = commissionMoney.add(chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
+//			}
 			if (chargingOrderVO.getChargingCapacity()!=null){
 				total = total.add(chargingOrderVO.getElectricity()!=null?chargingOrderVO.getElectricity():new BigDecimal("0"));
 			}
@@ -1425,18 +1435,19 @@
 			List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId()))
 					.collect(Collectors.toList());
 			for (TChargingOrderRefund tChargingOrderRefund : list2) {
-					refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
+				refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
 			}
-			electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence()!=null?chargingOrderVO.getElectrovalence():new BigDecimal("0"));
+			
+			//充电明细
+			electronicMoney = electronicMoney.add(electronic_reduce);
 			if (!chargingOrderVO.getOrderSource().equals(2)){
-				serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge():new BigDecimal("0"));
+				serviceMoney = serviceMoney.add(service_reduce);
 			}else{
-				serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
+				serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
 			}
 		}
 		tCharingOrderVO.setTotal(total);
 		tCharingOrderVO.setTime(time);
-//		tCharingOrderVO.setIncome(paymentMoney.subtract(commissionMoney));
 		tCharingOrderVO.setIncome(paymentMoney);
 		tCharingOrderVO.setElectronicMoney(electronicMoney);
 		tCharingOrderVO.setServiceMoney(serviceMoney);
@@ -1494,28 +1505,38 @@
 	}
 
 	@Override
-	public List<Map<String, Object>> getSumByType(List<Long> chargingOrderIds) {
-		return this.baseMapper.getSumByType(chargingOrderIds);
+	public List<Map<String, Object>> getSumByType(LocalDate start,LocalDate end,List<Integer> siteIds) {
+		LocalDateTime start1 = start.atStartOfDay();
+		LocalDateTime end1 = end.atTime(LocalTime.MAX);
+		return this.baseMapper.getSumByType(start1,end1, siteIds);
 	}
 
 	@Override
-	public List<Map<String, Object>> getDateData(List<Long> chargingOrderIds) {
-		return this.baseMapper.getDateData(chargingOrderIds);
+	public List<Map<String, Object>> getDateData(LocalDate start,LocalDate end,List<Integer> siteIds) {
+		LocalDateTime start1 = start.atStartOfDay();
+		LocalDateTime end1 = end.atTime(LocalTime.MAX);
+		return this.baseMapper.getDateData(start1,end1, siteIds);
 	}
 
 	@Override
-	public List<Map<String, Object>> getWeekData(List<Long> chargingOrderIds) {
-		return this.baseMapper.getWeekData(chargingOrderIds);
+	public List<Map<String, Object>> getWeekData(LocalDate start,LocalDate end) {
+		LocalDateTime start1 = start.atStartOfDay();
+		LocalDateTime end1 = end.atTime(LocalTime.MAX);
+		return this.baseMapper.getWeekData(start1,end1);
 	}
 
 	@Override
-	public List<Map<String, Object>> getMonthData(List<Long> chargingOrderIds) {
-		return this.baseMapper.getMonthData(chargingOrderIds);
+	public List<Map<String, Object>> getMonthData(LocalDate start,LocalDate end) {
+		LocalDateTime start1 = start.atStartOfDay();
+		LocalDateTime end1 = end.atTime(LocalTime.MAX);
+		return this.baseMapper.getMonthData(start1,end1);
 	}
 
 	@Override
-	public List<Map<String, Object>> getYearData(List<Long> chargingOrderIds) {
-		return this.baseMapper.getYearData(chargingOrderIds);
+	public List<Map<String, Object>> getYearData(LocalDate start,LocalDate end) {
+		LocalDateTime start1 = start.atStartOfDay();
+		LocalDateTime end1 = end.atTime(LocalTime.MAX);
+		return this.baseMapper.getYearData(start1,end1);
 	}
 
 	@Resource
@@ -2107,10 +2128,11 @@
 		}
 		
 		//如果使用优惠券需要判断优惠券是否满足使用条件
-		//根据实际的充电金额计算退款金额   退回费用=(原金额/总金额)*(总金额-实际充电金额)
 		//退款金额=优惠券金额+剩余充电金额
 		BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
 		BigDecimal periodServicePrice_total = BigDecimal.ZERO;
+		BigDecimal vipDiscountAmount_total = BigDecimal.ZERO;
+		BigDecimal serviceCharge_total = BigDecimal.ZERO;
 		BigDecimal total = BigDecimal.ZERO;
 		
 		//获取订单的计费策略
@@ -2288,26 +2310,25 @@
 			chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN));
 			chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
 			chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
-			
+			//电费
 			periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
+			//服务费(含折扣)
+			serviceCharge_total = serviceCharge_total.add(serviceCharge);
+			//服务费(不含折扣)
 			periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
+			//会员折扣优惠金额
+			vipDiscountAmount_total = vipDiscountAmount_total.add(vipDiscountAmount);
+			//原始总金额(不含折扣)
 			total = total.add(electrovalenc.add(originalServicePrice));
 		}
 		
 		BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
-		//折扣金额
-		BigDecimal discountAmount = chargingOrder.getVipDiscountAmount();
 		//原金额
 		BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
-		//总金额(充值金额+会员折扣金额)
-		BigDecimal decimal = rechargeAmount.add(discountAmount);
-		//退款金额(已经计算了折扣优惠部分)
-		//如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
-		BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total));
 		//支付金额
-		BigDecimal payAmount = rechargeAmount.subtract(refundAmount);
-		//实际充值服务费-会员折扣
-		periodServicePrice_total = periodServicePrice_total.subtract(discountAmount);
+		BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total);
+		//退款金额=充值金额-实际支付金额
+		BigDecimal refundAmount = rechargeAmount.subtract(payAmount);
 
 		TChargingOrder order = new TChargingOrder();
 		order.setId(chargingOrder.getId());
@@ -2331,7 +2352,8 @@
 		order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
 		order.setChargingCapacity(vo.getTotal_electricity());
 		order.setElectricity(vo.getTotal_electricity());
-		if(discountAmount.compareTo(BigDecimal.ZERO) == 0){
+		order.setVipDiscountAmount(vipDiscountAmount_total);
+		if(vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0){
 			order.setVipDiscount(BigDecimal.valueOf(1));
 		}
 		
@@ -2348,9 +2370,9 @@
 				if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
 					BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
 					//如果优惠金额大于服务费金额,以服务费作为最大限制
-					if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){
-						couponDiscount = periodServicePrice_total;
-						periodServicePrice_total = BigDecimal.ZERO;
+					if(serviceCharge_total.compareTo(couponDiscountAmount) < 0){
+						couponDiscount = serviceCharge_total;
+						serviceCharge_total = BigDecimal.ZERO;
 					}else{
 						couponDiscount = couponDiscountAmount;
 					}
@@ -2369,9 +2391,9 @@
 					BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
 					divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
 					//如果优惠金额大于服务费金额,以服务费作为最大限制
-					if(periodServicePrice_total.compareTo(divide) < 0){
-						couponDiscount = periodServicePrice_total;
-						periodServicePrice_total = BigDecimal.ZERO;
+					if(serviceCharge_total.compareTo(divide) < 0){
+						couponDiscount = serviceCharge_total;
+						serviceCharge_total = BigDecimal.ZERO;
 					}else{
 						couponDiscount = divide;
 					}
@@ -2391,11 +2413,11 @@
 		refundAmount = refundAmount.add(couponDiscount);
 		//实际支付金额-优惠券
 		payAmount = payAmount.subtract(couponDiscount);
-		if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){
-			periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount);
+		if(serviceCharge_total.compareTo(BigDecimal.ZERO) > 0){
+			serviceCharge_total = serviceCharge_total.subtract(couponDiscount);
 		}
 		order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
-		order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.HALF_EVEN));
+		order.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN));
 		order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
 		order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
 		order.setRefundStatus(1);
@@ -2536,8 +2558,11 @@
 	
 	
 	@Override
-	public List<Map<String, Object>> getByDate(List<Long> chargingOrderIds) {
-		return this.baseMapper.getByDate(chargingOrderIds);
+	public List<Map<String, Object>> getByDate(LocalDate start,LocalDate end) {
+
+			LocalDateTime start1 = start.atStartOfDay();
+			LocalDateTime end1 = end.atTime(LocalTime.MAX);
+		return this.baseMapper.getByDate(start1,end1);
 	}
 
 	@Override

--
Gitblit v1.7.1