From 35601b1455ec05ece1414bd288fa38944c03bfdd Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 26 九月 2024 20:15:17 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java          |    3 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java          |   89 +++++++++-
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java             |  113 +++++++------
 ruoyi-gateway/src/main/resources/bootstrap.yml                                                               |   22 +-
 ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml                                                  |   55 ++----
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java |   14 +
 ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml                                            |   55 ++----
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java                                  |   51 ++++++
 ruoyi-auth/src/main/resources/bootstrap.yml                                                                  |   22 +-
 9 files changed, 250 insertions(+), 174 deletions(-)

diff --git a/ruoyi-auth/src/main/resources/bootstrap.yml b/ruoyi-auth/src/main/resources/bootstrap.yml
index 4377cca..0122628 100644
--- a/ruoyi-auth/src/main/resources/bootstrap.yml
+++ b/ruoyi-auth/src/main/resources/bootstrap.yml
@@ -22,24 +22,18 @@
     nacos:
       discovery:
         # 服务注册地址
-#        server-addr: 192.168.110.169:8848
+        server-addr: 192.168.110.169:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
-#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-#        username: nacos
-#        password: nacos
-        
-        server-addr: 127.0.0.1:8848
-        namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+        username: nacos
+        password: nacos
       config:
         # 配置中心地址
-#        server-addr: 192.168.110.169:8848
-#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-#        username: nacos
-#        password: nacos
-        
-        server-addr: 127.0.0.1:8848
-        namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+        server-addr: 192.168.110.169:8848
+        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+        username: nacos
+        password: nacos
         group: DEFAULT_GROUP
         name: ${spring.application.name}
         # 配置文件格式
diff --git a/ruoyi-gateway/src/main/resources/bootstrap.yml b/ruoyi-gateway/src/main/resources/bootstrap.yml
index ccdca4c..1beff53 100644
--- a/ruoyi-gateway/src/main/resources/bootstrap.yml
+++ b/ruoyi-gateway/src/main/resources/bootstrap.yml
@@ -22,25 +22,19 @@
     nacos:
       discovery:
         # 服务注册地址
-#        server-addr: 192.168.110.169:8848
+        server-addr: 192.168.110.169:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
-#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-#        username: nacos
-#        password: nacos
-        
-        server-addr: 127.0.0.1:8848
-        namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+        username: nacos
+        password: nacos
       config:
         # 配置中心地址
-#        server-addr: 192.168.110.169:8848
-#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-#        username: nacos
-#        password: nacos
+        server-addr: 192.168.110.169:8848
+        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+        username: nacos
+        password: nacos
         group: DEFAULT_GROUP
-        
-        server-addr: 127.0.0.1:8848
-        namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
         name: ${spring.application.name}
         # 配置文件格式
         file-extension: yml
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
index 0fabec1..d837d2b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
@@ -21,25 +21,19 @@
     nacos:
       discovery:
         # 服务注册地址
-#        server-addr: 192.168.110.169:8848
+        server-addr: 192.168.110.169:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
-#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-#        username: nacos
-#        password: nacos
-        
-        server-addr: 127.0.0.1:8848
-        namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+        username: nacos
+        password: nacos
       config:
         # 配置中心地址
-#        server-addr: 192.168.110.169:8848
-#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+        server-addr: 192.168.110.169:8848
+        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
         group: DEFAULT_GROUP
-#        username: nacos
-#        password: nacos
-        
-        server-addr: 127.0.0.1:8848
-        namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+        username: nacos
+        password: nacos
         name: ${spring.application.name}
         # 配置文件格式
         file-extension: yml
@@ -60,15 +54,12 @@
     type: nacos
     nacos:
       # 开发环境
-#      server-addr: 192.168.110.169:8848
-#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+      server-addr: 192.168.110.169:8848
+      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
       group: DEFAULT_GROUP
       data-id: seata-server.properties
-#      username: nacos
-#      password: nacos
-  
-      server-addr: 127.0.0.1:8848
-      namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+      username: nacos
+      password: nacos
       # 生产环境
 #      server-addr: 192.168.0.137:8848,192.168.0.123:8848
 #      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
@@ -81,14 +72,11 @@
     nacos:
       application: seata-server
       # 开发环境
-#      server-addr: 192.168.110.169:8848
-#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+      server-addr: 192.168.110.169:8848
+      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
       group: DEFAULT_GROUP
