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 | 1283 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 770 insertions(+), 513 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 ba79837..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){
@@ -648,21 +652,19 @@
 						long times = rechargeAmount1.divide(s_total_amount, 0, RoundingMode.DOWN).longValue();
 						if(times > m){
 							//充电时间跨度两个计费策略,需要继续对下一个策略进行计算
-							serviceCharge = s_server_amount.multiply(new BigDecimal(m));
+							serviceCharge = serviceCharge.add(s_server_amount.multiply(new BigDecimal(m)));
 							rechargeAmount1 = rechargeAmount1.subtract(s_total_amount.multiply(new BigDecimal(m)));
-							if(null != discount){
-								discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount)));
-							}
 							nowTimeMillis = null;
 						}else{
-							serviceCharge = s_server_amount.multiply(new BigDecimal(times));
-							if(null != discount){
-								discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount)));
-							}
+							serviceCharge = serviceCharge.add(s_server_amount.multiply(new BigDecimal(times)));
 							break;
 						}
 					}
 				}
+				if(null != discount){
+					discountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(discount));
+				}
+				
 				if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){
 					//计算会员最大优惠金额
 					TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
@@ -673,9 +675,12 @@
 					}
 				}
 				discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN);
+				if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){
+					data.setChargeNum(data.getChargeNum() - 1);
+					appUserVipDetailClient.updateAppUserVipDetail(data);
+				}
 			}
 		}
-		
 		
 		//机子上显示的金额为用户充值的金额+会员折扣金额
 		BigDecimal account_balance = chargingOrder.getRechargeAmount().add(discountAmount).setScale(4, RoundingMode.HALF_EVEN);
@@ -696,15 +701,15 @@
 		
 		log.info(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString());
 		sendMessageClient.platformStartCharging(platformStartCharging);
-		//异步线程检测远程启动的应答结果。如果失败,则需要全额退款
-		Long id = chargingOrder.getId();
-		//执行5分钟的定时任务检测
-		ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
-		scheduler.scheduleAtFixedRate(()->{
-			if(timingDetection(id)){
-				scheduler.shutdown();
-			}
-		}, 5, 1, TimeUnit.SECONDS);
+//		//异步线程检测远程启动的应答结果。如果失败,则需要全额退款
+//		Long id = chargingOrder.getId();
+//		//执行5分钟的定时任务检测
+//		ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+//		scheduler.scheduleAtFixedRate(()->{
+//			if(timingDetection(id)){
+//				scheduler.shutdown();
+//			}
+//		}, 5, 1, TimeUnit.SECONDS);
 		return AjaxResult.success();
 	}
 	
@@ -721,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);
@@ -730,7 +735,7 @@
 			Integer counter = counter_map.get(code);
 			PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
 			//5分钟内还未插枪则取消充电,退回金额。
