Преглед изворни кода

订单信息也附带商品信息

skyfffire пре 1 месец
родитељ
комит
b4cc999c23

+ 1 - 0
src/main/java/common/jfinal/AppConfig.java

@@ -99,6 +99,7 @@ public class AppConfig extends JFinalConfig {
         // me.set("asyncTaskExecutor", asyncTaskExecutor); // 不推荐直接用put,使用自己的全局Manager
         // 更好的方式是创建一个单例的 TaskScheduler
         TaskScheduler.init(asyncTaskExecutor);
+//        TaskScheduler.submit(new OrderStatusMaintenanceTask(new OrderService()));
     }
 
     @Override

+ 16 - 2
src/main/java/modules/order/OrderService.java

@@ -12,8 +12,9 @@ import common.model.OrderLog;
 import common.model.User;
 import common.utils.bsn.BsnSDK;
 import common.utils.http.MyRet;
+import modules.nftt.NfttService;
 import modules.user.UserService;
-import modules.user.UserTeamService;
+import modules.user.UserTeamShareTask;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -24,6 +25,8 @@ import java.util.stream.Collectors;
 public class OrderService {
     @Inject
     UserService userService;
+    @Inject
+    NfttService nfttService;
     
     public String hello() {
         return "Hello order";
@@ -164,6 +167,12 @@ public class OrderService {
 
     public MyRet findOrderById(long orderId, long userId) {
         List<Order> orderList = Order.dao.find("SELECT * FROM t_order WHERE id=? and user_id=?", orderId, userId);
+
+        // 给用户订单封装商品信息
+        for (Order order : orderList) {
+            order.put("nftt", nfttService.findNfttById(order.getNfttId() + ""));
+        }
+        
         List<Map<String, Object>> resultList = encapsulateOrdersWithLogs(orderList);
 
         if (!resultList.isEmpty()) {
@@ -228,7 +237,7 @@ public class OrderService {
                             AppConfig.LOGGER.info("该订单已确权:{}", order);
                             
                             // 异步执行分润过程
-                            AppConfig.TaskScheduler.submit(new UserTeamService(order, userService));
+                            AppConfig.TaskScheduler.submit(new UserTeamShareTask(order, userService));
                         }
                         
                         // status为2时是交付失败,自动执行退款
@@ -296,6 +305,11 @@ public class OrderService {
                 }
             }
         }
+        
+        // 给用户订单封装商品信息
+        for (Order order : orderList) {
+            order.put("nftt", nfttService.findNfttById(order.getNfttId() + ""));
+        }
 
         // 调用重用方法封装日志
         List<Map<String, Object>> resultList = encapsulateOrdersWithLogs(orderList);

+ 49 - 0
src/main/java/modules/order/OrderStatusMaintenanceTask.java

@@ -0,0 +1,49 @@
+package modules.order;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.TimeUnit;
+
+public class OrderStatusMaintenanceTask implements Runnable {
+    private static final Logger LOGGER = LoggerFactory.getLogger(OrderStatusMaintenanceTask.class);
+
+    // 通过构造函数注入
+    OrderService service;
+
+    // 任务是否应该停止的标志
+    private volatile boolean running = true; // 使用 volatile 确保多线程可见性
+    
+    public OrderStatusMaintenanceTask(OrderService service) {
+        this.service = service;
+        LOGGER.info("OrderStatusMaintenanceTask 实例已创建,注入 OrderService。{}", service.hashCode());
+    }
+    
+    @Override
+    public void run() {
+        LOGGER.info("OrderStatusMaintenanceTask 后台任务开始运行...");
+        while (running) { // 循环直到收到停止指令
+            try {
+                LOGGER.info("{}", service.countOrders(60));
+                
+                // 每次循环后休眠一段时间,避免CPU空转,并控制检查频率
+                Thread.sleep(TimeUnit.SECONDS.toMillis(10)); // 例如每 60 秒检查一次
+            } catch (InterruptedException e) {
+                LOGGER.warn("OrderStatusMaintenanceTask 因中断而停止。");
+                Thread.currentThread().interrupt(); // 重新设置中断状态
+                running = false; // 退出循环
+            } catch (Exception e) {
+                // 捕获所有其他异常,记录日志,但保持线程继续运行
+                LOGGER.error("OrderStatusMaintenanceTask 执行异常: {}", e.getMessage(), e);
+                // 可以在这里添加告警,或在短时间后重试
+                try {
+                    Thread.sleep(TimeUnit.SECONDS.toMillis(5)); // 发生错误时短暂休眠,避免错误日志刷屏
+                } catch (InterruptedException ie) {
+                    Thread.currentThread().interrupt();
+                    running = false;
+                }
+            }
+        }
+        LOGGER.info("OrderStatusMaintenanceTask 后台任务已停止运行。");
+    }
+}

+ 2 - 2
src/main/java/modules/user/UserTeamService.java → src/main/java/modules/user/UserTeamShareTask.java

@@ -9,11 +9,11 @@ import common.model.User;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 
-public class UserTeamService implements Runnable {    
+public class UserTeamShareTask implements Runnable {
     Order order;
     UserService userService;
 
-    public UserTeamService(Order order, UserService userService) {
+    public UserTeamShareTask(Order order, UserService userService) {
         this.userService = userService;
         this.order = order;
     }

+ 1 - 1
src/test/rest/OrderControllerTest.http

@@ -39,7 +39,7 @@ POST {{ baseUrl }}/order/orderStatus
 Content-Type: application/json
 dl-token: {{dl_token_var}}
 
-### 【超级管理员】获取用户列表,当前版本仅支持order_status查询
+### 【超级管理员】获取订单列表,当前版本仅支持order_status查询
 POST {{ baseUrl }}/order/orderListByAdmin
 Content-Type: application/json
 dl-token: {{dl_token_var}}

+ 3 - 3
src/test/rest/UserControllerTest.http

@@ -1,7 +1,7 @@
 ### 连通性测试
 POST {{ baseUrl }}/user/hello
 
-### 慧用工免登请求地址,用来换取手机号
+# 慧用工免登请求地址,用来换取手机号
 #POST {{ baseUrl }}/user/tokenToMobileNumber
 #Content-Type: application/json
 #
@@ -9,11 +9,11 @@ POST {{ baseUrl }}/user/hello
 #  "token": "-604525842767378248"
 #}
 
-#### 慧用工签约回调地址
+# 慧用工签约回调地址
 #POST {{ baseUrl }}/user/hygSign
 #Content-Type: application/json
 
-#### 模拟慧用工充值回调,要加密,不好处理
+# 模拟慧用工充值回调,要加密,不好处理
 #POST {{ baseUrl }}/user/hygDeposited
 #Content-Type: application/json
 #