From 85125295c150c78d6f02bb2be3c2e0d133540e05 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 23 十月 2024 11:27:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java                |    4 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java          |  215 +++-----------------------
 ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java                      |  153 ++++++++++++++++++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java            |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java          |    4 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppCoupon.java                        |    2 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml                                            |    2 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserIntegralChangeClient.java |    4 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java                     |   24 ++
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml                           |    7 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java               |    1 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderRefund.java                  |    2 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml                           |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java             |   13 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java                  |    8 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java             |    2 
 16 files changed, 230 insertions(+), 215 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserIntegralChangeClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserIntegralChangeClient.java
index e25631f..67cd9b6 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserIntegralChangeClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserIntegralChangeClient.java
@@ -22,7 +22,7 @@
 	 * @return
 	 */
 	@PostMapping("/t-app-user-integral-change/addAppUserIntegralChange")
-	R addAppUserIntegralChange(TAppUserIntegralChange appUserIntegralChange);
+	R addAppUserIntegralChange(@RequestBody TAppUserIntegralChange appUserIntegralChange);
 	
 	
 	/**
@@ -30,6 +30,6 @@
 	 * @param code
 	 * @return
 	 */
-	@PostMapping("/t-app-user-integral-change/addAppUserIntegralChange")
+	@PostMapping("/t-app-user-integral-change/getTAppUserIntegralChangeByOrderCode")
 	R<TAppUserIntegralChange> getTAppUserIntegralChangeByOrderCode(@RequestParam("code") String code);
 }
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppCoupon.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppCoupon.java
index 11b5710..d51745e 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppCoupon.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppCoupon.java
@@ -34,6 +34,8 @@
     @ApiModelProperty(value = "主键")
     @TableId("id")
     private Long id;
+    @TableField(exist = false)
+    private String uid;
 
     @ApiModelProperty(value = "用户id")
     @TableField("app_user_id")
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderRefund.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderRefund.java
index 8bd1674..a2c7b2b 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderRefund.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderRefund.java
@@ -106,4 +106,6 @@
     private String orderId;
     @TableField(exist = false)
     private String userId;
