Переглянути джерело

请求参数使用DTO优化

skyline 1 місяць тому
батько
коміт
34d13a8237
56 змінених файлів з 672 додано та 445 видалено
  1. 19 25
      haha-admin/src/main/java/com/haha/admin/controller/AdminController.java
  2. 1 1
      haha-admin/src/main/java/com/haha/admin/controller/AdminLoginController.java
  3. 7 9
      haha-admin/src/main/java/com/haha/admin/controller/AnnouncementController.java
  4. 10 10
      haha-admin/src/main/java/com/haha/admin/controller/DeviceController.java
  5. 7 4
      haha-admin/src/main/java/com/haha/admin/controller/DictController.java
  6. 1 1
      haha-admin/src/main/java/com/haha/admin/controller/LayerTemplateController.java
  7. 7 14
      haha-admin/src/main/java/com/haha/admin/controller/NewProductApplyController.java
  8. 4 4
      haha-admin/src/main/java/com/haha/admin/controller/OrderController.java
  9. 1 1
      haha-admin/src/main/java/com/haha/admin/controller/ProductController.java
  10. 13 18
      haha-admin/src/main/java/com/haha/admin/controller/RoleController.java
  11. 29 57
      haha-admin/src/main/java/com/haha/admin/controller/ShopController.java
  12. 14 31
      haha-admin/src/main/java/com/haha/admin/controller/UserController.java
  13. 0 42
      haha-admin/src/main/java/com/haha/admin/dto/CheckinQueryDTO.java
  14. 0 109
      haha-admin/src/main/java/com/haha/admin/dto/CheckinSubmitDTO.java
  15. 0 14
      haha-admin/src/main/java/com/haha/admin/dto/PageQueryDTO.java
  16. 15 0
      haha-entity/src/main/java/com/haha/entity/dto/AddReplenisherDTO.java
  17. 1 1
      haha-entity/src/main/java/com/haha/entity/dto/AdminLoginDTO.java
  18. 32 0
      haha-entity/src/main/java/com/haha/entity/dto/AdminQueryDTO.java
  19. 27 0
      haha-entity/src/main/java/com/haha/entity/dto/AnnouncementQueryDTO.java
  20. 15 0
      haha-entity/src/main/java/com/haha/entity/dto/BatchIdsDTO.java
  21. 25 0
      haha-entity/src/main/java/com/haha/entity/dto/BindInviteDTO.java
  22. 15 0
      haha-entity/src/main/java/com/haha/entity/dto/CreditScoreDTO.java
  23. 1 1
      haha-entity/src/main/java/com/haha/entity/dto/DeviceQueryDTO.java
  24. 27 0
      haha-entity/src/main/java/com/haha/entity/dto/DictDataQueryDTO.java
  25. 27 0
      haha-entity/src/main/java/com/haha/entity/dto/DictTypeQueryDTO.java
  26. 15 0
      haha-entity/src/main/java/com/haha/entity/dto/DoorOpenDTO.java
  27. 1 1
      haha-entity/src/main/java/com/haha/entity/dto/LayerTemplateQueryDTO.java
  28. 15 0
      haha-entity/src/main/java/com/haha/entity/dto/LinkDeviceDTO.java
  29. 15 0
      haha-entity/src/main/java/com/haha/entity/dto/MiniappOrderQueryDTO.java
  30. 32 0
      haha-entity/src/main/java/com/haha/entity/dto/NewProductApplyQueryDTO.java
  31. 17 0
      haha-entity/src/main/java/com/haha/entity/dto/OrderCancelDTO.java
  32. 25 0
      haha-entity/src/main/java/com/haha/entity/dto/OrderDetailDTO.java
  33. 1 1
      haha-entity/src/main/java/com/haha/entity/dto/OrderQueryDTO.java
  34. 20 0
      haha-entity/src/main/java/com/haha/entity/dto/PhoneLoginDTO.java
  35. 1 1
      haha-entity/src/main/java/com/haha/entity/dto/ProductQueryDTO.java
  36. 15 0
      haha-entity/src/main/java/com/haha/entity/dto/RefundDTO.java
  37. 20 0
      haha-entity/src/main/java/com/haha/entity/dto/ResetPasswordDTO.java
  38. 22 0
      haha-entity/src/main/java/com/haha/entity/dto/RoleQueryDTO.java
  39. 15 0
      haha-entity/src/main/java/com/haha/entity/dto/ScanOpenDTO.java
  40. 1 1
      haha-entity/src/main/java/com/haha/entity/dto/ShopQueryDTO.java
  41. 15 0
      haha-entity/src/main/java/com/haha/entity/dto/StatusDTO.java
  42. 17 0
      haha-entity/src/main/java/com/haha/entity/dto/TemperatureDTO.java
  43. 22 0
      haha-entity/src/main/java/com/haha/entity/dto/UserQueryDTO.java
  44. 17 0
      haha-entity/src/main/java/com/haha/entity/dto/VolumeDTO.java
  45. 4 3
      haha-miniapp/src/main/java/com/haha/miniapp/controller/DeviceController.java
  46. 6 5
      haha-miniapp/src/main/java/com/haha/miniapp/controller/InviteController.java
  47. 16 29
      haha-miniapp/src/main/java/com/haha/miniapp/controller/LoginController.java
  48. 11 7
      haha-miniapp/src/main/java/com/haha/miniapp/controller/OrderController.java
  49. 3 3
      haha-service/src/main/java/com/haha/service/AnnouncementService.java
  50. 4 2
      haha-service/src/main/java/com/haha/service/DictService.java
  51. 2 1
      haha-service/src/main/java/com/haha/service/NewProductApplyService.java
  52. 2 1
      haha-service/src/main/java/com/haha/service/UserService.java
  53. 8 12
      haha-service/src/main/java/com/haha/service/impl/AnnouncementServiceImpl.java
  54. 14 14
      haha-service/src/main/java/com/haha/service/impl/DictServiceImpl.java
  55. 10 13
      haha-service/src/main/java/com/haha/service/impl/NewProductApplyServiceImpl.java
  56. 8 9
      haha-service/src/main/java/com/haha/service/impl/UserServiceImpl.java

+ 19 - 25
haha-admin/src/main/java/com/haha/admin/controller/AdminController.java

@@ -2,17 +2,19 @@ package com.haha.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.haha.admin.annotation.RequirePermission;
+import com.haha.entity.dto.AdminQueryDTO;
+import com.haha.entity.dto.ResetPasswordDTO;
+import com.haha.common.vo.PageResult;
+import com.haha.common.vo.Result;
+import com.haha.entity.Admin;
 import com.haha.service.AdminService;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;
-import com.haha.common.vo.Result;
-import com.haha.entity.Admin;
+import java.util.Map;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Map;
-
 /**
  * 管理员管理控制器
  */
