From c97b518d5fbb570817ca835e96c1b8aa49b099e1 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 23 十月 2024 19:15:12 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |  368 +++++++++++++++++----------------------------------
 1 files changed, 125 insertions(+), 243 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 c2500ca..14b5a07 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
@@ -651,116 +651,10 @@
 		
 		log.error(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);
 		return AjaxResult.success();
 	}
 	
-	
-	/**
-	 * 定时检测mongodb数据库数据
-	 * @param id
-	 * @return
-	 */
-	public boolean timingDetection(Long id){
-		TChargingOrder chargingOrder = this.getById(id);
-		if(chargingOrder.getStatus() != 2){
-			return true;
-		}
-		String code = chargingOrder.getCode();
-		String key = "AQJC_" + chargingOrder.getChargingGunId();
-		//获取安全校验
-		com.ruoyi.integration.api.model.SecurityDetection securityDetection = securityDetectionClient.getSecurityDetection(chargingOrder.getCode()).getData();
-		if(null != securityDetection){
-			PreChargeCheck preChargeCheck1 =  redisService.getCacheObject("AQJC_" + chargingOrder.getChargingGunId());
-			if(null != preChargeCheck1){
-				preChargeCheck1.setElectronicLockLock(true);
-				preChargeCheck1.setInsulationTesting(true);
-				preChargeCheck1.setSecureConnectionDetection(securityDetection.getSecure_connection() == 1);
-				preChargeCheck1.setStartupSuccess(1);
-				redisService.setCacheObject("AQJC_" + chargingOrder.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
-			}
-		}
-		
-		List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
-		if(null == data){
-			return false;
-		}
-		log.error(code + ":-------------------开始检查调起充电结果-------------------" + data.toString());
-		if(data.size() != 0){
-			PlatformStartChargingReply platformStartChargingReply = data.get(1);
-			Integer startup_result = platformStartChargingReply.getStartup_result();
-			Integer failure_cause = platformStartChargingReply.getFailure_cause();
-			Integer counter = counter_map.get(code);
-			PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
-			//5分钟内还未插枪则取消充电,退回金额。
-			if(failure_cause == 5 && (null == counter || counter < 300)){
-				counter = (null == counter ? 0 : counter) + 1;
-				counter_map.put(code, counter);
-				//启动失败
-				preChargeCheck1.setStartupSuccess(3);
-				preChargeCheck1.setFailureCause(failure_cause);
-				redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
-				return false;
-			}
-			
-			//清除计时器中的无效数据
-			counter_map.remove(code);
-			TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
-			if(0 == startup_result){
-				//启动失败
-				preChargeCheck1.setStartupSuccess(3);
-				preChargeCheck1.setFailureCause(failure_cause);
-				//启动失败后取消订单,退款操作
-				refund(code);
-				order.setStatus(-1);
-				order.setEndMode(0);
-			}else{
-				//启动成功
-				preChargeCheck1.setStartupSuccess(2);
-				order.setStatus(3);
-				order.setStartTime(LocalDateTime.now());
-			}
-			this.updateById(order);
-			redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
-			return true;
-		}else{
-			Integer counter = boot_failed_map.get(code);
-			log.error(code + ":-------------------未上传开启充电结果-------------------" + counter);
-			PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
-			//5分钟内未启动成功,退回金额。
-			if(null == counter || counter < 300){
-				counter = (null == counter ? 0 : counter) + 1;
-				boot_failed_map.put(code, counter);
-				//启动失败
-				preChargeCheck1.setStartupSuccess(3);
-				preChargeCheck1.setFailureCause(0);
-				redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
-				return false;
-			}
-			
-			//清除计时器中的无效数据
-			boot_failed_map.remove(code);
-			TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
-			//启动失败
-			preChargeCheck1.setStartupSuccess(3);
-			preChargeCheck1.setFailureCause(0);
-			//启动失败后取消订单,退款操作
-			refund(code);
-			order.setStatus(-1);
-			order.setEndMode(0);
-			this.updateById(order);
-			redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
-			return true;
-		}
-	}
+
 	
 	
 	/**
@@ -927,7 +821,7 @@
 		if(null != data){
 			chargingDetails.setChargeCurrent(data.getOutput_current());
 			chargingDetails.setChargeVoltage(data.getOutput_voltage());
-			BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000));
+			BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000), new MathContext(4, RoundingMode.HALF_EVEN));
 			chargingDetails.setChargePower(power);
 			chargingDetails.setCompletionRatio(data.getSoc());
 			chargingDetails.setRemainingChargeTime(data.getTime_remaining());
@@ -982,70 +876,6 @@
 			sendMessageClient.platformStopCharging(platformStopCharging);
 			log.error(code1 + ":-------------------远程停止充电请求-------------------");
 			log.error(platformStopCharging.toString());
-			//开始查询停机应答,成功后开始计费费用
-			boolean stop_status = false;
-			for (int i = 0; i < 60; i++) {
-				TChargingOrder chargingOrder1 = this.getById(id);
-				if(chargingOrder1.getStatus() != 3){
-					stop_status = true;
-					break;
-				}
-				GetPlatformStopChargingReply query = new GetPlatformStopChargingReply();
-				query.setCharging_gun_code(chargingGun.getCode());
-				query.setCharging_pile_code(chargingPile.getCode());
-				
-				//将时间转换成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){
-					log.error(code1 + ":-------------------远程停止充电应答无数据-------------------");
-					try {
-						Thread.sleep(1000);
-					} catch (InterruptedException e) {
-						throw new RuntimeException(e);
-					}
-					continue;
-				}
-				log.error(reply.toString());
-				
-				if(0 == reply.getStop_result()){
-					String failure_cause = "";
-					switch (reply.getFailure_cause()){
-						case 0:
-							failure_cause = "无";
-							break;
-						case 1:
-							failure_cause = "设备编号不匹配";
-							break;
-						case 2:
-							failure_cause = "枪未处于充电状态";
-							break;
-						case 3:
-							failure_cause = "其他";
-							break;
-					}
-					log.error(code1 + ":停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause);
-					try {
-						Thread.sleep(1000);
-					} catch (InterruptedException e) {
-						throw new RuntimeException(e);
-					}
-				}else{
-					log.error(code1 + ":-------------------远程停止充电请求成功-------------------");
-					stop_status = true;
-					break;
-				}
-			}
-			if(stop_status){
-				chargingOrder.setEndMode(1);
-				this.updateById(chargingOrder);
-			}else{
-				log.error(code1 + ":-------------------远程停止充电应答最终失败-------------------");
-			}
 		});
 		return AjaxResult.success();
 	}
@@ -1059,57 +889,48 @@
 		//处理用户标签数据
 		List<TUserTag> data = userTagClient.getAllUserTag().getData();
 		//累计充电次数
-		long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
-				.eq(TChargingOrder::getRechargePaymentStatus, 2).isNotNull(TChargingOrder::getPaymentAmount).eq(TChargingOrder::getDelFlag, 0));
 		List<TUserTag> userTagList1 = data.stream().filter(s -> s.getStandardCondition() == 1).collect(Collectors.toList());
-		int old_times = 0;
-		Integer userTagId = null;
 		for (TUserTag tUserTag : userTagList1) {
 			Integer times = JSON.parseObject(tUserTag.getConditions()).getInteger("times");
-			//加上本次充电
-			//获取最大值标签
-			if((count1 + 1) >= times && old_times < times){
-				userTagId = tUserTag.getId();
-				old_times = times;
-			}
-		}
-		if(null != userTagId){
 			TAppUserTag appUserTag = new TAppUserTag();
 			appUserTag.setAppUserId(chargingOrder.getAppUserId());
-			appUserTag.setUserTagId(userTagId);
+			appUserTag.setUserTagId(tUserTag.getId());
 			TAppUserTag data1 = appUserTagClient.getUserTag(appUserTag).getData();
-			if(null == data1){
+			
+			String start = tUserTag.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+			String end = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+			long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
+					.eq(TChargingOrder::getRechargePaymentStatus, 2).between(TChargingOrder::getStartTime, start, end).eq(TChargingOrder::getDelFlag, 0));
+			if(null == data1 && count1 >= times){
 				data1 = new TAppUserTag();
 				data1.setAppUserId(chargingOrder.getAppUserId());
-				data1.setUserTagId(userTagId);
+				data1.setUserTagId(tUserTag.getId());
 				data1.setCreateTime(LocalDateTime.now());
 				appUserTagClient.addUserTag(data1);
 			}
 		}
-		//充电评率
+		//充电频率
 		List<TUserTag> userTagList2 = data.stream().filter(s -> s.getStandardCondition() == 2).collect(Collectors.toList());
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		for (TUserTag tUserTag : userTagList2) {
 			TAppUserTag appUserTag = new TAppUserTag();
 			appUserTag.setAppUserId(chargingOrder.getAppUserId());
 			appUserTag.setUserTagId(tUserTag.getId());
 			TAppUserTag data1 = appUserTagClient.getUserTag(appUserTag).getData();
-			if(null == data1){
-				Integer day = JSON.parseObject(tUserTag.getConditions()).getInteger("day");
-				Integer times = JSON.parseObject(tUserTag.getConditions()).getInteger("times");
-				Calendar start = Calendar.getInstance();
-				start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + day);
-				count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
-						.eq(TChargingOrder::getRechargePaymentStatus, 2).isNotNull(TChargingOrder::getPaymentAmount)
-						.between(TChargingOrder::getStartTime, sdf.format(start.getTime()), sdf.format(new Date())).eq(TChargingOrder::getDelFlag, 0));
-				//加上本次充电
-				if(count1 >= times){
-					data1 = new TAppUserTag();
-					data1.setAppUserId(chargingOrder.getAppUserId());
-					data1.setUserTagId(tUserTag.getId());
-					data1.setCreateTime(LocalDateTime.now());
-					appUserTagClient.addUserTag(data1);
-				}
+			
+			Integer day = JSON.parseObject(tUserTag.getConditions()).getInteger("day");
+			Integer times = JSON.parseObject(tUserTag.getConditions()).getInteger("times");
+			LocalDateTime endTime = LocalDateTime.now();
+			endTime.plusDays(day);
+			String start = tUserTag.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+			String end = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+			long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
+					.eq(TChargingOrder::getRechargePaymentStatus, 2).between(TChargingOrder::getStartTime, start, end).eq(TChargingOrder::getDelFlag, 0));
+			if(null == data1 && count1 >= times){
+				data1 = new TAppUserTag();
+				data1.setAppUserId(chargingOrder.getAppUserId());
+				data1.setUserTagId(tUserTag.getId());
+				data1.setCreateTime(LocalDateTime.now());
+				appUserTagClient.addUserTag(data1);
 			}
 		}
 	}
@@ -1243,6 +1064,7 @@
 			endTime2 = split[1];
 		}
 		PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
+		PageInfo<ChargingOrderVO> pageInfo1 = new PageInfo<>(1,9999999);
 
 		if (StringUtils.hasLength(dto.getPhone())){
 			List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
@@ -1253,12 +1075,15 @@
 			dto.setUserIds(data);
 		}
 		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");
 		for (ChargingOrderVO chargingOrderVO : list) {
+			chargingOrderVO.setCommissionAmount(chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.006")));
+			chargingOrderVO.setPlatFormMoney(chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.006")));
 			chargingOrderVO.setUid(chargingOrderVO.getId()+"");
 			TChargingGun data3 = chargingGunClient.getChargingGunById(chargingOrderVO.getChargingGunId()).getData();
 			TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderVO.getChargingPileId()).getData();
@@ -1270,10 +1095,6 @@
 			}
 			if (data2!=null && data3!=null){
 				chargingOrderVO.setTerminalName(data2.getName()+"-"+data3.getName());
-
-			}
-			if (chargingOrderVO.getChargingCapacity()!=null){
-				total = total.add(chargingOrderVO.getElectricity());
 			}
 			// 充电订单 明细记录
 			List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>()
@@ -1282,14 +1103,6 @@
 			if (data5!=null){
 				long l = data5.getCumulative_charging_time() * 60L;
 				chargingOrderVO.setChargingSecond(l);
-				time+=l;
-			}
-			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());
 			}
 			// 充电时段数
 			int size = chargingOrderId.size();
@@ -1309,6 +1122,27 @@
 				}
 
 			}
+		}
+		for (ChargingOrderVO chargingOrderVO : list1) {
+			if (chargingOrderVO.getChargingCapacity()!=null){
+				total = total.add(chargingOrderVO.getElectricity());
+			}
+			// 充电订单 明细记录
+			List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>()
+					.eq("charging_order_id", chargingOrderVO.getId()));
+			UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData();
+			if (data5!=null){
+				long l = data5.getCumulative_charging_time() * 60L;
+				chargingOrderVO.setChargingSecond(l);
+				time+=l;
+			}
+			electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence());
+			serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge());
+
+			income = income.add(chargingOrderVO.getOrderAmount());
+
+
+
 		}
 		tCharingOrderVO.setTotal(total);
 		tCharingOrderVO.setTime(time);
@@ -1412,7 +1246,7 @@
 				dto.setUserIds(carIds);
 			}
 		}
-		if (StringUtils.hasLength(dto.getPhone())){
+		if (StringUtils.hasLength(dto.getLicensePlate())){
 			List<Long> data = appUserCarClient.getAppUserCarByLicensePlates(dto.getLicensePlate()).getData();
 			if(data!=null){
 				if (!data.isEmpty()){
@@ -1430,6 +1264,12 @@
 		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.setChargingCapacity(chargingOrderListVO.getElectricity());
+			chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getOrderAmount());
+			BigDecimal bigDecimal = new BigDecimal("0.006");
+			if (chargingOrderListVO.getServiceCharge()!=null){
+				chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getServiceCharge().multiply(bigDecimal));
+			}
 			chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getResidualAmount()==null?chargingOrderListVO.getPaymentAmount():chargingOrderListVO.getPaymentAmount().subtract(chargingOrderListVO.getResidualAmount()));
 			chargingOrderListVO.setUid(chargingOrderListVO.getId()+"");
 			List<Integer> integers = new ArrayList<>();
@@ -1487,6 +1327,9 @@
 			BigDecimal gu = new BigDecimal("0");
 			BigDecimal total = new BigDecimal("0");
 			for (TChargingOrderAccountingStrategy temp : list2) {
+				if (temp.getChargingCapacity() == null){
+					temp.setChargingCapacity(BigDecimal.ZERO);
+				}
 				switch (temp.getType()) {
 					case 1:
 						jian = jian.add(temp.getChargingCapacity());
@@ -1547,9 +1390,9 @@
 		BigDecimal ping = new BigDecimal("0");
 		BigDecimal gu = new BigDecimal("0");
 		for (ChargingOrderListVO chargingOrderListVO : list1) {
-			if (chargingOrderListVO.getChargingCapacity()!=null)electronic = electronic.add(chargingOrderListVO.getChargingCapacity());
+			if (chargingOrderListVO.getChargingCapacity()!=null)electronic = electronic.add(chargingOrderListVO.getElectricity());
 
-			if (chargingOrderListVO.getPaymentAmount()!=null)paymentAmount = paymentAmount.add(chargingOrderListVO.getPaymentAmount());
+			if (chargingOrderListVO.getPaymentAmount()!=null)paymentAmount = paymentAmount.add(chargingOrderListVO.getOrderAmount());
 			if (chargingOrderListVO.getElectrovalence()!=null)electrovalence = electrovalence.add(chargingOrderListVO.getElectrovalence());
 			if (chargingOrderListVO.getServiceCharge()!=null)serviceCharge = serviceCharge.add(chargingOrderListVO.getServiceCharge());
 			List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery()
@@ -1636,6 +1479,12 @@
 		TChargingOrder chargingOrder= this.getById(uid);
 
 		ChargingOrderListInfoVO chargingOrderListInfoVO = new ChargingOrderListInfoVO();
+
+		chargingOrderListInfoVO.setStatus(chargingOrder.getStatus());
+		BigDecimal bigDecimal = new BigDecimal("0.006");
+		if (chargingOrder.getServiceCharge()!=null){
+			chargingOrderListInfoVO.setCommissionAmount(chargingOrder.getServiceCharge().multiply(bigDecimal));
+		}
 		chargingOrderListInfoVO.setElectrovalence(chargingOrder.getElectrovalence());
 		chargingOrderListInfoVO.setServiceCharge(chargingOrder.getServiceCharge());
 		if (chargingOrder.getElectrovalence()!=null && chargingOrder.getServiceCharge()!=null){
@@ -1675,6 +1524,13 @@
 		if (chargingOrder.getCode()!=null){
 			List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
 			if (data6!=null){
+				for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
+					if (uploadRealTimeMonitoringData.getOutput_current()!=null&&
+							uploadRealTimeMonitoringData.getOutput_voltage()!=null){
+						uploadRealTimeMonitoringData.setPower(uploadRealTimeMonitoringData.getOutput_voltage()
+								.multiply(uploadRealTimeMonitoringData.getOutput_current()));
+					}
+				}
 				if (!data6.isEmpty()){
 					// 第一条数据soc为开始 最后一条数据soc为结束soc
 					chargingOrderListInfoVO.setStartSoc(data6.get(0).getSoc().toString());
@@ -1721,8 +1577,11 @@
 	public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) {
 		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()));
-			BigDecimal residualAmount = chargingOrder.getRechargeAmount().add(chargingOrder.getVipDiscountAmount()).subtract(query.getPaid_amount());
+			TChargingOrder chargingOrder1 = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, query.getTransaction_serial_number()));
+			BigDecimal residualAmount = chargingOrder1.getRechargeAmount().add(chargingOrder1.getVipDiscountAmount()).subtract(query.getPaid_amount());
+			TChargingOrder chargingOrder = new TChargingOrder();
+			chargingOrder.setId(chargingOrder1.getId());
+			chargingOrder.setAppUserId(chargingOrder1.getAppUserId());
 			chargingOrder.setResidualAmount(residualAmount);
 			if(query.getOutput_current().compareTo(BigDecimal.ZERO) != 0){
 				BigDecimal divide = (query.getOutput_current().multiply(query.getOutput_voltage())).divide(new BigDecimal(1000));
@@ -1732,11 +1591,12 @@
 				chargingOrder.setPower(divide);
 				chargingOrder.setNeedElec(query.getOutput_current());
 				
-				TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+				TChargingGun chargingGun = new TChargingGun();
+				chargingGun.setId(chargingOrder1.getChargingGunId());
 				chargingGun.setChargingPower(divide);
-				chargingGun.setSoc(query.getSoc());
 				chargingGunClient.updateChargingGunById(chargingGun);
 			}
+			chargingOrder.setChargingCapacity(query.getCharging_degree());
 			chargingOrder.setElectricity(query.getCharging_degree());
 			chargingOrder.setTotalElectricity(new BigDecimal(100 - query.getSoc()));
 			this.updateById(chargingOrder);
@@ -1781,11 +1641,6 @@
 		if(status == 4 || status == 5){
 			return;
 		}
-		
-		//计算用户标签
-		editUserTag(chargingOrder);
-		//用户推荐奖励
-		referralReward(chargingOrder);
 		
 		//如果使用优惠券需要判断优惠券是否满足使用条件
 		//根据实际的充电金额计算退款金额   退回费用=(原金额/总金额)*(总金额-实际充电金额)
@@ -1878,7 +1733,8 @@
 		if(null != chargingOrder.getVipDiscount()){
 			//服务费折扣
 			discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
-			
+			periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount());
+
 			TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
 			if(null != appUser.getVipId()){
 				//判断会员是否还有充电优惠次数
@@ -1931,9 +1787,20 @@
 			if(1 == preferentialMode){
 				//满减
 				if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
-					refundAmount = refundAmount.add(tCoupon.getDiscountAmount());
-					order.setCouponDiscountAmount(tCoupon.getDiscountAmount());
-					payAmount = payAmount.subtract(tCoupon.getDiscountAmount());
+					BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
+					//如果优惠金额大于服务费金额,以服务费作为最大限制
+					if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){
+						refundAmount = refundAmount.add(periodServicePrice_total);
+						order.setCouponDiscountAmount(periodServicePrice_total);
+						payAmount = payAmount.subtract(periodServicePrice_total);
+					}else{
+						refundAmount = refundAmount.add(couponDiscountAmount);
+						order.setCouponDiscountAmount(couponDiscountAmount);
+						payAmount = payAmount.subtract(couponDiscountAmount);
+					}
+					
+					appCoupon.setStatus(2);
+					appCouponClient.updateAppCoupon(appCoupon);
 				}else{
 					order.setAppCouponId(null);
 					order.setCouponDiscountAmount(BigDecimal.ZERO);
@@ -1946,9 +1813,19 @@
 					//折扣金额
 					BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
 					divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
-					refundAmount = refundAmount.add(divide);
-					order.setCouponDiscountAmount(divide);
-					payAmount = payAmount.subtract(divide);
+					//如果优惠金额大于服务费金额,以服务费作为最大限制
+					if(periodServicePrice_total.compareTo(divide) < 0){
+						refundAmount = refundAmount.add(periodServicePrice_total);
+						order.setCouponDiscountAmount(periodServicePrice_total);
+						payAmount = payAmount.subtract(periodServicePrice_total);
+					}else{
+						refundAmount = refundAmount.add(divide);
+						order.setCouponDiscountAmount(divide);
+						payAmount = payAmount.subtract(divide);
+					}
+					
+					appCoupon.setStatus(2);
+					appCouponClient.updateAppCoupon(appCoupon);
 				}else{
 					order.setAppCouponId(null);
 					order.setCouponDiscountAmount(BigDecimal.ZERO);
@@ -1963,10 +1840,10 @@
 		chargingOrder = this.getById(order.getId());
 		
 		// 将枪状态重置为空闲
-		TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+		TChargingGun chargingGun = new TChargingGun();
+		chargingGun.setId(chargingOrder.getChargingGunId());
 		chargingGun.setStatus(2);
 		chargingGun.setChargingPower(BigDecimal.ZERO);
-		chargingGun.setSoc(0);
 		chargingGunClient.updateChargingGunById(chargingGun);
 		
 		//添加积分
@@ -1996,7 +1873,11 @@
 			appUserClient.updateAppUser(appUser);
 			appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
 		}
-		
+
+		//计算用户标签
+		editUserTag(chargingOrder);
+		//用户推荐奖励
+		referralReward(chargingOrder);
 		
 		//开始构建退款费用
 		if(refundAmount.compareTo(BigDecimal.ZERO) > 0){
@@ -2733,12 +2614,13 @@
 		info.setRefundAmount(chargingOrder.getRefundAmount());
 		LocalDateTime startTime = chargingOrder.getStartTime();
 		LocalDateTime endTime = chargingOrder.getEndTime();
-		info.setStartDay(startTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " 周" + startTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE));
+		info.setStartDay(startTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " " + startTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE));
 		info.setStartHour(startTime.format(DateTimeFormatter.ofPattern("HH:mm")));
-		info.setEndDay(endTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " 周" + endTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE));
+		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.getMinute() - startTime.getMinute();
+		long time = (endTime.toEpochSecond(ZoneOffset.UTC) - startTime.toEpochSecond(ZoneOffset.UTC)) / 60;
+		long hour = time / 60;
+		long second = time % 60;
 		info.setDuration(0 == hour ? String.format("%s分钟", second) : String.format("%s小时%s分钟", hour, second));
 		return info;
 	}

--
Gitblit v1.7.1