- 优化订单列表返回结构

This commit is contained in:
sin
2019-03-28 22:04:37 +08:00
parent 1900ccafe2
commit abf3251122
8 changed files with 337 additions and 7 deletions

View File

@@ -1,8 +1,10 @@
package cn.iocoder.mall.order.application.convert;
import cn.iocoder.mall.order.api.dto.OrderCreateItemDTO;
import cn.iocoder.mall.order.api.dto.OrderItemBO;
import cn.iocoder.mall.order.api.dto.OrderItemUpdateDTO;
import cn.iocoder.mall.order.dataobject.OrderItemDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
@@ -14,6 +16,7 @@ import java.util.List;
* @author Sin
* @time 2019-03-23 14:34
*/
@Mapper
public interface OrderItemConvert {
OrderItemConvert INSTANCE = Mappers.getMapper(OrderItemConvert.class);
@@ -23,4 +26,7 @@ public interface OrderItemConvert {
@Mappings({})
List<OrderItemDO> convert(List<OrderCreateItemDTO> orderCreateItemDTOList);
@Mappings({})
List<OrderItemBO> convertOrderItemDO(List<OrderItemDO> orderItemDOList);
}

View File

@@ -3,6 +3,7 @@ package cn.iocoder.mall.order.application.convert;
import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
import cn.iocoder.mall.order.api.dto.OrderLogisticsUpdateDTO;
import cn.iocoder.mall.order.dataobject.OrderLogisticsDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
@@ -12,6 +13,7 @@ import org.mapstruct.factory.Mappers;
* @author Sin
* @time 2019-03-23 14:39
*/
@Mapper
public interface OrderLogisticsConvert {
OrderLogisticsConvert INSTANCE = Mappers.getMapper(OrderLogisticsConvert.class);

View File

@@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.List;
/**
@@ -41,6 +42,18 @@ public interface OrderItemMapper {
OrderItemDO orderItemDO
);
/**
* 查询 - 根据 orderIds 和 status
*
* @param orderIds
* @param status
* @return
*/
List<OrderItemDO> selectByOrderIdsAndStatus(
@Param("orderIds") Collection<Integer> orderIds,
@Param("status") Integer status
);
/**
* 查询 - 根据 orderId 下的 item
*

View File

@@ -1,6 +1,7 @@
package cn.iocoder.mall.order.service;
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
import cn.iocoder.common.framework.util.CollectionUtil;
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.order.OrderCommon;
@@ -53,13 +54,33 @@ public class OrderServiceImpl implements OrderService {
return CommonResult.success(new OrderPageBO().setTotal(0));
}
// 获取订单数据
List<OrderDO> orderDOList = orderMapper.selectPage(orderQueryDTO);
// 获取订单 id
Set<Integer> orderIds = orderDOList.stream().map(orderDO -> orderDO.getId()).collect(Collectors.toSet());
// 获取 订单的 items
List<OrderItemDO> orderItemDOList = orderItemMapper
.selectByOrderIdsAndStatus(orderIds, DeletedStatusEnum.DELETED_NO.getValue());
List<OrderItemBO> orderItemBOList = OrderItemConvert.INSTANCE.convertOrderItemDO(orderItemDOList);
Map<Integer, List<OrderItemBO>> orderItemBOMultimap = CollectionUtil
.buildMultimap(orderItemBOList, Integer.class, OrderItemBO.class, "orderId");
// 转换 orderDO 为 OrderBO并设置 item
List<OrderBO> orderPageBOList = OrderConvert.INSTANCE.convertPageBO(orderDOList);
List<OrderBO> result = orderPageBOList.stream().map(orderBO -> {
if (orderItemBOMultimap.containsKey(orderBO.getId())) {
orderBO.setOrderItems(orderItemBOMultimap.get(orderBO.getId()));
}
return orderBO;
}).collect(Collectors.toList());
return CommonResult.success(
new OrderPageBO()
.setTotal(totalCount)
.setOrders(orderPageBOList)
.setOrders(result)
);
}

View File

@@ -110,4 +110,17 @@
AND order_id = #{orderId}
</if>
</select>
<!--
查询 - 根据 orderIds 和 status
-->
<select id="selectByOrderIdsAndStatus" resultType="cn.iocoder.mall.order.dataobject.OrderItemDO">
SELECT * FROM `order_item`
WHERE `status` = #{status}
AND `order_id`
IN
<foreach collection="orderIds" index="orderId" open="(" close=")" separator=",">
#{orderId}
</foreach>
</select>
</mapper>