From b4b44f2021dbf083b7057fb7e192b72d08b4bf17 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 22 十月 2024 09:23:29 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |  334 +++++++++++++++++++++++++------------------------------
 1 files changed, 150 insertions(+), 184 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 651c056..e2e124d 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
@@ -70,9 +70,7 @@
 import java.math.MathContext;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.time.format.TextStyle;
 import java.time.temporal.WeekFields;
@@ -207,6 +205,7 @@
 		Map<String, Object> map = new HashMap<>();
 		int size = this.baseMapper.getMyChargingOrderList(appUserId, 1, null, null).size();
 		map.put("number", size);
+		query.setPageCurr((query.getPageCurr() - 1) * query.getPageSize());
 		List<TChargingOrder> list = this.baseMapper.getMyChargingOrderList(appUserId, query.getType(), query.getPageCurr(), query.getPageSize());
 		List<MyChargingOrderList> orderLists = new ArrayList<>();
 		for (TChargingOrder tChargingOrder : list) {
@@ -260,8 +259,8 @@
 		}else{
 			myChargingOrderInfo.setLicensePlate("无");
 		}
-		myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
-		myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
+		myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
+		myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
 		myChargingOrderInfo.setOrderAmount(chargingOrder.getOrderAmount());
 		myChargingOrderInfo.setPaymentAmount(chargingOrder.getPaymentAmount());
 		myChargingOrderInfo.setRechargeAmount(chargingOrder.getRechargeAmount());
@@ -293,7 +292,7 @@
 			myChargingOrderInfo.setCurrentAndVoltage(currentAndVoltage);
 			//在MongoDB中获取数据
 			List<Integer> soc = dataList.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList());
-			List<BigDecimal> po = dataList.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000))).collect(Collectors.toList());
+			List<BigDecimal> po = dataList.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)).collect(Collectors.toList());
 			List<Map<String, Object>> power = new ArrayList<>();
 			for (int i = 0; i < time.size(); i++) {
 				Map<String, Object> map = new HashMap<>();
@@ -306,7 +305,7 @@
 			}
 			myChargingOrderInfo.setPower(power);
 		}
-		myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L > System.currentTimeMillis() ? 0 : 1);
+		myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L < System.currentTimeMillis() ? 0 : 1);
 		return myChargingOrderInfo;
 	}
 	
@@ -319,6 +318,8 @@
 	@Override
 	public List<MyChargingOrderList> getNoInvoicedOrder(GetNoInvoicedOrder query) {
 		Long appUserId = tokenService.getLoginUserApplet().getUserId();
+		
+		query.setPageCurr((query.getPageCurr() - 1) * query.getPageSize());
 		List<TChargingOrder> orderList = this.baseMapper.getNoInvoicedOrder(appUserId, query.getMonth(), query.getPageCurr(), query.getPageSize());
 		List<MyChargingOrderList> list = new ArrayList<>();
 		for (TChargingOrder tChargingOrder : orderList) {
@@ -440,7 +441,6 @@
 		chargingOrder.setRechargePaymentStatus(1);
 		chargingOrder.setRechargeAmount(addChargingOrder.getPaymentAmount());
 		chargingOrder.setAppCouponId(addChargingOrder.getAppUserCouponId());
-		chargingOrder.setVipDiscount(new BigDecimal(10));
 		chargingOrder.setVipDiscountAmount(BigDecimal.ZERO);
 		chargingOrder.setOrderSource(0);
 		chargingOrder.setTitle("【充电桩充电】" + chargingPile.getNumber() + "号桩/" + tChargingGun.getCode() + "号枪");
@@ -470,7 +470,7 @@
 			TAppUserVipDetail vipDetail = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
 			if(null != vipDetail){
 				Integer chargeNum = vipDetail.getChargeNum();
-				if(0 > chargeNum){
+				if(0 < chargeNum){
 					chargingOrder.setVipDiscount(discount);
 				}
 			}
@@ -582,7 +582,7 @@
 					Integer start = Integer.valueOf(accountingStrategyDetailOrder.getStartTime().replaceAll(":", ""));
 					Integer end = Integer.valueOf(accountingStrategyDetailOrder.getEndTime().replaceAll(":", ""));
 					String[] split = accountingStrategyDetailOrder.getEndTime().split(":");
-					if(sta || now >= start){
+					if(sta || (now >= start && now < end)){
 						sta = true;
 						
 						Calendar end_calendar = Calendar.getInstance();
@@ -604,16 +604,16 @@
 						//每秒需要支付的服务费金额
 						BigDecimal s_server_amount = s_degrees.multiply(accountingStrategyDetailOrder.getServiceCharge());
 						//计算剩余金额能充多长时间的电
-						long times = rechargeAmount1.divide(s_server_amount, 0, RoundingMode.DOWN).longValue();
+						long times = rechargeAmount1.divide(s_total_amount, 0, RoundingMode.DOWN).longValue();
 						if(times > m){
 							//充电时间跨度两个计费策略,需要继续对下一个策略进行计算
 							serviceCharge = s_server_amount.multiply(new BigDecimal(m));
-							discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(10).subtract(discount)).divide(new BigDecimal(10))));
+							discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(1).subtract(discount))));
 							rechargeAmount1 = rechargeAmount1.subtract(s_total_amount.multiply(new BigDecimal(m)));
 							nowTimeMillis = null;
 						}else{
 							serviceCharge = s_server_amount.multiply(new BigDecimal(times));
-							discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(10).subtract(discount)).divide(new BigDecimal(10))));
+							discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(1).subtract(discount))));
 							break;
 						}
 					}
