From 4c77ac6367145e4740141e872e1cda1c16efa9b1 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 09 六月 2025 15:17:16 +0800
Subject: [PATCH] 优化功能及重复退款问题

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |  824 ++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 452 insertions(+), 372 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 07f670a..654db7e 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
@@ -21,7 +21,6 @@
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.integration.api.feignClient.ChargingHandshakeClient;
 import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient;
 import com.ruoyi.integration.api.feignClient.SendMessageClient;
 import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
@@ -50,6 +49,9 @@
 import com.ruoyi.order.service.TChargingOrderService;
 import com.ruoyi.order.service.TOrderEvaluateService;
 import com.ruoyi.order.service.*;
+import com.ruoyi.order.util.mongodb.service.PlatformStartChargingReplyService;
+import com.ruoyi.order.util.mongodb.service.TransactionRecordService;
+import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService;
 import com.ruoyi.order.vo.EndOfChargePageInfo;
 import com.ruoyi.other.api.domain.*;
 import com.ruoyi.order.vo.ChargingOrderListInfoVO;
@@ -140,7 +142,7 @@
 	private RedisService redisService;
 	
 	@Resource
-	private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
+	private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
 	
 	@Resource
 	private TCECClient tcecClient;
@@ -161,7 +163,7 @@
 	private AccountingStrategyClient accountingStrategyClient;
 
 	@Resource
-	private PlatformStartChargingReplyClient platformStartChargingReplyClient;
+	private PlatformStartChargingReplyService platformStartChargingReplyService;
 
 	@Resource
 	private TChargingOrderRefundService chargingOrderRefundService;
@@ -196,9 +198,6 @@
 	@Resource
 	private SecurityDetectionClient securityDetectionClient;
 	
-	@Resource
-	private BmsDemandAndChargerExportationClient bmsDemandAndChargerExportationClient;
-
 	//计数器
 	private Map<String, Integer> counter_map = new HashMap<>();
 	
@@ -209,7 +208,10 @@
 	private OperatorClient operatorClient;
 	
 	@Resource
-	private TransactionRecordClient transactionRecordClient;
+	private TransactionRecordService transactionRecordService;
+	
+	@Resource
+	private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
 
 
 
@@ -283,8 +285,12 @@
 		}else{
 			myChargingOrderInfo.setLicensePlate(chargingOrder.getPlateNum());
 		}
-		myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
-		myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
+		if(null != chargingOrder.getStartTime()){
+			myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
+		}
+		if(null != chargingOrder.getEndTime()){
+			myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
+		}
 		myChargingOrderInfo.setOrderAmount(chargingOrder.getOrderAmount());
 		myChargingOrderInfo.setPaymentAmount(chargingOrder.getPaymentAmount());
 		myChargingOrderInfo.setRechargeAmount(chargingOrder.getRechargeAmount());
@@ -296,7 +302,7 @@
 						.orderByAsc(TChargingOrderAccountingStrategy::getStartTime)
 		);
 		myChargingOrderInfo.setStageCost(stageCost);