-			if(failure_cause == 5 && (null == counter || counter < 300)){
+			if(failure_cause == 5 && (null == counter || counter < 1800)){
 				counter = (null == counter ? 0 : counter) + 1;
 				counter_map.put(code, counter);
 				//启动失败
@@ -771,7 +776,7 @@
 			log.info(code + ":-------------------未上传开启充电结果-------------------" + counter);
 			PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
 			//5分钟内未启动成功,退回金额。
-			if(null == counter || counter < 300){
+			if(null == counter || counter < 1800){
 				counter = (null == counter ? 0 : counter) + 1;
 				boot_failed_map.put(code, counter);
 				//启动失败
@@ -920,9 +925,22 @@
 					chargingOrderRefundService.save(chargingOrderRefund);
 					//手续费
 					Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
-					BigDecimal refund_fee = new BigDecimal(amount1.get("refund_fee").toString()).divide(new BigDecimal(100));
+					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(chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0){
+						TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+						GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
+						getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
+						getAppUserVipDetail.setVipId(appUser.getVipId());
+						TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
+						if(null != data){
+							data.setChargeNum(data.getChargeNum() + 1);
+							appUserVipDetailClient.updateAppUserVipDetail(data);
+						}
+					}
 				}
 			}
 			if(2 == rechargePaymentType){
@@ -934,6 +952,19 @@
 				RefundResp resp = aliPaymentClient.refund(dto).getData();
 				if(null != resp){
 					chargingOrderRefundService.save(chargingOrderRefund);
+					//回退会员折扣次数
+					if(chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0){
+						TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+						GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
+						getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
+						getAppUserVipDetail.setVipId(appUser.getVipId());
+						TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
+						if(null != data){
+							data.setChargeNum(data.getChargeNum() + 1);
+							appUserVipDetailClient.updateAppUserVipDetail(data);
+						}
+					}
+					
 					try {
 						Thread.sleep(1000);
 					} catch (InterruptedException e) {
@@ -943,6 +974,73 @@
 				}
 			}
 
+		}
+	}
+	
+	
+	
+	public void refund1(String code, BigDecimal money){
+		log.info(code + ":-------------------充电成功,执行手动退款-------------------");
+		TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
+		if(chargingOrder.getOrderSource() == 1){
+			BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
+			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(money);
+			chargingOrderRefund.setRefundStatus(1);
+			chargingOrderRefund.setPayType(rechargePaymentType);
+			chargingOrderRefund.setRefundStatus(1);
+			chargingOrderRefund.setCode(code);
+			chargingOrderRefund.setRefundTitle("充电完成退款");
+			chargingOrderRefund.setRefundContent("充电完成退款");
+			chargingOrderRefund.setRefundReason("充电完成退款");
+			chargingOrderRefund.setRefundRemark("充电完成退款,手动退款");
+			chargingOrderRefund.setRefundTotalAmount(money);
+			chargingOrderRefund.setPayAmount(money);
+			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(money.multiply(new BigDecimal(100)).intValue());
+				amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+				amount.setCurrency("CNY");
+				model.setAmount(amount);
+				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){
+				RefundReq dto = new RefundReq();
+				dto.setOutTradeNo(chargingOrder.getCode());
+				dto.setOutRequestNo(chargingOrderRefund.getCode());
+				dto.setRefundAmount(money.toString());
+				dto.setRefundReason("充电完成退款");
+				RefundResp resp = aliPaymentClient.refund(dto).getData();
+				if(null != resp){
+					chargingOrderRefundService.save(chargingOrderRefund);
+					try {
+						Thread.sleep(1000);
+					} catch (InterruptedException e) {
+						throw new RuntimeException(e);
+					}
+					chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+				}
+			}
+			
 		}
 	}
 
@@ -998,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());
@@ -1027,7 +1125,6 @@
 	 * @return
 	 */
 	@Override
-	@GlobalTransactional(rollbackFor = Exception.class)
 	public AjaxResult stopCharging(String id) {
 		TChargingOrder order = this.getById(id);
 		Integer status = order.getStatus();
@@ -1243,7 +1340,6 @@
 		List<TChargingPile> allPile = chargingGunClient.getAllPile().getData();
 		List<Site> data9 = siteClient.getSiteAll().getData();
 		List<TAppUser> data6 = appUserClient.getAllUser().getData();
-		List<Partner> data7 = siteClient.getAllPartner().getData();
 		List<TAppUserCar> data4 = appUserCarClient.getAllCar().getData();
 		String startTime1 = null;
 		String startTime2 = null;
@@ -1261,7 +1357,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();
@@ -1307,17 +1402,14 @@
 		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);
 		 BigDecimal total = new BigDecimal("0");
 		 long time = 0L;
-		 BigDecimal income = new BigDecimal("0");
 		 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<String> collect2 = list.stream().map(TChargingOrder::getCode).collect(Collectors.toList());