+    @TableField(exist = false)
+    private String uid;
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
index dbd4de1..f035710 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -695,6 +695,7 @@
     @GetMapping(value = "/user/coupon/getById")
     public R<TAppCoupon> couponGetById(@RequestParam("id")Long id) {
         TAppCoupon appCoupon = appCouponService.getById(id);
+        appCoupon.setUid(id.toString());
         return R.ok(appCoupon);
     }
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java
index cb1aa05..7ef107f 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java
@@ -38,7 +38,7 @@
 	 */
 	@PostMapping("/getInviteUser")
 	public R<TInviteUser> getInviteUser(@RequestBody GetInviteUser query){
-		TInviteUser one = inviteUserService.getOne(new LambdaQueryWrapper<TInviteUser>().eq(TInviteUser::getAppUserId, query.getBeInvitedAppUserId())
+		TInviteUser one = inviteUserService.getOne(new LambdaQueryWrapper<TInviteUser>().eq(TInviteUser::getAppUserId, query.getAppUserId())
 				.eq(TInviteUser::getBeInvitedAppUserId, query.getBeInvitedAppUserId()));
 		return R.ok(one);
 	}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java
index 4a70696..a3d64ac 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java
@@ -71,8 +71,8 @@
     /**
      * 上传文件存储在本地的根路径
      */
-    @Value("${file.upload.location}")
-    private String localFilePath;
+//    @Value("${file.upload.location}")
+//    private String localFilePath;
 
 
 
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
index 94722b1..7570bee 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
@@ -46,7 +46,7 @@
   enabled: true
   application-id: ${spring.application.name}
   tx-service-group: seata_tx_group    #此处配置自定义的seata事务分组名称
-  enable-auto-data-source-proxy: true
+  enable-auto-data-source-proxy: false
   service:
     vgroup-mapping:
       seata_tx_group: default
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
index afa1ff4..3715b1f 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -181,7 +181,7 @@
                 payOrderInfoDto.setTradeNo(byId.getRechargeSerialNumber());
                 payOrderInfoDto.setPayType(byId.getRechargePaymentType());
                 payOrderInfoDto.setPayAmount(byId.getPaymentAmount());
-                payOrderInfoDto.setPayTime(byId.getPayTime());
+                payOrderInfoDto.setPayTime(byId.getCreateTime());
                 payOrderInfoDto.setRefundAmount(byId.getRefundAmount());
                 return R.ok(payOrderInfoDto);
             case 2:
@@ -192,7 +192,7 @@
                 payOrderInfoDto1.setTradeNo(byId1.getSerialNumber());
                 payOrderInfoDto1.setPayType(byId1.getPaymentType());
                 payOrderInfoDto1.setPayAmount(byId1.getPaymentAmount());
-                payOrderInfoDto1.setPayTime(byId1.getPayTime());
+                payOrderInfoDto1.setPayTime(byId1.getCreateTime());
                 payOrderInfoDto1.setRefundAmount(byId1.getRefundAmount());
                 return R.ok(payOrderInfoDto1);
             case 3:
@@ -203,7 +203,7 @@
                 payOrderInfoDto2.setTradeNo(byId2.getSerialNumber());
                 payOrderInfoDto2.setPayType(byId2.getPaymentType());
                 payOrderInfoDto2.setPayAmount(byId2.getPaymentAmount());
-                payOrderInfoDto2.setPayTime(byId2.getPayTime());
+                payOrderInfoDto2.setPayTime(byId2.getCreateTime());
                 payOrderInfoDto2.setRefundAmount(byId2.getRefundAmount());
                 return R.ok(payOrderInfoDto2);
             //todo luo 停车场订单
@@ -278,7 +278,11 @@
     @PostMapping(value = "/pay/order/refund/list")
     @ApiOperation(value = "列表", tags = {"管理后台-支付订单-退款订单"})
     public R<PageInfo<TChargingOrderRefund>> refundList(@RequestBody ChargingRefundDto chargingRefundDto) {
-        return chargingOrderService.getRefundList(chargingRefundDto);
+        R<PageInfo<TChargingOrderRefund>> refundList = chargingOrderService.getRefundList(chargingRefundDto);
+        for (TChargingOrderRefund record : refundList.getData().getRecords()) {
+            record.setUid(record.getId().toString());
+        }
+        return refundList;
 
     }
     @ResponseBody
@@ -781,6 +785,7 @@
         LocalDate end = null;
         if (statisticsQueryDto.getDayType()==1){
             start = LocalDate.now();
+            end = LocalDate.now().plusDays(1);
 
         }else if (statisticsQueryDto.getDayType()==2){
             LocalDate today = LocalDate.now();
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
index e2e2faf..8b7a5c7 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
@@ -127,7 +127,7 @@
             @ApiImplicitParam(value = "订单id", name = "orderId", required = true),
             @ApiImplicitParam(value = "订单类型(1=充电订单,2=购物订单,3=兑换订单,4=会员订单)", name = "orderType", required = true),
     })
-    public AjaxResult<OrderEvaluateVo> getOrderEvaluate(@PathVariable Integer orderId, Integer orderType){
+    public AjaxResult<OrderEvaluateVo> getOrderEvaluate(Integer orderId, Integer orderType){
         OrderEvaluateVo orderEvaluate = orderEvaluateService.getOrderEvaluate(orderId, orderType);
         return AjaxResult.success(orderEvaluate);
     }
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 b9aa52e..84b911b 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();
 	}
@@ -1786,11 +1616,6 @@
 			return;
 		}
 		
-		//计算用户标签
-		editUserTag(chargingOrder);
-		//用户推荐奖励
-		referralReward(chargingOrder);
-		
 		//如果使用优惠券需要判断优惠券是否满足使用条件
 		//根据实际的充电金额计算退款金额   退回费用=(原金额/总金额)*(总金额-实际充电金额)
 		//退款金额=优惠券金额+剩余充电金额
