product:商品规格,调整成商品属性,避免和 sku 概念冲突

This commit is contained in:
YunaiV
2022-12-08 21:12:35 +08:00
parent 373188b58d
commit fac3e7c726
55 changed files with 283 additions and 210 deletions

View File

@@ -72,7 +72,7 @@ public class TradeAfterSaleBaseVO {
@NotNull(message = "商品 SKU 编号不能为空")
private Long skuId;
@ApiModelProperty(value = "规格值数组")
@ApiModelProperty(value = "商品属性数组")
private List<ProductPropertyValueDetailRespVO> properties;
@ApiModelProperty(value = "商品图片", example = "https://www.iocoder.cn/2.png")

View File

@@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("管理后台 - 商品规格 + 规格值的明细 Response VO")
@ApiModel("管理后台 - 商品属性值的明细 Response VO")
@Data
public class ProductPropertyValueDetailRespVO {

View File

@@ -1,11 +1,14 @@
package cn.iocoder.yudao.module.trade.controller.admin.order;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageItemRespVO;
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
import cn.iocoder.yudao.module.trade.service.order.TradeOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -15,8 +18,11 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Api(tags = "管理后台 - 交易订单")
@@ -33,7 +39,19 @@ public class TradeOrderController {
@ApiOperation("获得交易订单分页")
@PreAuthorize("@ss.hasPermission('trade:order:query')")
public CommonResult<PageResult<TradeOrderPageItemRespVO>> getOrderPage(TradeOrderPageReqVO reqVO) {
// 查询订单
PageResult<TradeOrderDO> pageResult = tradeOrderService.getOrderPage(reqVO);
if (CollUtil.isEmpty(pageResult.getList())) {
return success(PageResult.empty());
}
// 查询订单项
List<TradeOrderItemDO> orderItems = tradeOrderService.getOrderItems(
convertSet(pageResult.getList(), TradeOrderDO::getId));
// 查询属性
Set<Long> propertyValueIds = TradeOrderConvert.INSTANCE.convertPropertyValueIds(orderItems);
return success(null);
}

View File

@@ -20,7 +20,7 @@ public class TradeOrderPageItemRespVO {
public static class Item extends TradeOrderItemBaseVO {
/**
* 规格值数组
* 属性数组
*/
private List<ProductPropertyValueDetailRespVO> properties;

View File

@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
import io.swagger.annotations.ApiModel;
@@ -8,7 +9,7 @@ import lombok.Data;
@ApiModel("管理后台 - 交易订单的分页 Request VO")
@Data
public class TradeOrderPageReqVO {
public class TradeOrderPageReqVO extends PageParam {
@ApiModelProperty(value = "订单状态", example = "1", notes = "参见 TradeOrderStatusEnum 枚举")
@InEnum(value = TradeOrderStatusEnum.class, message = "订单状态必须是 {value}")

View File

@@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("用户 App - 商品规格 + 规格值的明细 Response VO")
@ApiModel("用户 App - 商品属性值的明细 Response VO")
@Data
public class AppProductPropertyValueDetailRespVO {

View File

@@ -27,7 +27,7 @@ public class AppProductSkuBaseRespVO {
private Integer stock;
/**
* 规格数组
* 属性数组
*/
private List<AppProductPropertyValueDetailRespVO> properties;

View File

@@ -56,7 +56,7 @@ public class AppTradeOrderGetCreateInfoRespVO {
*/
private String picURL;
// /**
// * 规格值数组
// * 属性数组
// */
// private List<ProductAttrKeyValueRespVO> attrs; // TODO 后面改下
/**

View File

@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.trade.convert.order;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
@@ -18,8 +19,11 @@ import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.addTime;
@@ -88,4 +92,14 @@ public interface TradeOrderConvert {
return createReqDTO;
}
default Set<Long> convertPropertyValueIds(List<TradeOrderItemDO> orderItems) {
if (CollUtil.isEmpty(orderItems)) {
return new HashSet<>();
}
return orderItems.stream().filter(item -> item.getProperties() != null)
.flatMap(p -> p.getProperties().stream()) // 遍历多个 Property 属性
.map(TradeOrderItemDO.Property::getValueId) // 将每个 Property 转换成对应的 propertyId最后形成集合
.collect(Collectors.toSet());
}
}

View File

@@ -120,7 +120,7 @@ public class TradeAfterSaleDO extends BaseDO {
*/
private Long skuId;
/**
* 规格值数组JSON 格式
* 属性数组JSON 格式
*
* 冗余 {@link TradeOrderItemDO#getProperties()}
*/

View File

@@ -63,7 +63,7 @@ public class TradeOrderItemDO extends BaseDO {
*/
private Long skuId;
/**
* 规格值数组JSON 格式
* 属性数组JSON 格式
*
* 冗余 ProductSkuDO 的 properties 字段
*/

View File

@@ -1,6 +1,9 @@
package cn.iocoder.yudao.module.trade.dal.mysql.order;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.ibatis.annotations.Mapper;
@@ -14,8 +17,12 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
}
default TradeOrderDO selectByIdAndUserId(Long id, Long userId) {
return selectOne(TradeOrderDO::getId, id,
TradeOrderDO::getUserId, userId);
return selectOne(TradeOrderDO::getId, id, TradeOrderDO::getUserId, userId);
}
default PageResult<TradeOrderDO> selectPage(TradeOrderPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<TradeOrderDO>()
.eqIfPresent(TradeOrderDO::getStatus, reqVO.getStatus()));
}
}

View File

@@ -7,6 +7,12 @@ import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreate
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMultiMap;
/**
* 交易订单 Service 接口
*
@@ -90,4 +96,23 @@ public interface TradeOrderService {
void updateOrderItemAfterSaleStatus(Long id, Integer oldAfterSaleStatus,
Integer newAfterSaleStatus, Integer refundPrice);
/**
* 查询交易订单项
*
* @param ids 交易订单项编号数组
* @return 交易订单项数组
*/
List<TradeOrderItemDO> getOrderItems(Collection<Long> ids);
/**
* 查询交易订单项 Map
*
* @param ids 交易订单项编号数组
* @return 交易订单项 Map
*/
default Map<Long, List<TradeOrderItemDO>> getOrderItemMap(Collection<Long> ids) {
List<TradeOrderItemDO> orderItems = getOrderItems(ids);
return convertMultiMap(orderItems, TradeOrderItemDO::getOrderId);
}
}

View File

@@ -43,10 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.*;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
@@ -423,7 +420,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
@Override
public PageResult<TradeOrderDO> getOrderPage(TradeOrderPageReqVO reqVO) {
return null;
return tradeOrderMapper.selectPage(reqVO);
}
// =================== Order Item ===================
@@ -475,6 +472,11 @@ public class TradeOrderServiceImpl implements TradeOrderService {
// TODO 芋艿:未来如果有分佣,需要更新相关分佣订单为已失效
}
@Override
public List<TradeOrderItemDO> getOrderItems(Collection<Long> ids) {
return tradeOrderItemMapper.selectBatchIds(ids);
}
/**
* 判断指定订单的所有订单项,是不是都售后成功
*