-		List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
+		List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
 		if(null != dataList){
 			//在MongoDB中获取数据
 			SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
@@ -382,7 +388,6 @@
 	 * @return
 	 */
 	@Override
-	@GlobalTransactional(rollbackFor = Exception.class)
 	public AjaxResult paymentChargingOrder(AddChargingOrder addChargingOrder) {
 		Long userId = tokenService.getLoginUserApplet().getUserId();
 		TAppUser appUser = appUserClient.getUserById(userId).getData();
@@ -569,7 +574,6 @@
 	 * @return
 	 */
 	@Override
-	@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){
@@ -722,7 +726,7 @@
 		}
 		String code = chargingOrder.getCode();
 		String key = "AQJC_" + chargingOrder.getChargingGunId();
-		List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
+		List<PlatformStartChargingReply> data = platformStartChargingReplyService.getPlatformStartChargingReply(code);
 		log.info(code + ":-------------------开始检查调起充电结果-------------------" + data.toString());
 		if(data.size() != 0){
 			PlatformStartChargingReply platformStartChargingReply = data.get(1);
@@ -1092,7 +1096,7 @@
 		chargingDetails.setCode(one.getCode());
 		chargingDetails.setStatus(one.getStatus());
 		chargingDetails.setChargingCost(one.getResidualAmount());
-		UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData();
+		UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(one.getCode());
 		if(null != data){
 			chargingDetails.setChargeCurrent(data.getOutput_current());
 			chargingDetails.setChargeVoltage(data.getOutput_voltage());
@@ -1121,7 +1125,6 @@
 	 * @return
 	 */
 	@Override
-	@GlobalTransactional(rollbackFor = Exception.class)
 	public AjaxResult stopCharging(String id) {
 		TChargingOrder order = this.getById(id);
 		Integer status = order.getStatus();
@@ -1399,13 +1402,12 @@
 		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.chargingOrderNolimit(dto,startTime1,startTime2,endTime1,endTime2);
 		 BigDecimal total = new BigDecimal("0");
 		 long time = 0L;
 		 BigDecimal electronicMoney = new BigDecimal("0");
 		 BigDecimal serviceMoney = new BigDecimal("0");
 		 BigDecimal commissionMoney = new BigDecimal("0");
-		 BigDecimal refundMoney = new BigDecimal("0");
+//		 BigDecimal refundMoney = new BigDecimal("0");
 		 BigDecimal paymentMoney = new BigDecimal("0");
 		List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
 
@@ -1473,50 +1475,54 @@
 			}
 		}
 
-		List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery()
-				.eq(TChargingOrderRefund::getRefundStatus,2).list();
-
-//	    BigDecimal total = new BigDecimal("0");
-//	    long time = 0L;
-//	    BigDecimal electronicMoney = new BigDecimal("0");
-//	    BigDecimal serviceMoney = new BigDecimal("0");
-//	    BigDecimal refundMoney = new BigDecimal("0");
-//	    BigDecimal paymentMoney = new BigDecimal("0");
-		for (ChargingOrderVO chargingOrderVO : list1) {
-			if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
-				continue;
-			}
-			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);
-			BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
-			electronicMoney = electronicMoney.add(electronic_reduce);
-			total = total.add(chargingCapacity);
-			if (!chargingOrderVO.getOrderSource().equals(2)) {
-				serviceMoney = serviceMoney.add(service_reduce);
-				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
-			}else{
-				serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
-				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
-			}
-			if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
-				LocalDateTime startTime = chargingOrderVO.getStartTime();
-				LocalDateTime endTime = chargingOrderVO.getEndTime();
-				// 计算时间差 单位秒
-				long between = ChronoUnit.SECONDS.between(startTime, endTime);
-				time+=between;
-			}
-			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());
-			}
+//		List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery()
+//				.eq(TChargingOrderRefund::getRefundStatus,2).list();
+	
+	
+	    Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto,startTime1,startTime2,endTime1,endTime2);
+//		for (ChargingOrderVO chargingOrderVO : list1) {
+//			if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
+//				continue;
+//			}
+//			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);
+//			BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+//			electronicMoney = electronicMoney.add(electronic_reduce);
+//			total = total.add(chargingCapacity);
+//			if (!chargingOrderVO.getOrderSource().equals(2)) {
+//				serviceMoney = serviceMoney.add(service_reduce);
+//				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+//			}else{
+//				serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+//				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+//			}
+//			if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
+//				LocalDateTime startTime = chargingOrderVO.getStartTime();
+//				LocalDateTime endTime = chargingOrderVO.getEndTime();
+//				// 计算时间差 单位秒
+//				long between = ChronoUnit.SECONDS.between(startTime, endTime);
+//				time+=between;
+//			}
+////			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());
+////			}
+//		}
+		if(null != map){
+			tCharingOrderVO.setTotal(map.get("total")==null?BigDecimal.ZERO:(BigDecimal) map.get("total"));
+			tCharingOrderVO.setTime(map.get("time")==null?0L:(Long) map.get("time"));
+			tCharingOrderVO.setIncome((map.get("paymentMoney")==null?BigDecimal.ZERO:(BigDecimal) map.get("paymentMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			tCharingOrderVO.setElectronicMoney((map.get("electronicMoney")==null?BigDecimal.ZERO:(BigDecimal) map.get("electronicMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			tCharingOrderVO.setServiceMoney((map.get("serviceMoney")==null?BigDecimal.ZERO:(BigDecimal) map.get("serviceMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+		}else{
+			tCharingOrderVO.setTotal(BigDecimal.ZERO);
+			tCharingOrderVO.setTime(0L);
+			tCharingOrderVO.setIncome(BigDecimal.ZERO);
+			tCharingOrderVO.setElectronicMoney(BigDecimal.ZERO);
+			tCharingOrderVO.setServiceMoney(BigDecimal.ZERO);
 		}
-		tCharingOrderVO.setTotal(total);
-		tCharingOrderVO.setTime(time);
-		tCharingOrderVO.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
-		tCharingOrderVO.setElectronicMoney(electronicMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
-		tCharingOrderVO.setServiceMoney(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
 		pageInfo.setRecords(list);
 		tCharingOrderVO.setList(pageInfo);
         return tCharingOrderVO;
@@ -1730,7 +1736,7 @@
 			}
 			// 获取开始SOC 结束soc
 			if (chargingOrderListVO.getCode()!=null){
-				List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrderListVO.getCode()).getData();
+				List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode());
 
 			if (data6!=null && !data6.isEmpty()){
 				int min = 100;
@@ -2039,7 +2045,7 @@
 
 		// 获取开始SOC 结束soc
 		if (chargingOrder.getCode()!=null){
-			List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
+			List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
 			if (data6!=null){
 				for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
 					if (uploadRealTimeMonitoringData.getOutput_current()!=null&&
@@ -2113,7 +2119,6 @@
 	 * @param query
 	 */
 	@Override
-	@GlobalTransactional(rollbackFor = Exception.class)
 	public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) {
 		if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())){
 			//获取当前的计费策略
@@ -2139,10 +2144,6 @@
 			chargingOrder.setChargingCapacity(query.getCharging_degree());
 			chargingOrder.setElectricity(query.getCharging_degree());
 			chargingOrder.setTotalElectricity(new BigDecimal(100 - query.getSoc()));
-			BmsDemandAndChargerExportation data = bmsDemandAndChargerExportationClient.getBmsDemandAndChargerExportation(chargingOrder1.getCode()).getData();
-			if(null != data){
-				chargingOrder.setNeedElec(data.getBms_current_requirements());
-			}
 			this.updateById(chargingOrder);
 		}
 	}
@@ -2153,7 +2154,6 @@
 	 * @param orderCode
 	 */
 	@Override
-	@GlobalTransactional(rollbackFor = Exception.class)
 	public void endCharge(String orderCode, Integer endMode) {
 		TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, orderCode));
 		TChargingOrder chargingOrder = new TChargingOrder();
@@ -2178,33 +2178,38 @@
 	 * @param vo
 	 */
 	@Override
-	@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){
+		Boolean hasKey = redisService.hasKey("endOrder:" + vo.getTransaction_serial_number());
+		if(hasKey){
 			return R.ok();
 		}
-		Integer status = chargingOrder.getStatus();
-		if(status == 5){
-			return R.ok();
-		}
-		
-		//如果使用优惠券需要判断优惠券是否满足使用条件
-		//退款金额=优惠券金额+剩余充电金额
-		BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
-		BigDecimal periodServicePrice_total = BigDecimal.ZERO;
-		BigDecimal vipDiscountAmount_total = BigDecimal.ZERO;
-		BigDecimal serviceCharge_total = BigDecimal.ZERO;
-		BigDecimal total = BigDecimal.ZERO;
-		
-		//获取订单的计费策略
-		List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
-		accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1).setEndTime("23:59");
-		//开始处理计费明细数据和优惠数据
-		chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
-		SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-		List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
+		//添加1分钟的缓存
+		redisService.setCacheObject("endOrder:" + vo.getTransaction_serial_number(), vo.getTransaction_serial_number(), 1L, TimeUnit.MINUTES);
 		try {
+			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();
+			}
+			
+			//如果使用优惠券需要判断优惠券是否满足使用条件
+			//退款金额=优惠券金额+剩余充电金额
+			BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
+			BigDecimal periodServicePrice_total = BigDecimal.ZERO;
+			BigDecimal vipDiscountAmount_total = BigDecimal.ZERO;
+			BigDecimal serviceCharge_total = BigDecimal.ZERO;
+			BigDecimal total = BigDecimal.ZERO;
+			
+			//获取订单的计费策略
+			List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
+			accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1).setEndTime("23:59");
+			//开始处理计费明细数据和优惠数据
+			chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
+			SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+			List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
 			//跨天
 			if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
 				//当天的
@@ -2325,299 +2330,330 @@
 					lists.add(vo1);
 				}
 			}
-		}catch (Exception e){
-			e.printStackTrace();
-			R.fail("处理失败");
-		}
-		
-		//开始处理明细
-		for (int i = 0; i < lists.size(); i++) {
-			AccountingStrategyDetailOrderVo strategyDetail = lists.get(i);
-			BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity();
-			TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
-			chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
-			chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
-			chargingOrderAccountingStrategy.setType(strategyDetail.getType());
-			chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
-			chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
-			chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
-			if(i == 0){
-				String time = vo.getStart_time().split(" ")[1];
-				chargingOrderAccountingStrategy.setStartTime(time.substring(0, time.lastIndexOf(":")));
-			}else{
-				chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime());
-			}
-			if(i == lists.size() - 1){
-				String time = vo.getEnd_time().split(" ")[1];
-				chargingOrderAccountingStrategy.setEndTime(time.substring(0, time.lastIndexOf(":")));
-			}else{
-				chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
+			
+			//开始处理明细
+			for (int i = 0; i < lists.size(); i++) {
+				AccountingStrategyDetailOrderVo strategyDetail = lists.get(i);
+				BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity();
+				TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
+				chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
+				chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
+				chargingOrderAccountingStrategy.setType(strategyDetail.getType());
+				chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
+				chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
+				chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
+				if(i == 0){
+					String time = vo.getStart_time().split(" ")[1];
+					chargingOrderAccountingStrategy.setStartTime(time.substring(0, time.lastIndexOf(":")));
+				}else{
+					chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime());
+				}
+				if(i == lists.size() - 1){
+					String time = vo.getEnd_time().split(" ")[1];
+					chargingOrderAccountingStrategy.setEndTime(time.substring(0, time.lastIndexOf(":")));
+				}else{
+					chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
+				}
+				
+				//已充电总度数
+				BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge);
+				BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge);
+				BigDecimal serviceCharge = originalServicePrice;
+				BigDecimal vipDiscountAmount = BigDecimal.ZERO;
+				//计算优惠金额
+				if(null != chargingOrder.getVipDiscount()){
+					//0.58折
+					vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount()));
+					serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount());
+				}
+				chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
+				chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN));
+				chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN));
+				chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN));
+				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 electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge);
-			BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge);
-			BigDecimal serviceCharge = originalServicePrice;
-			BigDecimal vipDiscountAmount = BigDecimal.ZERO;
-			//计算优惠金额
-			if(null != chargingOrder.getVipDiscount()){
-				//0.58折
-				vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount()));
-				serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount());
-			}
-			chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
-			chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN));
-			chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN));
-			chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN));
-			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 rechargeAmount = chargingOrder.getRechargeAmount();
-		//支付金额
-		BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total);
-		//退款金额=充值金额-实际支付金额
-		BigDecimal refundAmount = rechargeAmount.subtract(payAmount);
-
-		TChargingOrder order = new TChargingOrder();
-		order.setId(chargingOrder.getId());
-		order.setAppUserId(chargingOrder.getAppUserId());
-		UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData();
-		if(null != uploadRealTimeMonitoringData && null == chargingOrder.getEndMode()){
-			Integer soc = uploadRealTimeMonitoringData.getSoc();
-			if(soc >= 98){
-				order.setEndMode(2);
-			}else if(chargingOrder.getResidualAmount().compareTo(new BigDecimal(1)) <= 0){
-				order.setEndMode(3);
-			}else{
-				order.setEndMode(0);
-			}
-		}
-		order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
-		order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
-		order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
-		order.setStatus(5);
-		order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
-		order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
-		order.setChargingCapacity(vo.getTotal_electricity());
-		order.setElectricity(vo.getTotal_electricity());
-		order.setVipDiscountAmount(vipDiscountAmount_total);
-		if(vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0){
-			order.setVipDiscount(BigDecimal.valueOf(1));
-		}
-		
-		//计算优惠券
-		BigDecimal couponDiscount = BigDecimal.ZERO;
-		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){
-					BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
-					//如果优惠金额大于服务费金额,以服务费作为最大限制
-					if(serviceCharge_total.compareTo(couponDiscountAmount) < 0){
-						couponDiscount = serviceCharge_total;
-						serviceCharge_total = BigDecimal.ZERO;
-					}else{
-						couponDiscount = couponDiscountAmount;
-					}
-					appCoupon.setStatus(2);
-					appCouponClient.updateAppCoupon(appCoupon);
+			BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
+			//原金额
+			BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
+			//支付金额
+			BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total);
+			//退款金额=充值金额-实际支付金额
+			BigDecimal refundAmount = rechargeAmount.subtract(payAmount);
+			
+			TChargingOrder order = new TChargingOrder();
+			order.setId(chargingOrder.getId());
+			order.setAppUserId(chargingOrder.getAppUserId());
+			UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(chargingOrder.getCode());
+			if(null != uploadRealTimeMonitoringData && null == chargingOrder.getEndMode()){
+				Integer soc = uploadRealTimeMonitoringData.getSoc();
+				if(soc >= 98){
+					order.setEndMode(2);
+				}else if(chargingOrder.getResidualAmount().compareTo(new BigDecimal(1)) <= 0){
+					order.setEndMode(3);
 				}else{
-					order.setAppCouponId(null);
-					order.setCouponDiscountAmount(BigDecimal.ZERO);
-					appCouponClient.refund(chargingOrder.getAppCouponId().toString());
+					order.setEndMode(0);
 				}
 			}