@@ -932,7 +932,9 @@
 			chargingDetails.setCompletionRatio(data.getSoc());
 			chargingDetails.setRemainingChargeTime(data.getTime_remaining());
 			chargingDetails.setChargedDegrees(data.getCharging_degree());
-			chargingDetails.setChargedTime(data.getCumulative_charging_time());
+			Integer h = Integer.valueOf(data.getCumulative_charging_time() / 60);
+			Integer m = Integer.valueOf(data.getCumulative_charging_time() % 60);
+			chargingDetails.setChargedTime(String.format("%02d", h) + ":" + String.format("%02d", m));
 		}
 		ChargingHandshake chargingHandshake = chargingHandshakeClient.getDataByOrderCode(one.getCode()).getData();
 		if(null != chargingHandshake && null != data && null != one.getAppUserCarId()){
@@ -991,7 +993,12 @@
 				GetPlatformStopChargingReply query = new GetPlatformStopChargingReply();
 				query.setCharging_gun_code(chargingGun.getCode());
 				query.setCharging_pile_code(chargingPile.getCode());
-				query.setEnd_time(chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+				
+				//将时间转换成UTC时间后查询数据(mongodb存储时间以UTC格式存储)
+				ZoneId zoneId = ZoneId.systemDefault();
+				ZonedDateTime zonedDateTime = ZonedDateTime.of(chargingOrder.getEndTime(), zoneId);
+				ZonedDateTime endTime = zonedDateTime.withZoneSameInstant(ZoneId.of("UTC"));
+				query.setEnd_time(endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
 				PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData();
 				log.error(code1 + ":-------------------查询远程停止充电应答-------------------");
 				if(null == reply){
@@ -1251,6 +1258,7 @@
 		 BigDecimal electronicMoney = new BigDecimal("0");
 		 BigDecimal serviceMoney = new BigDecimal("0");
 		for (ChargingOrderVO chargingOrderVO : list) {
+			chargingOrderVO.setUid(chargingOrderVO.getId()+"");
 			TChargingGun data3 = chargingGunClient.getChargingGunById(chargingOrderVO.getChargingGunId()).getData();
 			TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderVO.getChargingPileId()).getData();
 			if (chargingOrderVO.getSiteId()!=null){
@@ -1264,38 +1272,24 @@
 
 			}
 			if (chargingOrderVO.getChargingCapacity()!=null){
-				total = total.add(chargingOrderVO.getChargingCapacity());
+				total = total.add(chargingOrderVO.getElectricity());
 			}
 			// 充电订单 明细记录
 			List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>()
 					.eq("charging_order_id", chargingOrderVO.getId()));
-			// 单个订单累计电费
-			BigDecimal electronicMoney1 = new BigDecimal("0");
-			// 单个订单累计服务费
-			BigDecimal serviceMoney1 = new BigDecimal("0");
 			UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData();
 			if (data5!=null){
-				chargingOrderVO.setChargingSecond(data5.getTime_remaining()*60L);
+				long l = data5.getCumulative_charging_time() * 60L;
+				chargingOrderVO.setChargingSecond(l);
+				time+=l;
 			}
-			// 总收入
-			if (chargingOrderVO.getRefundStatus() !=null && chargingOrderVO.getRefundStatus() == 2){
-				income = income.add(chargingOrderVO.getPaymentAmount().subtract(chargingOrderVO.getRefundAmount()));
-			}else{
-				if (chargingOrderVO.getPaymentAmount()!=null){
-					income = income.add(chargingOrderVO.getPaymentAmount());
-				}
+			electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence());
+			serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge());
+
+			income = income.add(chargingOrderVO.getServiceCharge().add(chargingOrderVO.getElectrovalence()));
+			if (chargingOrderVO.getRefundAmount()!=null){
+				income = income.subtract(chargingOrderVO.getRefundAmount());
 			}
-			for (TChargingOrderAccountingStrategy tChargingOrderAccountingStrategy : chargingOrderId) {
-				// 累计电费
-				electronicMoney1 = electronicMoney1.add(tChargingOrderAccountingStrategy.getElectrovalence()
-						.multiply(tChargingOrderAccountingStrategy.getChargingCapacity()));
-				electronicMoney = electronicMoney.add(electronicMoney1);
-				// 累计服务费
-				serviceMoney1 = serviceMoney1.add(tChargingOrderAccountingStrategy.getServiceCharge());
-				serviceMoney = serviceMoney.add(serviceMoney1);
-			}
-			chargingOrderVO.setServiceCharge(serviceMoney1);
-			chargingOrderVO.setElectrovalence(electronicMoney1);
 			// 充电时段数
 			int size = chargingOrderId.size();
 			chargingOrderVO.setCount(size);
@@ -1402,10 +1396,40 @@
 			startTime2 = split[1];
 		}
 		ChargingOrderTimeVO chargingOrderTimeVO = new ChargingOrderTimeVO();
-
+		if (StringUtils.hasLength(dto.getPhone())){
+			List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
+			if(data!=null){
+				if (!data.isEmpty()){
+					dto.setUserIds(data);
+				}
+			}else{
+				dto.setUserIds(new ArrayList<Long>());
+			}
+			if (dto.getUserIds().isEmpty()){
+				List<Long> carIds = dto.getUserIds();
+				carIds.add(-1L);
+				dto.setUserIds(carIds);
+			}
+		}
+		if (StringUtils.hasLength(dto.getPhone())){
+			List<Long> data = appUserCarClient.getAppUserCarByLicensePlates(dto.getLicensePlate()).getData();
+			if(data!=null){
+				if (!data.isEmpty()){
+					dto.setCarIds(data);
+				}
+			}else{
+				dto.setCarIds(new ArrayList<Long>());
+			}
+			if (dto.getCarIds().isEmpty()){
+				List<Long> carIds = dto.getCarIds();
+				carIds.add(-1L);
+				dto.setCarIds(carIds);
+			}
+		}
 		PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
 		List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
 		for (ChargingOrderListVO chargingOrderListVO : list) {
+			chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getResidualAmount()==null?chargingOrderListVO.getPaymentAmount():chargingOrderListVO.getPaymentAmount().subtract(chargingOrderListVO.getResidualAmount()));
 			chargingOrderListVO.setUid(chargingOrderListVO.getId()+"");
 			List<Integer> integers = new ArrayList<>();
 			integers.add(chargingOrderListVO.getSiteId());
@@ -1431,7 +1455,7 @@
 			// 获取开始SOC 结束soc
 			if (chargingOrderListVO.getCode()!=null){
 				List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrderListVO.getCode()).getData();
-				if (!data6.isEmpty()){
+			if (data6!=null && !data6.isEmpty()){
 					// 第一条数据soc为开始 最后一条数据soc为结束soc
 					chargingOrderListVO.setStartSoc(data6.get(0).getSoc().toString());
 					chargingOrderListVO.setEndSoc(data6.get(data6.size()-1).getSoc().toString());
@@ -1449,7 +1473,7 @@
 							if (data4!=null && !data4.isEmpty()) chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate());
 						}
 					}
