refactor(order):优化订单详情查询逻辑

- 移除不必要的 QueryWrapper 导入
- 将 OrderItem 实体替换为 OrderItemVO 视图对象
- 新增 selectItemInfoByOrderIds 方法用于批量查询订单详情- 简化订单详情分组与绑定逻辑
- 在 OrderItemVO 中增加核销相关字段及状态枚举支持
This commit is contained in:
huk 2025-09-28 15:44:20 +08:00
parent 1305061781
commit 606ffbefdf
3 changed files with 59 additions and 15 deletions

View File

@ -1,11 +1,13 @@
package com.wzj.soopin.order.domain.vo;
import com.wzj.soopin.order.emum.VerificationCodeStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 订单中所包含的商品 数据视图对象
@ -92,4 +94,39 @@ public class OrderItemVO extends BaseAudit {
private String tenantId;
private String tenantName;
@Schema(description = "ID")
private Long verificationId;
@Schema(description = "核销码")
private String code;
/**
* 状态 {@link VerificationCodeStatus}
*/
@Schema(description = "状态")
private Integer status;
@Schema(description = "用户id")
private Long memberId;
@Schema(description = "用户昵称")
private String memberName;
@Schema(description = "使用时间")
private LocalDateTime usedTime;
@Schema(description = "使用商家id")
private String usedMerchantId;
@Schema(description = "过期时间")
private LocalDateTime expireTime;
@Schema(description = "核销时间")
private LocalDateTime verificationTime;
@Schema(description = "核销结果")
private Integer result;
@Schema(description = "失败原因")
private String reason;
}

View File

@ -72,4 +72,22 @@ public interface OrderItemMapper extends BaseMapperPlus<OrderItem, OrderItemVO>
IPage<MerchantOrderVO> selectMerchatOrderPage(@Param("page") Page<Object> page, @Param("query") OrderItemBo query);
MerchantOrderVO selectMerchatOrder(@Param("tenantId") String tenantId, @Param("orderItemId") Long orderItemId, @Param("verificationCode") String verificationCode);
@Select("<script>" +
"SELECT " +
" oi.*, " +
" vc.id verificationId, " +
" vc.* " +
"FROM " +
" oms_order_item oi " +
" LEFT JOIN oms_verification_codes vc ON oi.id = vc.order_item_id " +
"WHERE " +
" oi.order_id IN " +
" <foreach item='id' collection='orderIds' open='(' separator=',' close=')'>" +
" #{id}" +
" </foreach>" +
"</script>")
List<OrderItemVO> selectItemInfoByOrderIds(@Param("orderIds") List<Long> orderIds);
}

View File

@ -1,6 +1,5 @@
package com.wzj.soopin.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.goods.mapper.SkuMapper;
@ -8,7 +7,7 @@ import com.wzj.soopin.order.convert.OrderConvert;
import com.wzj.soopin.order.convert.OrderItemConvert;
import com.wzj.soopin.order.domain.bo.OrderBo;
import com.wzj.soopin.order.domain.entity.Order;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.vo.OrderItemVO;
import com.wzj.soopin.order.domain.vo.OrderVO;
import com.wzj.soopin.order.mapper.OrderItemMapper;
import com.wzj.soopin.order.mapper.OrderMapper;
@ -47,20 +46,10 @@ public class MemberOrderServiceImpl extends ServiceImpl<OrderMapper, Order> impl
.collect(Collectors.toList());
// 根据订单id查询订单详情
QueryWrapper<OrderItem> orderItemQueryWrapper = new QueryWrapper<>();
orderItemQueryWrapper.in("order_id", orderIds);
List<OrderItem> orderItemList = orderItemMapper.selectList(orderItemQueryWrapper);
List<OrderItemVO> orderItemVOList =orderItemMapper.selectItemInfoByOrderIds(orderIds);
// 按照订单id分组订单详情
Map<Long, List<OrderItem>> orderItemMapByOrderId = orderItemList.stream()
.collect(Collectors.groupingBy(OrderItem::getOrderId));
for (OrderVO orderVO : orderVOList) {
List<OrderItem> orderItems = orderItemMapByOrderId.get(orderVO.getId());
if (orderItems != null) {
orderVO.setItems(orderItemConvert.toVO(orderItems));
}
}
Map<Long, List<OrderItemVO>> orderItemMapByOrderId = orderItemVOList.stream().collect(Collectors.groupingBy(OrderItemVO::getOrderId));
orderVOList.forEach(orderVO -> orderVO.setItems(orderItemMapByOrderId.get(orderVO.getId())));
return orderVOPage;
}