-#      username: nacos
-#      password: nacos
-      
-      server-addr: 127.0.0.1:8848
-      namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+      username: nacos
+      password: nacos
       # 生产环境
 #      server-addr: 192.168.0.137:8848,192.168.0.123:8848
 #      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
@@ -99,15 +87,12 @@
     nacos:
       discovery:
         # 开发环境
-#        server-addr: 192.168.110.169:8848 # nacos注册中心地址
-#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
+        server-addr: 192.168.110.169:8848 # nacos注册中心地址
+        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
         group: DEFAULT_GROUP
         application: seata-server #Nacos 中 Seata 名称
-#        username: nacos
-#        password: nacos
-      
-        server-addr: 127.0.0.1:8848
-        namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+        username: nacos
+        password: nacos
         # 生产环境
 #        server-addr: 192.168.0.137:8848,192.168.0.123:8848
 #        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
index ecb1330..b8db1ec 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
@@ -14,6 +14,7 @@
 import com.ruoyi.chargingPile.api.vo.GunStatusStatisticsVO;
 import com.ruoyi.chargingPile.api.vo.SiteNameVO;
 import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
+import com.ruoyi.chargingPile.config.FileUploadConfig;
 import com.ruoyi.chargingPile.service.ISiteService;
 import com.ruoyi.chargingPile.service.TChargingGunService;
 import com.ruoyi.chargingPile.service.TChargingPileService;
@@ -63,13 +64,16 @@
 
     @Autowired
     private TChargingGunService chargingGunService;
-    @Autowired
+    @Resource
     private ChargingOrderClient chargingOrderClient;
 
     @Resource
     private TChargingPileService chargingPileService;
     @Resource
     private ISiteService siteService;
