skyline 1 сар өмнө
parent
commit
2ffcc7b4c2
82 өөрчлөгдсөн 606 нэмэгдсэн , 185 устгасан
  1. 3 2
      haha-admin/src/main/java/com/haha/admin/controller/AdminController.java
  2. 2 3
      haha-admin/src/main/java/com/haha/admin/controller/AdminLoginController.java
  3. 3 2
      haha-admin/src/main/java/com/haha/admin/controller/DeviceController.java
  4. 3 2
      haha-admin/src/main/java/com/haha/admin/controller/OrderController.java
  5. 19 8
      haha-admin/src/main/java/com/haha/admin/controller/ReplenisherController.java
  6. 20 14
      haha-admin/src/main/java/com/haha/admin/controller/ShopController.java
  7. 2 3
      haha-admin/src/main/java/com/haha/admin/service/AdminLoginService.java
  8. 14 12
      haha-admin/src/main/java/com/haha/admin/service/impl/AdminLoginServiceImpl.java
  9. 3 16
      haha-admin/src/main/resources/application.yml
  10. 27 0
      haha-common/src/main/java/com/haha/common/vo/AdminInfoVO.java
  11. 20 0
      haha-common/src/main/java/com/haha/common/vo/AdminStatisticsVO.java
  12. 18 0
      haha-common/src/main/java/com/haha/common/vo/BatchResultVO.java
  13. 18 0
      haha-common/src/main/java/com/haha/common/vo/BindingCodeVO.java
  14. 22 0
      haha-common/src/main/java/com/haha/common/vo/DeviceStatisticsVO.java
  15. 23 0
      haha-common/src/main/java/com/haha/common/vo/OrderStatisticsVO.java
  16. 23 0
      haha-common/src/main/java/com/haha/common/vo/ShopDeviceVO.java
  17. 21 0
      haha-common/src/main/java/com/haha/common/vo/ShopSelectVO.java
  18. 21 0
      haha-common/src/main/java/com/haha/common/vo/ShopStatisticsVO.java
  19. 4 0
      haha-entity/src/main/java/com/haha/entity/Account.java
  20. 4 0
      haha-entity/src/main/java/com/haha/entity/ActivityDevice.java
  21. 5 0
      haha-entity/src/main/java/com/haha/entity/ActivityProduct.java
  22. 5 0
      haha-entity/src/main/java/com/haha/entity/ActivityShop.java
  23. 3 0
      haha-entity/src/main/java/com/haha/entity/Admin.java
  24. 4 0
      haha-entity/src/main/java/com/haha/entity/Announcement.java
  25. 5 0
      haha-entity/src/main/java/com/haha/entity/CheckinRecord.java
  26. 5 0
      haha-entity/src/main/java/com/haha/entity/CouponDistribute.java
  27. 5 0
      haha-entity/src/main/java/com/haha/entity/CouponProduct.java
  28. 5 0
      haha-entity/src/main/java/com/haha/entity/CouponShop.java
  29. 5 0
      haha-entity/src/main/java/com/haha/entity/CouponTemplate.java
  30. 3 0
      haha-entity/src/main/java/com/haha/entity/DataPermission.java
  31. 4 0
      haha-entity/src/main/java/com/haha/entity/Device.java
  32. 4 0
      haha-entity/src/main/java/com/haha/entity/DeviceAlertRecord.java
  33. 4 0
      haha-entity/src/main/java/com/haha/entity/DictData.java
  34. 4 0
      haha-entity/src/main/java/com/haha/entity/DictLog.java
  35. 3 0
      haha-entity/src/main/java/com/haha/entity/DictType.java
  36. 5 0
      haha-entity/src/main/java/com/haha/entity/DoorRecord.java
  37. 4 0
      haha-entity/src/main/java/com/haha/entity/FundLog.java
  38. 6 0
      haha-entity/src/main/java/com/haha/entity/InviteActivity.java
  39. 6 0
      haha-entity/src/main/java/com/haha/entity/InviteRecord.java
  40. 9 0
      haha-entity/src/main/java/com/haha/entity/InviteReward.java
  41. 3 0
      haha-entity/src/main/java/com/haha/entity/LayerTemplate.java
  42. 4 0
      haha-entity/src/main/java/com/haha/entity/MarketingActivity.java
  43. 4 0
      haha-entity/src/main/java/com/haha/entity/MarketingStatistics.java
  44. 4 0
      haha-entity/src/main/java/com/haha/entity/NewProductApply.java
  45. 4 0
      haha-entity/src/main/java/com/haha/entity/OperationLog.java
  46. 5 0
      haha-entity/src/main/java/com/haha/entity/Order.java
  47. 6 0
      haha-entity/src/main/java/com/haha/entity/OrderGoods.java
  48. 7 0
      haha-entity/src/main/java/com/haha/entity/OrderItem.java
  49. 7 0
      haha-entity/src/main/java/com/haha/entity/PriceAdjustmentLog.java
  50. 3 0
      haha-entity/src/main/java/com/haha/entity/Product.java
  51. 3 0
      haha-entity/src/main/java/com/haha/entity/Role.java
  52. 5 0
      haha-entity/src/main/java/com/haha/entity/RolePermission.java
  53. 3 0
      haha-entity/src/main/java/com/haha/entity/Shop.java
  54. 4 0
      haha-entity/src/main/java/com/haha/entity/StatCategoryDaily.java
  55. 4 0
      haha-entity/src/main/java/com/haha/entity/StatDeviceDaily.java
  56. 5 0
      haha-entity/src/main/java/com/haha/entity/StatProductDaily.java
  57. 4 0
      haha-entity/src/main/java/com/haha/entity/StatShopDaily.java
  58. 5 0
      haha-entity/src/main/java/com/haha/entity/StatUserRepurchase.java
  59. 5 0
      haha-entity/src/main/java/com/haha/entity/StockRecordItem.java
  60. 3 0
      haha-entity/src/main/java/com/haha/entity/Stocker.java
  61. 4 0
      haha-entity/src/main/java/com/haha/entity/SyncLog.java
  62. 4 0
      haha-entity/src/main/java/com/haha/entity/SyncRecord.java
  63. 4 0
      haha-entity/src/main/java/com/haha/entity/TimedDiscountActivity.java
  64. 4 0
      haha-entity/src/main/java/com/haha/entity/TimedDiscountDevice.java
  65. 5 0
      haha-entity/src/main/java/com/haha/entity/TimedDiscountProduct.java
  66. 5 0
      haha-entity/src/main/java/com/haha/entity/TimedDiscountRecord.java
  67. 5 0
      haha-entity/src/main/java/com/haha/entity/TimedDiscountShop.java
  68. 5 0
      haha-entity/src/main/java/com/haha/entity/TimedDiscountStatistics.java
  69. 3 0
      haha-entity/src/main/java/com/haha/entity/User.java
  70. 6 0
      haha-entity/src/main/java/com/haha/entity/UserCoupon.java
  71. 3 16
      haha-miniapp/src/main/resources/application.yml
  72. 6 5
      haha-mp/src/utils/config.ts
  73. 2 2
      haha-service/src/main/java/com/haha/service/AdminService.java
  74. 2 1
      haha-service/src/main/java/com/haha/service/DeviceService.java
  75. 2 1
      haha-service/src/main/java/com/haha/service/OrderService.java
  76. 6 3
      haha-service/src/main/java/com/haha/service/ShopService.java
  77. 8 8
      haha-service/src/main/java/com/haha/service/impl/AdminServiceImpl.java
  78. 20 6
      haha-service/src/main/java/com/haha/service/impl/DashboardServiceImpl.java
  79. 12 13
      haha-service/src/main/java/com/haha/service/impl/DeviceServiceImpl.java
  80. 11 16
      haha-service/src/main/java/com/haha/service/impl/OrderServiceImpl.java
  81. 1 26
      haha-service/src/main/java/com/haha/service/impl/ProductServiceImpl.java
  82. 36 26
      haha-service/src/main/java/com/haha/service/impl/ShopServiceImpl.java

