From 7a4f9541331bef779a506b38a27ed5c3373c0bec Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 15 五月 2025 13:53:22 +0800
Subject: [PATCH] 开发二级等保功能及心跳消息队列修改

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |  549 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 368 insertions(+), 181 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index 9910897..896a517 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
@@ -210,6 +210,9 @@
 	
 	@Resource
 	private TransactionRecordClient transactionRecordClient;
+	
+	@Resource
+	private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
 
 
 
@@ -697,15 +700,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();
 	}
 	
@@ -731,7 +734,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);
 				//启动失败
@@ -772,7 +775,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);
 				//启动失败
@@ -970,6 +973,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);
+				}
+			}
+			
 		}
 	}
 
@@ -1287,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();
@@ -1333,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.chargingOrder(pageInfo1,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();
 
@@ -1351,7 +1419,6 @@
 					chargingOrderVO.setAuthRecord(t1.get(0));
 				}
 			}
-			chargingOrderVO.setSharingAmount(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
 			chargingOrderVO.setCommissionAmount(chargingOrderVO.getRechargeAmount()!=null?chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
 			chargingOrderVO.setPlatFormMoney(chargingOrderVO.getRechargeAmount()!=null?chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
 			chargingOrderVO.setUid(chargingOrderVO.getId()+"");
@@ -1374,7 +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();
@@ -1398,48 +1475,54 @@
 			}
 		}
 
-
-		List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery()
-				.eq(TChargingOrderRefund::getRefundStatus,2).list();
-
-		for (ChargingOrderVO chargingOrderVO : list1) {
-			if (!chargingOrderVO.getOrderSource().equals(2)) {
-				paymentMoney = paymentMoney.add(chargingOrderVO.getPaymentAmount() != null ? chargingOrderVO.getPaymentAmount() : new BigDecimal("0"));
-			}else{
-				paymentMoney = paymentMoney.add(chargingOrderVO.getServiceCharge() != null ? chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN) : new BigDecimal("0"));
-
-			}
-			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"));
-			if (!chargingOrderVO.getOrderSource().equals(2)){
-				serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge():new BigDecimal("0"));
-			}else{
-				serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN):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;
@@ -1489,33 +1572,43 @@
 	}
 
 	@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
@@ -1780,22 +1873,18 @@
 		BigDecimal gu = new BigDecimal("0");
 		List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
 		for (ChargingOrderListVO chargingOrderListVO : list1) {
-			if (chargingOrderListVO.getChargingCapacity()!=null)electronic = electronic.add(chargingOrderListVO.getElectricity());
-
-			if (chargingOrderListVO.getPaymentAmount()!=null){
-				if (chargingOrderListVO.getOrderSource().equals(2)){
-					paymentAmount = paymentAmount.add(chargingOrderListVO.getServiceCharge()!=null?chargingOrderListVO.getServiceCharge().multiply(new BigDecimal("0.2").setScale(2,BigDecimal.ROUND_HALF_UP)):new BigDecimal("0"));
-				}else{
-					paymentAmount = paymentAmount.add(chargingOrderListVO.getPaymentAmount());
-				}
-			}
-			if (chargingOrderListVO.getElectrovalence()!=null)electrovalence = electrovalence.add(chargingOrderListVO.getElectrovalence());
-			if (chargingOrderListVO.getServiceCharge()!=null){
-				if (chargingOrderListVO.getOrderSource().equals(2)){
-					serviceCharge = serviceCharge.add(chargingOrderListVO.getServiceCharge().multiply(new BigDecimal("0.2").setScale(2,BigDecimal.ROUND_HALF_UP)));
-				}else{
-					serviceCharge = serviceCharge.add(chargingOrderListVO.getServiceCharge());
-				}
+			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()))
@@ -1803,24 +1892,24 @@
 				for (TChargingOrderAccountingStrategy temp : list2) {
 					switch (temp.getType()){
 						case 1:
-							if (temp.getChargingCapacity()!=null)jian = jian.add(temp.getChargingCapacity());
-							if (temp.getElectrovalence()!=null)jianElectronic = jianElectronic.add(temp.getElectrovalence());
-							if (temp.getServiceCharge()!=null)jianService = jianService.add(temp.getServiceCharge());
+							jian = jian.add(temp.getChargingCapacity());
+							jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+							jianService = jianService.add(temp.getPeriodServicePrice());
 							break;
 						case 2:
-							if (temp.getChargingCapacity()!=null)feng = feng.add(temp.getChargingCapacity());
-							if (temp.getElectrovalence()!=null)fengElectronic = fengElectronic.add(temp.getElectrovalence());
-							if (temp.getServiceCharge()!=null)fengService = fengService.add(temp.getServiceCharge());
+							feng = feng.add(temp.getChargingCapacity());
+							fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+							fengService = fengService.add(temp.getPeriodServicePrice());
 							break;
 						case 3:
-							if (temp.getChargingCapacity()!=null)ping = ping.add(temp.getChargingCapacity());
-							if (temp.getElectrovalence()!=null)pingElectronic = pingElectronic.add(temp.getElectrovalence());
-							if (temp.getServiceCharge()!=null)pingService = pingService.add(temp.getServiceCharge());
+							ping = ping.add(temp.getChargingCapacity());
+							pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+							pingService = pingService.add(temp.getPeriodServicePrice());
 							break;
 						case 4:
-							if (temp.getChargingCapacity()!=null)gu = gu.add(temp.getChargingCapacity());
-							if (temp.getElectrovalence()!=null)guElectronic = guElectronic.add(temp.getElectrovalence());
-							if (temp.getServiceCharge()!=null)guService = guService.add(temp.getServiceCharge());
+							gu = gu.add(temp.getChargingCapacity());
+							guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+							guService = guService.add(temp.getPeriodServicePrice());
 							break;
 					}
 				}