-		List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>());
+		List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
 
 		for (ChargingOrderVO chargingOrderVO : list) {
 			if (roleType == 2){
@@ -1326,7 +1418,6 @@
 					List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
 					chargingOrderVO.setAuthRecord(t1.get(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"));
@@ -1350,7 +1441,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();
@@ -1374,42 +1475,54 @@
 			}
 		}
 
-
-		List<Long> orderIds = list1.stream().map(TChargingOrder::getId).collect(Collectors.toList());
-		if(orderIds.isEmpty())orderIds.add(-1L);
-		List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery()
-				.in(TChargingOrderRefund::getChargingOrderId, orderIds)
-				.eq(TChargingOrderRefund::getRefundStatus,2).list();
-
-		for (ChargingOrderVO chargingOrderVO : list1) {
-			paymentMoney= paymentMoney.add(chargingOrderVO.getPaymentAmount()!=null?chargingOrderVO.getPaymentAmount():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"));
-			}
-			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());
-			}
-			electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence()!=null?chargingOrderVO.getElectrovalence():new BigDecimal("0"));
-			serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge():new BigDecimal("0"));
+//		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.subtract(commissionMoney));
-		tCharingOrderVO.setIncome(paymentMoney);
-		tCharingOrderVO.setElectronicMoney(electronicMoney);
-		tCharingOrderVO.setServiceMoney(serviceMoney);
 		pageInfo.setRecords(list);
 		tCharingOrderVO.setList(pageInfo);
         return tCharingOrderVO;
@@ -1459,37 +1572,49 @@
 	}
 
 	@Override
-	public Map<String, Object> countAll(LocalDate sixBefore,List<Integer> siteIds) {
-		return this.baseMapper.countAll(sixBefore,siteIds);
+	public Map<String, Object> countAll(List<Integer> siteIds) {
+		return this.baseMapper.countAll(siteIds);
 	}
 
 	@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,List<Integer> siteIds) {
+		LocalDateTime start1 = start.atStartOfDay();
+		LocalDateTime end1 = end.atTime(LocalTime.MAX);
+		return this.baseMapper.getWeekData(start1,end1,siteIds);
 	}
 
 	@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,List<Integer> siteIds) {
+		LocalDateTime start1 = start.atStartOfDay();
+		LocalDateTime end1 = end.atTime(LocalTime.MAX);
+		return this.baseMapper.getMonthData(start1,end1,siteIds);
 	}
 
 	@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,List<Integer> siteIds) {
+		LocalDateTime start1 = start.atStartOfDay();
+		LocalDateTime end1 = end.atTime(LocalTime.MAX);
+		return this.baseMapper.getYearData(start1,end1,siteIds);
 	}
 
 	@Resource
 	private SysUserClient sysUserClient;
+
+
 	@Override
 	public ChargingOrderTimeVO chargingList(ChargingListQuery dto) {
 		String startTime1 = null;
@@ -1611,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;
@@ -1688,7 +1813,13 @@
 						"0"+"%(平)/"+
 						"0"+"%(谷)");
 			}
-
+			if (chargingOrderListVO.getOrderSource().equals(2)){
+				chargingOrderListVO.setSharingAmount(chargingOrderListVO.getServiceCharge()!=null?
+						chargingOrderListVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_HALF_UP)
+						:new BigDecimal("0"));
+			}else{
+				chargingOrderListVO.setSharingAmount(new BigDecimal("0"));
+			}
 		}
 		// 不分页
 		PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1,999999999);
@@ -1740,69 +1871,105 @@
 		BigDecimal feng = new BigDecimal("0");
 		BigDecimal ping = new BigDecimal("0");
 		BigDecimal gu = new BigDecimal("0");
