From 67d06a785d5fc4524639ace27651c01ff05a4b58 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 29 五月 2025 22:31:33 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |  728 ++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 532 insertions(+), 196 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 fc64e04..95be317 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
@@ -17,6 +17,7 @@
 import com.ruoyi.common.core.dto.ChargingOrderGroup;
 import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
 import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.domain.BasePojo;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.service.TokenService;
@@ -51,6 +52,8 @@
 import com.ruoyi.order.service.TOrderEvaluateService;
 import com.ruoyi.order.service.*;
 import com.ruoyi.order.vo.EndOfChargePageInfo;
+import com.ruoyi.order.vo.OrderCountByDate;
+import com.ruoyi.order.vo.StatisticsOfBatteryVO;
 import com.ruoyi.other.api.domain.*;
 import com.ruoyi.order.vo.ChargingOrderListInfoVO;
 import com.ruoyi.other.api.domain.TVip;
@@ -210,6 +213,9 @@
 	
 	@Resource
 	private TransactionRecordClient transactionRecordClient;
+	
+	@Resource
+	private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
 
 
 
@@ -648,21 +654,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 +677,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 +703,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();
 	}
 	
@@ -730,7 +737,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 +778,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);
 				//启动失败
@@ -924,6 +931,18 @@
 					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){
@@ -935,6 +954,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) {
@@ -944,6 +976,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);
+				}
+			}
+			
 		}
 	}
 
@@ -1244,7 +1343,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;
@@ -1262,7 +1360,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();
@@ -1308,17 +1405,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){
@@ -1327,7 +1421,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"));
@@ -1351,7 +1444,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();
@@ -1375,42 +1478,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;
@@ -1460,37 +1575,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;
@@ -1689,7 +1816,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);
@@ -1741,69 +1874,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"+"%/"
@@ -1933,7 +2102,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())
@@ -2025,10 +2199,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;
 		
 		//获取订单的计费策略
@@ -2085,7 +2260,7 @@
 					AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
 					BeanUtils.copyProperties(strategyDetail, vo1);
 					vo1.setChargingCapacity(sharp_peak_charge);
-					lists.add(vo1);
+					lists.add(0, vo1);
 				}
 				
 				//第二天的
@@ -2206,26 +2381,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());
@@ -2249,7 +2423,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));
 		}
 		
@@ -2266,9 +2441,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;
 					}
@@ -2287,9 +2462,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;
 					}
@@ -2309,11 +2484,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);
@@ -2322,10 +2497,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();
 		}
 		
 		//开始将优惠券优惠的金额添加到明细中
@@ -2447,6 +2628,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();
 	}
 	
@@ -2454,8 +2665,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
@@ -2468,10 +2682,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) {
@@ -2768,6 +2979,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());
@@ -2794,9 +3007,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);
@@ -2825,23 +3036,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){
@@ -2851,11 +3077,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));
-			}
+
 
 		}
 
@@ -3015,13 +3237,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"));
@@ -3058,8 +3276,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");
@@ -3134,7 +3350,6 @@
 			for (TChargingPile datum : data) {
 				bigDecimal = bigDecimal.add(datum.getRatedPower());
 			}
-
 
 			tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
 			//利用率=充电量/(桩数量*功率*时间)
@@ -3224,7 +3439,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);
@@ -3669,7 +3883,6 @@
 		chargingOrder.setStatus(2);
 		chargingOrder.setPayTime(LocalDateTime.now());
 		chargingOrder.setChargeAmount(chargingOrder.getRechargeAmount());
-		chargingOrder.setVipDiscountAmount(BigDecimal.ZERO);
 		this.save(chargingOrder);
 		
 		Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
@@ -3716,15 +3929,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());
@@ -3793,4 +4006,127 @@
 		}
 		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();
+	}
+
+	/**
+	 * 大屏-新能源汽车电池安全检测次数统计
+	 */
+	@Override
+	public R<StatisticsOfBatteryVO> getStatisticsOfBattery() {
+		StatisticsOfBatteryVO vo = new StatisticsOfBatteryVO();
+		//1.计算累计次数
+		//查询该俩站点的快充和超充的充电枪id集合 site_id 25 26  charge_model 1 2
+		R<List<Integer>> r = chargingGunClient.getGunIdsBySiteIdsAndChargeModels(Arrays.asList(25,26),Arrays.asList(1,2));
+		if (r.getCode()!=200){
+			return R.ok(vo);
+		}
+		List<Integer> gunIds=r.getData();
+		//统计
+		Long total= 0L;
+		if(gunIds!=null && !gunIds.isEmpty()) {
+			total = this.baseMapper.selectCount(new LambdaQueryWrapper<TChargingOrder>()
+					.eq(TChargingOrder::getDelFlag, 0)//未删除
+					.in(TChargingOrder::getStatus, Arrays.asList(3, 5))//充电中、已结束
+					.in(TChargingOrder::getChargingGunId, gunIds));//符合条件的充电枪
+		}
+		vo.setTotal(total.intValue());
+		//2.折线图
+	/*	// 计算日期范围:前七天(不含今日)直接查找数据量太大,内存报错
+		LocalDate today = LocalDate.now();
+		LocalDateTime startDate = today.minusDays(7).atStartOfDay();
+		LocalDateTime endDate = today.minusDays(1).atTime(LocalTime.MAX);
+		// 查询数据库
+		List<OrderCountByDate> orderCounts = this.baseMapper.countOrdersByDate(startDate, endDate, gunIds);*/
+
+
+		List<LocalDate> dates = new ArrayList<>();
+		List<Integer> counts = new ArrayList<>();
+		LocalDate today = LocalDate.now();
+		// 直接查找数据量太大,内存报错,分每天查找
+		for (int i = 7; i >= 1; i--) {//升序
+			LocalDate day = today.minusDays(i);
+			LocalDateTime startOfDay = day.atStartOfDay();
+			LocalDateTime endOfDay = day.atTime(LocalTime.MAX);
+			//统计
+			Long count=0L;
+			if(gunIds!=null && !gunIds.isEmpty()){
+				count = this.baseMapper.selectCount(new LambdaQueryWrapper<TChargingOrder>()
+						.eq(TChargingOrder::getDelFlag,0)//未删除
+						.in(TChargingOrder::getStatus,Arrays.asList(3,5))//充电中、已结束
+						.in(TChargingOrder::getChargingGunId,gunIds)//符合条件的充电枪 站点 超充快充
+						.between(TChargingOrder::getCreateTime,startOfDay,endOfDay));//每天
+			}
+			dates.add(day);
+			counts.add(count.intValue());
+		}
+		vo.setDates(dates);
+		vo.setCounts(counts);
+		return R.ok(vo);
+	}
+	@Override
+	public BigDecimal getSumDegreeBySiteIds(List<Integer> siteIds) {
+
+		return this.baseMapper.getSumDegreeBySiteIds(siteIds);
+
+	}
 }

--
Gitblit v1.7.1