-			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;
-					//如果优惠金额大于服务费金额,以服务费作为最大限制
-					if(serviceCharge_total.compareTo(divide) < 0){
-						couponDiscount = serviceCharge_total;
-						serviceCharge_total = BigDecimal.ZERO;
+			order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
+			order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
+			order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
+			order.setStatus(5);
+			order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
+			order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
+			order.setChargingCapacity(vo.getTotal_electricity());
+			order.setElectricity(vo.getTotal_electricity());
+			order.setVipDiscountAmount(vipDiscountAmount_total);
+			if(vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0){
+				order.setVipDiscount(BigDecimal.valueOf(1));
+			}
+			
+			//计算优惠券
+			BigDecimal couponDiscount = BigDecimal.ZERO;
+			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){
+						BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
+						//如果优惠金额大于服务费金额,以服务费作为最大限制
+						if(serviceCharge_total.compareTo(couponDiscountAmount) < 0){
+							couponDiscount = serviceCharge_total;
+							serviceCharge_total = BigDecimal.ZERO;
+						}else{
+							couponDiscount = couponDiscountAmount;
+						}
+						appCoupon.setStatus(2);
+						appCouponClient.updateAppCoupon(appCoupon);
 					}else{
-						couponDiscount = divide;
+						order.setAppCouponId(null);
+						order.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;
+						//如果优惠金额大于服务费金额,以服务费作为最大限制
+						if(serviceCharge_total.compareTo(divide) < 0){
+							couponDiscount = serviceCharge_total;
+							serviceCharge_total = BigDecimal.ZERO;
+						}else{
+							couponDiscount = divide;
+						}
+						
+						appCoupon.setStatus(2);
+						appCouponClient.updateAppCoupon(appCoupon);
+					}else{
+						order.setAppCouponId(null);
+						order.setCouponDiscountAmount(BigDecimal.ZERO);
+						appCouponClient.refund(chargingOrder.getAppCouponId().toString());
+					}
+				}
+			}
+			//优惠券优惠金额
+			couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN);
+			//退款金额+优惠券
+			refundAmount = refundAmount.add(couponDiscount);
+			//实际支付金额-优惠券
+			payAmount = payAmount.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(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);
+			this.updateById(order);
+			chargingOrder = this.getById(order.getId());
+			
+			//推送三方平台
+			if(2 == chargingOrder.getOrderSource()){
+				TChargingOrder finalChargingOrder = chargingOrder;
+				new Thread(new Runnable() {
+					@Override
+					public void run() {
+						tcecClient.notificationEquipChargeStatus(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId());
+						tcecClient.notificationStopChargeResult(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getChargingGunId().toString(),
+								finalChargingOrder.getOperatorId());
+						tcecClient.notificationChargeOrderInfo(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId());
+					}
+				}).start();
+			}
+			
+			//开始将优惠券优惠的金额添加到明细中
+			BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
+			if(null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){
+				List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
+				BigDecimal reduce = list.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+				for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
+					BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
+					BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
+					periodServicePrice = periodServicePrice.subtract(multiply);
+					chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN));
+					chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN));
+				}
+				chargingOrderAccountingStrategyService.updateBatchById(list);
+			}
+			
+			// 将枪状态重置为空闲
+			TChargingGun chargingGun = new TChargingGun();
+			chargingGun.setId(chargingOrder.getChargingGunId());
+			chargingGun.setStatus(2);
+			chargingGun.setChargingPower(BigDecimal.ZERO);
+			chargingGunClient.updateChargingGunById(chargingGun);
+			//推送状态给三方平台
+			if(2 == chargingOrder.getOrderSource()){
+				tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus());
+			}
+			
+			//添加积分
+			if(1 == chargingOrder.getOrderSource()){
+				TIntegralRule integralRule = integralRuleClient.getSet().getData();
+				if(null != integralRule){
+					TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+					Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
+					Integer integral = chargingOrder.getServiceCharge().intValue() * num1;
+					if(null != appUser.getVipId()){
+						TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+						Integer doubleIntegration = vip.getDoubleIntegration();
+						//双倍积分
+						if(1 == doubleIntegration){
+							integral *= 2;
+						}
 					}
 					
-					appCoupon.setStatus(2);
-					appCouponClient.updateAppCoupon(appCoupon);
-				}else{
-					order.setAppCouponId(null);
-					order.setCouponDiscountAmount(BigDecimal.ZERO);
-					appCouponClient.refund(chargingOrder.getAppCouponId().toString());
-				}
-			}
-		}
-		//优惠券优惠金额
-		couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN);
-		//退款金额+优惠券
-		refundAmount = refundAmount.add(couponDiscount);
-		//实际支付金额-优惠券
-		payAmount = payAmount.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(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);
-		this.updateById(order);
-		chargingOrder = this.getById(order.getId());
-		
-		//推送三方平台
-		if(2 == chargingOrder.getOrderSource()){
-			TChargingOrder finalChargingOrder = chargingOrder;
-			new Thread(new Runnable() {
-				@Override
-				public void run() {
-					tcecClient.notificationEquipChargeStatus(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId());
-					tcecClient.notificationStopChargeResult(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getChargingGunId().toString(),
-							finalChargingOrder.getOperatorId());
-					tcecClient.notificationChargeOrderInfo(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId());
-				}
-			}).start();
-		}
-		
-		//开始将优惠券优惠的金额添加到明细中
-		BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
-		if(null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){
-			List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
-			BigDecimal reduce = list.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-			for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
-				BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
-				BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
-				periodServicePrice = periodServicePrice.subtract(multiply);
-				chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN));
-				chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN));
-			}
-			chargingOrderAccountingStrategyService.updateBatchById(list);
-		}
-		
-		// 将枪状态重置为空闲
-		TChargingGun chargingGun = new TChargingGun();
-		chargingGun.setId(chargingOrder.getChargingGunId());
-		chargingGun.setStatus(2);
-		chargingGun.setChargingPower(BigDecimal.ZERO);
-		chargingGunClient.updateChargingGunById(chargingGun);
-		//推送状态给三方平台
-		if(2 == chargingOrder.getOrderSource()){
-			tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus());
-		}
-		
-		//添加积分
-		if(1 == chargingOrder.getOrderSource()){
-			TIntegralRule integralRule = integralRuleClient.getSet().getData();
-			if(null != integralRule){
-				TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
-				Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
-				Integer integral = chargingOrder.getServiceCharge().intValue() * num1;
-				if(null != appUser.getVipId()){
-					TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
-					Integer doubleIntegration = vip.getDoubleIntegration();
-					//双倍积分
-					if(1 == doubleIntegration){
-						integral *= 2;
+					if(integral > 0){
+						TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
+						appUserIntegralChange.setAppUserId(appUser.getId());
+						appUserIntegralChange.setChangeType(2);
+						appUserIntegralChange.setHistoricalIntegral(appUser.getPoints());
+						appUser.setPoints(appUser.getPoints() + integral);
+						appUserIntegralChange.setCurrentIntegral(appUser.getPoints());
+						appUserIntegralChange.setCreateTime(LocalDateTime.now());
+						appUserIntegralChange.setOrderCode(chargingOrder.getCode());
+						appUserIntegralChange.setExtension(chargingOrder.getId().toString());
+						appUserClient.updateAppUser(appUser);
+						appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
 					}
 				}
 				
-				if(integral > 0){
-					TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
-					appUserIntegralChange.setAppUserId(appUser.getId());
-					appUserIntegralChange.setChangeType(2);
-					appUserIntegralChange.setHistoricalIntegral(appUser.getPoints());
-					appUser.setPoints(appUser.getPoints() + integral);
-					appUserIntegralChange.setCurrentIntegral(appUser.getPoints());
-					appUserIntegralChange.setCreateTime(LocalDateTime.now());
-					appUserIntegralChange.setOrderCode(chargingOrder.getCode());
-					appUserIntegralChange.setExtension(chargingOrder.getId().toString());
-					appUserClient.updateAppUser(appUser);
-					appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
-				}
-			}
-			
-			//计算用户标签
-			editUserTag(chargingOrder);
-			//用户推荐奖励
-			referralReward(chargingOrder);
-			
-			//开始构建退款费用
-			refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
-			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());
-				chargingOrderRefund.setRefundTitle("充电完成退款");
-				chargingOrderRefund.setRefundContent("充电完成退款");
-				chargingOrderRefund.setRefundReason("充电完成退款");
-				chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
-				chargingOrderRefund.setRefundTotalAmount(refundAmount);
-				chargingOrderRefund.setPayAmount(rechargeAmount);
-				if(1 == rechargePaymentType){
-					WxPaymentRefundModel model = new WxPaymentRefundModel();
-					model.setOut_trade_no(chargingOrder.getCode());
-					model.setOut_refund_no(chargingOrderRefund.getRefundCode());
-					model.setReason("充电完成退款");
-					model.setNotify_url("/payment/wx/refund/notify");
-					WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
-					amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
-					amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
-					amount.setCurrency("CNY");
-					model.setAmount(amount);
-					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){
-					RefundReq dto = new RefundReq();
-					dto.setOutTradeNo(chargingOrder.getCode());
-					dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
-					dto.setRefundAmount(refundAmount.toString());
-					dto.setRefundReason("充电完成退款");
-					RefundResp resp = aliPaymentClient.refund(dto).getData();
-					if(null != resp){
-						chargingOrderRefundService.save(chargingOrderRefund);
-						this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
-					}
-				}
+				//计算用户标签
+				editUserTag(chargingOrder);
+				//用户推荐奖励
+				referralReward(chargingOrder);
 				
+				//开始构建退款费用
+				refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
+				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());
+					chargingOrderRefund.setRefundTitle("充电完成退款");
+					chargingOrderRefund.setRefundContent("充电完成退款");
+					chargingOrderRefund.setRefundReason("充电完成退款");
+					chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
+					chargingOrderRefund.setRefundTotalAmount(refundAmount);
+					chargingOrderRefund.setPayAmount(rechargeAmount);
+					if(1 == rechargePaymentType){
+						WxPaymentRefundModel model = new WxPaymentRefundModel();
+						model.setOut_trade_no(chargingOrder.getCode());
+						model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+						model.setReason("充电完成退款");
+						model.setNotify_url("/payment/wx/refund/notify");
+						WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+						amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
+						amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+						amount.setCurrency("CNY");
+						model.setAmount(amount);
+						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){
+						RefundReq dto = new RefundReq();
+						dto.setOutTradeNo(chargingOrder.getCode());
+						dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
+						dto.setRefundAmount(refundAmount.toString());
+						dto.setRefundReason("充电完成退款");
+						RefundResp resp = aliPaymentClient.refund(dto).getData();
+						if(null != resp){
+							chargingOrderRefundService.save(chargingOrderRefund);
+							this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+						}
+					}
+					
+				}
 			}