-		List<Long> collect = list1.stream().map(ChargingOrderListVO::getId).collect(Collectors.toList());
-		List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.lambdaQuery()
-				.in(TChargingOrderAccountingStrategy::getChargingOrderId,collect).list();
+		List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
 		for (ChargingOrderListVO chargingOrderListVO : list1) {
-			if (chargingOrderListVO.getChargingCapacity()!=null)electronic = electronic.add(chargingOrderListVO.getElectricity());
-
-			if (chargingOrderListVO.getPaymentAmount()!=null)paymentAmount = paymentAmount.add(chargingOrderListVO.getPaymentAmount());
-			if (chargingOrderListVO.getElectrovalence()!=null)electrovalence = electrovalence.add(chargingOrderListVO.getElectrovalence());
-			if (chargingOrderListVO.getServiceCharge()!=null)serviceCharge = serviceCharge.add(chargingOrderListVO.getServiceCharge());
-			List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
-					.collect(Collectors.toList());
-			for (TChargingOrderAccountingStrategy temp : list2) {
-				switch (temp.getType()){
-					case 1:
-						if (temp.getChargingCapacity()!=null)jian = jian.add(temp.getChargingCapacity());
-						if (temp.getChargingCapacity()!=null)jianElectronic = jianElectronic.add(temp.getElectrovalence());
-						if (temp.getChargingCapacity()!=null)jianService = jianService.add(temp.getServiceCharge());
-						break;
-					case 2:
-						if (temp.getChargingCapacity()!=null)feng = feng.add(temp.getChargingCapacity());
-						if (temp.getChargingCapacity()!=null)fengElectronic = fengElectronic.add(temp.getElectrovalence());
-						if (temp.getChargingCapacity()!=null)fengService = fengService.add(temp.getServiceCharge());
-						break;
-					case 3:
-						if (temp.getChargingCapacity()!=null)ping = ping.add(temp.getChargingCapacity());
-						if (temp.getChargingCapacity()!=null)pingElectronic = pingElectronic.add(temp.getElectrovalence());
-						if (temp.getChargingCapacity()!=null)pingService = pingService.add(temp.getServiceCharge());
-						break;
-					case 4:
-						if (temp.getChargingCapacity()!=null)gu = gu.add(temp.getChargingCapacity());
-						if (temp.getChargingCapacity()!=null)guElectronic = guElectronic.add(temp.getElectrovalence());
-						if (temp.getChargingCapacity()!=null)guService = guService.add(temp.getServiceCharge());
-						break;
+			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);
+			BigDecimal periodElectricPrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal chargingCapacity = collect.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+			electronic = electronic.add(chargingCapacity);
+			electrovalence = electrovalence.add(periodElectricPrice);
+			if (chargingOrderListVO.getOrderSource().equals(2)){
+				serviceCharge = serviceCharge.add(periodServicePrice.multiply(new BigDecimal("0.8")));
+				paymentAmount = paymentAmount.add(periodElectricPrice).add(periodServicePrice.multiply(new BigDecimal("0.8")));
+			}else{
+				serviceCharge = serviceCharge.add(periodServicePrice);
+				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) {
+					switch (temp.getType()){
+						case 1:
+							jian = jian.add(temp.getChargingCapacity());
+							jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+							jianService = jianService.add(temp.getPeriodServicePrice());
+							break;
+						case 2:
+							feng = feng.add(temp.getChargingCapacity());
+							fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+							fengService = fengService.add(temp.getPeriodServicePrice());
+							break;
+						case 3:
+							ping = ping.add(temp.getChargingCapacity());
+							pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+							pingService = pingService.add(temp.getPeriodServicePrice());
+							break;
+						case 4:
+							gu = gu.add(temp.getChargingCapacity());
+							guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+							guService = guService.add(temp.getPeriodServicePrice());
+							break;
+					}
+				}
+			}else{
+				List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
+						.collect(Collectors.toList());
+				for (TChargingOrderAccountingStrategy temp : list2) {
+					BigDecimal multiply = temp.getPeriodServicePrice().multiply(new BigDecimal("0.8"));
+					switch (temp.getType()){
+						case 1:
+							jian = jian.add(temp.getChargingCapacity());
+							jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+							jianService = jianService.add(multiply);
+							break;
+						case 2:
+							feng = feng.add(temp.getChargingCapacity());
+							fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+							fengService = fengService.add(multiply);
+							break;
+						case 3:
+							ping = ping.add(temp.getChargingCapacity());
+							pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+							pingService = pingService.add(multiply);
+							break;
+						case 4:
+							gu = gu.add(temp.getChargingCapacity());
+							guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+							guService = guService.add(multiply);
+							break;
+					}
 				}
 			}
 		}
 
