Bladeren bron

权限模块文档更新,订单列表新增手机号查询和展示,新增门店名称展示

skyline 1 maand geleden
bovenliggende
commit
39d2e0e341

+ 4 - 2
docs/权限模块设计说明.md

@@ -72,9 +72,9 @@ public @interface SuperAdmin {
 
 #### t_role(角色表)
 
-角色通过 `role_id` 与 `t_role_data_permission` 关联,实现角色-权限多对多关系。
+角色通过 `role_id` 与 `t_role_permission` 关联,实现角色-权限多对多关系。
 
-#### t_role_data_permission(角色权限关联表)
+#### t_role_permission(角色权限关联表)
 
 关联角色与权限的多对多关系。
 
@@ -479,6 +479,8 @@ meta: {
 | LayerTemplateController.java | 3个接口TEMP注释移除权限 | 恢复 layer-template:read(list), layer-template:update(sync/batchSync) |
 | DictController.java | getDictDataList缺少@RequirePermission | 新增 dict:read |
 | DictController.java | refreshCache缺少@RequirePermission和@Log | 新增 dict:update + 操作日志 |
+| RolePermissionMapper.xml | 自定义batchInsert未包含id列,雪花ID不生效 | 改为实体insert方式,利用@TableId自动生成ID |
+| haha-admin, haha-miniapp application.yml | 全局缺少db-config.id-type兜底配置 | 新增 db-config.id-type: ASSIGN_ID |
 | MarketingActivityController.java | getOngoingActivities缺少@RequirePermission | 新增 marketing:activity:read |
 | TimedDiscountController.java | getEnabledActivities缺少@RequirePermission | 新增 timed-discount:read |
 | CouponController.java | getAvailableTemplates缺少@RequirePermission | 新增 marketing:coupon:read |

+ 1 - 0
haha-admin-web/src/api/order.ts

@@ -21,6 +21,7 @@ export const getOrderList = (params: {
   page?: number;
   pageSize?: number;
   orderNo?: string;
+  phone?: string;
   deviceId?: string;
   payStatus?: string;
   status?: number;

+ 8 - 0
haha-admin-web/src/views/order/index.vue

@@ -45,6 +45,14 @@ const {
           class="w-[180px]!"
         />
       </el-form-item>
+      <el-form-item label="手机号:" prop="phone">
+        <el-input
+          v-model="form.phone"
+          placeholder="请输入手机号"
+          clearable
+          class="w-[180px]!"
+        />
+      </el-form-item>
       <el-form-item label="设备ID:" prop="deviceId">
         <el-input
           v-model="form.deviceId"

+ 11 - 3
haha-admin-web/src/views/order/utils/hook.tsx

@@ -35,6 +35,7 @@ import {
 export function useOrder(tableRef: Ref) {
   const form = reactive<OrderSearchForm>({
     orderNo: "",
+    phone: "",
     deviceId: "",
     payStatus: "",
     status: "",
@@ -67,10 +68,10 @@ export function useOrder(tableRef: Ref) {
       formatter: ({ userId }) => userId || "-"
     },
     {
-      label: "设备 ID",
-      prop: "deviceId",
+      label: "手机号",
+      prop: "phone",
       minWidth: 120,
-      formatter: ({ deviceId }) => deviceId || "-"
+      formatter: ({ phone }) => phone || "-"
     },
     {
       label: "门店名称",
@@ -78,6 +79,12 @@ export function useOrder(tableRef: Ref) {
       minWidth: 120,
       formatter: ({ shopName }) => shopName || "-"
     },
+    {
+      label: "设备 ID",
+      prop: "deviceId",
+      minWidth: 120,
+      formatter: ({ deviceId }) => deviceId || "-"
+    },
     {
       label: "订单金额",
       prop: "totalAmount",
@@ -203,6 +210,7 @@ export function useOrder(tableRef: Ref) {
       };
       
       if (form.orderNo) searchParams.orderNo = form.orderNo;
+      if (form.phone) searchParams.phone = form.phone;
       if (form.deviceId) searchParams.deviceId = form.deviceId;
       if (form.payStatus) searchParams.payStatus = form.payStatus;
       if (form.status !== "") {

+ 2 - 0
haha-admin-web/src/views/order/utils/types.ts

@@ -6,6 +6,7 @@ export interface OrderItem {
   outTradeNo?: string;
   activityId?: string;
   userId: number;
+  phone?: string;
   deviceId: string;
   shopId?: number;
   shopName?: string;
@@ -48,6 +49,7 @@ export interface OrderItemDetail {
 // 搜索表单类型
 export interface OrderSearchForm {
   orderNo: string;
+  phone: string;
   deviceId: string;
   payStatus: string;
   status: number | string;

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

@@ -36,10 +36,10 @@ public class OrderController {
     @RequirePermission("order:read")
     @GetMapping("/list")
     public Result<PageResult<Order>> list(OrderQueryDTO queryDTO) {
-        log.info("订单列表查询参数:page={}, pageSize={}, orderNo={}, deviceId={}, status={}, statusList={}", 
+        log.info("订单列表查询参数:page={}, pageSize={}, orderNo={}, deviceId={}, phone={}, status={}, statusList={}", 
                 queryDTO.getPage(), queryDTO.getPageSize(), 
                 queryDTO.getOrderNo(), queryDTO.getDeviceId(),
-                queryDTO.getStatus(), queryDTO.getStatusList());
+                queryDTO.getPhone(), queryDTO.getStatus(), queryDTO.getStatusList());
         
         queryDTO.validate();
         
@@ -52,7 +52,8 @@ public class OrderController {
                 queryDTO.getStatus(),
                 queryDTO.getStartDate(),
                 queryDTO.getEndDate(),
-                queryDTO.getStatusList()
+                queryDTO.getStatusList(),
+                queryDTO.getPhone()
         );
 
         return Result.success("查询成功", PageResult.of(orderPage));

+ 2 - 0
haha-admin/src/main/resources/application.yml

@@ -56,6 +56,8 @@ mybatis-plus:
   configuration:
     map-underscore-to-camel-case: true
   global-config:
+    db-config:
+      id-type: ASSIGN_ID
     enable-sql-runner: false
 
 # PageHelper 分页插件配置

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

@@ -46,4 +46,9 @@ public class OrderQueryDTO extends PageQueryDTO {
      * 结束日期
      */
     private String endDate;
+    
+    /**
+     * 手机号
+     */
+    private String phone;
 }

+ 7 - 0
haha-service/src/main/java/com/haha/service/OrderService.java

@@ -25,6 +25,13 @@ public interface OrderService extends IService<Order> {
      * @param statusList 订单状态列表(多状态查询)
      * @return 分页结果
      */
+    IPage<Order> getPage(int page, int pageSize, String orderNo, String deviceId, 
+                         String payStatus, Integer status, String startDate, String endDate,
+                         List<Integer> statusList, String phone);
+    
+    /**
+     * 分页查询订单列表(兼容无phone参数调用)
+     */
     IPage<Order> getPage(int page, int pageSize, String orderNo, String deviceId, 
                          String payStatus, Integer status, String startDate, String endDate,
                          List<Integer> statusList);

+ 43 - 4
haha-service/src/main/java/com/haha/service/impl/OrderServiceImpl.java

@@ -20,9 +20,11 @@ import com.haha.common.vo.OrderVO;
 import com.haha.entity.Device;
 import com.haha.entity.Order;
 import com.haha.entity.Shop;
+import com.haha.entity.User;
 import com.haha.mapper.DeviceMapper;
 import com.haha.mapper.OrderMapper;
 import com.haha.mapper.ShopMapper;
+import com.haha.mapper.UserMapper;
 import com.haha.service.UserTagService;
 import com.haha.service.OrderGoodsService;
 import com.haha.service.OrderService;
@@ -58,6 +60,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     private final DeviceMapper deviceMapper;
     private final ShopMapper shopMapper;
+    private final UserMapper userMapper;
     private final CommonConfig commonConfig;
     private final UserTagService userTagService;
 
@@ -81,6 +84,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     public IPage<Order> getPage(int page, int pageSize, String orderNo, String deviceId,
                                  String payStatus, Integer status, String startDate, String endDate,
                                  List<Integer> statusList) {
+        return getPage(page, pageSize, orderNo, deviceId, payStatus, status, startDate, endDate, statusList, null);
+    }
+
+    @Override
+    public IPage<Order> getPage(int page, int pageSize, String orderNo, String deviceId,
+                                 String payStatus, Integer status, String startDate, String endDate,
+                                 List<Integer> statusList, String phone) {
         // 确保分页参数有效(MyBatis-Plus 要求页码从 1 开始)
         if (page < 1) {
             page = 1;
@@ -89,11 +99,26 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             pageSize = 10;  // 默认每页 10 条,最大 100 条
         }
 
-        log.info("订单分页查询:page={}, pageSize={}, orderNo={}, deviceId={}", page, pageSize, orderNo, deviceId);
+        log.info("订单分页查询:page={}, pageSize={}, orderNo={}, deviceId={}, phone={}", page, pageSize, orderNo, deviceId, phone);
 
         LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
 
-        // 构建查询条件
+        // 手机号查询:先根据手机号查出用户ID,再按用户ID过滤订单
+        List<Long> userIdsByPhone = null;
+        if (phone != null && !phone.isEmpty()) {
+            LambdaQueryWrapper<User> userWrapper = new LambdaQueryWrapper<>();
+            userWrapper.like(User::getPhone, phone);
+            List<User> users = userMapper.selectList(userWrapper);
+            if (users != null && !users.isEmpty()) {
+                userIdsByPhone = users.stream().map(User::getId).collect(Collectors.toList());
+                wrapper.in(Order::getUserId, userIdsByPhone);
+            } else {
+                // 没有匹配到用户,返回空结果
+                return new Page<>(page, pageSize);
+            }
+        }
+
+        // 构建其他查询条件
         wrapper.like(orderNo != null && !orderNo.isEmpty(), Order::getOrderNo, orderNo)
                .like(deviceId != null && !deviceId.isEmpty(), Order::getDeviceId, deviceId)
                .eq(payStatus != null && !payStatus.isEmpty(), Order::getPayStatus, payStatus)
@@ -452,15 +477,29 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 .collect(Collectors.toList());
         Map<Long, UserTag> userTagMap = userTagService.batchComputeUserTags(userIds);
 
-        // 2. 逐条填充标签
+        // 2. 批量查询用户信息(手机号)
+        Map<Long, User> userMap = new HashMap<>();
+        if (!userIds.isEmpty()) {
+            List<User> users = userMapper.selectBatchIds(userIds);
+            if (users != null) {
+                userMap = users.stream().collect(Collectors.toMap(User::getId, u -> u, (a, b) -> a));
+            }
+        }
+
+        // 3. 逐条填充标签
         for (Order order : orders) {
-            // 用户消费标签
+            // 用户消费标签 + 手机号
             if (order.getUserId() != null) {
                 UserTag tag = userTagMap.get(order.getUserId());
                 if (tag != null) {
                     order.setUserTag(tag.getCode());
                     order.setUserTagLabel(tag.getDescription());
                 }
+                // 填充手机号
+                User user = userMap.get(order.getUserId());
+                if (user != null) {
+                    order.setPhone(user.getPhone());
+                }
             }
 
             // 支付状态标签