From ae76f22f897cfd438b30829326b6ad36a80eaac0 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 21 二月 2025 18:23:13 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |  177 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 118 insertions(+), 59 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 d8f088a..6a24a15 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
@@ -67,6 +67,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
@@ -206,6 +207,9 @@
 	
 	@Resource
 	private OperatorClient operatorClient;
+	
+	@Resource
+	private TransactionRecordClient transactionRecordClient;
 
 
 
@@ -611,6 +615,7 @@
 			if(null != data && data.getChargeNum() > 0){
 				//计算折扣
 				List<AccountingStrategyDetailOrder> list = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
+				list.get(list.size() - 1).setEndTime("23:59");
 				//将数据叠加两份,处理跨天的情况
 				list.addAll(list);
 				boolean sta = false;
@@ -854,7 +859,7 @@
 			chargingGun.setStatus(4);
 			chargingGunClient.updateChargingGunById(chargingGun);
 			//推送状态给三方平台
-			tcecClient.pushChargingGunStatus(chargingGun.getId(), chargingGun.getStatus());
+			tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus());
 		}
 		redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
 		this.updateById(order);
@@ -910,9 +915,15 @@
 				amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
 				amount.setCurrency("CNY");
 				model.setAmount(amount);
-				R<String> orderR = wxPaymentClient.refundOrderR(model);
+				R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
 				if(200 == orderR.getCode()){
 					chargingOrderRefundService.save(chargingOrderRefund);
+					//手续费
+					Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
+					Object refund_fee1 = amount1.get("refund_fee");
+					BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+					chargingOrderRefund.setRefundFee(refund_fee);
+					chargingOrderRefundService.updateById(chargingOrderRefund);
 				}
 			}
 			if(2 == rechargePaymentType){
@@ -1251,7 +1262,7 @@
 			endTime2 = split[1];
 		}
 		PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
-		PageInfo<ChargingOrderVO> pageInfo1 = new PageInfo<>(1,9999999);
+		PageInfo<ChargingOrderVO> pageInfo1 = new PageInfo<>(1,999999999);
 
 		if (StringUtils.hasLength(dto.getPhone())){
 			List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
@@ -1318,8 +1329,8 @@
 				}
 
 			}
-			chargingOrderVO.setCommissionAmount(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
-			chargingOrderVO.setPlatFormMoney(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")).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()+"");
 			TChargingGun data3 = allGun.stream().filter(e->e.getId().equals(chargingOrderVO.getChargingGunId())).findFirst().orElse(null);
 			TChargingPile data2 = allPile.stream().filter(e->e.getId().equals(chargingOrderVO.getChargingPileId())).findFirst().orElse(null);
@@ -1373,7 +1384,9 @@
 
 		for (ChargingOrderVO chargingOrderVO : list1) {
 			paymentMoney= paymentMoney.add(chargingOrderVO.getPaymentAmount()!=null?chargingOrderVO.getPaymentAmount():new BigDecimal("0"));
-			commissionMoney = commissionMoney.add(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
+			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"));
 			}
@@ -1394,7 +1407,8 @@
 		}
 		tCharingOrderVO.setTotal(total);
 		tCharingOrderVO.setTime(time);
-		tCharingOrderVO.setIncome(paymentMoney.subtract(commissionMoney));
+//		tCharingOrderVO.setIncome(paymentMoney.subtract(commissionMoney));
+		tCharingOrderVO.setIncome(paymentMoney);
 		tCharingOrderVO.setElectronicMoney(electronicMoney);
 		tCharingOrderVO.setServiceMoney(serviceMoney);
 		pageInfo.setRecords(list);
@@ -1572,7 +1586,7 @@
 			chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
 			BigDecimal bigDecimal = new BigDecimal("0.006");
 			if (chargingOrderListVO.getOrderAmount()!=null){
-				chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getPaymentAmount().multiply(bigDecimal));
+				chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getRechargeAmount().multiply(bigDecimal));
 			}
 			chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount());
 			chargingOrderListVO.setUid(chargingOrderListVO.getId()+"");
