Przeglądaj źródła

用户根据状态查询订单

skyfffire 1 miesiąc temu
rodzic
commit
c9ba23e981

+ 37 - 3
src/main/java/modules/order/OrderController.java

@@ -193,9 +193,44 @@ public class OrderController extends MyController {
      */
     @Before(LoginInterceptor.class)
     public void orderList() {
+        // --- 从 JSON 请求体中获取参数 ---
+        JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
+        
         User user = userService.findUserByMobileNumber(this.<String>getSessionAttr("mobile_number"));
+
+        int status;
+        // 使用 Fastjson 的 containsKey 和 get 方法来判断和获取
+        if (requestBodyJson.containsKey("status")) {
+            // 参数存在,但需要判断其类型和值
+            Object statusObj = requestBodyJson.get("status"); // 获取原始 Object
+
+            if (statusObj == null) {
+                // 如果 status 字段存在,但值为 JSON null
+                status = -1;
+            } else if (statusObj instanceof Number) {
+                // 如果是数字类型 (Integer, Long, Double 等),直接获取其整数值
+                status = ((Number) statusObj).intValue();
+            } else if (statusObj instanceof String) {
+                // 如果是字符串类型,尝试进行转换
+                String statusStr = (String) statusObj;
+                try {
+                    status = Integer.parseInt(statusStr);
+                } catch (NumberFormatException e) {
+                    // 字符串不能转换为数字,报错
+                    renderJson(MyRet.fail("你输入的 status 格式不正确,期待一个数字,但却是一个无法解析的字符串: '" + statusStr + "'").setData(requestBodyJson));
+                    return;
+                }
+            } else {
+                // 其他不支持的类型 (Boolean, Array, Object),报错
+                renderJson(MyRet.fail("你输入的 status 类型不正确,期待一个数字,却是一个:" + statusObj.getClass().getSimpleName()).setData(requestBodyJson));
+                return;
+            }
+        } else {
+            // 如果 status 字段在 JSON 中完全不存在
+            status = -1;
+        }
         
-        renderJson(service.findOrderByUser(user.getId()));
+        renderJson(service.findOrderByUser(user.getId(), status));
     }
 
     /**
@@ -262,7 +297,6 @@ public class OrderController extends MyController {
      * 获取订单的状态码以及对应的状态描述
      */
     @Before(LoginInterceptor.class)
-    @RequiredRoleInterface({UserController.ROLE_CHECK_ADMIN, UserController.ROLE_SUPER_ADMIN})
     public void orderStatus() {
         List<Map<String, Object>> statusList = new ArrayList<>();
 
@@ -278,7 +312,7 @@ public class OrderController extends MyController {
     
     // 订单状态枚举 (建议定义在单独的类或枚举中)
     public enum OrderStatus {
-        INIT(0, "已取消"),
+        INIT(0, "创建待初始化"),
         // PENDING_PAY(10, "待支付"),
         // PREORDER_PENDING_CONFIRM(20, "预购待确认"), // 预购已支付,等待转换为正式销售
         PREORDER_SUCCESS(30, "预购成功"), // 预购已成功,等待正式销售

+ 26 - 5
src/main/java/modules/order/OrderService.java

@@ -226,22 +226,43 @@ public class OrderService {
     /**
      * 根据用户ID查询订单列表,并封装订单流转状态
      * @param userId 用户ID
+     * @param status 需要的状态
      * @return 包含订单列表及状态流转信息的 MyRet 对象
      */
-    public MyRet findOrderByUser(long userId) {
-        List<Order> orderList = Order.dao.find("SELECT * FROM t_order WHERE user_id = ? ORDER BY create_time DESC", userId);
+    public MyRet findOrderByUser(long userId, int status) {
+        List<Order> allOrderList = Order.dao.find("SELECT * FROM t_order WHERE user_id = ? ORDER BY create_time DESC", userId);
 
-        if (orderList.isEmpty()) {
+        if (allOrderList.isEmpty()) {
             return MyRet.ok("查询成功").setData(new ArrayList<Map<String, Object>>());
         }
+
+        // 给用户转账NFT
+        doNftTransfer(userId, allOrderList);
+        
+        // 只需要指定状态的status
+        List<Order> filteredOrderList = new ArrayList<>();
+        
+        // 状态过滤
+        for (Order order : allOrderList) {
+            // -1就不用过滤了
+            if (status == -1) {
+                filteredOrderList.add(order);
+                continue;
+            }
+            
+            // 否则就按指定状态来
+            if (order.getOrderStatus() == status) {
+                filteredOrderList.add(order);
+            }
+        }
         
         // 给用户订单封装商品信息
-        for (Order order : orderList) {
+        for (Order order : filteredOrderList) {
             order.put("nftt", nfttService.findNfttById(order.getNfttId() + ""));
         }
 
         // 调用重用方法封装日志
-        List<Map<String, Object>> resultList = encapsulateOrdersWithLogs(orderList);
+        List<Map<String, Object>> resultList = encapsulateOrdersWithLogs(filteredOrderList);
 
         return MyRet.ok("查询成功").setData(resultList);
     }

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

@@ -34,7 +34,12 @@ POST {{ baseUrl }}/order/orderList
 Content-Type: application/json
 dl-token: {{dl_token_var}}
 
-### 【超级管理员】获取订单的状态码以及对应的状态描述
+# 如果你传参-1或不传就是不加过滤条件,否则就按你传的状态来,下面的接口可以获取状态列表
+{
+  "status": -1
+}
+
+### 获取订单的状态码以及对应的状态描述
 POST {{ baseUrl }}/order/orderStatus
 Content-Type: application/json
 dl-token: {{dl_token_var}}