@@ -29,26 +31,20 @@ public class AdminController {
      */
     @RequirePermission("admin:read")
     @PostMapping
-    public Result<Map<String, Object>> list(@RequestBody Map<String, Object> params) {
-        int page = Integer.parseInt(params.getOrDefault("page", 1).toString());
-        int pageSize = Integer.parseInt(params.getOrDefault("pageSize", 10).toString());
-        String username = (String) params.get("username");
-        String phone = (String) params.get("phone");
-        Long roleId = params.get("roleId") != null ? Long.valueOf(params.get("roleId").toString()) : null;
-        Integer status = params.get("status") != null ? Integer.valueOf(params.get("status").toString()) : null;
+    public Result<PageResult<Admin>> list(@RequestBody AdminQueryDTO queryDTO) {
+        queryDTO.validate();
         
-        Result<IPage<Admin>> result = adminService.getAdminList(page, pageSize, username, phone, roleId, status);
+        Result<IPage<Admin>> result = adminService.getAdminList(
+                queryDTO.getPage(),
+                queryDTO.getPageSize(),
+                queryDTO.getUsername(),
+                queryDTO.getPhone(),
+                queryDTO.getRoleId(),
+                queryDTO.getStatus()
+        );
         
-        // 转换为前端需要的格式
         if (result.getCode() == 200 && result.getData() != null) {
-            IPage<Admin> pageData = result.getData();
-            Map<String, Object> data = Map.of(
-                "list", pageData.getRecords(),
-                "total", pageData.getTotal(),
-                "pageSize", pageData.getSize(),
-                "currentPage", pageData.getCurrent()
-            );
-            return Result.success("查询成功", data);
+            return Result.success("查询成功", PageResult.of(result.getData()));
         }
         return Result.error(result.getCode(), "查询失败");
     }
@@ -104,10 +100,8 @@ public class AdminController {
     @RequirePermission("admin:update")
     @Log(module = "用户管理", operation = OperationType.UPDATE, summary = "重置管理员密码")
     @PostMapping("/reset-password")
-    public Result<Void> resetPassword(@RequestBody Map<String, Object> params) {
-        Long id = Long.valueOf(params.get("id").toString());
-        String newPassword = (String) params.get("newPassword");
-        return adminService.resetPassword(id, newPassword);
+    public Result<Void> resetPassword(@RequestBody ResetPasswordDTO dto) {
+        return adminService.resetPassword(dto.getId(), dto.getNewPassword());
     }
     
     /**

+ 1 - 1
haha-admin/src/main/java/com/haha/admin/controller/AdminLoginController.java

@@ -2,7 +2,7 @@ package com.haha.admin.controller;
 
 import cn.dev33.satoken.annotation.SaIgnore;
 import cn.dev33.satoken.stp.StpUtil;
-import com.haha.admin.dto.AdminLoginDTO;
+import com.haha.entity.dto.AdminLoginDTO;
 import com.haha.admin.service.AdminLoginService;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;

+ 7 - 9
haha-admin/src/main/java/com/haha/admin/controller/AnnouncementController.java

@@ -3,11 +3,12 @@ package com.haha.admin.controller;
 import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.haha.admin.annotation.RequirePermission;
+import com.haha.entity.dto.AnnouncementQueryDTO;
 import com.haha.common.annotation.Log;
 import com.haha.common.constant.AnnouncementConstants;
 import com.haha.common.constant.ResponseEnum;
 import com.haha.common.enums.OperationType;
-import com.haha.common.utils.PageUtil;
+import com.haha.common.vo.PageResult;
 import com.haha.common.vo.Result;
 import com.haha.entity.Announcement;
 import com.haha.service.AnnouncementService;
@@ -16,8 +17,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * 系统公告管理控制器
@@ -35,14 +34,13 @@ public class AnnouncementController {
      */
     @RequirePermission("announcement:read")
     @GetMapping("/list")
-    public Result<Map<String, Object>> list(@RequestParam Map<String, Object> params) {
-        int[] pageParams = PageUtil.parsePageParams(params);
-        int page = pageParams[0];
-        int pageSize = pageParams[1];
+    public Result<PageResult<Announcement>> list(AnnouncementQueryDTO queryDTO) {
+        queryDTO.validate();
 
-        IPage<Announcement> pageResult = announcementService.getPage(page, pageSize, params);
+        IPage<Announcement> pageResult = announcementService.getPage(
+                queryDTO.getPage(), queryDTO.getPageSize(), queryDTO);
 
-        return Result.success(PageUtil.buildPageResult(pageResult, page, pageSize));
+        return Result.success("查询成功", PageResult.of(pageResult));
     }
 
     /**

+ 10 - 10
haha-admin/src/main/java/com/haha/admin/controller/DeviceController.java

@@ -2,7 +2,10 @@ package com.haha.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.haha.admin.annotation.RequirePermission;
-import com.haha.admin.dto.DeviceQueryDTO;
+import com.haha.entity.dto.DeviceQueryDTO;
+import com.haha.entity.dto.DoorOpenDTO;
+import com.haha.entity.dto.TemperatureDTO;
+import com.haha.entity.dto.VolumeDTO;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;
 import com.haha.common.vo.PageResult;
@@ -87,9 +90,8 @@ public class DeviceController {
     @RequirePermission("device:update")
     @Log(module = "设备管理", operation = OperationType.OTHER, summary = "远程开门")
     @PostMapping("/{id}/open")
-    public Result<Void> openDoor(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        String doorIndex = (String) params.getOrDefault("doorIndex", "A");
-        boolean success = deviceService.openDoor(id, doorIndex);
+    public Result<Void> openDoor(@PathVariable Long id, @RequestBody DoorOpenDTO dto) {
+        boolean success = deviceService.openDoor(id, dto.getDoorIndex());
         return success ? Result.success("开门指令已发送", null) : Result.error(500, "开门失败");
     }
 
@@ -101,9 +103,8 @@ public class DeviceController {
      */
     @RequirePermission("device:update")
     @PutMapping("/{id}/temperature")
-    public Result<Void> setTemperature(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        Double temperature = Double.valueOf(params.get("temperature").toString());
-        boolean success = deviceService.setTemperature(id, temperature);
+    public Result<Void> setTemperature(@PathVariable Long id, @RequestBody TemperatureDTO dto) {
+        boolean success = deviceService.setTemperature(id, dto.getTemperature());
         return success ? Result.success("温度设置成功", null) : Result.error(500, "设置失败");
     }
 
@@ -115,9 +116,8 @@ public class DeviceController {
      */
     @RequirePermission("device:update")
     @PutMapping("/{id}/volume")
-    public Result<Void> setVolume(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        Integer volume = Integer.valueOf(params.get("volume").toString());
-        boolean success = deviceService.setVolume(id, volume);
+    public Result<Void> setVolume(@PathVariable Long id, @RequestBody VolumeDTO dto) {
+        boolean success = deviceService.setVolume(id, dto.getVolume());
         return success ? Result.success("音量设置成功", null) : Result.error(500, "设置失败");
     }
 

+ 7 - 4
haha-admin/src/main/java/com/haha/admin/controller/DictController.java

@@ -1,6 +1,8 @@
 package com.haha.admin.controller;
 
 import com.haha.admin.annotation.RequirePermission;
+import com.haha.entity.dto.DictTypeQueryDTO;
+import com.haha.entity.dto.DictDataQueryDTO;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;
 import com.haha.common.vo.Result;
@@ -11,6 +13,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -27,8 +30,8 @@ public class DictController {
 
     @RequirePermission("dict:read")
     @PostMapping("/type/list")
-    public Result<Map<String, Object>> getDictTypeList(@RequestBody Map<String, Object> params) {
-        return Result.success("查询成功", dictService.getDictTypeList(params));
+    public Result<Map<String, Object>> getDictTypeList(@RequestBody DictTypeQueryDTO queryDTO) {
+        return Result.success("查询成功", dictService.getDictTypeList(queryDTO));
     }
 
     @RequirePermission("dict:read")
@@ -82,8 +85,8 @@ public class DictController {
 
     @RequirePermission("dict:read")
     @PostMapping("/data/page")
-    public Result<Map<String, Object>> getDictDataPage(@RequestBody Map<String, Object> params) {
-        return Result.success("查询成功", dictService.getDictDataPage(params));
+    public Result<Map<String, Object>> getDictDataPage(@RequestBody DictDataQueryDTO queryDTO) {
+        return Result.success("查询成功", dictService.getDictDataPage(queryDTO));
     }
 
     @RequirePermission("dict:read")

+ 1 - 1
haha-admin/src/main/java/com/haha/admin/controller/LayerTemplateController.java

@@ -3,7 +3,7 @@ package com.haha.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.haha.admin.annotation.RequirePermission;
 import com.haha.common.dto.LayerTemplateCreateDTO;
-import com.haha.admin.dto.LayerTemplateQueryDTO;
+import com.haha.entity.dto.LayerTemplateQueryDTO;
 import com.haha.common.dto.LayerTemplateUpdateDTO;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;

+ 7 - 14
haha-admin/src/main/java/com/haha/admin/controller/NewProductApplyController.java

@@ -3,11 +3,12 @@ package com.haha.admin.controller;
 import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.haha.admin.annotation.RequirePermission;
+import com.haha.entity.dto.NewProductApplyQueryDTO;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.ApplyStatus;
 import com.haha.common.constant.ResponseEnum;
 import com.haha.common.enums.OperationType;
-import com.haha.common.utils.PageUtil;
+import com.haha.common.vo.PageResult;
 import com.haha.common.vo.Result;
 import com.haha.entity.NewProductApply;
 import com.haha.service.NewProductApplyService;
@@ -15,7 +16,6 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -36,20 +36,13 @@ public class NewProductApplyController {
      */
     @RequirePermission("product-apply:read")
     @GetMapping("/list")
-    public Result<Map<String, Object>> list(@RequestParam Map<String, Object> params) {
-        int[] pageParams = PageUtil.parsePageParams(params);
-        int page = pageParams[0];
-        int pageSize = pageParams[1];
+    public Result<PageResult<NewProductApply>> list(NewProductApplyQueryDTO queryDTO) {
+        queryDTO.validate();
         
-        IPage<NewProductApply> pageResult = newProductApplyService.getPage(page, pageSize, params);
+        IPage<NewProductApply> pageResult = newProductApplyService.getPage(
+                queryDTO.getPage(), queryDTO.getPageSize(), queryDTO);
         
-        Map<String, Object> result = new HashMap<>();
-        result.put("list", pageResult.getRecords());
-        result.put("total", pageResult.getTotal());
-        result.put("pageSize", pageResult.getSize());
-        result.put("currentPage", pageResult.getCurrent());
-        
-        return Result.success(result);
+        return Result.success("查询成功", PageResult.of(pageResult));
     }
 
     /**

+ 4 - 4
haha-admin/src/main/java/com/haha/admin/controller/OrderController.java

@@ -2,7 +2,8 @@ package com.haha.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.haha.admin.annotation.RequirePermission;
-import com.haha.admin.dto.OrderQueryDTO;
+import com.haha.entity.dto.OrderQueryDTO;
+import com.haha.entity.dto.RefundDTO;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;
 import com.haha.common.vo.OrderVO;
@@ -96,9 +97,8 @@ public class OrderController {
     @RequirePermission("order:update")
     @Log(module = "订单管理", operation = OperationType.UPDATE, summary = "订单退款")
     @PostMapping("/{id}/refund")
-    public Result<Void> refund(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        String reason = (String) params.get("reason");
-        boolean success = orderService.refund(id, reason);
+    public Result<Void> refund(@PathVariable Long id, @RequestBody RefundDTO dto) {
+        boolean success = orderService.refund(id, dto.getReason());
         return success ? Result.success("退款成功", null) : Result.error(500, "退款失败");
     }
 }

+ 1 - 1
haha-admin/src/main/java/com/haha/admin/controller/ProductController.java

@@ -2,7 +2,7 @@ package com.haha.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.haha.admin.annotation.RequirePermission;
-import com.haha.admin.dto.ProductQueryDTO;
+import com.haha.entity.dto.ProductQueryDTO;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;
 import com.haha.common.vo.Result;

+ 13 - 18
haha-admin/src/main/java/com/haha/admin/controller/RoleController.java

@@ -2,17 +2,18 @@ package com.haha.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.haha.admin.annotation.RequirePermission;
+import com.haha.entity.dto.RoleQueryDTO;
+import com.haha.common.vo.PageResult;
+import com.haha.common.vo.Result;
+import com.haha.entity.Role;
 import com.haha.service.RoleService;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;
-import com.haha.common.vo.Result;
-import com.haha.entity.Role;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 角色管理控制器
@@ -30,24 +31,18 @@ public class RoleController {
      */
     @RequirePermission("role:read")
     @PostMapping
-    public Result<Map<String, Object>> list(@RequestBody Map<String, Object> params) {
-        int page = Integer.parseInt(params.getOrDefault("page", 1).toString());
-        int pageSize = Integer.parseInt(params.getOrDefault("pageSize", 10).toString());
-        String name = (String) params.get("name");
-        String code = (String) params.get("code");
+    public Result<PageResult<Role>> list(@RequestBody RoleQueryDTO queryDTO) {
+        queryDTO.validate();
         
-        Result<IPage<Role>> result = roleService.getRoleList(page, pageSize, name, code);
+        Result<IPage<Role>> result = roleService.getRoleList(
+                queryDTO.getPage(),
+                queryDTO.getPageSize(),
+                queryDTO.getName(),
+                queryDTO.getCode()
+        );
         
-        // 转换为前端需要的格式
         if (result.getCode() == 200 && result.getData() != null) {
-            IPage<Role> pageData = result.getData();
-            Map<String, Object> data = Map.of(
-                "list", pageData.getRecords(),
-                "total", pageData.getTotal(),
-                "pageSize", pageData.getSize(),
-                "currentPage", pageData.getCurrent()
-            );
-            return Result.success("查询成功", data);
+            return Result.success("查询成功", PageResult.of(result.getData()));
         }
         return Result.error(result.getCode(), "查询失败");
     }

+ 29 - 57
haha-admin/src/main/java/com/haha/admin/controller/ShopController.java

@@ -2,7 +2,7 @@ package com.haha.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.haha.admin.annotation.RequirePermission;
-import com.haha.admin.dto.ShopQueryDTO;
+import com.haha.entity.dto.*;
 import com.haha.common.annotation.Log;
 import com.haha.common.constant.ResponseEnum;
 import com.haha.common.enums.OperationType;
@@ -148,15 +148,14 @@ public class ShopController {
     /**
      * 切换门店状态
      * @param id 门店ID
-     * @param params 状态参数
+     * @param dto 状态参数
      * @return 操作结果
      */
     @RequirePermission("shop:update")
     @Log(module = "门店管理", operation = OperationType.UPDATE, summary = "切换门店状态")
     @PutMapping("/{id}/status")
-    public Result<String> toggleStatus(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        Integer status = Integer.valueOf(params.get("status").toString());
-        boolean result = shopService.toggleStatus(id, status);
+    public Result<String> toggleStatus(@PathVariable Long id, @RequestBody StatusDTO dto) {
+        boolean result = shopService.toggleStatus(id, dto.getStatus());
         
         if (result) {
             return Result.success("状态更新成功");
@@ -180,15 +179,14 @@ public class ShopController {
     /**
      * 将设备关联到门店
      * @param id 门店ID
-     * @param params 设备ID参数
+     * @param dto 设备ID参数
      * @return 操作结果
      */
     @RequirePermission("shop:update")
     @Log(module = "门店管理", operation = OperationType.UPDATE, summary = "关联设备到门店")
     @PostMapping("/{id}/devices")
-    public Result<String> linkDevice(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        Long deviceId = Long.valueOf(params.get("deviceId").toString());
-        boolean result = shopService.linkDevice(id, deviceId);
+    public Result<String> linkDevice(@PathVariable Long id, @RequestBody LinkDeviceDTO dto) {
+        boolean result = shopService.linkDevice(id, dto.getDeviceId());
         if (result) {
             return Result.success("关联成功");
         } else {
@@ -199,24 +197,18 @@ public class ShopController {
     /**
      * 批量将设备关联到门店
      * @param id 门店ID
-     * @param params 设备ID列表参数
+     * @param dto 设备ID列表参数
      * @return 操作结果
      */
     @RequirePermission("shop:update")
     @Log(module = "门店管理", operation = OperationType.UPDATE, summary = "批量关联设备到门店")
     @PostMapping("/{id}/devices/batch")
-    public Result<Map<String, Object>> batchLinkDevices(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        @SuppressWarnings("unchecked")
-        List<Integer> deviceIdInts = (List<Integer>) params.get("deviceIds");
-        List<Long> deviceIds = deviceIdInts.stream()
-                .map(Integer::longValue)
-                .toList();
-        
-        int count = shopService.batchLinkDevices(id, deviceIds);
+    public Result<Map<String, Object>> batchLinkDevices(@PathVariable Long id, @RequestBody BatchIdsDTO dto) {
+        int count = shopService.batchLinkDevices(id, dto.getIds());
         
         Map<String, Object> result = new HashMap<>();
         result.put("success", count);
-        result.put("total", deviceIds.size());
+        result.put("total", dto.getIds().size());
         
         return Result.success("批量关联完成", result);
     }
@@ -242,24 +234,18 @@ public class ShopController {
     /**
      * 批量移除设备关联
      * @param id 门店ID
-     * @param params 设备ID列表参数
+     * @param dto 设备ID列表参数
      * @return 操作结果
      */
     @RequirePermission("shop:update")
     @Log(module = "门店管理", operation = OperationType.UPDATE, summary = "批量移除设备关联")
     @DeleteMapping("/{id}/devices/batch")
-    public Result<Map<String, Object>> batchUnlinkDevices(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        @SuppressWarnings("unchecked")
-        List<Integer> deviceIdInts = (List<Integer>) params.get("deviceIds");
-        List<Long> deviceIds = deviceIdInts.stream()
-                .map(Integer::longValue)
-                .toList();
-        
-        int count = shopService.batchUnlinkDevices(id, deviceIds);
+    public Result<Map<String, Object>> batchUnlinkDevices(@PathVariable Long id, @RequestBody BatchIdsDTO dto) {
+        int count = shopService.batchUnlinkDevices(id, dto.getIds());
         
         Map<String, Object> result = new HashMap<>();
         result.put("success", count);
-        result.put("total", deviceIds.size());
+        result.put("total", dto.getIds().size());
         
         return Result.success("批量移除完成", result);
     }
@@ -292,38 +278,31 @@ public class ShopController {
     /**
      * 添加补货员
      * @param id 门店ID
-     * @param params 管理员ID参数
+     * @param dto 管理员ID参数
      * @return 操作结果
      */
     @RequirePermission("shop:update")
     @Log(module = "门店管理", operation = OperationType.INSERT, summary = "添加门店补货员")
     @PostMapping("/{id}/replenishers")
-    public Result<Void> addReplenisher(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        Long adminId = Long.valueOf(params.get("adminId").toString());
-        return shopReplenisherService.addReplenisher(id, adminId);
+    public Result<Void> addReplenisher(@PathVariable Long id, @RequestBody AddReplenisherDTO dto) {
+        return shopReplenisherService.addReplenisher(id, dto.getAdminId());
     }
 
     /**
      * 批量添加补货员
      * @param id 门店ID
-     * @param params 管理员ID列表参数
+     * @param dto 管理员ID列表参数
      * @return 操作结果
      */
     @RequirePermission("shop:update")
     @Log(module = "门店管理", operation = OperationType.INSERT, summary = "批量添加门店补货员")
     @PostMapping("/{id}/replenishers/batch")
-    public Result<Map<String, Object>> batchAddReplenishers(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        @SuppressWarnings("unchecked")
-        List<Integer> adminIdInts = (List<Integer>) params.get("adminIds");
-        List<Long> adminIds = adminIdInts.stream()
-                .map(Integer::longValue)
-                .toList();
-
-        int count = shopReplenisherService.batchAddReplenishers(id, adminIds);
+    public Result<Map<String, Object>> batchAddReplenishers(@PathVariable Long id, @RequestBody BatchIdsDTO dto) {
+        int count = shopReplenisherService.batchAddReplenishers(id, dto.getIds());
 
         Map<String, Object> result = new HashMap<>();
         result.put("success", count);
-        result.put("total", adminIds.size());
+        result.put("total", dto.getIds().size());
 
         return Result.success("批量添加完成", result);
     }
@@ -344,24 +323,18 @@ public class ShopController {
     /**
      * 批量移除补货员
      * @param id 门店ID
-     * @param params 管理员ID列表参数
+     * @param dto 管理员ID列表参数
      * @return 操作结果
      */
     @RequirePermission("shop:update")
     @Log(module = "门店管理", operation = OperationType.DELETE, summary = "批量移除门店补货员")
     @DeleteMapping("/{id}/replenishers/batch")
-    public Result<Map<String, Object>> batchRemoveReplenishers(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        @SuppressWarnings("unchecked")
-        List<Integer> adminIdInts = (List<Integer>) params.get("adminIds");
-        List<Long> adminIds = adminIdInts.stream()
-                .map(Integer::longValue)
-                .toList();
-
-        int count = shopReplenisherService.batchRemoveReplenishers(id, adminIds);
+    public Result<Map<String, Object>> batchRemoveReplenishers(@PathVariable Long id, @RequestBody BatchIdsDTO dto) {
+        int count = shopReplenisherService.batchRemoveReplenishers(id, dto.getIds());
 
         Map<String, Object> result = new HashMap<>();
         result.put("success", count);
-        result.put("total", adminIds.size());
+        result.put("total", dto.getIds().size());
 
         return Result.success("批量移除完成", result);
     }
@@ -369,15 +342,14 @@ public class ShopController {
     /**
      * 更新补货员状态
      * @param id 补货员关联ID
-     * @param params 状态参数
+     * @param dto 状态参数
      * @return 操作结果
      */
     @RequirePermission("shop:update")
     @Log(module = "门店管理", operation = OperationType.UPDATE, summary = "更新补货员状态")
     @PutMapping("/replenishers/{id}/status")
-    public Result<Void> updateReplenisherStatus(@PathVariable Long id, @RequestBody Map<String, Object> params) {
-        Integer status = Integer.valueOf(params.get("status").toString());
-        return shopReplenisherService.updateStatus(id, status);
+    public Result<Void> updateReplenisherStatus(@PathVariable Long id, @RequestBody StatusDTO dto) {
+        return shopReplenisherService.updateStatus(id, dto.getStatus());
     }
 
     /**

+ 14 - 31
haha-admin/src/main/java/com/haha/admin/controller/UserController.java

@@ -2,8 +2,12 @@ package com.haha.admin.controller;
 
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.haha.entity.dto.CreditScoreDTO;
+import com.haha.entity.dto.StatusDTO;
+import com.haha.entity.dto.UserQueryDTO;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;
+import com.haha.common.vo.PageResult;
 import com.haha.common.vo.Result;
 import com.haha.entity.User;
 import com.haha.service.UserService;
@@ -11,9 +15,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.HashMap;
-import java.util.Map;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 客户管理控制器
@@ -32,33 +35,17 @@ public class UserController {
      * @return 客户列表
      */
     @GetMapping("/list")
-    public Result<Map<String, Object>> list(@RequestParam Map<String, Object> params) {
+    public Result<PageResult<User>> list(UserQueryDTO queryDTO) {
         try {
-            int page = 1;
-            int pageSize = 10;
+            queryDTO.validate();
 
-            Object pageObj = params.get("page");
-            if (pageObj != null && !pageObj.toString().isEmpty()) {
-                page = Integer.parseInt(pageObj.toString());
-            }
-
-            Object pageSizeObj = params.get("pageSize");
-            if (pageSizeObj != null && !pageSizeObj.toString().isEmpty()) {
-                pageSize = Integer.parseInt(pageSizeObj.toString());
-            }
-
-            IPage<User> userPage = userService.getPage(page, pageSize, params);
+            IPage<User> userPage = userService.getPage(
+                    queryDTO.getPage(), queryDTO.getPageSize(), queryDTO);
 
             // 填充标签字段(由Service层处理)
             userService.fillUserLabels(userPage.getRecords());
 
-            Map<String, Object> data = new HashMap<>();
-            data.put("list", userPage.getRecords());
-            data.put("total", userPage.getTotal());
-            data.put("pageSize", userPage.getSize());
-            data.put("currentPage", userPage.getCurrent());
-
-            return Result.success("查询成功", data);
+            return Result.success("查询成功", PageResult.of(userPage));
 
         } catch (Exception e) {
             log.error("查询客户列表失败: {}", e.getMessage(), e);
@@ -109,12 +96,10 @@ public class UserController {
      */
     @Log(module = "客户管理", operation = OperationType.UPDATE, summary = "更新客户状态")
     @PutMapping("/{id}/status")
-    public Result<String> updateStatus(@PathVariable Long id, @RequestBody Map<String, Object> params) {
+    public Result<String> updateStatus(@PathVariable Long id, @RequestBody StatusDTO dto) {
         try {
-            Integer status = Integer.valueOf(params.get("status").toString());
-            
             LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
-            wrapper.eq(User::getId, id).set(User::getStatus, status);
+            wrapper.eq(User::getId, id).set(User::getStatus, dto.getStatus());
             
             boolean result = userService.update(wrapper);
             if (result) {
@@ -136,11 +121,9 @@ public class UserController {
      */
     @Log(module = "客户管理", operation = OperationType.UPDATE, summary = "更新客户信用分")
     @PutMapping("/{id}/credit")
-    public Result<String> updateCreditScore(@PathVariable Long id, @RequestBody Map<String, Object> params) {
+    public Result<String> updateCreditScore(@PathVariable Long id, @RequestBody CreditScoreDTO dto) {
         try {
-            Integer creditScore = Integer.valueOf(params.get("creditScore").toString());
-            
-            boolean result = userService.updateCreditScore(id, creditScore);
+            boolean result = userService.updateCreditScore(id, dto.getCreditScore());
             if (result) {
                 return Result.success("信用分更新成功");
             } else {

+ 0 - 42
haha-admin/src/main/java/com/haha/admin/dto/CheckinQueryDTO.java

@@ -1,42 +0,0 @@
-package com.haha.admin.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 签到查询DTO
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CheckinQueryDTO extends PageQueryDTO {
-
-    /**
-     * 签到类型:inventory_tally-理货盘点签到,delivery_replenish-补货确认签到
-     */
-    private String type;
-
-    /**
-     * 用户ID
-     */
-    private Long userId;
-
-    /**
-     * 门店ID
-     */
-    private Long shopId;
-
-    /**
-     * 开始日期(格式:yyyy-MM-dd)
-     */
-    private String startDate;
-
-    /**
-     * 结束日期(格式:yyyy-MM-dd)
-     */
-    private String endDate;
-
-    /**
-     * 签到状态:pending-待同步,synced-已同步,failed-同步失败
-     */
-    private String status;
-}

+ 0 - 109
haha-admin/src/main/java/com/haha/admin/dto/CheckinSubmitDTO.java

@@ -1,109 +0,0 @@
-package com.haha.admin.dto;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-/**
- * 签到提交DTO
- */
-@Data
-public class CheckinSubmitDTO {
-
-    /**
-     * 签到类型:inventory_tally-理货盘点签到,delivery_replenish-补货确认签到
-     */
-    @NotBlank(message = "签到类型不能为空")
-    private String type;
-
-    /**
-     * 关联门店ID
-     */
-    private Long shopId;
-
-    /**
-     * 关联设备ID
-     */
-    private String deviceId;
-
-    /**
-     * 位置信息
-     */
-    @NotNull(message = "位置信息不能为空")
-    private LocationDTO location;
-
-    /**
-     * 签到照片列表
-     */
-    @NotNull(message = "签到照片不能为空")
-    private List<PhotoDTO> photos;
-
-    /**
-     * 备注信息
-     */
-    private String remark;
-
-    /**
-     * 离线ID(离线签到时生成)
-     */
-    private String offlineId;
-
-    /**
-     * 位置信息DTO
-     */
-    @Data
-    public static class LocationDTO {
-        /**
-         * 纬度
-         */
-        @NotNull(message = "纬度不能为空")
-        private BigDecimal latitude;
-
-        /**
-         * 经度
-         */
-        @NotNull(message = "经度不能为空")
-        private BigDecimal longitude;
-
-        /**
-         * 地址
-         */
-        @NotBlank(message = "地址不能为空")
-        private String address;
-
-        /**
-         * 精度(米)
-         */
-        private Integer accuracy;
-    }
-
-    /**
-     * 照片DTO
-     */
-    @Data
-    public static class PhotoDTO {
-        /**
-         * 照片ID
-         */
-        private String id;
-
-        /**
-         * 照片OSS链接
-         */
-        @NotBlank(message = "照片链接不能为空")
-        private String path;
-
-        /**
-         * 水印照片OSS链接
-         */
-        private String watermarkPath;
-
-        /**
-         * 拍摄时间戳
-         */
-        private Long timestamp;
-    }
-}

+ 0 - 14
haha-admin/src/main/java/com/haha/admin/dto/PageQueryDTO.java

@@ -1,14 +0,0 @@
-package com.haha.admin.dto;
-
-import com.haha.common.dto.BasePageQueryDTO;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 分页查询基础DTO
- * 继承自通用BasePageQueryDTO,保持向后兼容
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class PageQueryDTO extends BasePageQueryDTO {
-}

+ 15 - 0
haha-entity/src/main/java/com/haha/entity/dto/AddReplenisherDTO.java

@@ -0,0 +1,15 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 添加补货员DTO
+ */
+@Data
+public class AddReplenisherDTO {
+
+    /**
+     * 管理员ID
+     */
+    private Long adminId;
+}

+ 1 - 1
haha-admin/src/main/java/com/haha/admin/dto/AdminLoginDTO.java → haha-entity/src/main/java/com/haha/entity/dto/AdminLoginDTO.java

@@ -1,4 +1,4 @@
-package com.haha.admin.dto;
+package com.haha.entity.dto;
 
 import lombok.Data;
 

+ 32 - 0
haha-entity/src/main/java/com/haha/entity/dto/AdminQueryDTO.java

@@ -0,0 +1,32 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 管理员分页查询DTO
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AdminQueryDTO extends PageQueryDTO {
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 手机号
+     */
+    private String phone;
+
+    /**
+     * 角色ID
+     */
+    private Long roleId;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+}

+ 27 - 0
haha-entity/src/main/java/com/haha/entity/dto/AnnouncementQueryDTO.java

@@ -0,0 +1,27 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 公告分页查询DTO
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AnnouncementQueryDTO extends PageQueryDTO {
+
+    /**
+     * 公告标题(模糊查询)
+     */
+    private String title;
+
+    /**
+     * 公告类型
+     */
+    private Integer type;
+
+    /**
+     * 公告状态
+     */
+    private Integer status;
+}

+ 15 - 0
haha-entity/src/main/java/com/haha/entity/dto/BatchIdsDTO.java

@@ -0,0 +1,15 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 批量ID操作DTO(通用)
+ */
+@Data
+public class BatchIdsDTO {
+
+    /**
+     * ID列表
+     */
+    private java.util.List<Long> ids;
+}

+ 25 - 0
haha-entity/src/main/java/com/haha/entity/dto/BindInviteDTO.java

@@ -0,0 +1,25 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 绑定邀请关系DTO
+ */
+@Data
+public class BindInviteDTO {
+
+    /**
+     * 邀请码
+     */
+    private String inviteCode;
+
+    /**
+     * 来源渠道
+     */
+    private String sourceChannel;
+
+    /**
+     * 设备信息
+     */
+    private String deviceInfo;
+}

+ 15 - 0
haha-entity/src/main/java/com/haha/entity/dto/CreditScoreDTO.java

@@ -0,0 +1,15 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 信用分更新DTO
+ */
+@Data
+public class CreditScoreDTO {
+
+    /**
+     * 信用分值
+     */
+    private Integer creditScore;
+}

+ 1 - 1
haha-admin/src/main/java/com/haha/admin/dto/DeviceQueryDTO.java → haha-entity/src/main/java/com/haha/entity/dto/DeviceQueryDTO.java

@@ -1,4 +1,4 @@
-package com.haha.admin.dto;
+package com.haha.entity.dto;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 27 - 0
haha-entity/src/main/java/com/haha/entity/dto/DictDataQueryDTO.java

@@ -0,0 +1,27 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 字典数据分页查询DTO
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DictDataQueryDTO extends PageQueryDTO {
+
+    /**
+     * 字典编码
+     */
+    private String dictCode;
+
+    /**
+     * 字典标签
+     */
+    private String itemLabel;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+}

+ 27 - 0
haha-entity/src/main/java/com/haha/entity/dto/DictTypeQueryDTO.java

@@ -0,0 +1,27 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 字典类型分页查询DTO
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DictTypeQueryDTO extends PageQueryDTO {
+
+    /**
+     * 字典编码
+     */
+    private String dictCode;
+
+    /**
+     * 字典名称
+     */
+    private String dictName;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+}

+ 15 - 0
haha-entity/src/main/java/com/haha/entity/dto/DoorOpenDTO.java

@@ -0,0 +1,15 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 设备开门DTO
+ */
+@Data
+public class DoorOpenDTO {
+
+    /**
+     * 门编号(如 A、B)
+     */
+    private String doorIndex = "A";
+}

+ 1 - 1
haha-admin/src/main/java/com/haha/admin/dto/LayerTemplateQueryDTO.java → haha-entity/src/main/java/com/haha/entity/dto/LayerTemplateQueryDTO.java

@@ -1,4 +1,4 @@
-package com.haha.admin.dto;
+package com.haha.entity.dto;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 15 - 0
haha-entity/src/main/java/com/haha/entity/dto/LinkDeviceDTO.java

@@ -0,0 +1,15 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 关联设备DTO
+ */
+@Data
+public class LinkDeviceDTO {
+
+    /**
+     * 设备ID
+     */
+    private Long deviceId;
+}

+ 15 - 0
haha-entity/src/main/java/com/haha/entity/dto/MiniappOrderQueryDTO.java

@@ -0,0 +1,15 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 小程序订单列表查询DTO
+ */
+@Data
+public class MiniappOrderQueryDTO {
+
+    /**
+     * 订单状态(可选)
+     */
+    private Integer status;
+}

+ 32 - 0
haha-entity/src/main/java/com/haha/entity/dto/NewProductApplyQueryDTO.java

@@ -0,0 +1,32 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 新品申请分页查询DTO
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class NewProductApplyQueryDTO extends PageQueryDTO {
+
+    /**
+     * 条形码(模糊查询)
+     */
+    private String barcode;
+
+    /**
+     * 商品名称(模糊查询)
+     */
+    private String name;
+
+    /**
+     * 申请状态
+     */
+    private Integer status;
+
+    /**
+     * 商品分类
+     */
+    private String category;
+}

+ 17 - 0
haha-entity/src/main/java/com/haha/entity/dto/OrderCancelDTO.java

@@ -0,0 +1,17 @@
+package com.haha.entity.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * 小程序取消订单DTO
+ */
+@Data
+public class OrderCancelDTO {
+
+    /**
+     * 订单ID
+     */
+    @NotNull(message = "订单ID不能为空")
+    private Long orderId;
+}

+ 25 - 0
haha-entity/src/main/java/com/haha/entity/dto/OrderDetailDTO.java

@@ -0,0 +1,25 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 小程序订单详情查询DTO
+ */
+@Data
+public class OrderDetailDTO {
+
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+
+    /**
+     * 订单号
+     */
+    private String orderNo;
+
+    /**
+     * 商户订单号
+     */
+    private String outTradeNo;
+}

+ 1 - 1
haha-admin/src/main/java/com/haha/admin/dto/OrderQueryDTO.java → haha-entity/src/main/java/com/haha/entity/dto/OrderQueryDTO.java

@@ -1,4 +1,4 @@
-package com.haha.admin.dto;
+package com.haha.entity.dto;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 20 - 0
haha-entity/src/main/java/com/haha/entity/dto/PhoneLoginDTO.java

@@ -0,0 +1,20 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 微信小程序手机号登录DTO
+ */
+@Data
+public class PhoneLoginDTO {
+
+    /**
+     * 登录凭证(用于获取openid)
+     */
+    private String code;
+
+    /**
+     * 手机号凭证(用于获取手机号)
+     */
+    private String phoneCode;
+}

+ 1 - 1
haha-admin/src/main/java/com/haha/admin/dto/ProductQueryDTO.java → haha-entity/src/main/java/com/haha/entity/dto/ProductQueryDTO.java

@@ -1,4 +1,4 @@
-package com.haha.admin.dto;
+package com.haha.entity.dto;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 15 - 0
haha-entity/src/main/java/com/haha/entity/dto/RefundDTO.java

@@ -0,0 +1,15 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 订单退款DTO
+ */
+@Data
+public class RefundDTO {
+
+    /**
+     * 退款原因
+     */
+    private String reason;
+}

+ 20 - 0
haha-entity/src/main/java/com/haha/entity/dto/ResetPasswordDTO.java

@@ -0,0 +1,20 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 重置密码DTO
+ */
+@Data
+public class ResetPasswordDTO {
+
+    /**
+     * 管理员ID
+     */
+    private Long id;
+
+    /**
+     * 新密码
+     */
+    private String newPassword;
+}

+ 22 - 0
haha-entity/src/main/java/com/haha/entity/dto/RoleQueryDTO.java

@@ -0,0 +1,22 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 角色分页查询DTO
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class RoleQueryDTO extends PageQueryDTO {
+
+    /**
+     * 角色名称
+     */
+    private String name;
+
+    /**
+     * 角色编码
+     */
+    private String code;
+}

+ 15 - 0
haha-entity/src/main/java/com/haha/entity/dto/ScanOpenDTO.java

@@ -0,0 +1,15 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 小程序扫码开门DTO
+ */
+@Data
+public class ScanOpenDTO {
+
+    /**
+     * 设备ID(SN号)
+     */
+    private String deviceId;
+}

+ 1 - 1
haha-admin/src/main/java/com/haha/admin/dto/ShopQueryDTO.java → haha-entity/src/main/java/com/haha/entity/dto/ShopQueryDTO.java

@@ -1,4 +1,4 @@
-package com.haha.admin.dto;
+package com.haha.entity.dto;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 15 - 0
haha-entity/src/main/java/com/haha/entity/dto/StatusDTO.java

@@ -0,0 +1,15 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 状态更新DTO(通用)
+ */
+@Data
+public class StatusDTO {
+
+    /**
+     * 状态值
+     */
+    private Integer status;
+}

+ 17 - 0
haha-entity/src/main/java/com/haha/entity/dto/TemperatureDTO.java

@@ -0,0 +1,17 @@
+package com.haha.entity.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * 设备温度设置DTO
+ */
+@Data
+public class TemperatureDTO {
+
+    /**
+     * 温度值
+     */
+    @NotNull(message = "温度不能为空")
+    private Double temperature;
+}

+ 22 - 0
haha-entity/src/main/java/com/haha/entity/dto/UserQueryDTO.java

@@ -0,0 +1,22 @@
+package com.haha.entity.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 客户分页查询DTO
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class UserQueryDTO extends PageQueryDTO {
+
+    /**
+     * 关键字(昵称或手机号模糊查询)
+     */
+    private String keyword;
+
+    /**
+     * 客户状态
+     */
+    private Integer status;
+}

+ 17 - 0
haha-entity/src/main/java/com/haha/entity/dto/VolumeDTO.java

@@ -0,0 +1,17 @@
+package com.haha.entity.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * 设备音量设置DTO
+ */
+@Data
+public class VolumeDTO {
+
+    /**
+     * 音量值
+     */
+    @NotNull(message = "音量不能为空")
+    private Integer volume;
+}

+ 4 - 3
haha-miniapp/src/main/java/com/haha/miniapp/controller/DeviceController.java

@@ -4,6 +4,7 @@ import cn.dev33.satoken.stp.StpUtil;
 import com.haha.common.constant.ResponseEnum;
 import com.haha.common.vo.OpenDoorVO;
 import com.haha.common.vo.Result;
+import com.haha.entity.dto.ScanOpenDTO;
 import com.haha.service.DeviceService;
 import com.haha.service.LayerTemplateService;
 import com.haha.sdk.exception.HahaException;
@@ -29,13 +30,13 @@ public class DeviceController {
     /**
      * 处理小程序扫码开门
      *
-     * @param params 包含 deviceId(设备ID)
+     * @param dto 包含 deviceId(设备ID)
      * @return 操作结果
      */
     @PostMapping("/scan-open")
-    public Result<OpenDoorVO> scanOpen(@RequestBody Map<String, String> params) {
+    public Result<OpenDoorVO> scanOpen(@RequestBody ScanOpenDTO dto) {
         // 1. 参数校验
-        String deviceId = params.get("deviceId");
+        String deviceId = dto.getDeviceId();
         if (deviceId == null || deviceId.trim().isEmpty()) {
             return ResponseEnum.PARAM_REQUIRED.toResult("参数错误:deviceId 不能为空");
         }

+ 6 - 5
haha-miniapp/src/main/java/com/haha/miniapp/controller/InviteController.java

@@ -6,6 +6,7 @@ import com.haha.common.vo.PageResult;
 import com.haha.common.vo.Result;
 import com.haha.entity.InviteActivity;
 import com.haha.entity.InviteRecord;
+import com.haha.entity.dto.BindInviteDTO;
 import com.haha.service.InviteActivityService;
 import cn.dev33.satoken.stp.StpUtil;
 import lombok.RequiredArgsConstructor;
@@ -40,16 +41,16 @@ public class InviteController {
     }
 
     @PostMapping("/bind")
-    public Result<Boolean> bindInviteRelation(@RequestBody Map<String, Object> params) {
+    public Result<Boolean> bindInviteRelation(@RequestBody BindInviteDTO dto) {
         Long userId = StpUtil.getLoginIdAsLong();
 
-        if (!params.containsKey("inviteCode")) {
+        if (dto.getInviteCode() == null || dto.getInviteCode().isEmpty()) {
             return ResponseEnum.PARAM_REQUIRED.toResult("参数错误:inviteCode 不能为空");
         }
 
-        String inviteCode = params.get("inviteCode").toString();
-        String sourceChannel = params.containsKey("sourceChannel") ? params.get("sourceChannel").toString() : "";
-        String deviceInfo = params.containsKey("deviceInfo") ? params.get("deviceInfo").toString() : "";
+        String inviteCode = dto.getInviteCode();
+        String sourceChannel = dto.getSourceChannel() != null ? dto.getSourceChannel() : "";
+        String deviceInfo = dto.getDeviceInfo() != null ? dto.getDeviceInfo() : "";
 
         log.info("[邀请] 绑定邀请关系 - userId: {}, inviteCode: {}, sourceChannel: {}",
                 userId, inviteCode, sourceChannel);

+ 16 - 29
haha-miniapp/src/main/java/com/haha/miniapp/controller/LoginController.java

@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaIgnore;
 import cn.dev33.satoken.stp.StpUtil;
 import com.haha.common.constant.ResponseEnum;
 import com.haha.common.vo.Result;
+import com.haha.entity.dto.PhoneLoginDTO;
 import com.haha.service.LoginService;
 import com.haha.common.vo.LoginVO;
 import lombok.RequiredArgsConstructor;
@@ -23,20 +24,20 @@ import java.util.Map;
 public class LoginController {
 
     private final LoginService loginService;
-    
+
     /**
      * 微信小程序手机号快速登录
      * 使用button open-type="getPhoneNumber"获取手机号
      */
     @PostMapping("/miniapp-phone")
-    public Result<LoginVO> miniappPhoneLogin(@RequestBody Map<String, String> params) {
-        String code = params.get("code");         // 用于获取openid
-        String phoneCode = params.get("phoneCode"); // 用于获取手机号
-        
-        log.info("[登录] 微信小程序手机号快速登录请求 - code: {}, hasPhoneCode: {}", 
+    public Result<LoginVO> miniappPhoneLogin(@RequestBody PhoneLoginDTO dto) {
+        String code = dto.getCode();         // 用于获取openid
+        String phoneCode = dto.getPhoneCode(); // 用于获取手机号
+
+        log.info("[登录] 微信小程序手机号快速登录请求 - code: {}, hasPhoneCode: {}",
                 code != null ? code.substring(0, Math.min(8, code.length())) + "..." : "null",
                 phoneCode != null);
-        
+
         if (code == null || code.isEmpty()) {
             log.warn("[登录] 微信小程序手机号登录失败 - code为空");
             return ResponseEnum.PARAM_REQUIRED.toResult("登录凭证不能为空");
@@ -45,48 +46,34 @@ public class LoginController {
             log.warn("[登录] 微信小程序手机号登录失败 - phoneCode为空");
             return ResponseEnum.PARAM_REQUIRED.toResult("手机号凭证不能为空");
         }
-        
+
         try {
             Result<LoginVO> result = loginService.wechatMiniappPhoneLogin(code, phoneCode);
             return result;
         } catch (Exception e) {
             log.error("[登录] 登录异常", e);
-            return Result.error(500, "登录异常:" + e.getMessage());
+            return Result.error("登录异常:" + e.getMessage());
         }
     }
-    
-    /**
-     * 测试接口:检查微信配置是否正确
-     */
-    @PostMapping("/test-wechat-config")
-    public Result<Map<String, Object>> testWechatConfig() {
-        try {
-            log.info("[登录] 测试微信配置");
-            // 这里可以添加测试逻辑,比如尝试获取access_token
-            return Result.success("配置检查完成", null);
-        } catch (Exception e) {
-            log.error("[登录] 测试微信配置异常", e);
-            return Result.error(500, "配置检查失败:" + e.getMessage());
-        }
-    }
-    
+
+
     @PostMapping("/logout")
     public Result<Void> logout() {
         try {
             Object userId = StpUtil.getLoginIdDefaultNull();
             log.info("[登录] 用户退出登录 - userId: {}", userId);
             StpUtil.logout();
-            return Result.success("退出登录成功", null);
+            return Result.success("退出登录成功");
         } catch (Exception e) {
             log.error("[登录] 退出登录异常", e);
-            return Result.success("退出登录成功", null);
+            return Result.success("退出登录成功");
         }
     }
-    
+
     @PostMapping("/user-info")
     public Result<Map<String, Object>> getUserInfo() {
         Object userId = StpUtil.getLoginId();
         log.debug("[登录] 获取用户信息 - userId: {}", userId);
         return loginService.getUserInfo(userId.toString());
     }
-}
+}

+ 11 - 7
haha-miniapp/src/main/java/com/haha/miniapp/controller/OrderController.java

@@ -3,6 +3,9 @@ package com.haha.miniapp.controller;
 import cn.dev33.satoken.stp.StpUtil;
 import com.haha.common.constant.ResponseEnum;
 import com.haha.common.vo.Result;
+import com.haha.entity.dto.MiniappOrderQueryDTO;
+import com.haha.entity.dto.OrderDetailDTO;
+import com.haha.entity.dto.OrderCancelDTO;
 import com.haha.service.OrderService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -26,10 +29,11 @@ public class OrderController {
      * 获取订单列表
      */
     @PostMapping("/list")
-    public Result<List<Map<String, Object>>> getOrderList(@RequestBody(required = false) Map<String, Object> params) {
+    public Result<List<Map<String, Object>>> getOrderList(@RequestBody(required = false) MiniappOrderQueryDTO queryDTO) {
         Long userId = StpUtil.getLoginIdAsLong();
-        log.info("用户 {} 请求订单列表", userId);
-        List<Map<String, Object>> orderList = orderService.getUserOrderListWithProducts(userId, params);
+        Integer status = queryDTO != null ? queryDTO.getStatus() : null;
+        log.info("用户 {} 请求订单列表, status={}", userId, status);
+        List<Map<String, Object>> orderList = orderService.getUserOrderListWithProducts(userId, status);
         log.info("用户 {} 查询到 {} 条订单", userId, orderList.size());
         return Result.success("查询成功", orderList);
     }
@@ -38,9 +42,9 @@ public class OrderController {
      * 获取订单详情
      */
     @PostMapping("/detail")
-    public Result<Map<String, Object>> getOrderDetail(@RequestBody Map<String, Object> params) {
+    public Result<Map<String, Object>> getOrderDetail(@RequestBody OrderDetailDTO dto) {
         Long userId = StpUtil.getLoginIdAsLong();
-        Map<String, Object> orderDetail = orderService.getUserOrderDetail(userId, params);
+        Map<String, Object> orderDetail = orderService.getUserOrderDetail(userId, dto.getOrderId(), dto.getOrderNo(), dto.getOutTradeNo());
         if (orderDetail == null) {
             return ResponseEnum.PARAM_REQUIRED.toResult("参数错误:必须提供 orderId、orderNo 或 outTradeNo");
         }
@@ -52,9 +56,9 @@ public class OrderController {
      * 取消订单
      */
     @PostMapping("/cancel")
-    public Result<Void> cancelOrder(@RequestBody Map<String, Object> params) {
+    public Result<Void> cancelOrder(@RequestBody OrderCancelDTO dto) {
         Long userId = StpUtil.getLoginIdAsLong();
-        boolean success = orderService.cancelUserOrder(userId, params);
+        boolean success = orderService.cancelUserOrder(userId, dto.getOrderId());
         if (success) {
             log.info("用户 {} 取消订单成功", userId);
             return Result.success("订单已取消", null);

+ 3 - 3
haha-service/src/main/java/com/haha/service/AnnouncementService.java

@@ -2,10 +2,10 @@ package com.haha.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.haha.entity.dto.AnnouncementQueryDTO;
 import com.haha.entity.Announcement;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 系统公告服务接口
@@ -17,10 +17,10 @@ public interface AnnouncementService extends IService<Announcement> {
      *
      * @param page     页码
      * @param pageSize 每页条数
-     * @param params   查询参数
+     * @param queryDTO 查询条件
      * @return 分页结果
      */
-    IPage<Announcement> getPage(int page, int pageSize, Map<String, Object> params);
+    IPage<Announcement> getPage(int page, int pageSize, AnnouncementQueryDTO queryDTO);
 
     /**
      * 发布公告

+ 4 - 2
haha-service/src/main/java/com/haha/service/DictService.java

@@ -1,6 +1,8 @@
 package com.haha.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.haha.entity.dto.DictDataQueryDTO;
+import com.haha.entity.dto.DictTypeQueryDTO;
 import com.haha.entity.DictData;
 import com.haha.entity.DictType;
 
@@ -12,7 +14,7 @@ import java.util.Map;
  */
 public interface DictService extends IService<DictType> {
 
-    Map<String, Object> getDictTypeList(Map<String, Object> params);
+    Map<String, Object> getDictTypeList(DictTypeQueryDTO queryDTO);
 
     DictType getDictTypeById(Long id);
 
@@ -28,7 +30,7 @@ public interface DictService extends IService<DictType> {
 
     List<DictData> getDictDataList(String dictCode);
 
-    Map<String, Object> getDictDataPage(Map<String, Object> params);
+    Map<String, Object> getDictDataPage(DictDataQueryDTO queryDTO);
 
     DictData getDictDataById(Long id);
 

+ 2 - 1
haha-service/src/main/java/com/haha/service/NewProductApplyService.java

@@ -2,6 +2,7 @@ package com.haha.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.haha.entity.dto.NewProductApplyQueryDTO;
 import com.haha.entity.NewProductApply;
 
 import java.util.Map;
@@ -19,7 +20,7 @@ public interface NewProductApplyService extends IService<NewProductApply> {
      * @param params   查询参数
      * @return 分页结果
      */
-    IPage<NewProductApply> getPage(int page, int pageSize, Map<String, Object> params);
+    IPage<NewProductApply> getPage(int page, int pageSize, NewProductApplyQueryDTO queryDTO);
 
     /**
      * 提交新品申请

+ 2 - 1
haha-service/src/main/java/com/haha/service/UserService.java

@@ -2,6 +2,7 @@ package com.haha.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.haha.entity.dto.UserQueryDTO;
 import com.haha.entity.User;
 import java.math.BigDecimal;
 import java.util.List;
@@ -16,7 +17,7 @@ public interface UserService extends IService<User> {
     /**
      * 分页查询客户列表
      */
-    IPage<User> getPage(int page, int pageSize, Map<String, Object> params);
+    IPage<User> getPage(int page, int pageSize, UserQueryDTO queryDTO);
     
     /**
      * 获取客户统计信息

+ 8 - 12
haha-service/src/main/java/com/haha/service/impl/AnnouncementServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.haha.entity.dto.AnnouncementQueryDTO;
 import com.haha.entity.Announcement;
 import com.haha.mapper.AnnouncementMapper;
 import com.haha.service.AnnouncementService;
@@ -14,9 +15,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
 import java.time.LocalDateTime;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 系统公告服务实现类
@@ -41,25 +40,22 @@ public class AnnouncementServiceImpl extends ServiceImpl<AnnouncementMapper, Ann
     public static final int STATUS_OFFLINE = 2;   // 已下线
 
     @Override
-    public IPage<Announcement> getPage(int page, int pageSize, Map<String, Object> params) {
+    public IPage<Announcement> getPage(int page, int pageSize, AnnouncementQueryDTO queryDTO) {
         LambdaQueryWrapper<Announcement> wrapper = new LambdaQueryWrapper<>();
 
         // 标题搜索
-        String title = (String) params.get("title");
-        if (StringUtils.hasText(title)) {
-            wrapper.like(Announcement::getTitle, title);
+        if (StringUtils.hasText(queryDTO.getTitle())) {
+            wrapper.like(Announcement::getTitle, queryDTO.getTitle());
         }
 
         // 类型筛选
-        Object typeObj = params.get("type");
-        if (typeObj != null && !typeObj.toString().isEmpty()) {
-            wrapper.eq(Announcement::getType, Integer.valueOf(typeObj.toString()));
+        if (queryDTO.getType() != null) {
+            wrapper.eq(Announcement::getType, queryDTO.getType());
         }
 
         // 状态筛选
-        Object statusObj = params.get("status");
-        if (statusObj != null && !statusObj.toString().isEmpty()) {
-            wrapper.eq(Announcement::getStatus, Integer.valueOf(statusObj.toString()));
+        if (queryDTO.getStatus() != null) {
+            wrapper.eq(Announcement::getStatus, queryDTO.getStatus());
         }
 
         // 按置顶和创建时间倒序

+ 14 - 14
haha-service/src/main/java/com/haha/service/impl/DictServiceImpl.java

@@ -8,6 +8,8 @@ import com.haha.common.constant.ResponseEnum;
 import com.haha.common.constant.RedisConstants;
 import com.haha.common.exception.BusinessException;
 import com.haha.common.utils.PageUtil;
+import com.haha.entity.dto.DictDataQueryDTO;
+import com.haha.entity.dto.DictTypeQueryDTO;
 import com.haha.entity.DictData;
 import com.haha.entity.DictLog;
 import com.haha.entity.DictType;
@@ -41,13 +43,12 @@ public class DictServiceImpl extends ServiceImpl<DictTypeMapper, DictType> imple
     private final StringRedisTemplate redisTemplate;
 
     @Override
-    public Map<String, Object> getDictTypeList(Map<String, Object> params) {
-        int[] pageParams = PageUtil.parsePageParams(params);
-        int page = pageParams[0];
-        int pageSize = pageParams[1];
-        String dictCode = (String) params.get("dictCode");
-        String dictName = (String) params.get("dictName");
-        Integer status = params.get("status") != null ? Integer.parseInt(params.get("status").toString()) : null;
+    public Map<String, Object> getDictTypeList(DictTypeQueryDTO queryDTO) {
+        int page = queryDTO.getPage();
+        int pageSize = queryDTO.getPageSize();
+        String dictCode = queryDTO.getDictCode();
+        String dictName = queryDTO.getDictName();
+        Integer status = queryDTO.getStatus();
 
         LambdaQueryWrapper<DictType> wrapper = new LambdaQueryWrapper<>();
         if (StringUtils.hasText(dictCode)) {
@@ -149,13 +150,12 @@ public class DictServiceImpl extends ServiceImpl<DictTypeMapper, DictType> imple
     }
 
     @Override
-    public Map<String, Object> getDictDataPage(Map<String, Object> params) {
-        int[] pageParams = PageUtil.parsePageParams(params);
-        int page = pageParams[0];
-        int pageSize = pageParams[1];
-        String dictCode = (String) params.get("dictCode");
-        String itemLabel = (String) params.get("itemLabel");
-        Integer status = params.get("status") != null ? Integer.parseInt(params.get("status").toString()) : null;
+    public Map<String, Object> getDictDataPage(DictDataQueryDTO queryDTO) {
+        int page = queryDTO.getPage();
+        int pageSize = queryDTO.getPageSize();
+        String dictCode = queryDTO.getDictCode();
+        String itemLabel = queryDTO.getItemLabel();
+        Integer status = queryDTO.getStatus();
 
         LambdaQueryWrapper<DictData> wrapper = new LambdaQueryWrapper<>();
         if (StringUtils.hasText(dictCode)) {

+ 10 - 13
haha-service/src/main/java/com/haha/service/impl/NewProductApplyServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.haha.entity.dto.NewProductApplyQueryDTO;
 import com.haha.common.enums.ApplyStatus;
 import com.haha.common.exception.BusinessException;
 import com.haha.entity.NewProductApply;
@@ -34,31 +35,27 @@ public class NewProductApplyServiceImpl extends ServiceImpl<NewProductApplyMappe
     private final HahaClient hahaClient;
 
     @Override
-    public IPage<NewProductApply> getPage(int page, int pageSize, Map<String, Object> params) {
+    public IPage<NewProductApply> getPage(int page, int pageSize, NewProductApplyQueryDTO queryDTO) {
         LambdaQueryWrapper<NewProductApply> wrapper = new LambdaQueryWrapper<>();
         
         // 条形码模糊查询
-        Object barcode = params.get("barcode");
-        if (barcode != null && StringUtils.hasText(barcode.toString())) {
-            wrapper.like(NewProductApply::getBarcode, barcode.toString());
+        if (StringUtils.hasText(queryDTO.getBarcode())) {
+            wrapper.like(NewProductApply::getBarcode, queryDTO.getBarcode());
         }
         
         // 商品名称模糊查询
-        Object name = params.get("name");
-        if (name != null && StringUtils.hasText(name.toString())) {
-            wrapper.like(NewProductApply::getName, name.toString());
+        if (StringUtils.hasText(queryDTO.getName())) {
+            wrapper.like(NewProductApply::getName, queryDTO.getName());
         }
         
         // 状态筛选
-        Object status = params.get("status");
-        if (status != null && StringUtils.hasText(status.toString())) {
-            wrapper.eq(NewProductApply::getStatus, Integer.parseInt(status.toString()));
+        if (queryDTO.getStatus() != null) {
+            wrapper.eq(NewProductApply::getStatus, queryDTO.getStatus());
         }
         
         // 分类筛选
-        Object category = params.get("category");
-        if (category != null && StringUtils.hasText(category.toString())) {
-            wrapper.eq(NewProductApply::getCategory, category.toString());
+        if (StringUtils.hasText(queryDTO.getCategory())) {
+            wrapper.eq(NewProductApply::getCategory, queryDTO.getCategory());
         }
         
         // 按创建时间倒序

+ 8 - 9
haha-service/src/main/java/com/haha/service/impl/UserServiceImpl.java

@@ -4,11 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.haha.entity.dto.UserQueryDTO;
 import com.haha.common.enums.UserTag;
 import com.haha.entity.User;
 import com.haha.mapper.UserMapper;
-import com.haha.service.UserService;
 import com.haha.service.AccountService;
+import com.haha.service.UserService;
 import com.haha.service.UserTagService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -51,23 +52,21 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     }
 
     @Override
-    public IPage<User> getPage(int page, int pageSize, Map<String, Object> params) {
+    public IPage<User> getPage(int page, int pageSize, UserQueryDTO queryDTO) {
         LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
         
         // 昵称或手机号搜索
-        String keyword = (String) params.get("keyword");
-        if (StringUtils.hasText(keyword)) {
+        if (StringUtils.hasText(queryDTO.getKeyword())) {
             wrapper.and(w -> w
-                .like(User::getNickname, keyword)
+                .like(User::getNickname, queryDTO.getKeyword())
                 .or()
-                .like(User::getPhone, keyword)
+                .like(User::getPhone, queryDTO.getKeyword())
             );
         }
         
         // 状态筛选
-        Object statusObj = params.get("status");
-        if (statusObj != null && !statusObj.toString().isEmpty()) {
-            wrapper.eq(User::getStatus, Integer.valueOf(statusObj.toString()));
+        if (queryDTO.getStatus() != null) {
+            wrapper.eq(User::getStatus, queryDTO.getStatus());
         }
         
         // 按创建时间倒序