@@ -1882,7 +1707,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()){
 				//判断会员是否还有充电优惠次数
@@ -1935,9 +1761,17 @@
 			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);
+					}
 				}else{
 					order.setAppCouponId(null);
 					order.setCouponDiscountAmount(BigDecimal.ZERO);
@@ -1950,9 +1784,16 @@
 					//折扣金额
 					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);
+					}
 				}else{
 					order.setAppCouponId(null);
 					order.setCouponDiscountAmount(BigDecimal.ZERO);
@@ -2000,7 +1841,11 @@
 			appUserClient.updateAppUser(appUser);
 			appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
 		}
-		
+
+		//计算用户标签
+		editUserTag(chargingOrder);
+		//用户推荐奖励
+		referralReward(chargingOrder);
 		
 		//开始构建退款费用
 		if(refundAmount.compareTo(BigDecimal.ZERO) > 0){
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
index 558be70..7f8b25f 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
@@ -153,7 +153,9 @@
                         discount = discount.add(tActivityStatisticslVO.getVipDiscountAmount());
                         stringBuilder1.append("会员抵扣").append("+");
                     }
-                    stringBuilder1.deleteCharAt(stringBuilder1.length()-1);
+                    if (stringBuilder1.length()>0){
+                        stringBuilder1.deleteCharAt(stringBuilder1.length()-1);
+                    }
                     tActivityStatisticslVO.setType(stringBuilder1.toString());
                     tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime());
                     break;
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
index 339735b..15ee690 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -52,7 +52,7 @@
 
     
     <select id="getMyChargingOrderList" resultMap="BaseResultMap">