-					if (data3 != null) chargingOrderListVO.setPhone(data3.getPhone());
+					chargingOrderListVO.setPhone(data3.getPhone());
 
 				}
 			}
@@ -1697,102 +1721,14 @@
 		if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())){
 			//获取当前的计费策略
 			TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, query.getTransaction_serial_number()));
-			AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderClient.getNowAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
-			TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = chargingOrderAccountingStrategyService.getOne(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
-					.eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()).orderByDesc(TChargingOrderAccountingStrategy::getCreateTime).last(" limit 0, 1"));
-			if(null == chargingOrderAccountingStrategy){
-				chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
-				chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
-				chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
-				chargingOrderAccountingStrategy.setType(strategyDetail.getType());
-				chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
-				chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
-				chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
-				chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
-				chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
-				//已充电总度数
-				BigDecimal charging_degree = query.getCharging_degree();
-				BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree);
-				BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree);
-				BigDecimal serviceCharge = originalServicePrice;
-				//计算优惠金额
-				if(null != chargingOrder.getVipDiscount()){
-					serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
-				}
-				chargingOrderAccountingStrategy.setChargingCapacity(charging_degree);
-				chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
-				chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
-				chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
-				chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
-				chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
-			}else{
-				if(chargingOrderAccountingStrategy.getAccountingStrategyDetailId().equals(strategyDetail.getId())){
-					//已充电总度数
-					BigDecimal charging_degree = query.getCharging_degree();
-					BigDecimal chargingCapacity = chargingOrderAccountingStrategy.getChargingCapacity();
-					//计算本阶段充电度数
-					BigDecimal subtract = charging_degree.subtract(chargingCapacity);
-					//计算本阶段费用
-					BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(subtract);
-					BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(subtract);
-					BigDecimal serviceCharge = originalServicePrice;
-					//计算优惠金额
-					if(null != chargingOrder.getVipDiscount()){
-						serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
-					}
-					//将本阶段的费用增加到总费用中
-					electrovalenc = electrovalenc.add(chargingOrderAccountingStrategy.getPeriodElectricPrice());
-					originalServicePrice = originalServicePrice.add(chargingOrderAccountingStrategy.getPeriodOriginalServicePrice());
-					serviceCharge = serviceCharge.add(chargingOrderAccountingStrategy.getPeriodServicePrice());
-					chargingOrderAccountingStrategy.setChargingCapacity(charging_degree);
-					chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
-					chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
-					chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
-					chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
-					chargingOrderAccountingStrategyService.updateById(chargingOrderAccountingStrategy);
-				}else{
-					chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
-					chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
-					chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
-					chargingOrderAccountingStrategy.setType(strategyDetail.getType());
-					chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
-					chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
-					chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
-					chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
-					chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
-					//已充电总度数
-					BigDecimal charging_degree = query.getCharging_degree();
-					BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree);
-					BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree);
-					BigDecimal serviceCharge = originalServicePrice;
-					//计算优惠金额
-					if(null != chargingOrder.getVipDiscount()){
-						serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
-					}
-					chargingOrderAccountingStrategy.setChargingCapacity(charging_degree);
-					chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
-					chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
-					chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
-					chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
-					chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
-				}
-			}
-
-			List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
-					.eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
-			//总充电金额
-			BigDecimal t = BigDecimal.ZERO;
-			for (TChargingOrderAccountingStrategy coas : list) {
-				t = t.add(coas.getPeriodServicePrice()).add(coas.getPeriodElectricPrice());
-			}
-			BigDecimal residualAmount = chargingOrder.getRechargeAmount().subtract(t).setScale(4, RoundingMode.HALF_EVEN);
+			BigDecimal residualAmount = chargingOrder.getRechargeAmount().add(chargingOrder.getVipDiscountAmount()).subtract(query.getPaid_amount());
 			chargingOrder.setResidualAmount(residualAmount);
 			if(query.getOutput_current().compareTo(BigDecimal.ZERO) != 0){
 				BigDecimal divide = (query.getOutput_current().multiply(query.getOutput_voltage())).divide(new BigDecimal(1000));
 				chargingOrder.setChargingPower(divide);
 				chargingOrder.setCurrent(query.getOutput_current());
 				chargingOrder.setVoltage(query.getOutput_voltage());
-				chargingOrder.setPower(query.getOutput_current().multiply(query.getOutput_voltage()));
+				chargingOrder.setPower(divide);
 				chargingOrder.setNeedElec(query.getOutput_current());
 				
 				TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
@@ -1860,51 +1796,63 @@
 		//获取订单的计费策略
 		List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
 		chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
-		for (int i = 0; i < 12; i++) {
+		for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
 			Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
 			try {
-				String time = (String) clazz.getMethod("getTime" + (i + 1)).invoke(vo);
-				if(StringUtils.hasLength(time)){
-					//充电度数
-					Object invoke = clazz.getMethod("getSharp_peak_charge" + (i + 1)).invoke(vo);
-					BigDecimal Sharp_peak_charge = new BigDecimal(invoke.toString());
-					//充电金额
-					Object invoke1 = clazz.getMethod("getSharp_peak_amount" + (i + 1)).invoke(vo);
-					BigDecimal sharp_peak_amount = new BigDecimal(invoke1.toString());
-					
-					String[] split = time.split("~");
-					AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.stream().filter(s -> s.getStartTime().equals(split[1]) && s.getEndTime().equals(split[2])).findFirst().get();
-					
-					TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
-					chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
-					chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
-					chargingOrderAccountingStrategy.setType(strategyDetail.getType());
-					chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
-					chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
-					chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
-					chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
-					chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
-					//已充电总度数
-					BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(Sharp_peak_charge);
-					BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(Sharp_peak_charge);
-					BigDecimal serviceCharge = originalServicePrice;
-					//计算优惠金额
-					if(null != chargingOrder.getVipDiscount()){
-						serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
-					}
-					chargingOrderAccountingStrategy.setChargingCapacity(Sharp_peak_charge);
-					chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
-					chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
-					chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
-					chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
-					chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
-					
-					BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice();
-					BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice();
-					periodElectricPrice_total = periodElectricPrice_total.add(periodElectricPrice);
-					periodServicePrice_total = periodServicePrice_total.add(periodServicePrice);
-					total = total.add(periodElectricPrice).add(periodServicePrice);
+				AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
+				//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+				Object invoke = null;
+				switch (strategyDetail.getType()){
+					case 1:
+						//充电度数
+						invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+						break;
+					case 2:
+						//充电度数
+						invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
+						break;
+					case 3:
+						//充电度数
+						invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
+						break;
+					case 4:
+						//充电度数
+						invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
+						break;
 				}
+				if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+					continue;
+				}
+				BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+				TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
+				chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
+				chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
+				chargingOrderAccountingStrategy.setType(strategyDetail.getType());
+				chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
+				chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
+				chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
+				chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
+				chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
+				//已充电总度数
+				BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
+				BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
+				BigDecimal serviceCharge = originalServicePrice;
+				//计算优惠金额
+				if(null != chargingOrder.getVipDiscount()){
+					serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.DOWN);
+				}
+				chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
+				chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
+				chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
+				chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
+				chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
+				chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
+				
+				BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice();
+				BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice();
+				periodElectricPrice_total = periodElectricPrice_total.add(periodElectricPrice);
+				periodServicePrice_total = periodServicePrice_total.add(periodServicePrice);
+				total = total.add(periodElectricPrice.add(periodServicePrice));
 			} catch (IllegalAccessException e) {
 				throw new RuntimeException(e);
 			} catch (InvocationTargetException e) {
@@ -1928,7 +1876,7 @@
 		BigDecimal discountAmount = BigDecimal.ZERO;
 		if(null != chargingOrder.getVipDiscount()){
 			//服务费折扣
-			discountAmount = periodServicePrice_total.multiply((new BigDecimal(10).subtract(chargingOrder.getVipDiscount())).divide(new BigDecimal(10)));
+			discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
 			
 			TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
 			if(null != appUser.getVipId()){
@@ -1970,6 +1918,7 @@
 		order.setServiceCharge(periodServicePrice_total);
 		order.setElectrovalence(periodElectricPrice_total);
 		order.setChargingCapacity(vo.getTotal_electricity());
+		order.setElectricity(vo.getTotal_electricity());
 		
 		//计算优惠券
 		if(null != chargingOrder.getAppCouponId()){
@@ -2133,6 +2082,10 @@
 
 	@Override
 	public List<Map<String, Object>> usersByQuery(ChargingStatisticsQueryDto statisticsQueryDto) {
+		return this.baseMapper.usersByQuery(statisticsQueryDto);
+	}
+	@Override
+	public List<Map<String, Object>> usersByQuery1(ChargingStatisticsQueryDto statisticsQueryDto) {
 		return this.baseMapper.usersByQuery(statisticsQueryDto);
 	}
 
@@ -2544,9 +2497,13 @@
 			if (!data1.isEmpty()){
 				tSettlementConfirm.setSiteName(data1.get(0).getName());
 			}
-			meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
-			chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
-			lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
+			if (tSettlementConfirm.getMeteringElectronic()!=null){
+				meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
+				chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
+			}
+			if (tSettlementConfirm.getLossElectronic()!=null){
+				lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
+			}
 			income = income.add(tSettlementConfirm.getIncome());
 			venue = venue.add(tSettlementConfirm.getVenue());
 			metering = metering.add(tSettlementConfirm.getMetering());
@@ -2610,13 +2567,22 @@
 				settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
 				if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
 					// 电站相同比较收入涨幅跌幅
-					BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome()).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
-					tSettlementConfirm.setIncomePercentage(subtract+"%");
+					if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){
+						BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome()).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+						tSettlementConfirm.setIncomePercentage(subtract+"%");
+					}else {
+						tSettlementConfirm.setIncomePercentage("100"+"%");
+
+					}
+
 					// 比较总利润 收入合计-成本合计
 					BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost());
 					BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost());
