Sfoglia il codice sorgente

用户查询资金流水

skyfffire 1 mese fa
parent
commit
c213365baa

+ 4 - 0
src/main/java/common/interceptor/empty/EmptyInterceptor.java

@@ -33,6 +33,10 @@ public class EmptyInterceptor implements Interceptor {
     }
 
     private boolean isNotEmpty(JSONObject paramsModel, String[] keyArray) {
+        if (paramsModel == null) {
+            return false;
+        }
+        
         for (String key : keyArray) {
             if (StrKit.isBlank(paramsModel.getString(key))) {
                 return false;

+ 56 - 0
src/main/java/modules/deposit/DepositLogService.java

@@ -1,9 +1,65 @@
 package modules.deposit;
 
+import com.jfinal.plugin.activerecord.Db;
 import common.model.DepositLog;
+import common.utils.http.MyRet;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public class DepositLogService {
     public DepositLog findByOrderNo(String orderNo) {
         return DepositLog.dao.findFirst("SELECT * FROM t_deposit_log WHERE hyg_order_no=?", orderNo);
     }
+    
+    public MyRet findForUser(int pageNumber, int pageSize, long userId) {
+        String columns = "id, amount, description, create_time";
+        String select = "SELECT " + columns;
+        String fromWhere = "FROM t_deposit_log WHERE user_id = ?"; // 基础 from 子句
+        String orderBy = "ORDER BY create_time DESC";
+
+        List<Object> paramsForList = new ArrayList<>(); // 用于 SELECT 列表查询的参数
+
+        // 计算 LIMIT 的 offset (偏移量)
+        int offset = (pageNumber - 1) * pageSize;
+
+        // 构建查询当前页订单列表的最终 SQL (手动添加 LIMIT)
+        String listSql = select + " " + fromWhere + " " + orderBy + " LIMIT ?, ?";
+        paramsForList.add(userId);
+        paramsForList.add(offset);
+        paramsForList.add(pageSize);
+        
+        List<DepositLog> logs = DepositLog.dao.find(listSql, paramsForList.toArray());
+        // 如果列表为空,直接返回
+        if (logs.isEmpty()) {
+            Map<String, Object> response = new HashMap<>(); // 准备返回结构
+            response.put("list", new ArrayList<>());
+            response.put("total_row", 0);
+            response.put("total_page", 0);
+            response.put("page_size", pageSize);
+            response.put("page_number", pageNumber);
+            response.put("total_order_count", 0); // 与你的 total_user_count 对应
+            return MyRet.ok("查询成功").setData(response);
+        }
+        
+        long totalRowLong = Db.queryLong("SELECT COUNT(id) FROM t_deposit_log WHERE user_id=?", userId);
+        // 手动计算 total_page
+        int totalPage = (int) Math.ceil((double) totalRowLong / pageSize);
+        if (totalPage == 0 && totalRowLong > 0) { // 解决总行数大于0但总页数为0(pageSize大于totalRow)的问题
+            totalPage = 1;
+        }
+
+        // 封装最终响应
+        Map<String, Object> response = new HashMap<>();
+        response.put("list", logs);
+        response.put("total_row", totalRowLong); // 符合条件的订单总数
+        response.put("total_page", totalPage); // 手动计算的总页数
+        response.put("page_size", pageSize);
+        response.put("page_number", pageNumber);
+        response.put("total_order_count", totalRowLong); // 对应 total_user_count,这里是符合订单状态筛选的总数
+
+        return MyRet.ok("查询成功").setData(response);
+    }
 }

+ 39 - 0
src/main/java/modules/user/UserController.java

@@ -248,6 +248,45 @@ public class UserController extends MyController {
         renderJson(ret);
     }
     
+    @Before(LoginInterceptor.class)
+    @EmptyInterface({"page_size", "page_number"})
+    public void depositLogs() {
+        JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
+
+        // 页面大小
+        String pageSizeStr = requestBodyJson.getString("page_size");
+        int pageSizeInt;
+        try {
+            pageSizeInt = Integer.parseInt(pageSizeStr);
+
+            if (pageSizeInt <= 0) {
+                renderJson(MyRet.fail("页面大小(page_size)期待是正整数,你传的是: " + pageSizeStr));
+                return;
+            }
+        } catch (Exception e) {
+            renderJson(MyRet.fail("页面大小(page_size)格式不正确: " + e.getMessage()));
+            return;
+        }
+
+        // 页码
+        String pageNumberStr = requestBodyJson.getString("page_number");
+        int pageNumberInt;
+        try {
+            pageNumberInt = Integer.parseInt(pageNumberStr);
+
+            if (pageNumberInt <= 0) {
+                renderJson(MyRet.fail("页码(page_number)期待是正整数,你传的是: " + pageNumberStr));
+                return;
+            }
+        } catch (Exception e) {
+            renderJson(MyRet.fail("页码(page_number)格式不正确: " + e.getMessage()));
+            return;
+        }
+
+        User user = service.findUserByMobileNumber(getSessionAttr("mobile_number"));
+        renderJson(depositLogService.findForUser(pageNumberInt, pageSizeInt, user.getId()));
+    }
+    
     // 慧用工免登请求地址,用来换取手机号
     public void tokenToMobileNumber() {
         String token = getPara("token");

+ 17 - 0
src/test/rest/UserControllerTest.http

@@ -71,6 +71,23 @@ POST {{ baseUrl }}/user/nftList
 Content-Type: application/json
 dl-token: {{dl_token_var}}
 
+### 用户获取资金消费与充值记录
+POST {{ baseUrl }}/user/depositLogs
+Content-Type: application/json
+dl-token: {{dl_token_var}}
+
+{
+  "page_number": 1,
+  "page_size": 100
+}
+### 返回值解释
+### list 分页结果的实际列表数据 
+### page_number 当前页码
+### page_size 每页大小
+### total_page 总页数
+### total_row  当前分页的总数
+### total_user_count 符合条件的总记录数
+
 ### 获取个人团队信息
 POST {{ baseUrl }}/user/team
 Content-Type: application/json