@@ -1828,38 +1917,38 @@
 				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:
-							if (temp.getChargingCapacity()!=null)jian = jian.add(temp.getChargingCapacity());
-							if (temp.getElectrovalence()!=null)jianElectronic = jianElectronic.add(temp.getElectrovalence());
-							if (temp.getServiceCharge()!=null)jianService = jianService.add(temp.getServiceCharge().multiply(new BigDecimal("0.2").setScale(2,BigDecimal.ROUND_HALF_UP)));
+							jian = jian.add(temp.getChargingCapacity());
+							jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+							jianService = jianService.add(multiply);
 							break;
 						case 2:
-							if (temp.getChargingCapacity()!=null)feng = feng.add(temp.getChargingCapacity());
-							if (temp.getElectrovalence()!=null)fengElectronic = fengElectronic.add(temp.getElectrovalence());
-							if (temp.getServiceCharge()!=null)fengService = fengService.add(temp.getServiceCharge().multiply(new BigDecimal("0.2").setScale(2,BigDecimal.ROUND_HALF_UP)));
+							feng = feng.add(temp.getChargingCapacity());
+							fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+							fengService = fengService.add(multiply);
 							break;
 						case 3:
-							if (temp.getChargingCapacity()!=null)ping = ping.add(temp.getChargingCapacity());
-							if (temp.getElectrovalence()!=null)pingElectronic = pingElectronic.add(temp.getElectrovalence());
-							if (temp.getServiceCharge()!=null)pingService = pingService.add(temp.getServiceCharge().multiply(new BigDecimal("0.2").setScale(2,BigDecimal.ROUND_HALF_UP)));
+							ping = ping.add(temp.getChargingCapacity());
+							pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+							pingService = pingService.add(multiply);
 							break;
 						case 4:
-							if (temp.getChargingCapacity()!=null)gu = gu.add(temp.getChargingCapacity());
-							if (temp.getElectrovalence()!=null)guElectronic = guElectronic.add(temp.getElectrovalence());
-							if (temp.getServiceCharge()!=null)guService = guService.add(temp.getServiceCharge().multiply(new BigDecimal("0.2").setScale(2,BigDecimal.ROUND_HALF_UP)));
+							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);
@@ -2107,10 +2196,11 @@
 		}
 		
 		//如果使用优惠券需要判断优惠券是否满足使用条件
-		//根据实际的充电金额计算退款金额   退回费用=(原金额/总金额)*(总金额-实际充电金额)
 		//退款金额=优惠券金额+剩余充电金额
 		BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
 		BigDecimal periodServicePrice_total = BigDecimal.ZERO;
+		BigDecimal vipDiscountAmount_total = BigDecimal.ZERO;
+		BigDecimal serviceCharge_total = BigDecimal.ZERO;
 		BigDecimal total = BigDecimal.ZERO;
 		
 		//获取订单的计费策略
@@ -2288,26 +2378,25 @@
 			chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN));
 			chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
 			chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
-			
+			//电费
 			periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
+			//服务费(含折扣)
+			serviceCharge_total = serviceCharge_total.add(serviceCharge);
+			//服务费(不含折扣)
 			periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