+    
+    @Autowired
+    private FileUploadConfig fileUploadConfig;
 
     /**
      * 查询充电枪列表
@@ -152,11 +156,13 @@
     public void downloadQRCode(@PathVariable Integer id, HttpServletResponse response){
         try {
             TChargingGun chargingGun = chargingGunService.getById(id);
-            String fileName = URLEncoder.encode(chargingGun.getCode(), "UTF-8") + ".jpg";
+            TChargingPile chargingPile = chargingPileService.getById(chargingGun.getId());
+            String code = chargingPile.getCode() + chargingGun.getCode();
+            String fileName = URLEncoder.encode(code, "UTF-8") + ".jpg";
             response.setContentType("application/force-download");
             response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
-            String url = "https://www.baidu.com?id=" + id;
-            String filePath = "D:/Program Files/nginx-1.20.2/html";
+            String url = "https://mxcd.zhinenganguan.com?No=" + code;
+            String filePath = fileUploadConfig.getLocation();
             QRCodeUtils.encode(url, filePath);
             FileInputStream inputStream = new FileInputStream(filePath);
             ServletOutputStream out = response.getOutputStream();
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
index bd39d02..af5069b 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
@@ -22,26 +22,20 @@
     nacos:
       discovery:
         # 服务注册地址
-#        server-addr: 192.168.110.169:8848
+        server-addr: 192.168.110.169:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
-#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-#        username: nacos
-#        password: nacos
-        
-        server-addr: 127.0.0.1:8848
-        namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+        username: nacos
+        password: nacos
       config:
         # 配置中心地址
-#        server-addr: 192.168.110.169:8848
-#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+        server-addr: 192.168.110.169:8848
+        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
         group: DEFAULT_GROUP
         name: ${spring.application.name}
-#        username: nacos
-#        password: nacos
-        
-        server-addr: 127.0.0.1:8848
-        namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+        username: nacos
+        password: nacos
         # 配置文件格式
         file-extension: yml
         # 共享配置
@@ -61,15 +55,12 @@
     type: nacos
     nacos:
       # 开发环境
-#      server-addr: 192.168.110.169:8848
-#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+      server-addr: 192.168.110.169:8848
+      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
       group: DEFAULT_GROUP
       data-id: seata-server.properties
-#      username: nacos
-#      password: nacos
-  
-      server-addr: 127.0.0.1:8848
-      namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+      username: nacos
+      password: nacos
       # 生产环境
 #      server-addr: 192.168.0.137:8848,192.168.0.123:8848
 #      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
@@ -82,14 +73,11 @@
     nacos:
       application: seata-server
       # 开发环境
-#      server-addr: 192.168.110.169:8848
-#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+      server-addr: 192.168.110.169:8848
+      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
       group: DEFAULT_GROUP
-#      username: nacos
-#      password: nacos
-      
-      server-addr: 127.0.0.1:8848
-      namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+      username: nacos
+      password: nacos
       # 生产环境
 #      server-addr: 192.168.0.137:8848,192.168.0.123:8848
 #      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
@@ -100,15 +88,12 @@
     nacos:
       discovery:
         # 开发环境
-#        server-addr: 192.168.110.169:8848 # nacos注册中心地址
-#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
+        server-addr: 192.168.110.169:8848 # nacos注册中心地址
+        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
         group: DEFAULT_GROUP
         application: seata-server #Nacos 中 Seata 名称
-#        username: nacos
-#        password: nacos
-      
-        server-addr: 127.0.0.1:8848
-        namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1
+        username: nacos
+        password: nacos
         # 生产环境
 #        server-addr: 192.168.0.137:8848,192.168.0.123:8848
 #        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
index 83ea8cf..6f50e62 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
@@ -1,4 +1,5 @@
 package com.ruoyi.order.controller;
+
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
@@ -41,7 +42,7 @@
 
 /**
  * <p>
- *  前端控制器
+ * 前端控制器
  * </p>
  *
  * @author xiaochen
@@ -60,14 +61,24 @@
 	private GoodsClient goodsClient;
 	@Resource
 	private CouponClient couponClient;
-
-
+	@Resource
+	private TokenService tokenService;
+	@Resource
+	private AliPaymentClient aliPaymentClient;
+	@Resource
+	private WxPaymentClient wxPaymentClient;
+	@Resource
+	private AppCouponClient appCouponClient;
+	@Resource
+	private SysUserClient sysUserClient;
+	
+	
 	@PostMapping("/getShoppingOrderList")
 	@ApiOperation(value = "列表查询", tags = {"管理后台-购物订单"})
 	public AjaxResult<PageInfo<TShoppingOrder>> getShoppingOrderList(@RequestBody ShoppingOrderQuery query) {
 		if (StringUtils.hasLength(query.getPhone())) {
 			List<Long> data = appUserClient.getUserIdsByPhone(query.getPhone()).getData();
-			if (data.isEmpty()){
+			if (data.isEmpty()) {
 				return AjaxResult.success(new PageInfo<TShoppingOrder>());
 			}
 			query.setUserIds(data);
@@ -77,54 +88,47 @@
 			query.setGoodsIds(data);
 			List<Integer> data1 = couponClient.getCouponIdsByName(query.getName()).getData();
 			query.setCouponIds(data1);
-			if (data.isEmpty() && data1.isEmpty()){
+			if (data.isEmpty() && data1.isEmpty()) {
 				return AjaxResult.success(new PageInfo<TShoppingOrder>());
 			}
 		}
 		PageInfo<TShoppingOrder> res = shoppingOrderService.pageList(query);
 		return AjaxResult.success(res);
 	}
-	@Resource
-	private SysUserClient sysUserClient;
+	
 	@GetMapping("/getShoppingOrderInfoById")
 	@ApiOperation(value = "根据订单id查看订单详情", tags = {"管理后台-购物订单"})
 	public AjaxResult<TShoppingOrder> getShoppingOrderList(String id) {
 		TShoppingOrder byId = shoppingOrderService.getById(id);
-		if (byId.getConsignerId()!=null){
+		if (byId.getConsignerId() != null) {
 			SysUser data = sysUserClient.getSysUser(byId.getConsignerId()).getData();
-			if (data!=null){
+			if (data != null) {
 				byId.setConsignerName(data.getUserName());
 			}
 		}
-		if (byId.getCancellationId()!=null){
+		if (byId.getCancellationId() != null) {
 			SysUser data = sysUserClient.getSysUser(byId.getCancellationId()).getData();
-			if (data!=null){
+			if (data != null) {
 				byId.setCancellationName(data.getUserName());
 			}
 		}
-		if (byId.getAppUserAddressId()!=null){
+		if (byId.getAppUserAddressId() != null) {
 			TAppUserAddress data = appUserClient.getAddressById(byId.getAppUserAddressId()).getData();
-			if (data!=null){
-				byId.setReceivingName(data.getName()+"-"+data.getPhone());
+			if (data != null) {
+				byId.setReceivingName(data.getName() + "-" + data.getPhone());
 				byId.setReceivingAddress(data.getAddress());
 			}
 		}
 		return AjaxResult.success(byId);
 	}
+	
 	@GetMapping("/deleteShoppingOrder")
 	@ApiOperation(value = "批量删除订单", tags = {"管理后台-购物订单"})
 	public AjaxResult<TShoppingOrder> deleteShoppingOrder(String ids) {
 		shoppingOrderService.removeBatchByIds(Arrays.asList(ids.split(",")));
 		return AjaxResult.success();
 	}
-	@Resource
-	private TokenService tokenService;
-	@Resource
-	private AliPaymentClient aliPaymentClient;
-	@Resource
-	private WxPaymentClient wxPaymentClient;
-	@Resource
-	private AppCouponClient appCouponClient;
+	
 	@GetMapping("/cancelShoppingOrder")
 	@ApiOperation(value = "取消订单", tags = {"管理后台-购物订单"})
 	public AjaxResult cancelShoppingOrder(String id) {
@@ -134,7 +138,7 @@
 		byId.setCancellationId(userid);
 		byId.setCancellationTime(LocalDateTime.now());
 		byId.setStatus(4);
-		switch (byId.getPaymentType()){
+		switch (byId.getPaymentType()) {
 			case 1:
 				// 微信
 				WxPaymentRefundModel wxPaymentRefundModel = new WxPaymentRefundModel();
@@ -144,8 +148,8 @@
 				// todo 部署到线上之后写回调地址
 //				wxPaymentRefundModel.setNotify_url("");
 				String string = byId.getPaymentAmount().multiply(new BigDecimal("100")).toString();
-				if (string.contains(".")){
-					string = string.substring(0,string.indexOf("."));
+				if (string.contains(".")) {
+					string = string.substring(0, string.indexOf("."));
 				}
 				int i = Integer.parseInt(string);
 				WxPaymentRefundModel.RefundAmount refundAmount = new WxPaymentRefundModel.RefundAmount();
@@ -163,10 +167,10 @@
 				refundReq.setRefundAmount(byId.getPaymentAmount().toString());
 				refundReq.setRefundReason("后台退款");
 				RefundResp data = aliPaymentClient.refund(refundReq).getData();
-				if (data!=null){
+				if (data != null) {
 					// 退款成功 回退优惠券
 //					byId.setStatus(4);
-					if (byId.getAppCouponId()!=null){
+					if (byId.getAppCouponId() != null) {
 						appCouponClient.refund(byId.getAppCouponId().toString());
 						byId.setRefundCode(gw);
 						byId.setRefundAmount(byId.getPaymentAmount());
@@ -179,9 +183,10 @@
 		shoppingOrderService.updateById(byId);
 		return AjaxResult.success();
 	}
+	
 	@GetMapping("/consignerShoppingOrder")
 	@ApiOperation(value = "发货", tags = {"管理后台-购物订单"})
-	public AjaxResult consignerShoppingOrder(String id,String companyName,String code) {
+	public AjaxResult consignerShoppingOrder(String id, String companyName, String code) {
 		TShoppingOrder byId = shoppingOrderService.getById(id);
 		byId.setExpressCompany(companyName);
 		byId.setExpressNumber(code);
@@ -192,16 +197,17 @@
 		shoppingOrderService.updateById(byId);
 		return AjaxResult.success();
 	}
+	
 	@GetMapping("/getMyShoppingOrderList")
 	@ApiOperation(value = "获取购买订单列表", tags = {"小程序-商城购买订单"})
-	public AjaxResult<Map<String, Object>> getMyShoppingOrderList(GetMyShoppingOrderList query){
+	public AjaxResult<Map<String, Object>> getMyShoppingOrderList(GetMyShoppingOrderList query) {
 		Map<String, Object> list = shoppingOrderService.getMyShoppingOrderList(query);
 		return AjaxResult.success(list);
 	}
-
+	
 	@GetMapping("/getMyShoppingOrderListNum")
 	@ApiOperation(value = "获取购买订单列表数量", tags = {"小程序-商城购买订单"})
-	public AjaxResult<Map<String, Object>> getMyShoppingOrderListNum(){
+	public AjaxResult<Map<String, Object>> getMyShoppingOrderListNum() {
 		Long userId = tokenService.getLoginUserApplet().getUserId();
 		long dfh = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0)
 				.eq(TShoppingOrder::getStatus, 1).eq(TShoppingOrder::getAppUserId, userId));
@@ -215,29 +221,27 @@
 		map.put("ywc", ywc);
 		return AjaxResult.success(map);
 	}
-
 	
 	
 	@GetMapping("/getMyShoppingOrderInfo/{id}")
-	@ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单","管理后台-支付订单-订单信息"})
-	public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo(@PathVariable String id){
+	@ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单", "管理后台-支付订单-订单信息"})
+	public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo(@PathVariable String id) {
 		MyShoppingOrderInfo info = shoppingOrderService.getMyShoppingOrderInfo(id);
 		return AjaxResult.success(info);
 	}
 	
 	
-	
 	@PutMapping("/confirmReceipt/{id}")
 	@ApiOperation(value = "确认收货操作", tags = {"小程序-商城购买订单"})
-	public AjaxResult confirmReceipt(@PathVariable String id){
+	public AjaxResult confirmReceipt(@PathVariable String id) {
 		TShoppingOrder shoppingOrder = shoppingOrderService.getById(id);
-		if(shoppingOrder.getStatus() == 3){
+		if (shoppingOrder.getStatus() == 3) {
 			return AjaxResult.error("不能重复确认收货");
 		}
-		if(shoppingOrder.getStatus() == 1){
+		if (shoppingOrder.getStatus() == 1) {
 			return AjaxResult.error("订单还未发货呢");
 		}
-		if(shoppingOrder.getStatus() == 4){
+		if (shoppingOrder.getStatus() == 4) {
 			return AjaxResult.error("订单已取消,不允许操作。");
 		}
 		shoppingOrder.setStatus(3);
@@ -248,7 +252,7 @@
 	
 	@PutMapping("/cancelOrder/{id}")
 	@ApiOperation(value = "取消订单操作", tags = {"小程序-商城购买订单"})
-	public AjaxResult cancelOrder(@PathVariable String id){
+	public AjaxResult cancelOrder(@PathVariable String id) {
 		return shoppingOrderService.cancelOrder(id);
 	}
 	
@@ -256,9 +260,9 @@
 	 * 商城订单取消微信退款回调
 	 */
 	@PostMapping("/cancelShoppingOrderWxRefund")