-		chargingOrderTimeVO.setChargingCapacity(electronic);
-		chargingOrderTimeVO.setPaymentAmount(paymentAmount);
-		chargingOrderTimeVO.setElectrovalence(electrovalence);
-		chargingOrderTimeVO.setServiceCharge(serviceCharge);
-		// 计算尖峰平谷充电量占比
+		chargingOrderTimeVO.setChargingCapacity(electronic.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+		chargingOrderTimeVO.setPaymentAmount(paymentAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+		chargingOrderTimeVO.setElectrovalence(electrovalence.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+		chargingOrderTimeVO.setServiceCharge(serviceCharge.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+		// 计算尖峰平谷充电到账占比
 		BigDecimal add = jianElectronic.add(fengElectronic).add(pingElectronic).add(guElectronic);
 		// 计算尖峰平谷服务费占比
 		BigDecimal add1 = jianService.add(fengService).add(pingService).add(guService);
-		// 计算尖峰平谷充电到账占比
+		// 计算尖峰平谷充电量占比
 		BigDecimal add2 = jian.add(feng).add(ping).add(gu);
 		if (add.compareTo(new BigDecimal("0"))!=0){
-			chargingOrderTimeVO.setCapacityProportion(jianElectronic+"度/"+fengElectronic+"度/"+pingElectronic+"度/"+guElectronic+"度-"
-					+jianElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
-					+fengElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
-					+pingElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
-					+guElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
+			chargingOrderTimeVO.setCapacityProportion(jian+"度/"+feng+"度/"+ping+"度/"+gu+"度-"
+					+jian.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
+					+feng.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
+					+ping.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
+					+gu.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
 			chargingOrderTimeVO.setServiceProportion(jianService+"元/"+fengService+"元/"+pingService+"元/"+guService+"元-"
 					+jianService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
 					+fengService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
 					+pingService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
 					+guService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
-			chargingOrderTimeVO.setElectronicProportion(jian+"元/"+feng+"元/"+ping+"元/"+gu+"元-"
-					+jian.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
-					+feng.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
-					+ping.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
-					+gu.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
+			chargingOrderTimeVO.setElectronicProportion(jianElectronic+"元/"+fengElectronic+"元/"+pingElectronic+"元/"+guElectronic+"元-"
+					+jianElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
+					+fengElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
+					+pingElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
+					+guElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
 		}else{
 			chargingOrderTimeVO.setCapacityProportion(jianElectronic+"度/"+fengElectronic+"度/"+pingElectronic+"度/"+guElectronic+"度-"
 					+"0"+"%/"
@@ -1878,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&&
@@ -1932,7 +2099,12 @@
 		chargingOrderListInfoVO.setUid(chargingOrder.getId().toString());
 		chargingOrderListInfoVO.setCouponDiscountAmount(chargingOrder.getCouponDiscountAmount());
 		chargingOrderListInfoVO.setVipDiscountAmount(chargingOrder.getVipDiscountAmount());
-		chargingOrderListInfoVO.setSharingAmount(chargingOrder.getSharingAmount());
+		if (chargingOrder.getOrderSource().equals(2)){
+			chargingOrderListInfoVO.setSharingAmount(chargingOrder.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_HALF_UP));
+		}else{
+			chargingOrderListInfoVO.setSharingAmount(chargingOrder.getSharingAmount());
+
+		}
 		// 查询费用明细列表
 		List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.lambdaQuery()
 				.eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())
@@ -1947,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())){
 			//获取当前的计费策略
@@ -1973,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);
 		}
 	}
@@ -1987,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();
@@ -2012,32 +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 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])){
 				//当天的
@@ -2084,7 +2256,7 @@
 					AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
 					BeanUtils.copyProperties(strategyDetail, vo1);
 					vo1.setChargingCapacity(sharp_peak_charge);
-					lists.add(vo1);
+					lists.add(0, vo1);
 				}
 				
 				//第二天的
@@ -2158,311 +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());
-			}
 			