+			//会员折扣优惠金额
+			vipDiscountAmount_total = vipDiscountAmount_total.add(vipDiscountAmount);
+			//原始总金额(不含折扣)
 			total = total.add(electrovalenc.add(originalServicePrice));
 		}
 		
 		BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
-		//折扣金额
-		BigDecimal discountAmount = chargingOrder.getVipDiscountAmount();
 		//原金额
 		BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
-		//总金额(充值金额+会员折扣金额)
-		BigDecimal decimal = rechargeAmount.add(discountAmount);
-		//退款金额(已经计算了折扣优惠部分)
-		//如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
-		BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total));
 		//支付金额
-		BigDecimal payAmount = rechargeAmount.subtract(refundAmount);
-		//实际充值服务费-会员折扣
-		periodServicePrice_total = periodServicePrice_total.subtract(discountAmount);
+		BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total);
+		//退款金额=充值金额-实际支付金额
+		BigDecimal refundAmount = rechargeAmount.subtract(payAmount);
 
 		TChargingOrder order = new TChargingOrder();
 		order.setId(chargingOrder.getId());
@@ -2331,7 +2420,8 @@
 		order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
 		order.setChargingCapacity(vo.getTotal_electricity());
 		order.setElectricity(vo.getTotal_electricity());
-		if(discountAmount.compareTo(BigDecimal.ZERO) == 0){
+		order.setVipDiscountAmount(vipDiscountAmount_total);
+		if(vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0){
 			order.setVipDiscount(BigDecimal.valueOf(1));
 		}
 		
@@ -2348,9 +2438,9 @@
 				if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
 					BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
 					//如果优惠金额大于服务费金额,以服务费作为最大限制
-					if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){
-						couponDiscount = periodServicePrice_total;
-						periodServicePrice_total = BigDecimal.ZERO;
+					if(serviceCharge_total.compareTo(couponDiscountAmount) < 0){
+						couponDiscount = serviceCharge_total;
+						serviceCharge_total = BigDecimal.ZERO;
 					}else{
 						couponDiscount = couponDiscountAmount;
 					}
@@ -2369,9 +2459,9 @@
 					BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
 					divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
 					//如果优惠金额大于服务费金额,以服务费作为最大限制
-					if(periodServicePrice_total.compareTo(divide) < 0){
-						couponDiscount = periodServicePrice_total;
-						periodServicePrice_total = BigDecimal.ZERO;
+					if(serviceCharge_total.compareTo(divide) < 0){
+						couponDiscount = serviceCharge_total;
+						serviceCharge_total = BigDecimal.ZERO;
 					}else{
 						couponDiscount = divide;
 					}
@@ -2391,11 +2481,11 @@
 		refundAmount = refundAmount.add(couponDiscount);
 		//实际支付金额-优惠券
 		payAmount = payAmount.subtract(couponDiscount);
-		if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){
-			periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount);
+		if(serviceCharge_total.compareTo(BigDecimal.ZERO) > 0){
+			serviceCharge_total = serviceCharge_total.subtract(couponDiscount);
 		}
 		order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
-		order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.HALF_EVEN));
+		order.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN));
 		order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
 		order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
 		order.setRefundStatus(1);
@@ -2404,10 +2494,16 @@
 		
 		//推送三方平台
 		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());
+			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();
 		}
 		
 		//开始将优惠券优惠的金额添加到明细中
@@ -2529,6 +2625,36 @@
 				
 			}
 		}
+		
+		//添加汇总统计数据
+		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);
 		return R.ok();
 	}
 	
@@ -2536,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
@@ -2550,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) {
@@ -2850,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());
@@ -2876,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);
@@ -2907,25 +3033,37 @@
 		// 支付订单金额 需要减去退款金额
 		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.getOrderSource()==2) {
-				sharingAmount = sharingAmount.add(tChargingOrder.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN));
+				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){
 				if (tChargingOrder.getOrderSource()==2) {
-					serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN));
+					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(tChargingOrder.getServiceCharge());
+					serviceCharge = serviceCharge.add(service_reduce);
 				}
 			}
 			// 累加会员折扣
@@ -2936,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));
-			}
+
 
 		}
 
@@ -3100,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"));
@@ -3143,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");
@@ -3219,7 +3347,6 @@
 			for (TChargingPile datum : data) {
 				bigDecimal = bigDecimal.add(datum.getRatedPower());
 			}
-
 
 			tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
 			//利用率=充电量/(桩数量*功率*时间)
@@ -3309,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);
@@ -3800,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());
@@ -3877,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