-        select * from t_charging_order where del_flag = 0 and app_user_id = #{appUserId}
+        select * from t_charging_order where del_flag = 0 and app_user_id = #{appUserId} and recharge_payment_status = 2
         <if test="1 == type">
             and id not in (select order_id from t_order_evaluate where order_type = 1 and app_user_id = #{appUserId} and del_flag = 0)
         </if>
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
index 06b56c6..d0401f3 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
@@ -107,13 +107,13 @@
                 and t2.code  LIKE CONCAT('%',#{req.code},'%')
             </if>
             <if test="req.type != null and req.type != '' and req.type == 1">
-                and t2.coupon_discount_amount  IS NOT NULL and t2.coupon_discount_amount  != 0
+                and (t2.coupon_discount_amount  > 0)
             </if>
             <if test="req.type != null and req.type != '' and req.type == 2">
-                and t2.vip_discount_amount  IS NOT NULL and t2.vip_discount_amount  != 0
+                and ( t2.vip_discount_amount  > 0)
             </if>
             <if test="req.type == null ">
-                and t2.vip_discount_amount  IS NOT NULL and t2.vip_discount_amount  != 0 and t2.coupon_discount_amount  IS NOT NULL and t2.coupon_discount_amount  != 0
+                and (t2.vip_discount_amount  > 0 or t2.coupon_discount_amount  > 0)
             </if>
             <if test="null != req.userIds and req.userIds.size()>0" >
                 and t2.app_user_id in
@@ -124,7 +124,6 @@
             <if test="req.endTime != null and req.endTime != '' and req.startTime != null and req.startTime != ''">
                 AND (t2.create_time between CONCAT(#{req.startTime},':00') and CONCAT(#{req.endTime},':59'))
             </if>
-            and t2.refund_status !=2
             and t2.payment_status =2
             AND t2.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}
         </if>
diff --git a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
index eb53438..3bcd182 100644
--- a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
+++ b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
@@ -1,15 +1,37 @@
 package com.ruoyi.order;
 
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.account.api.feignClient.*;
+import com.ruoyi.account.api.model.TAppUserCar;
+import com.ruoyi.chargingPile.api.feignClient.*;
+import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.chargingPile.api.model.TChargingGun;
+import com.ruoyi.chargingPile.api.model.TChargingPile;
 import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.integration.api.feignClient.*;
+import com.ruoyi.integration.api.model.ChargingHandshake;
+import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
+import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient;
+import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.dto.ChargingDetails;
 import com.ruoyi.order.dto.MyChargingOrderInfo;
-import com.ruoyi.order.service.TChargingOrderService;
+import com.ruoyi.order.mapper.TSettlementConfirmMapper;
+import com.ruoyi.order.service.*;
+import com.ruoyi.other.api.feignClient.IntegralRuleClient;
+import com.ruoyi.other.api.feignClient.UserTagClient;
+import com.ruoyi.other.api.feignClient.VipClient;
+import com.ruoyi.payment.api.feignClient.AliPaymentClient;
+import com.ruoyi.payment.api.feignClient.WxPaymentClient;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import javax.annotation.Resource;
 import java.io.PrintWriter;
+import java.math.BigDecimal;
+import java.util.Arrays;
 
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiOrderApplication.class)
 public class RuoYiOrderApplicationTests {
@@ -17,10 +39,137 @@
 	@Resource
 	private TChargingOrderService chargingOrderService;
 	
+	@Resource
+	private ChargingGunClient chargingGunClient;
+	@Resource
+	private TSettlementConfirmMapper tSettlementConfirmMapper;
+	
+	@Resource
+	private SiteClient siteClient;
+	
+	@Resource
+	private AppUserCarClient appUserCarClient;
+	@Resource
+	private AppUserClient appUserClient;
+	
+	@Resource
+	private ChargingPileClient chargingPileClient;
+	
+	@Resource
+	private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
+	
+	@Resource
+	private TokenService tokenService;
+	
+	@Resource
+	private WxPaymentClient wxPaymentClient;
+	
+	@Resource
+	private AliPaymentClient aliPaymentClient;
+	
+	@Resource
+	private AppCouponClient appCouponClient;
+	
+	@Resource
+	private AppUserVipDetailClient appUserVipDetailClient;
+	
+	@Resource
+	private RedisService redisService;
+	
+	@Resource
+	private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
+	
+	@Resource
+	private ChargingHandshakeClient chargingHandshakeClient;
+	
+	@Resource
+	private SendMessageClient sendMessageClient;
+	
+	@Resource
+	private TOrderEvaluateService orderEvaluateService;
+	
+	@Resource
+	private AccountingStrategyDetailClient accountingStrategyDetailClient;
+	
+	@Resource
+	private AccountingStrategyDetailOrderClient accountingStrategyDetailOrderClient;
+	
+	@Resource
+	private AccountingStrategyClient accountingStrategyClient;
+	
+	@Resource
+	private PlatformStartChargingReplyClient platformStartChargingReplyClient;
+	
+	@Resource
+	private TChargingOrderRefundService chargingOrderRefundService;
+	
+	@Resource
+	private PlatformStopChargingReplyClient platformStopChargingReplyClient;
+	
+	@Resource
+	private AccountingStrategyOrderService accountingStrategyOrderService;
+	
+	@Resource
+	private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService;
+	
+	@Resource
+	private InviteUserClient inviteUserClient;
+	
+	@Resource
+	private AppUserIntegralChangeClient appUserIntegralChangeClient;
+	
+	@Resource
+	private IntegralRuleClient integralRuleClient;
+	
+	@Resource
+	private VipClient vipClient;
+	
+	@Resource
+	private UserTagClient userTagClient;
+	
+	@Resource
+	private AppUserTagClient appUserTagClient;
+	
+	@Resource
+	private SecurityDetectionClient securityDetectionClient;
+	
 	
 	@Test
 	public void test(){
-		ChargingDetails chargingDetails = chargingOrderService.getChargingDetails(75);
+		Integer id = 75;
+		TChargingOrder one = chargingOrderService.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, 1839480334642704385L).eq(TChargingOrder::getChargingGunId, id)
+				.eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getDelFlag, 0).orderByDesc(TChargingOrder::getStartTime).last(" limit 0, 1"));
+		ChargingDetails chargingDetails = new ChargingDetails();
+		chargingDetails.setId(one.getId().toString());
+		TChargingGun chargingGun = chargingGunClient.getChargingGunById(id).getData();
+		TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData();
+		Site site = siteClient.getSiteByIds(Arrays.asList(chargingPile.getSiteId())).getData().get(0);
+		chargingDetails.setName(site.getName() + "-" + chargingPile.getName());
+		chargingDetails.setCode(one.getCode());
+		chargingDetails.setStatus(one.getStatus());
+		chargingDetails.setChargingCost(one.getResidualAmount());
+		UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData();
+		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));
+			chargingDetails.setChargePower(power);
+			chargingDetails.setCompletionRatio(data.getSoc());
+			chargingDetails.setRemainingChargeTime(data.getTime_remaining());
+			chargingDetails.setChargedDegrees(data.getCharging_degree());
+			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()){
+			BigDecimal bms_battery_capacity = chargingHandshake.getBms_battery_capacity();
+			TAppUserCar appUserCar = appUserCarClient.getCarByIds(Arrays.asList(one.getAppUserCarId())).getData().get(0);
+			//   续航 = 电池容量 / 续航里程 * soc
+			BigDecimal divide = bms_battery_capacity.divide(new BigDecimal(appUserCar.getEndurance()));
+			BigDecimal multiply = new BigDecimal(data.getSoc() / 100).multiply(divide);
+			chargingDetails.setEndurance(multiply);
+		}
 		System.err.println(JSON.toJSONString(chargingDetails));
 	}
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
index 9cb9185..e09a61f 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
@@ -131,14 +131,20 @@
         if (byId==null||byId.getStatus()==2){
             return R.fail(2,"该商品已不存在");
         }