-			//已充电总度数
-			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);
-			periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
-			total = total.add(electrovalenc.add(originalServicePrice));
-		}
-		
-		//原金额
-		BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
-		BigDecimal vipDiscountAmount = chargingOrder.getVipDiscountAmount();
-		//总金额(充值金额+会员折扣金额)
-		BigDecimal decimal = rechargeAmount.add(vipDiscountAmount);
-		//退款金额(已经计算了折扣优惠部分)
-		//如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
-		BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total));
-		BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
-		BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue());
-		//折扣金额
-		BigDecimal discountAmount = BigDecimal.ZERO;
-		if(null != chargingOrder.getVipDiscount()){
-			TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
-			//判断会员是否还有充电优惠次数
-			GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
-			getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
-			getAppUserVipDetail.setVipId(appUser.getVipId());
-			TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
-			if(null != data && data.getChargeNum() > 0){
-				data.setChargeNum(data.getChargeNum() - 1);
-				appUserVipDetailClient.updateAppUserVipDetail(data);
-				
-				//服务费折扣
-				discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
-				TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
-				BigDecimal maximumDeduction = vip.getMaximumDeduction();
-				//普通会员有最高优惠限制
-				if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){
-					discountAmount = maximumDeduction;
-				}
-			}
-		}
-		//会员折扣金额
-		discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN);
-		payAmount = payAmount.subtract(discountAmount);
-		periodServicePrice_total = periodServicePrice_total.subtract(discountAmount);
-
-		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.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.HALF_EVEN));
-		order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
-		order.setChargingCapacity(vo.getTotal_electricity());
-		order.setElectricity(vo.getTotal_electricity());
-		
-		//计算优惠券
-		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(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){
-						couponDiscount = periodServicePrice_total;
-						periodServicePrice_total = BigDecimal.ZERO;
-					}else{
-						couponDiscount = couponDiscountAmount;
-					}
-					appCoupon.setStatus(2);
-					appCouponClient.updateAppCoupon(appCoupon);
+			//开始处理明细
+			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{
-					order.setAppCouponId(null);
-					order.setCouponDiscountAmount(BigDecimal.ZERO);
-					appCouponClient.refund(chargingOrder.getAppCouponId().toString());
+					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 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.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(periodServicePrice_total.compareTo(divide) < 0){
-						couponDiscount = periodServicePrice_total;
-						periodServicePrice_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(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){
-			periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount);
-		}
-		order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
-		order.setServiceCharge(periodServicePrice_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()){
-			tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
-			tcecClient.notificationStopChargeResult(chargingOrder.getStartChargeSeq(), chargingOrder.getChargingGunId().toString(),
-					chargingOrder.getOperatorId());
-			tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
-		}
-		
-		//开始将优惠券优惠的金额添加到明细中
-		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");
-						BigDecimal refund_fee = new BigDecimal(amount1.get("refund_fee").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();
 	}
@@ -2471,8 +2662,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,List<Integer> siteIds) {
+
+			LocalDateTime start1 = start.atStartOfDay();
+			LocalDateTime end1 = end.atTime(LocalTime.MAX);
+		return this.baseMapper.getByDate(start1,end1,siteIds);
 	}
 
 	@Override
@@ -2485,10 +2679,7 @@
 		return this.baseMapper.queryPowerLevel(siteIds,statisticsQueryDto);
 	}
 