-					tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
-				}
+					BigDecimal bigDecimal1 = subtract1.subtract(subtract2)
+							.divide(subtract2, 2, RoundingMode.HALF_DOWN)
+							.multiply(new BigDecimal("100"))
+							.setScale(2, RoundingMode.HALF_DOWN);
+					tSettlementConfirm.setTotalPercentage(bigDecimal1+"%");				}
 				beforeCost = beforeCost.add(settlementConfirm.getCost());
 				beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
 
@@ -2666,7 +2632,7 @@
 		if (subtract2.compareTo(new BigDecimal("0")) == 0){
 			tSettlementConfirm.setTotalPercentage(0+"%");
 		}else{
-			tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
+			tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2,2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
 		}
 		tSettlementConfirm.setElectronicRefund(0);
 		// 查询上次汇报数据 进行比对涨幅跌幅
@@ -2770,7 +2736,7 @@
 		info.setEndDay(endTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " 周" + endTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE));
 		info.setEndHour(endTime.format(DateTimeFormatter.ofPattern("HH:mm")));
 		int hour = endTime.getHour() - startTime.getHour();
-		int second = endTime.getSecond() - startTime.getSecond();
+		int second = endTime.getMinute() - startTime.getMinute();
 		info.setDuration(0 == hour ? String.format("%s分钟", second) : String.format("%s小时%s分钟", hour, second));
 		return info;
 	}

--
Gitblit v1.7.1