-        return R.ok(byId);}
+//            List<Integer> data = orderClient.getSalesCountByGoodsId(String.valueOf(id)).getData();
+//            for (int i = 0; i < list.size(); i++) {
+//                list.get(i).setSalesCount(data.get(i));
+//            }
+
+        return R.ok(byId);
+        }
         else {
             TCoupon byId = couponService.getById(id);
             if (byId==null||byId.getStatus()==2){
                 return R.fail(2,"该商品已不存在");
             }
-            return R.ok(byId);
-    }
+                return R.ok(byId);
+            }
     }
 
 
@@ -209,8 +215,10 @@
                 return AjaxResult.error("当前用户已兑换"+count+"张");
             }else {
                 //减少库存
-                good.setInventory(good.getInventory()-exchangeDto.getNum());
-                goodsService.updateById(good);
+                if (good.getInventory()!=-1) {
+                    good.setInventory(good.getInventory() - exchangeDto.getNum());
+                    goodsService.updateById(good);
+                }
             }
         if (user.getPoints()<good.getRedeemPoints()){
             return AjaxResult.error("当前用户积分不足");
@@ -226,8 +234,10 @@
             if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) {
                 return AjaxResult.error("当前用户已到达兑换"+coupon+"次");
             }else {
-                coupon.setInventoryQuantity(coupon.getInventoryQuantity()-1);
-                couponService.updateById(coupon);
+                if (coupon.getInventoryQuantity()!=-1) {
+                    coupon.setInventoryQuantity(coupon.getInventoryQuantity() - 1);
+                    couponService.updateById(coupon);
+                }
             }
 
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java
index b9f434d..7a58640 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java
@@ -83,10 +83,10 @@
         // 订单号加上商品类型
         String res = string+"-"+dto.getType();
 
-//        List<Integer> data = orderClient.getSalesCountByGoodsId(res).getData();
-//        for (int i = 0; i < list.size(); i++) {
-//            list.get(i).setSalesCount(data.get(i));
-//        }
+        List<Integer> data = orderClient.getSalesCountByGoodsId(res).getData();
+        for (int i = 0; i < list.size(); i++) {
+            list.get(i).setSalesCount(data.get(i));
+        }
         pageInfo.setRecords(list);
         return pageInfo;
     }

--
Gitblit v1.7.1