-	@Override
-	public List<Map<String, Object>> queryOrderCountAndMoneyBySiteIdDate(List<Integer> siteIds) {
-		return this.baseMapper.queryOrderCountAndMoneyBySiteIdDate(siteIds);
-	}
+
 
 	@Override
 	public List<Map<String, Object>> usersDay(ChargingStatisticsQueryDto statisticsQueryDto) {
@@ -2610,7 +2801,8 @@
 						chargingOrderRefundService.save(chargingOrderRefund);
 						//手续费
 						Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
-						BigDecimal refund_fee = new BigDecimal(amount1.get("refund_fee").toString()).divide(new BigDecimal(100));
+						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);
 					}
@@ -2677,7 +2869,8 @@
 						shoppingOrderRefundService.save(chargingOrderRefund);
 						//手续费
 						Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
-						BigDecimal refund_fee = new BigDecimal(amount1.get("refund_fee").toString()).divide(new BigDecimal(100));
+						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);
 					}
@@ -2741,7 +2934,8 @@
 					vipOrderRefundService.save(chargingOrderRefund);
 					//手续费
 					Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
-					BigDecimal refund_fee = new BigDecimal(amount1.get("refund_fee").toString()).divide(new BigDecimal(100));
+					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);
 				}
@@ -2782,6 +2976,8 @@
 	@Override
 	public TSettlementConfirm settlementAdd(SettlementConfirmAdd dto) {
 		List<Site> data = siteClient.getSiteByIds(Arrays.asList(dto.getSiteId())).getData();
+		List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
+
 		TSettlementConfirm tSettlementConfirm = new TSettlementConfirm();
 		if (!data.isEmpty()){
 			tSettlementConfirm.setSiteName(data.get(0).getName());
@@ -2808,9 +3004,7 @@
 
 		// 根据站点id和开始时间和结束时间和归属日期 查询充电订单列表
 		QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
-				.eq("site_id", dto.getSiteId())
-				.eq("status", 5)
-				.eq("recharge_payment_status",2);
+				.eq("site_id", dto.getSiteId());
 		switch (dto.getType()){
 			case 1:
 				eq.between("pay_time", localDateTime, localDateTime1);
@@ -2839,23 +3033,38 @@
 		// 支付订单金额 需要减去退款金额
 		BigDecimal paymentAmount = new BigDecimal("0");
 		for (TChargingOrder tChargingOrder : tChargingOrders) {
-			// 累加充电总度数
-			if (tChargingOrder.getChargingCapacity()!=null){
-				chargingElectronic = chargingElectronic.add(tChargingOrder.getChargingCapacity());
-
+			if(null == tChargingOrder.getStatus() || 5 != tChargingOrder.getStatus()){
+				continue;
 			}
+			List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(tChargingOrder.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);
+			// 累加充电总度数
+			chargingElectronic = chargingElectronic.add(chargingCapacity);
 			// 累加分佣
-			if (tChargingOrder.getSharingAmount()!=null) {
-				sharingAmount = sharingAmount.add(tChargingOrder.getSharingAmount());
+			if (tChargingOrder.getOrderSource()==2) {
+				sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN));
 			}
 			// 累加电费
-			if (tChargingOrder.getElectrovalence()!=null) {
-			electrovalence = electrovalence.add(tChargingOrder.getElectrovalence());
+			electrovalence = electrovalence.add(electronic_reduce);
+			if (tChargingOrder.getPaymentAmount()!=null && tChargingOrder.getOrderSource()!=2){
+				paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
+
 			}
+			if (tChargingOrder.getRechargeAmount()!=null){
+				orderCommission = orderCommission.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006"))
+						.setScale(2,BigDecimal.ROUND_DOWN));
+			}
+
 			// 累加服务费
 			if (tChargingOrder.getServiceCharge()!=null){
-				serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge());
-
+				if (tChargingOrder.getOrderSource()==2) {
+					serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN));
+					paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+				}else{
+					serviceCharge = serviceCharge.add(service_reduce);
+				}
 			}
 			// 累加会员折扣
 			if (tChargingOrder.getVipDiscountAmount()!=null){
@@ -2865,11 +3074,7 @@
 			if (tChargingOrder.getCouponDiscountAmount()!=null){
 				couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount());
 			}
-			if (tChargingOrder.getPaymentAmount()!=null){
-				paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
-				orderCommission = orderCommission.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006"))
-						.setScale(2,BigDecimal.ROUND_DOWN));
-			}
+
 
 		}
 