+			
+			//添加汇总统计数据
+			List<TChargingOrderAccountingStrategy> list4 = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>().eq("charging_order_id", chargingOrder.getId()));
+			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);
+			BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal serviceMoney = BigDecimal.ZERO;
+			BigDecimal paymentMoney = BigDecimal.ZERO;
+			long time = 0;
+			if (!chargingOrder.getOrderSource().equals(2)) {
+				serviceMoney = serviceMoney.add(service_reduce);
+				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+			}else{
+				serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+			}
+			if (chargingOrder.getStartTime()!=null && chargingOrder.getEndTime()!=null){
+				LocalDateTime startTime = chargingOrder.getStartTime();
+				LocalDateTime endTime = chargingOrder.getEndTime();
+				// 计算时间差 单位秒
+				time = ChronoUnit.SECONDS.between(startTime, endTime);
+			}
+			TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
+			summaryData.setChargingOrderId(chargingOrder.getId());
+			summaryData.setChargingCapacity(chargingCapacity);
+			summaryData.setChargingDuration(time);
+			summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			chargingOrderSummaryDataService.save(summaryData);
+		}catch (Exception e) {
+			e.printStackTrace();
+		}finally {
+			redisService.deleteObject("endOrder:" + vo.getTransaction_serial_number());
 		}
 		return R.ok();
 	}