-	public void cancelShoppingOrderWxRefund(HttpServletRequest request){
+	public void cancelShoppingOrderWxRefund(HttpServletRequest request) {
 		WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData();
-		if(null != data){
+		if (null != data) {
 			String out_refund_no = data.getOut_refund_no();
 			String refund_id = data.getRefund_id();
 			String tradeState = data.getTradeState();
@@ -268,31 +272,30 @@
 	}
 	
 	
-	
 	@ResponseBody
 	@GetMapping(value = "/getNoInvoicedOrder")
 	@ApiOperation(value = "获取未开票的订单数据", tags = {"小程序-充电发票"})
-	public AjaxResult<List<MyShoppingOrderList>> getNoInvoicedOrder(GetNoInvoicedOrder query){
+	public AjaxResult<List<MyShoppingOrderList>> getNoInvoicedOrder(GetNoInvoicedOrder query) {
 		List<MyShoppingOrderList> list = shoppingOrderService.getNoInvoicedOrder(query);
 		return AjaxResult.success(list);
 	}
-
+	
 	@PostMapping("/create")
-	public R<TShoppingOrder> shopCreate(@RequestBody ExchangeDto exchangeDto){
+	public R<TShoppingOrder> shopCreate(@RequestBody ExchangeDto exchangeDto) {
 		TShoppingOrder shoppingOrder = new TShoppingOrder();
 		shoppingOrder.setTitle(exchangeDto.getTitle());
 		shoppingOrder.setCode(OrderCodeUtil.getOrderCode("GW"));
 		shoppingOrder.setAppUserId(exchangeDto.getUserId());
 		shoppingOrder.setOrderType(exchangeDto.getGoodType());
-		if (exchangeDto.getGoodType()==1) {
+		if (exchangeDto.getGoodType() == 1) {
 			shoppingOrder.setGoodsId(exchangeDto.getGoodId());
-		}else {
+		} else {
 			shoppingOrder.setCouponId(exchangeDto.getGoodId());
 		}
 		shoppingOrder.setPurchaseQuantity(exchangeDto.getNum());
 		shoppingOrder.setAppUserAddressId(exchangeDto.getAddressId());
 		shoppingOrder.setOrderAmount(exchangeDto.getOrderPrice());
-		if (exchangeDto.getCouponId()!=null) {
+		if (exchangeDto.getCouponId() != null) {
 			shoppingOrder.setAppCouponId(exchangeDto.getCouponId());
 		}
 		shoppingOrder.setCouponDiscountAmount(exchangeDto.getDiscountPrice());
@@ -307,16 +310,16 @@
 		shoppingOrder.setCreateTime(LocalDateTime.now());
 		shoppingOrder.setDelFlag(false);
 		shoppingOrderService.save(shoppingOrder);
-
+		
 		return R.ok(shoppingOrder);
-
+		
 	}
-
+	
 	@PostMapping("/callBack")
-	public R callBack(@RequestParam("code")String code,@RequestParam("outTradeNo")String outTradeNo){
-		shoppingOrderService.callBack(code,outTradeNo);
+	public R callBack(@RequestParam("code") String code, @RequestParam("outTradeNo") String outTradeNo) {
+		shoppingOrderService.callBack(code, outTradeNo);
 		return R.ok();
-
+		
 	}
 }
 
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 964eaa8..a558cc9 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
@@ -620,8 +620,7 @@
 		chargingOrder.setChargeAmount(electrovalence);
 		chargingOrder.setVipDiscountAmount(discountAmount);
 		this.updateById(chargingOrder);
-
-
+		
 		TChargingPile chargingPile = chargingPileClient.getChargingPileById(tChargingGun.getChargingPileId()).getData();
 		//调用远程启动充电消息
 		PlatformStartCharging platformStartCharging = new PlatformStartCharging();
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 75e28c4..858885d 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
@@ -25,6 +25,7 @@
 import com.ruoyi.order.mapper.TShoppingOrderMapper;
 import com.ruoyi.order.service.TShoppingOrderRefundService;
 import com.ruoyi.order.service.TShoppingOrderService;
+import com.ruoyi.order.util.RedisLock;
 import com.ruoyi.other.api.domain.TCoupon;
 import com.ruoyi.other.api.domain.TGoods;
 import com.ruoyi.other.api.feignClient.CouponClient;
@@ -37,6 +38,8 @@
 import com.ruoyi.payment.api.vo.AliQueryOrder;
 import com.ruoyi.payment.api.vo.NotifyV3PayDecodeRespBody;
 import io.seata.spring.annotation.GlobalTransactional;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
@@ -85,6 +88,9 @@
     
     @Resource
     private TShoppingOrderRefundService shoppingOrderRefundService;
+    
+    @Autowired
+    public RedisTemplate redisTemplate;
     
     
     
@@ -309,7 +315,7 @@
     
         //退款金额
         BigDecimal refundAmount = shoppingOrder.getPaymentAmount().subtract(bigDecimal);
-    
+        
         //先查询第三方订单状态订单是否退款
         //支付方式(1=微信,2=支付宝)
         Integer paymentType = shoppingOrder.getPaymentType();
@@ -387,6 +393,44 @@
                 AjaxResult success = cancelShoppingOrderWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date()));
                 if(success.isSuccess()){
                     shoppingOrderRefundService.save(shoppingOrderRefund);
+                    //商品
+                    if(shoppingOrder.getOrderType() == 1){
+                        //redis锁 和支付使用同一个锁
+                        RedisLock redisLock = new RedisLock(redisTemplate, "SHOPPING_GOODS_LOCK", 5, 30000);
+                        try {
+                            redisLock.lock();
+                            TGoods goods = goodsClient.getGoodsById(shoppingOrder.getGoodsId()).getData();
+                            Integer inventory = goods.getInventory();
+                            if(-1 != inventory){
+                                goods.setInventory(inventory + shoppingOrder.getPurchaseQuantity());
+                                goodsClient.updateGoods(goods);
+                            }
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }finally {
+                            //解锁
+                            redisLock.unlock();
+                        }
+                    }
+                    //优惠券
+                    if(shoppingOrder.getOrderType() == 2){
+                        //redis锁 和支付使用同一个锁
+                        RedisLock redisLock = new RedisLock(redisTemplate, "SHOPPING_COUPON_LOCK", 5, 30000);
+                        try {
+                            redisLock.lock();
+                            TCoupon coupon = couponClient.getCouponById1(shoppingOrder.getCouponId()).getData();
+                            Integer inventory = coupon.getInventoryQuantity();
+                            if(-1 != inventory){
+                                coupon.setInventoryQuantity(inventory + shoppingOrder.getPurchaseQuantity());
+                                couponClient.updateCoupon(coupon);
+                            }
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }finally {
+                            //解锁
+                            redisLock.unlock();
+                        }
+                    }
                 }
             }
         }
@@ -415,26 +459,41 @@
             TShoppingOrder shoppingOrder = this.getById(one.getShoppingOrderId());
             //商品
             if(shoppingOrder.getOrderType() == 1){
-                // todo 需完善redis锁
                 //redis锁 和支付使用同一个锁
-                TGoods goods = goodsClient.getGoodsById(shoppingOrder.getGoodsId()).getData();
-                Integer inventory = goods.getInventory();
-                if(-1 != inventory){
-                    goods.setInventory(inventory + shoppingOrder.getPurchaseQuantity());
-                    goodsClient.updateGoods(goods);
+                RedisLock redisLock = new RedisLock(redisTemplate, "SHOPPING_GOODS_LOCK", 5, 30000);
+                try {
+                    redisLock.lock();
+                    TGoods goods = goodsClient.getGoodsById(shoppingOrder.getGoodsId()).getData();
+                    Integer inventory = goods.getInventory();
+                    if(-1 != inventory){
+                        goods.setInventory(inventory + shoppingOrder.getPurchaseQuantity());
+                        goodsClient.updateGoods(goods);
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                }finally {
+                    //解锁
+                    redisLock.unlock();
                 }
-                //解锁
             }
             //优惠券
             if(shoppingOrder.getOrderType() == 2){
-                //redis锁
-                TCoupon coupon = couponClient.getCouponById1(shoppingOrder.getCouponId()).getData();
-                Integer inventory = coupon.getInventoryQuantity();
-                if(-1 != inventory){
-                    coupon.setInventoryQuantity(inventory + shoppingOrder.getPurchaseQuantity());
-                    couponClient.updateCoupon(coupon);
+                //redis锁 和支付使用同一个锁
+                RedisLock redisLock = new RedisLock(redisTemplate, "SHOPPING_COUPON_LOCK", 5, 30000);
+                try {
+                    redisLock.lock();
+                    TCoupon coupon = couponClient.getCouponById1(shoppingOrder.getCouponId()).getData();
+                    Integer inventory = coupon.getInventoryQuantity();
+                    if(-1 != inventory){
+                        coupon.setInventoryQuantity(inventory + shoppingOrder.getPurchaseQuantity());
+                        couponClient.updateCoupon(coupon);
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                }finally {
+                    //解锁
+                    redisLock.unlock();
                 }
-                //解锁
             }
         }
         return AjaxResult.success();
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java
new file mode 100644
index 0000000..b9954c8
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java
@@ -0,0 +1,51 @@
+package com.ruoyi.order.util;
+
+import org.springframework.data.redis.core.RedisTemplate;
+
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/9/26 18:43
+ */
+public class RedisLock {
+	private RedisTemplate<String, String> redisTemplate;
+	private String lockKey;
+	private int expireTime; // 锁的超时时间
+	private int timeout; // 获取锁的超时时间
+	
+	
+	public RedisLock(RedisTemplate<String, String> redisTemplate, String lockKey, int expireTime, int timeout) {
+		this.redisTemplate = redisTemplate;
+		this.lockKey = lockKey;
+		this.expireTime = expireTime;
+		this.timeout = timeout;
+	}
+	
+	public boolean lock() {
+		String identifier = UUID.randomUUID().toString();
+		long end = System.currentTimeMillis() + timeout;
+		while (System.currentTimeMillis() < end) {
+			if (redisTemplate.opsForValue().setIfAbsent(lockKey, identifier, expireTime, TimeUnit.SECONDS)) {
+				return true;
+			}
+			// 可以使用延时来减少CPU占用
+			try {
+				Thread.sleep(100);
+			} catch (InterruptedException e) {
+				Thread.currentThread().interrupt();
+			}
+		}
+		return false;
+	}
+	
+	public boolean unlock() {
+		String identifier = redisTemplate.opsForValue().get(lockKey);
+		if (identifier != null && identifier.equals(UUID.randomUUID().toString())) {
+			redisTemplate.delete(lockKey);
+			return true;
+		}
+		return false;
+	}
+}

--
Gitblit v1.7.1