@@ -3029,13 +3234,9 @@
 			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();
+				.eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getStatus, 5));
 		SettlementTotalVO res = new SettlementTotalVO();
 		List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
 		LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
@@ -3072,8 +3273,6 @@
 		BigDecimal orderCommission = new BigDecimal("0");
 		BigDecimal vipDiscount = new BigDecimal("0");
 		BigDecimal couponDiscount = new BigDecimal("0");
-//		tSettlementConfirm1.setIncomePercentage();
-//		tSettlementConfirm1.setTotalPercentage();
 		tSettlementConfirm1.setElectronicRefund(0);
 		// 上月成本合计
 		BigDecimal beforeCost= new BigDecimal("0");
@@ -3148,7 +3347,6 @@
 			for (TChargingPile datum : data) {
 				bigDecimal = bigDecimal.add(datum.getRatedPower());
 			}
-
 
 			tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
 			//利用率=充电量/(桩数量*功率*时间)
@@ -3238,7 +3436,6 @@
 			BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome,2,RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
 			tSettlementConfirm.setIncomePercentage(subtract+"%");
 			tSettlementConfirm.setIncomePercentage(subtract+"%");
-
 		}
 		// 比较总利润 收入合计-成本合计
 		BigDecimal subtract1 = income.subtract(cost);
@@ -3683,7 +3880,6 @@
 		chargingOrder.setStatus(2);
 		chargingOrder.setPayTime(LocalDateTime.now());
 		chargingOrder.setChargeAmount(chargingOrder.getRechargeAmount());
-		chargingOrder.setVipDiscountAmount(BigDecimal.ZERO);
 		this.save(chargingOrder);
 		
 		Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
@@ -3730,15 +3926,15 @@
 		platformStartCharging.setAccount_balance(rechargeAmount);
 		log.info(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString());
 		sendMessageClient.platformStartCharging(platformStartCharging);
-		//异步线程检测远程启动的应答结果。如果失败,则需要全额退款
-		Long id = chargingOrder.getId();
-		//执行5分钟的定时任务检测
-		ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
-		scheduler.scheduleAtFixedRate(()->{
-			if(timingDetection(id)){
-				scheduler.shutdown();
-			}
-		}, 5, 1, TimeUnit.SECONDS);
+//		//异步线程检测远程启动的应答结果。如果失败,则需要全额退款
+//		Long id = chargingOrder.getId();
+//		//执行5分钟的定时任务检测
+//		ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+//		scheduler.scheduleAtFixedRate(()->{
+//			if(timingDetection(id)){
+//				scheduler.shutdown();
+//			}
+//		}, 5, 1, TimeUnit.SECONDS);
 		
 		//推送三方平台订单状态
 		tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
@@ -3799,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);
@@ -3807,4 +4003,65 @@
 		}
 		return R.ok(mapList);
 	}
+	
+	
+	/**
+	 *
+	 * 手动推送订单给第三方平台
+	 * @param code
+	 * @return
+	 */
+	@Override
+	public R pushOrderInfo(String code) {
+		TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
+		tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+		tcecClient.notificationStopChargeResult(chargingOrder.getStartChargeSeq(), chargingOrder.getChargingGunId().toString(),
+				chargingOrder.getOperatorId());
+		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