@@ -2002,6 +2016,9 @@
 	@GlobalTransactional(rollbackFor = Exception.class)
 	public R endChargeBillingCharge(TransactionRecordMessageVO vo) {
 		TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
+		if(null == chargingOrder){
+			return R.ok();
+		}
 		Integer status = chargingOrder.getStatus();
 		if(status == 5){
 			return R.ok();
@@ -2353,7 +2370,7 @@
 		chargingGunClient.updateChargingGunById(chargingGun);
 		//推送状态给三方平台
 		if(2 == chargingOrder.getOrderSource()){
-			tcecClient.pushChargingGunStatus(chargingGun.getId(), chargingGun.getStatus());
+			tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus());
 		}
 		
 		//添加积分
@@ -2423,9 +2440,15 @@
 					amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
 					amount.setCurrency("CNY");
 					model.setAmount(amount);
-					R<String> orderR = wxPaymentClient.refundOrderR(model);
-					if(200 == orderR.getCode()){
+					R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model);
+					if(200 == result.getCode()){
 						chargingOrderRefundService.save(chargingOrderRefund);
+						//手续费
+						Map<String, Object> amount1 = (Map<String, Object>) result.getData().get("amount");
+						Object refund_fee1 = amount1.get("refund_fee");
+						BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+						chargingOrderRefund.setRefundFee(refund_fee);
+						chargingOrderRefundService.updateById(chargingOrderRefund);
 					}
 				}
 				if(2 == rechargePaymentType){
@@ -2581,12 +2604,18 @@
 					amount.setTotal(tChargingOrder.getRechargeAmount().multiply(new BigDecimal(100)).intValue());
 					amount.setCurrency("CNY");
 					model.setAmount(amount);
-					R<String> orderR = wxPaymentClient.refundOrderR(model);
+					R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
 					if(200 == orderR.getCode()){
 						tChargingOrder.setRefundStatus(2);
 						tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
 						this.baseMapper.updateById(tChargingOrder);
 						chargingOrderRefundService.save(chargingOrderRefund);
+						//手续费
+						Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
+						Object refund_fee1 = amount1.get("refund_fee");
+						BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+						chargingOrderRefund.setRefundFee(refund_fee);
+						chargingOrderRefundService.updateById(chargingOrderRefund);
 					}
 				}
 
@@ -2643,12 +2672,18 @@
 					amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
 					amount.setCurrency("CNY");
 					model.setAmount(amount);
-					R<String> orderR = wxPaymentClient.refundOrderR(model);
+					R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
 					if(200 == orderR.getCode()){
 						tChargingOrder.setRefundStatus(2);
 						tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
 						shoppingOrderService.updateById(tChargingOrder);
 						shoppingOrderRefundService.save(chargingOrderRefund);
+						//手续费
+						Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
+						Object refund_fee1 = amount1.get("refund_fee");
+						BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+						chargingOrderRefund.setRefundFee(refund_fee);
+						shoppingOrderRefundService.updateById(chargingOrderRefund);
 					}
 				}
 
@@ -2702,12 +2737,18 @@
 				amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
 				amount.setCurrency("CNY");
 				model.setAmount(amount);
-				R<String> orderR = wxPaymentClient.refundOrderR(model);
+				R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
 				if(200 == orderR.getCode()){
 					tChargingOrder.setRefundStatus(2);
 					tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
 					vipOrderService.updateById(tChargingOrder);
 					vipOrderRefundService.save(chargingOrderRefund);
+					//手续费
+					Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
+					Object refund_fee1 = amount1.get("refund_fee");
+					BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+					chargingOrderRefund.setRefundFee(refund_fee);
+					vipOrderRefundService.updateById(chargingOrderRefund);
 				}
 			}
 