@@ -3959,7 +3995,7 @@
 				.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();
+			TransactionRecord transactionRecord = transactionRecordService.findOne(order.getCode());
 			Map<String, Object> map = new HashMap<>();
 			map.put("order", order);
 			map.put("transactionRecord", transactionRecord);
@@ -3984,4 +4020,48 @@
 		tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
 		return R.ok();
 	}
+	
+	
+	
+	
+	public R addChargingOrderSummaryData(){
+		List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
+		List<TChargingOrder> list1 = this.list(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getDelFlag, 0));
+		for (TChargingOrder chargingOrderVO : list1) {
+			if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
+				continue;
+			}
+			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);
+			BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal serviceMoney = new BigDecimal("0");
+			BigDecimal paymentMoney = new BigDecimal("0");
+			if (!chargingOrderVO.getOrderSource().equals(2)) {
+				serviceMoney = serviceMoney.add(service_reduce);
+				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+			}else{
+				serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+			}
+			Long time = 0L;
+			if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
+				LocalDateTime startTime = chargingOrderVO.getStartTime();
+				LocalDateTime endTime = chargingOrderVO.getEndTime();
+				// 计算时间差 单位秒
+				long between = ChronoUnit.SECONDS.between(startTime, endTime);
+				time+=between;
+			}
+			
+			TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
+			summaryData.setChargingOrderId(chargingOrderVO.getId());
+			summaryData.setChargingCapacity(chargingCapacity);
+			summaryData.setChargingDuration(time);
+			summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			chargingOrderSummaryDataService.save(summaryData);
+		}
+		return R.ok();
+	}
 }

--
Gitblit v1.7.1