+ 3 - 2
haha-admin/src/main/java/com/haha/admin/controller/AdminController.java

@@ -4,13 +4,14 @@ 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.AdminStatisticsVO;
 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 java.util.Map;
+
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
@@ -109,7 +110,7 @@ public class AdminController {
      */
     @RequirePermission("admin:read")
     @GetMapping("/statistics")
-    public Result<Map<String, Object>> statistics() {
+    public Result<AdminStatisticsVO> statistics() {
         return adminService.getStatistics();
     }
 }

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

@@ -6,14 +6,13 @@ import com.haha.entity.dto.AdminLoginDTO;
 import com.haha.admin.service.AdminLoginService;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;
+import com.haha.common.vo.AdminInfoVO;
 import com.haha.common.vo.LoginVO;
 import com.haha.common.vo.Result;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Map;
-
 /**
  * 管理员登录控制器
  */
@@ -61,7 +60,7 @@ public class AdminLoginController {
      * @return 管理员信息
      */
     @GetMapping("/info")
-    public Result<Map<String, Object>> getInfo() {
+    public Result<AdminInfoVO> getInfo() {
         try {
             Object loginId = StpUtil.getLoginId();
             log.debug("获取管理员信息: userId={}", loginId);

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

@@ -17,6 +17,7 @@ import com.haha.service.DeviceService;
 import com.haha.service.DoorRecordService;
 import com.haha.service.LayerTemplateService;
 import com.haha.service.ReplenisherService;
+import com.haha.common.vo.DeviceStatisticsVO;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
@@ -80,8 +81,8 @@ public class DeviceController {
      */
     @RequirePermission("device:read")
     @GetMapping("/statistics")
-    public Result<Map<String, Object>> getStatistics() {
-        Map<String, Object> statistics = deviceService.getStatistics();
+    public Result<DeviceStatisticsVO> getStatistics() {
+        DeviceStatisticsVO statistics = deviceService.getStatistics();
         return Result.success("查询成功", statistics);
     }
 

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

@@ -6,6 +6,7 @@ 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.OrderStatisticsVO;
 import com.haha.common.vo.OrderVO;
 import com.haha.common.vo.PageResult;
 import com.haha.common.vo.Result;
@@ -82,10 +83,10 @@ public class OrderController {
      */
     @RequirePermission("order:read")
     @GetMapping("/statistics")
-    public Result<Map<String, Object>> getStatistics(
+    public Result<OrderStatisticsVO> getStatistics(
             @RequestParam(required = false) String startDate,
             @RequestParam(required = false) String endDate) {
-        Map<String, Object> statistics = orderService.getStatistics(startDate, endDate);
+        OrderStatisticsVO statistics = orderService.getStatistics(startDate, endDate);
         return Result.success("查询成功", statistics);
     }
 

+ 19 - 8
haha-admin/src/main/java/com/haha/admin/controller/ReplenisherController.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.haha.admin.annotation.RequirePermission;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;
+import com.haha.common.vo.BatchResultVO;
+import com.haha.common.vo.BindingCodeVO;
 import com.haha.common.vo.PageResult;
 import com.haha.common.vo.Result;
 import com.haha.entity.Replenisher;
@@ -149,9 +151,13 @@ public class ReplenisherController {
     @RequirePermission("replenisher:update")
     @Log(module = "补货员管理", operation = OperationType.UPDATE, summary = "绑定设备到补货员")
     @PostMapping("/{id}/devices")
-    public Result<Object> bindDevices(@PathVariable Long id, @RequestBody BindDeviceDTO dto) {
+    public Result<BatchResultVO> bindDevices(@PathVariable Long id, @RequestBody BindDeviceDTO dto) {
         int count = replenisherService.bindDevices(id, dto.getDeviceIds());
-        return Result.success("绑定完成", java.util.Map.of("success", count, "total", dto.getDeviceIds().size()));
+        BatchResultVO result = BatchResultVO.builder()
+                .success(count)
+                .total(dto.getDeviceIds().size())
+                .build();
+        return Result.success("绑定完成", result);
     }
 
     /**
@@ -178,10 +184,14 @@ public class ReplenisherController {
     @RequirePermission("replenisher:update")
     @Log(module = "补货员管理", operation = OperationType.UPDATE, summary = "批量绑定补货员到设备")
     @PostMapping("/batch-bind")
-    public Result<Object> batchBind(@RequestBody BatchBindDevicesDTO dto) {
+    public Result<BatchResultVO> batchBind(@RequestBody BatchBindDevicesDTO dto) {
         int count = replenisherService.batchBindDevices(dto.getReplenisherIds(), dto.getDeviceIds());
         int total = dto.getReplenisherIds().size() * dto.getDeviceIds().size();
-        return Result.success("批量绑定完成", java.util.Map.of("success", count, "total", total));
+        BatchResultVO result = BatchResultVO.builder()
+                .success(count)
+                .total(total)
+                .build();
+        return Result.success("批量绑定完成", result);
     }
 
     /**
@@ -194,11 +204,12 @@ public class ReplenisherController {
     @RequirePermission("replenisher:update")
     @Log(module = "补货员管理", operation = OperationType.OTHER, summary = "生成补货员绑定码")
     @PostMapping("/{id}/binding-code")
-    public Result<java.util.Map<String, Object>> generateBindingCode(@PathVariable Long id) {
+    public Result<BindingCodeVO> generateBindingCode(@PathVariable Long id) {
         String bindingCode = replenisherService.generateBindingCode(id);
-        java.util.Map<String, Object> result = new java.util.HashMap<>();
-        result.put("bindingCode", bindingCode);
-        result.put("replenisherId", id.toString());
+        BindingCodeVO result = BindingCodeVO.builder()
+                .bindingCode(bindingCode)
+                .replenisherId(id.toString())
+                .build();
         return Result.success("生成绑定码成功", result);
     }
 }

+ 20 - 14
haha-admin/src/main/java/com/haha/admin/controller/ShopController.java

@@ -10,8 +10,12 @@ import com.haha.entity.dto.BatchIdsDTO;
 import com.haha.common.annotation.Log;
 import com.haha.common.constant.ResponseEnum;
 import com.haha.common.enums.OperationType;
+import com.haha.common.vo.BatchResultVO;
 import com.haha.common.vo.PageResult;
 import com.haha.common.vo.Result;
+import com.haha.common.vo.ShopDeviceVO;
+import com.haha.common.vo.ShopSelectVO;
+import com.haha.common.vo.ShopStatisticsVO;
 import com.haha.entity.Shop;
 import com.haha.entity.Device;
 import com.haha.entity.Replenisher;
@@ -81,8 +85,8 @@ public class ShopController {
      */
     @RequirePermission("shop:read")
     @GetMapping("/statistics")
-    public Result<Map<String, Object>> getStatistics() {
-        Map<String, Object> statistics = shopService.getStatistics();
+    public Result<ShopStatisticsVO> getStatistics() {
+        ShopStatisticsVO statistics = shopService.getStatistics();
         return Result.success("查询成功", statistics);
     }
 
@@ -92,8 +96,8 @@ public class ShopController {
      */
     @RequirePermission("shop:read")
     @GetMapping("/enabled")
-    public Result<List<Map<String, Object>>> getEnabledShops() {
-        List<Map<String, Object>> shops = shopService.getAllEnabledShops();
+    public Result<List<ShopSelectVO>> getEnabledShops() {
+        List<ShopSelectVO> shops = shopService.getAllEnabledShops();
         return Result.success("查询成功", shops);
     }
 
@@ -174,8 +178,8 @@ public class ShopController {
      */
     @RequirePermission("shop:read")
     @GetMapping("/{id}/devices")
-    public Result<List<Map<String, Object>>> getDevices(@PathVariable Long id) {
-        List<Map<String, Object>> devices = shopService.getDevicesByShopId(id);
+    public Result<List<ShopDeviceVO>> getDevices(@PathVariable Long id) {
+        List<ShopDeviceVO> devices = shopService.getDevicesByShopId(id);
         return Result.success("查询成功", devices);
     }
 
@@ -206,12 +210,13 @@ public class ShopController {
     @RequirePermission("shop:update")
     @Log(module = "门店管理", operation = OperationType.UPDATE, summary = "批量关联设备到门店")
     @PostMapping("/{id}/devices/batch")
-    public Result<Map<String, Object>> batchLinkDevices(@PathVariable Long id, @RequestBody BatchIdsDTO dto) {
+    public Result<BatchResultVO> 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", dto.getIds().size());
+        BatchResultVO result = BatchResultVO.builder()
+                .success(count)
+                .total(dto.getIds().size())
+                .build();
         
         return Result.success("批量关联完成", result);
     }
@@ -243,12 +248,13 @@ public class ShopController {
     @RequirePermission("shop:update")
     @Log(module = "门店管理", operation = OperationType.UPDATE, summary = "批量移除设备关联")
     @DeleteMapping("/{id}/devices/batch")
-    public Result<Map<String, Object>> batchUnlinkDevices(@PathVariable Long id, @RequestBody BatchIdsDTO dto) {
+    public Result<BatchResultVO> 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", dto.getIds().size());
+        BatchResultVO result = BatchResultVO.builder()
+                .success(count)
+                .total(dto.getIds().size())
+                .build();
         
         return Result.success("批量移除完成", result);
     }

+ 2 - 3
haha-admin/src/main/java/com/haha/admin/service/AdminLoginService.java

@@ -1,10 +1,9 @@
 package com.haha.admin.service;
 
+import com.haha.common.vo.AdminInfoVO;
 import com.haha.common.vo.LoginVO;
 import com.haha.common.vo.Result;
 
-import java.util.Map;
-
 /**
  * 管理员登录服务接口
  */
@@ -23,5 +22,5 @@ public interface AdminLoginService {
      * @param adminId 管理员ID
      * @return 管理员信息
      */
-    Result<Map<String, Object>> getAdminInfo(String adminId);
+    Result<AdminInfoVO> getAdminInfo(String adminId);
 }

+ 14 - 12
haha-admin/src/main/java/com/haha/admin/service/impl/AdminLoginServiceImpl.java

@@ -3,6 +3,7 @@ package com.haha.admin.service.impl;
 import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.haha.admin.service.AdminLoginService;
+import com.haha.common.vo.AdminInfoVO;
 import com.haha.common.vo.LoginVO;
 import com.haha.common.vo.Result;
 import com.haha.common.vo.UserVO;
@@ -173,7 +174,7 @@ public class AdminLoginServiceImpl implements AdminLoginService {
     }
     
     @Override
-    public Result<Map<String, Object>> getAdminInfo(String adminId) {
+    public Result<AdminInfoVO> getAdminInfo(String adminId) {
         try {
             // 查询管理员信息
             Admin admin = adminMapper.selectById(adminId);
@@ -181,19 +182,20 @@ public class AdminLoginServiceImpl implements AdminLoginService {
                 return Result.error(404, "管理员不存在");
             }
             
-            Map<String, Object> info = new HashMap<>();
-            info.put("id", admin.getId());
-            info.put("username", admin.getUsername());
-            info.put("realName", admin.getRealName());
-            info.put("phone", admin.getPhone());
-            info.put("email", admin.getEmail());
-            info.put("avatar", admin.getAvatar());
-            info.put("department", admin.getDepartment());
-            info.put("roleIds", admin.getRoleIds());
-            
             // 获取用户权限列表
             List<String> permissions = getUserPermissions(admin.getRoleIds());
-            info.put("permissions", permissions);
+            
+            AdminInfoVO info = AdminInfoVO.builder()
+                    .id(admin.getId())
+                    .username(admin.getUsername())
+                    .realName(admin.getRealName())
+                    .phone(admin.getPhone())
+                    .email(admin.getEmail())
+                    .avatar(admin.getAvatar())
+                    .department(admin.getDepartment())
+                    .roleIds(admin.getRoleIds())
+                    .permissions(permissions)
+                    .build();
             
             return Result.success("获取成功", info);
             

+ 3 - 16
haha-admin/src/main/resources/application.yml

@@ -60,19 +60,6 @@ mybatis-plus:
       id-type: ASSIGN_ID
     enable-sql-runner: false
 
-# PageHelper 分页插件配置
-pagehelper:
-  # 指定数据库方言
-  helper-dialect: mysql
-  # 分页合理化参数,默认false。当设置为true时,pageNum<=0时会查询第一页,pageNum>pages(超过总数时),会查询最后一页
-  reasonable: true
-  # 支持通过Mapper接口参数来传递分页参数,默认false
-  support-methods-arguments: true
-  # 为了支持startPage(Object params)方法,增加了一个"params"参数来配置参数映射,用于从Map或ServletRequest中取值
-  params: count=countSql
-  # 总是返回PageInfo类型,默认false
-  return-page-info: check
-
 # 服务器配置
 server:
   port: 7070
@@ -135,6 +122,6 @@ logging:
     root: info
     com.haha.admin: debug
   file:
-    # 日志文件路径(相对于项目启动目录)
-    path: ./logs
-    name: ./logs/haha-admin.log
+    # 日志文件路径(相对于项目启动目录) - 按应用隔离子目录,避免 admin/miniapp 互相覆盖
+    path: ./logs/admin
+    name: ./logs/admin/haha-admin.log

+ 27 - 0
haha-common/src/main/java/com/haha/common/vo/AdminInfoVO.java

@@ -0,0 +1,27 @@
+package com.haha.common.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 管理员信息 VO
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AdminInfoVO {
+    private Long id;
+    private String username;
+    private String realName;
+    private String phone;
+    private String email;
+    private String avatar;
+    private String department;
+    private String roleIds;
+    private List<String> permissions;
+}

+ 20 - 0
haha-common/src/main/java/com/haha/common/vo/AdminStatisticsVO.java

@@ -0,0 +1,20 @@
+package com.haha.common.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 管理员统计 VO
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AdminStatisticsVO {
+    private Long total;
+    private Long active;
+    private Long disabled;
+    private Integer todayLogin;
+}

+ 18 - 0
haha-common/src/main/java/com/haha/common/vo/BatchResultVO.java

@@ -0,0 +1,18 @@
+package com.haha.common.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 批量操作结果 VO
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BatchResultVO {
+    private int success;
+    private int total;
+}

+ 18 - 0
haha-common/src/main/java/com/haha/common/vo/BindingCodeVO.java

@@ -0,0 +1,18 @@
+package com.haha.common.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 绑定码 VO
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BindingCodeVO {
+    private String bindingCode;
+    private String replenisherId;
+}

+ 22 - 0
haha-common/src/main/java/com/haha/common/vo/DeviceStatisticsVO.java

@@ -0,0 +1,22 @@
+package com.haha.common.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 设备统计 VO
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DeviceStatisticsVO {
+    private Long total;
+    private Long online;
+    private Long offline;
+    private String totalSales;
+    private String todaySales;
+    private String avgTemperature;
+}

+ 23 - 0
haha-common/src/main/java/com/haha/common/vo/OrderStatisticsVO.java

@@ -0,0 +1,23 @@
+package com.haha.common.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 订单统计 VO
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OrderStatisticsVO {
+    private Long totalOrders;
+    private Long completedOrders;
+    private Long refundOrders;
+    private String totalAmount;
+    private String wechatAmount;
+    private String alipayAmount;
+    private String otherAmount;
+}

+ 23 - 0
haha-common/src/main/java/com/haha/common/vo/ShopDeviceVO.java

@@ -0,0 +1,23 @@
+package com.haha.common.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 门店设备列表 VO
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ShopDeviceVO {
+    private Long id;
+    private String deviceId;
+    private String name;
+    private Integer status;
+    private LocalDateTime createTime;
+}

+ 21 - 0
haha-common/src/main/java/com/haha/common/vo/ShopSelectVO.java

@@ -0,0 +1,21 @@
+package com.haha.common.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 门店下拉选择 VO
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ShopSelectVO {
+    private Long id;
+    private String name;
+    private String address;
+    private String contactName;
+    private String contactPhone;
+}

+ 21 - 0
haha-common/src/main/java/com/haha/common/vo/ShopStatisticsVO.java

@@ -0,0 +1,21 @@
+package com.haha.common.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 门店统计 VO
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ShopStatisticsVO {
+    private Long total;
+    private Long enabled;
+    private Long disabled;
+    private Long totalDevices;
+    private Long onlineDevices;
+}

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/Account.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -15,8 +17,10 @@ public class Account implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
     private BigDecimal balance;

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/ActivityDevice.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -14,8 +16,10 @@ public class ActivityDevice implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
     private String deviceId;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/ActivityProduct.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -14,10 +16,13 @@ public class ActivityProduct implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long productId;
 
     private LocalDateTime createTime;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/ActivityShop.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -14,10 +16,13 @@ public class ActivityShop implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private LocalDateTime createTime;

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/Admin.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -20,6 +22,7 @@ public class Admin implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/Announcement.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -21,6 +23,7 @@ public class Announcement implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
@@ -68,6 +71,7 @@ public class Announcement implements Serializable {
     /**
      * 发布人ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long publisherId;
 
     /**

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/CheckinRecord.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -19,6 +21,7 @@ public class CheckinRecord implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
@@ -29,6 +32,7 @@ public class CheckinRecord implements Serializable {
     /**
      * 签到用户ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
     /**
@@ -44,6 +48,7 @@ public class CheckinRecord implements Serializable {
     /**
      * 关联门店ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     /**

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/CouponDistribute.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -14,8 +16,10 @@ public class CouponDistribute implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long templateId;
 
     private Integer distributeType;
@@ -26,6 +30,7 @@ public class CouponDistribute implements Serializable {
 
     private Integer successCount;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long operatorId;
 
     private String operatorName;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/CouponProduct.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -14,10 +16,13 @@ public class CouponProduct implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long templateId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long productId;
 
     private LocalDateTime createTime;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/CouponShop.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -14,10 +16,13 @@ public class CouponShop implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long templateId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private LocalDateTime createTime;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/CouponTemplate.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -17,6 +19,7 @@ public class CouponTemplate implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     private String couponName;
@@ -51,12 +54,14 @@ public class CouponTemplate implements Serializable {
 
     private Integer productScope;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
     private Integer status;
 
     private String receiveType; // 发放类型:Collect-主动领取,Release-系统发放
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long creatorId;
 
     private String creatorName;

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/DataPermission.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -19,6 +21,7 @@ public class DataPermission implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/Device.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -15,10 +17,12 @@ public class Device implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     private String deviceId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private String name;

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/DeviceAlertRecord.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -14,6 +16,7 @@ public class DeviceAlertRecord implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
@@ -24,6 +27,7 @@ public class DeviceAlertRecord implements Serializable {
     /**
      * 所属门店ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     /**

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/DictData.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -17,6 +19,7 @@ public class DictData implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     private String dictCode;
@@ -27,6 +30,7 @@ public class DictData implements Serializable {
 
     private String itemDesc;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long parentId;
 
     private String cssClass;

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/DictLog.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -17,6 +19,7 @@ public class DictLog implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     private String dictCode;
@@ -31,6 +34,7 @@ public class DictLog implements Serializable {
 
     private String afterData;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long adminId;
 
     private String adminName;

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/DictType.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -17,6 +19,7 @@ public class DictType implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     private String dictCode;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/DoorRecord.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.time.LocalDateTime;
@@ -21,6 +23,7 @@ public class DoorRecord {
      * 主键 ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
@@ -36,6 +39,7 @@ public class DoorRecord {
     /**
      * 用户 ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
     /**
@@ -61,6 +65,7 @@ public class DoorRecord {
     /**
      * 订单 ID(如果有消费则关联订单)
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long orderId;
 
     /**

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/FundLog.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -15,8 +17,10 @@ public class FundLog implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
     /**

+ 6 - 0
haha-entity/src/main/java/com/haha/entity/InviteActivity.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -17,6 +19,7 @@ public class InviteActivity implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     private String activityName;
@@ -37,12 +40,14 @@ public class InviteActivity implements Serializable {
     /**
      * 邀请人奖励优惠券模板ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long couponTemplateId;
 
     /**
      * 被邀请人奖励优惠券模板ID(双向奖励时使用)
      */
     @TableField("invitee_coupon_template_id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long inviteeCouponTemplateId;
 
     /**
@@ -95,6 +100,7 @@ public class InviteActivity implements Serializable {
      */
     private Integer rewardCount;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long creatorId;
 
     private String creatorName;

+ 6 - 0
haha-entity/src/main/java/com/haha/entity/InviteRecord.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -16,21 +18,25 @@ public class InviteRecord implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
      * 活动ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
     /**
      * 邀请人用户ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long inviterUserId;
 
     /**
      * 被邀请人用户ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long inviteeUserId;
 
     /**

+ 9 - 0
haha-entity/src/main/java/com/haha/entity/InviteReward.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -16,26 +18,31 @@ public class InviteReward implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
      * 活动ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
     /**
      * 邀请记录ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long recordId;
 
     /**
      * 邀请人用户ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long inviterUserId;
 
     /**
      * 优惠券模板ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long couponTemplateId;
 
     /**
@@ -53,6 +60,7 @@ public class InviteReward implements Serializable {
     /**
      * 用户优惠券ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userCouponId;
 
     /**
@@ -81,6 +89,7 @@ public class InviteReward implements Serializable {
     /**
      * 操作人ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long operatorId;
 
     /**

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/LayerTemplate.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -21,6 +23,7 @@ public class LayerTemplate implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/MarketingActivity.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -18,6 +20,7 @@ public class MarketingActivity implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     private String activityName;
@@ -50,6 +53,7 @@ public class MarketingActivity implements Serializable {
 
     private BigDecimal usedBudget;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long creatorId;
 
     private String creatorName;

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/MarketingStatistics.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -16,8 +18,10 @@ public class MarketingStatistics implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
     private LocalDate statDate;

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/NewProductApply.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -22,6 +24,7 @@ public class NewProductApply implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
@@ -197,6 +200,7 @@ public class NewProductApply implements Serializable {
     /**
      * 申请人ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long applicantId;
 
     /**

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/OperationLog.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -21,11 +23,13 @@ public class OperationLog implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
      * 操作人ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long adminId;
 
     /**

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/Order.java

@@ -2,6 +2,8 @@ package com.haha.entity;
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -14,6 +16,7 @@ public class Order implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /** 乐观锁版本号 */
@@ -29,6 +32,7 @@ public class Order implements Serializable {
 
     private String activityId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
     private String deviceId;
@@ -125,6 +129,7 @@ public class Order implements Serializable {
     private String shopName;
 
     @TableField(exist = false)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     /** 用户消费标签:new-新用户, regular-老用户, frequent-常客 */

+ 6 - 0
haha-entity/src/main/java/com/haha/entity/OrderGoods.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -17,14 +19,17 @@ public class OrderGoods implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long orderId;
 
     private String orderNo;
 
     private String activityId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long productId;
 
     private String code;
@@ -45,6 +50,7 @@ public class OrderGoods implements Serializable {
 
     private String deviceId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
     private LocalDateTime createTime;

+ 7 - 0
haha-entity/src/main/java/com/haha/entity/OrderItem.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -15,12 +17,15 @@ public class OrderItem implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long orderId;
 
     private String orderNo;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long productId;
 
     private String productCode;
@@ -41,8 +46,10 @@ public class OrderItem implements Serializable {
 
     private String deviceId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")

+ 7 - 0
haha-entity/src/main/java/com/haha/entity/PriceAdjustmentLog.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -17,12 +19,16 @@ public class PriceAdjustmentLog implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long recordId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private String shopName;
@@ -31,6 +37,7 @@ public class PriceAdjustmentLog implements Serializable {
 
     private String deviceName;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long productId;
 
     private String productName;

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/Product.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -21,6 +23,7 @@ public class Product implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/Role.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -17,6 +19,7 @@ public class Role implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/RolePermission.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -19,16 +21,19 @@ public class RolePermission implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
      * 角色ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long roleId;
 
     /**
      * 权限ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long permissionId;
 
     /**

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/Shop.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -21,6 +23,7 @@ public class Shop implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/StatCategoryDaily.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -16,6 +18,7 @@ public class StatCategoryDaily implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
@@ -23,6 +26,7 @@ public class StatCategoryDaily implements Serializable {
 
     private String category;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private Integer quantity;

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/StatDeviceDaily.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -16,6 +18,7 @@ public class StatDeviceDaily implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
@@ -25,6 +28,7 @@ public class StatDeviceDaily implements Serializable {
 
     private String deviceName;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private String shopName;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/StatProductDaily.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -16,11 +18,13 @@ public class StatProductDaily implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
     private LocalDate statDate;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long productId;
 
     private String productCode;
@@ -29,6 +33,7 @@ public class StatProductDaily implements Serializable {
 
     private String category;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private String deviceId;

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/StatShopDaily.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -16,11 +18,13 @@ public class StatShopDaily implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
     private LocalDate statDate;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private String shopName;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/StatUserRepurchase.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -16,13 +18,16 @@ public class StatUserRepurchase implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
     private LocalDate statDate;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private Integer orderCount;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/StockRecordItem.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -16,11 +18,13 @@ public class StockRecordItem implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
      * 上货记录ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long recordId;
 
     /**
@@ -31,6 +35,7 @@ public class StockRecordItem implements Serializable {
     /**
      * 商品ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long productId;
 
     /**

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/Stocker.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -16,6 +18,7 @@ public class Stocker implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/SyncLog.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -20,11 +22,13 @@ public class SyncLog implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
      * 同步记录ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long recordId;
 
     /**

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/SyncRecord.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -20,6 +22,7 @@ public class SyncRecord implements Serializable {
      * 主键ID
      */
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     /**
@@ -72,6 +75,7 @@ public class SyncRecord implements Serializable {
     /**
      * 操作人ID
      */
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long operatorId;
 
     /**

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/TimedDiscountActivity.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -19,6 +21,7 @@ public class TimedDiscountActivity implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     private String activityName;
@@ -57,6 +60,7 @@ public class TimedDiscountActivity implements Serializable {
 
     private Integer notifyOnExecute;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long creatorId;
 
     private String creatorName;

+ 4 - 0
haha-entity/src/main/java/com/haha/entity/TimedDiscountDevice.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -14,8 +16,10 @@ public class TimedDiscountDevice implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
     private String deviceId;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/TimedDiscountProduct.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -14,10 +16,13 @@ public class TimedDiscountProduct implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long productId;
 
     private LocalDateTime createTime;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/TimedDiscountRecord.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -18,8 +20,10 @@ public class TimedDiscountRecord implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
     private String activityName;
@@ -30,6 +34,7 @@ public class TimedDiscountRecord implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     private LocalDateTime executeTime;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private String shopName;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/TimedDiscountShop.java

@@ -3,6 +3,8 @@ package com.haha.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -14,10 +16,13 @@ public class TimedDiscountShop implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private LocalDateTime createTime;

+ 5 - 0
haha-entity/src/main/java/com/haha/entity/TimedDiscountStatistics.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -18,13 +20,16 @@ public class TimedDiscountStatistics implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long activityId;
 
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
     private LocalDate statDate;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long shopId;
 
     private String shopName;

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/User.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -15,6 +17,7 @@ public class User implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     private String openid;

+ 6 - 0
haha-entity/src/main/java/com/haha/entity/UserCoupon.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -17,12 +19,16 @@ public class UserCoupon implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     private String couponCode;
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long templateId;
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long orderId;
 
     private Integer status;

+ 3 - 16
haha-miniapp/src/main/resources/application.yml

@@ -53,19 +53,6 @@ mybatis-plus:
       id-type: ASSIGN_ID
     enable-sql-runner: false
 
-# PageHelper 分页插件配置
-pagehelper:
-  # 指定数据库方言
-  helper-dialect: mysql
-  # 分页合理化参数,默认false。当设置为true时,pageNum<=0时会查询第一页,pageNum>pages(超过总数时),会查询最后一页
-  reasonable: true
-  # 支持通过Mapper接口参数来传递分页参数,默认false
-  support-methods-arguments: true
-  # 为了支持startPage(Object params)方法,增加了一个"params"参数来配置参数映射,用于从Map或ServletRequest中取值
-  params: count=countSql
-  # 总是返回PageInfo类型,默认false
-  return-page-info: check
-
 # 服务器配置
 server:
   port: 7077
@@ -151,6 +138,6 @@ logging:
     root: info
     com.haha.miniapp: debug
   file:
-    # 日志文件路径(相对于项目启动目录)
-    path: ./logs
-    name: ./logs/haha-miniapp.log
+    # 日志文件路径(相对于项目启动目录)- 按应用隔离子目录
+    path: ./logs/miniapp
+    name: ./logs/miniapp/haha-miniapp.log

+ 6 - 5
haha-mp/src/utils/config.ts

@@ -8,13 +8,14 @@ const isDevelopment = import.meta.env.DEV || false;
 
 export const API_CONFIG = {
   // 后端API基础URL
-  baseUrl: isDevelopment 
-    ? 'http://localhost:7070/api'  // 开发环境
-    : 'https://api.yourdomain.com/api',  // 生产环境
-  
+  // 注意:上线生产环境时需替换为正式域名
+  baseUrl: 'https://dev-haha.kuaiyuman.cn/api',
+  // baseUrl: 'http://192.168.10.100:7077/api',  // 本地开发
+  // baseUrl: 'http://localhost:7077/api',  // 本地开发
+
   // 请求超时时间(毫秒)
   timeout: 30000,
-  
+
   // 是否显示请求日志
   enableLog: isDevelopment
 };

+ 2 - 2
haha-service/src/main/java/com/haha/service/AdminService.java

@@ -2,11 +2,11 @@ package com.haha.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.haha.common.vo.AdminStatisticsVO;
 import com.haha.common.vo.Result;
 import com.haha.entity.Admin;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 管理员服务接口
@@ -58,7 +58,7 @@ public interface AdminService extends IService<Admin> {
      * 获取统计数据
      * @return 统计数据
      */
-    Result<Map<String, Object>> getStatistics();
+    Result<AdminStatisticsVO> getStatistics();
     
     /**
      * 获取可选的管理员列表(用于添加补货员)

+ 2 - 1
haha-service/src/main/java/com/haha/service/DeviceService.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.common.vo.DeviceStatisticsVO;
 import com.haha.entity.Device;
 import com.haha.common.vo.OpenDoorVO;
 import com.haha.sdk.exception.HahaException;
@@ -36,7 +37,7 @@ public interface DeviceService extends IService<Device> {
      *
      * @return 统计数据
      */
-    Map<String, Object> getStatistics();
+    DeviceStatisticsVO getStatistics();
     
     /**
      * 远程开门

+ 2 - 1
haha-service/src/main/java/com/haha/service/OrderService.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.common.vo.OrderStatisticsVO;
 import com.haha.common.vo.OrderVO;
 import com.haha.entity.Order;
 
@@ -59,7 +60,7 @@ public interface OrderService extends IService<Order> {
      * @param endDate 结束日期(可选)
      * @return 统计数据
      */
-    Map<String, Object> getStatistics(String startDate, String endDate);
+    OrderStatisticsVO getStatistics(String startDate, String endDate);
     
     /**
      * 订单退款

+ 6 - 3
haha-service/src/main/java/com/haha/service/ShopService.java

@@ -2,6 +2,9 @@ package com.haha.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.haha.common.vo.ShopDeviceVO;
+import com.haha.common.vo.ShopSelectVO;
+import com.haha.common.vo.ShopStatisticsVO;
 import com.haha.entity.Shop;
 
 import java.util.List;
@@ -59,7 +62,7 @@ public interface ShopService extends IService<Shop> {
      *
      * @return 门店列表
      */
-    List<Map<String, Object>> getAllEnabledShops();
+    List<ShopSelectVO> getAllEnabledShops();
 
     /**
      * 创建门店
@@ -91,7 +94,7 @@ public interface ShopService extends IService<Shop> {
      *
      * @return 统计信息
      */
-    Map<String, Object> getStatistics();
+    ShopStatisticsVO getStatistics();
 
     /**
      * 根据门店ID获取设备列表
@@ -99,7 +102,7 @@ public interface ShopService extends IService<Shop> {
      * @param shopId 门店ID
      * @return 设备列表
      */
-    List<Map<String, Object>> getDevicesByShopId(Long shopId);
+    List<ShopDeviceVO> getDevicesByShopId(Long shopId);
 
     /**
      * 将设备关联到当前门店

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

@@ -5,6 +5,7 @@ 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.common.constant.CommonConstants;
+import com.haha.common.vo.AdminStatisticsVO;
 import com.haha.common.vo.Result;
 import com.haha.entity.Admin;
 import com.haha.mapper.AdminMapper;
@@ -188,24 +189,23 @@ public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements
     }
 
     @Override
-    public Result<Map<String, Object>> getStatistics() {
+    public Result<AdminStatisticsVO> getStatistics() {
         try {
-            Map<String, Object> statistics = new HashMap<>();
-
             // 总管理员数
             long total = this.count();
-            statistics.put("total", total);
 
             // 正常状态管理员数
             long active = this.count(new LambdaQueryWrapper<Admin>().eq(Admin::getStatus, CommonConstants.STATUS_ENABLED));
-            statistics.put("active", active);
 
             // 禁用状态管理员数
             long disabled = this.count(new LambdaQueryWrapper<Admin>().eq(Admin::getStatus, CommonConstants.ADMIN_STATUS_DISABLED));
-            statistics.put("disabled", disabled);
 
-            // 今日登录数(暂时返回0,后续可通过Redis统计)
-            statistics.put("todayLogin", 0);
+            AdminStatisticsVO statistics = AdminStatisticsVO.builder()
+                    .total(total)
+                    .active(active)
+                    .disabled(disabled)
+                    .todayLogin(0)
+                    .build();
 
             return Result.success("获取成功", statistics);
 

+ 20 - 6
haha-service/src/main/java/com/haha/service/impl/DashboardServiceImpl.java

@@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.haha.common.constant.OrderConstants;
 import com.haha.entity.Device;
 import com.haha.entity.Order;
+import com.haha.entity.Shop;
 import com.haha.entity.User;
 import com.haha.mapper.DeviceInventoryMapper;
 import com.haha.service.*;
+import com.haha.service.DeviceAlertService;
+import com.haha.service.ShopService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -38,6 +41,12 @@ public class DashboardServiceImpl implements DashboardService {
     @Autowired
     private DeviceInventoryMapper deviceInventoryMapper;
 
+    @Autowired
+    private DeviceAlertService deviceAlertService;
+
+    @Autowired
+    private ShopService shopService;
+
     @Override
     public Map<String, Object> getOverviewData() {
         Map<String, Object> result = new HashMap<>();
@@ -149,9 +158,13 @@ public class DashboardServiceImpl implements DashboardService {
         // 设备总数
         result.put("totalDevices", totalDevices);
         
-        // 门店统计(暂时返回0,待后续实现门店模块)
-        result.put("totalShops", 0);
-        result.put("activeShops", 0);
+        // 门店统计
+        long totalShops = shopService.count();
+        long activeShops = shopService.lambdaQuery()
+                .eq(Shop::getStatus, 1)
+                .count();
+        result.put("totalShops", totalShops);
+        result.put("activeShops", activeShops);
 
         // 本月销售额和订单量
         LocalDateTime monthStart = LocalDateTime.of(LocalDate.now().withDayOfMonth(1), LocalTime.MIN);
@@ -403,13 +416,14 @@ public class DashboardServiceImpl implements DashboardService {
         // 待处理退款数(售后待审核)
         result.put("pendingRefunds", 0); // TODO: 后续实现售后模块后从售后表查询
         
-        // 待处理异常数(设备异常告警
+        // 设备异常告警数(未处理的告警记录
         try {
-            long pendingAlerts = deviceService.lambdaQuery()
-                    .eq(Device::getStatus, 3) // 假设3为异常状态
+            long pendingAlerts = deviceAlertService.lambdaQuery()
+                    .eq(com.haha.entity.DeviceAlertRecord::getNotifyStatus, 0) // 0-未发送/未处理
                     .count();
             result.put("pendingAlerts", pendingAlerts);
         } catch (Exception e) {
+            log.warn("查询设备告警数失败", e);
             result.put("pendingAlerts", 0);
         }
         

+ 12 - 13
haha-service/src/main/java/com/haha/service/impl/DeviceServiceImpl.java

@@ -12,6 +12,7 @@ import com.haha.common.enums.OrderStatus;
 import com.haha.common.enums.PayStatus;
 import com.haha.common.exception.BusinessException;
 import com.haha.common.utils.EntityLabelUtils;
+import com.haha.common.vo.DeviceStatisticsVO;
 import com.haha.entity.Device;
 import com.haha.entity.Order;
 import com.haha.entity.Shop;
@@ -80,28 +81,26 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
     }
 
     @Override
-    public Map<String, Object> getStatistics() {
-        Map<String, Object> statistics = new HashMap<>();
-
+    public DeviceStatisticsVO getStatistics() {
         // 总设备数
         long total = this.count();
-        statistics.put("total", total);
 
         // 在线设备数
         long online = this.lambdaQuery()
                 .eq(Device::getStatus, DeviceConstants.STATUS_ONLINE)
                 .count();
-        statistics.put("online", online);
 
         // 离线设备数
-        statistics.put("offline", total - online);
-
-        // TODO: 后续从订单服务获取销售额数据
-        statistics.put("totalSales", "0.00");
-        statistics.put("todaySales", "0.00");
-        statistics.put("avgTemperature", "0.0");
-
-        return statistics;
+        long offline = total - online;
+
+        return DeviceStatisticsVO.builder()
+                .total(total)
+                .online(online)
+                .offline(offline)
+                .totalSales("0.00")
+                .todaySales("0.00")
+                .avgTemperature("0.0")
+                .build();
     }
 
     @Override

+ 11 - 16
haha-service/src/main/java/com/haha/service/impl/OrderServiceImpl.java

@@ -16,6 +16,7 @@ import com.haha.common.enums.UserTag;
 import com.haha.common.utils.EntityLabelUtils;
 import com.haha.common.utils.OrderUtils;
 import com.haha.common.vo.OrderItemVO;
+import com.haha.common.vo.OrderStatisticsVO;
 import com.haha.common.vo.OrderVO;
 import com.haha.entity.Device;
 import com.haha.entity.Order;
@@ -240,9 +241,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     }
 
     @Override
-    public Map<String, Object> getStatistics(String startDate, String endDate) {
-        Map<String, Object> statistics = new HashMap<>();
-
+    public OrderStatisticsVO getStatistics(String startDate, String endDate) {
         LocalDateTime startDateTime = null;
         LocalDateTime endDateTime = null;
         if (startDate != null && !startDate.isEmpty()) {
@@ -254,23 +253,16 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
         // 时间范围内的订单总数
         Long totalOrders = baseMapper.countByDateRange(startDateTime, endDateTime);
-        statistics.put("totalOrders", totalOrders != null ? totalOrders : 0);
 
         // 时间范围内的已完成订单数
         Long completedOrders = baseMapper.countCompletedByDateRange(startDateTime, endDateTime);
-        statistics.put("completedOrders", completedOrders != null ? completedOrders : 0);
 
         // 时间范围内的已退款订单数
         Long refundOrders = baseMapper.countRefundedByDateRange(startDateTime, endDateTime);
-        statistics.put("refundOrders", refundOrders != null ? refundOrders : 0);
 
         // 时间范围内的总销售额(所有已完成订单)
         BigDecimal totalAmount = baseMapper.sumCompletedOrderAmount(startDateTime);
         if (endDateTime != null) {
-            // 如果既有开始又有结束时间,需要更精确的统计
-            // 这里复用 sumCompletedOrderAmount 只支持开始时间,我们手动处理结束时间
-            // 由于 sumCompletedOrderAmount 的 SQL 只判断 startDate,如果 endDate 存在需要另写逻辑
-            // 简单处理:直接用 SQL 查询带结束时间的
             totalAmount = baseMapper.selectObjs(
                 new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Order>()
                     .eq(Order::getStatus, OrderConstants.STATUS_COMPLETED)
@@ -282,7 +274,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 .map(obj -> obj instanceof BigDecimal ? (BigDecimal) obj : BigDecimal.ZERO)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
         }
-        statistics.put("totalAmount", totalAmount != null ? totalAmount.setScale(2, RoundingMode.HALF_UP).toString() : "0.00");
 
         // 按支付渠道统计金额
         List<Map<String, Object>> channelStats = baseMapper.sumAmountByChannel(startDateTime, endDateTime);
@@ -311,11 +302,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             }
         }
 
-        statistics.put("wechatAmount", wechatAmount.setScale(2, RoundingMode.HALF_UP).toString());
-        statistics.put("alipayAmount", alipayAmount.setScale(2, RoundingMode.HALF_UP).toString());
-        statistics.put("otherAmount", otherAmount.setScale(2, RoundingMode.HALF_UP).toString());
-
-        return statistics;
+        return OrderStatisticsVO.builder()
+                .totalOrders(totalOrders != null ? totalOrders : 0)
+                .completedOrders(completedOrders != null ? completedOrders : 0)
+                .refundOrders(refundOrders != null ? refundOrders : 0)
+                .totalAmount(totalAmount != null ? totalAmount.setScale(2, RoundingMode.HALF_UP).toString() : "0.00")
+                .wechatAmount(wechatAmount.setScale(2, RoundingMode.HALF_UP).toString())
+                .alipayAmount(alipayAmount.setScale(2, RoundingMode.HALF_UP).toString())
+                .otherAmount(otherAmount.setScale(2, RoundingMode.HALF_UP).toString())
+                .build();
     }
 
     @Override

+ 1 - 26
haha-service/src/main/java/com/haha/service/impl/ProductServiceImpl.java

@@ -37,33 +37,8 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
                .eq(Product::getIsDeleted, CommonConstants.NOT_DELETED)
                .orderByDesc(Product::getCreateTime);
 
-        System.out.println("Product query conditions:");
-        System.out.println("  page: " + page);
-        System.out.println("  pageSize: " + pageSize);
-        System.out.println("  name: " + name);
-        System.out.println("  barcode: " + barcode);
-        System.out.println("  category: " + category);
-        System.out.println("  syncStatus: " + syncStatus);
-
         IPage<Product> productPage = this.page(new Page<>(page, pageSize), wrapper);
-        
-        System.out.println("Query result:");
-        System.out.println("  total records: " + productPage.getTotal());
-        System.out.println("  current page: " + productPage.getCurrent());
-        System.out.println("  page size: " + productPage.getSize());
-        System.out.println("  total pages: " + productPage.getPages());
-        System.out.println("  records count: " + productPage.getRecords().size());
-        
-        // 检查数据库连接
-        System.out.println("Database connection check:");
-        try {
-            long totalCount = this.count();
-            System.out.println("  Total products in database: " + totalCount);
-        } catch (Exception e) {
-            System.out.println("  Database connection error: " + e.getMessage());
-            e.printStackTrace();
-        }
-        
+
         // 填充额外字段
         productPage.getRecords().forEach(this::fillProductLabels);
         

+ 36 - 26
haha-service/src/main/java/com/haha/service/impl/ShopServiceImpl.java

@@ -6,6 +6,9 @@ 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.common.exception.BusinessException;
+import com.haha.common.vo.ShopDeviceVO;
+import com.haha.common.vo.ShopSelectVO;
+import com.haha.common.vo.ShopStatisticsVO;
 import com.haha.entity.Device;
 import com.haha.entity.Shop;
 import com.haha.mapper.ShopMapper;
@@ -136,8 +139,16 @@ public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements Sh
     }
 
     @Override
-    public List<Map<String, Object>> getAllEnabledShops() {
-        return shopMapper.selectAllEnabledShops();
+    public List<ShopSelectVO> getAllEnabledShops() {
+        List<Map<String, Object>> maps = shopMapper.selectAllEnabledShops();
+        return maps.stream().map(m -> ShopSelectVO.builder()
+                .id((Long) m.get("id"))
+                .name((String) m.get("name"))
+                .address((String) m.get("address"))
+                .contactName((String) m.get("contact_name"))
+                .contactPhone((String) m.get("contact_phone"))
+                .build()
+        ).toList();
     }
 
     @Override
@@ -209,52 +220,51 @@ public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements Sh
     }
 
     @Override
-    public Map<String, Object> getStatistics() {
-        Map<String, Object> statistics = new HashMap<>();
-        
+    public ShopStatisticsVO getStatistics() {
         // 总门店数
         long total = this.count();
-        statistics.put("total", total);
-        
+
         // 启用门店数
         long enabled = this.lambdaQuery()
                 .eq(Shop::getStatus, 1)
                 .count();
-        statistics.put("enabled", enabled);
-        
+
         // 禁用门店数
-        statistics.put("disabled", total - enabled);
-        
+        long disabled = total - enabled;
+
         // 总设备数
         long totalDevices = deviceService.count();
-        statistics.put("totalDevices", totalDevices);
-        
+
         // 在线设备数
         long onlineDevices = deviceService.lambdaQuery()
                 .eq(Device::getStatus, 1)
                 .count();
-        statistics.put("onlineDevices", onlineDevices);
-        
-        return statistics;
+
+        return ShopStatisticsVO.builder()
+                .total(total)
+                .enabled(enabled)
+                .disabled(disabled)
+                .totalDevices(totalDevices)
+                .onlineDevices(onlineDevices)
+                .build();
     }
 
     @Override
-    public List<Map<String, Object>> getDevicesByShopId(Long shopId) {
+    public List<ShopDeviceVO> getDevicesByShopId(Long shopId) {
         LambdaQueryWrapper<Device> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(Device::getShopId, shopId)
                .orderByDesc(Device::getCreateTime);
         
         List<Device> devices = deviceService.list(wrapper);
         
-        return devices.stream().map(device -> {
-            Map<String, Object> map = new HashMap<>();
-            map.put("id", device.getId());
-            map.put("deviceId", device.getDeviceId());
-            map.put("name", device.getName());
-            map.put("status", device.getStatus());
-            map.put("createTime", device.getCreateTime());
-            return map;
-        }).toList();
+        return devices.stream().map(device -> ShopDeviceVO.builder()
+                .id(device.getId())
+                .deviceId(device.getDeviceId())
+                .name(device.getName())
+                .status(device.getStatus())
+                .createTime(device.getCreateTime())
+                .build()
+        ).toList();
     }
 
     @Override