@@ -2831,7 +2872,7 @@
 			}
 			if (tChargingOrder.getPaymentAmount()!=null){
 				paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
-				orderCommission = orderCommission.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006"))
+				orderCommission = orderCommission.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006"))
 						.setScale(2,BigDecimal.ROUND_DOWN));
 			}
 
@@ -2976,6 +3017,8 @@
 		return pageInfo;
 	}
 
+	@Autowired
+	private TChargingOrderService chargingOrderService;
 	@Override
 	public SettlementTotalVO settlementTotal(String time) {
 		Long userId = tokenService.getLoginUser().getUserid();
@@ -2990,6 +3033,14 @@
 		if (siteIds.isEmpty()){
 			siteIds.add(-1);
 		}
+		List<Site> siteList = siteClient.getSiteAll().getData();
+		List<TChargingGun> gunList = chargingGunClient.getAllGun().getData();
+		List<TChargingPile> pileList = chargingGunClient.getAllPile().getData();
+		List<TAppUser> userList = appUserClient.getAllUser().getData();
+		List<TAppUserCar> carList = appUserCarClient.getAllCar().getData();
+		List<TChargingOrder> totalOrder = chargingOrderService.list(new LambdaQueryWrapper<>(TChargingOrder.class)
+				.eq(TChargingOrder::getRechargePaymentStatus, 2));
+		List<TChargingOrderRefund> totalRefund = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getRefundStatus, 2).list();
 		SettlementTotalVO res = new SettlementTotalVO();
 		List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
 		LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
@@ -3037,9 +3088,9 @@
 		for (TSettlementConfirm tSettlementConfirm : list1) {
 			tSettlementConfirm.setXuhao(i);
 			tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
-			List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
-			if (!data1.isEmpty()){
-				tSettlementConfirm.setSiteName(data1.get(0).getName());
+			Site site = siteList.stream().filter(e -> e.getId().equals(tSettlementConfirm.getSiteId())).findFirst().orElse(null);
+			if (site!=null){
+				tSettlementConfirm.setSiteName(site.getName());
 			}
 			if (tSettlementConfirm.getMeteringElectronic()!=null){
 				meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
@@ -3084,26 +3135,17 @@
 					eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
 					break;
 			}
-			List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
-			Map<String,TChargingOrder> map = new HashMap<>();
-			StringBuilder stringBuilder = new StringBuilder();
-			for (TChargingOrder tChargingOrder : tChargingOrders) {
-				stringBuilder.append(tChargingOrder.getCode()).append(",");
-
-			}
+			List<TChargingOrder> tChargingOrders = totalOrder.stream().filter(e-> e.getPayTime()
+					.isBefore(tSettlementConfirm.getEndTime())
+					&& e.getPayTime().isAfter(tSettlementConfirm.getStartTime())&&e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
 			// 充电总时长
-
-			Long temp = 1L;
-			if (StringUtils.hasLength(stringBuilder.toString())){
-				String substring = stringBuilder.substring(0, stringBuilder.length() - 1);
-				for (String s : substring.split(",")) {
-					UploadRealTimeMonitoringData data6 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(s).getData();
-					if (data6!=null){
-						temp+=(data6.getCumulative_charging_time()*60);
-
-					}
-
-				}
+			Long temp = 0L;
+			for (TChargingOrder tChargingOrder : tChargingOrders) {
+				LocalDateTime startTime = tChargingOrder.getStartTime();
+				LocalDateTime endTime = tChargingOrder.getEndTime();
+				// 计算时间差 单位秒
+				long between = ChronoUnit.SECONDS.between(startTime, endTime);
+				temp+=between;
 			}
 			List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
 			// 计算充电桩的功率平均值
@@ -3115,7 +3157,7 @@
 
 			tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
 			//利用率=充电量/(桩数量*功率*时间)
-			List<TChargingPile> data2 = chargingPileClient.getChargingPileBySiteId(tSettlementConfirm.getSiteId()).getData();
+			List<TChargingPile> data2 = pileList.stream().filter(e -> e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
 			BigDecimal bigDecimal2 = new BigDecimal("0");
 
 			if (data2!=null && (!data2.isEmpty())){
@@ -3231,11 +3273,16 @@
 		if (siteIds.isEmpty()){
 			siteIds.add(-1);
 		}
+		List<Site> siteList = siteClient.getSiteAll().getData();
+		List<TChargingGun> gunList = chargingGunClient.getAllGun().getData();
+		List<TChargingPile> pileList = chargingGunClient.getAllPile().getData();
+		List<TAppUser> userList = appUserClient.getAllUser().getData();
+		List<TAppUserCar> carList = appUserCarClient.getAllCar().getData();
+		List<TChargingOrder> totalOrder = chargingOrderService.list(new LambdaQueryWrapper<>(TChargingOrder.class)
+				.eq(TChargingOrder::getRechargePaymentStatus, 2));
 		SettlementTotalVO res = new SettlementTotalVO();
 		List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
 		LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-		// 减少一个月
-		LocalDateTime minus = parse.minusMonths(1);
 		List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
 		// 合计
 		List<TSettlementConfirm> total = new ArrayList<>();
@@ -3278,7 +3325,7 @@
 		for (TSettlementConfirm tSettlementConfirm : list1) {
 			tSettlementConfirm.setXuhao(i);
 			tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
-			List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
+			List<Site> data1 = siteList.stream().filter(e -> e.getId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
 			if (!data1.isEmpty()){
 				tSettlementConfirm.setSiteName(data1.get(0).getName());
 			}
@@ -3325,26 +3372,18 @@
 					eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
 					break;
 			}
-			List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
-			Map<String,TChargingOrder> map = new HashMap<>();
-			StringBuilder stringBuilder = new StringBuilder();
-			for (TChargingOrder tChargingOrder : tChargingOrders) {
-				stringBuilder.append(tChargingOrder.getCode()).append(",");
 
-			}
+			List<TChargingOrder> tChargingOrders = totalOrder.stream().filter(e-> e.getPayTime()
+					.isBefore(tSettlementConfirm.getEndTime())
+					&& e.getPayTime().isAfter(tSettlementConfirm.getStartTime())&&e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
 			// 充电总时长
-
-			Long temp = 1L;
-			if (StringUtils.hasLength(stringBuilder.toString())){
-				String substring = stringBuilder.substring(0, stringBuilder.length() - 1);
-				for (String s : substring.split(",")) {
-					UploadRealTimeMonitoringData data6 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(s).getData();
-					if (data6!=null){
-						temp+=(data6.getCumulative_charging_time()*60);
-
-					}
-
-				}
+			Long temp = 0L;
+			for (TChargingOrder tChargingOrder : tChargingOrders) {
+				LocalDateTime startTime = tChargingOrder.getStartTime();
+				LocalDateTime endTime = tChargingOrder.getEndTime();
+				// 计算时间差 单位秒
+				long between = ChronoUnit.SECONDS.between(startTime, endTime);
+				temp+=between;
 			}
 			List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
 			// 计算充电桩的功率平均值
@@ -3753,4 +3792,24 @@
 		});
 		return R.ok();
 	}
+	
+	
+	/**
+	 * 获取充电后没有扣除费用的数据
+	 * @return
+	 */
+	@Override
+	public R getNotPaymentChargingOrder() {
+		List<TChargingOrder> list = this.list(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getPaymentAmount, 0)
+				.ne(TChargingOrder::getElectricity, 0).in(TChargingOrder::getStatus, Arrays.asList(4, 5)));
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		for (TChargingOrder order : list) {
+			TransactionRecord transactionRecord = transactionRecordClient.findTransactionRecord(order.getCode()).getData();
+			Map<String, Object> map = new HashMap<>();
+			map.put("order", order);
+			map.put("transactionRecord", transactionRecord);
+			mapList.add(map);
+		}
+		return R.ok(mapList);
+	}
 }

--
Gitblit v1.7.1