mall:增加订单评论字段

This commit is contained in:
YunaiV 2023-05-19 23:55:02 +08:00
parent 3da2eb89b2
commit 83aa656bda
12 changed files with 111 additions and 80 deletions

View File

@ -40,11 +40,8 @@ public class TradeOrderItemBaseVO {
// ========== 价格 + 支付基本信息 ========== // ========== 价格 + 支付基本信息 ==========
@Schema(description = "商品原价(总)", required = true, example = "100")
private Integer originalPrice;
@Schema(description = "商品原价(单)", required = true, example = "100") @Schema(description = "商品原价(单)", required = true, example = "100")
private Integer originalUnitPrice; private Integer price;
@Schema(description = "商品优惠(总)", required = true, example = "100") @Schema(description = "商品优惠(总)", required = true, example = "100")
private Integer discountPrice; private Integer discountPrice;

View File

@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.product.api.property.ProductPropertyValueApi;
import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO; import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO;
import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO; import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO;
import cn.iocoder.yudao.module.trade.controller.app.order.vo.*; import cn.iocoder.yudao.module.trade.controller.app.order.vo.*;
import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemRespVO;
import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; 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.TradeOrderDO;
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
@ -53,7 +54,7 @@ public class AppTradeOrderController {
AppTradeOrderSettlementRespVO settlement = new AppTradeOrderSettlementRespVO(); AppTradeOrderSettlementRespVO settlement = new AppTradeOrderSettlementRespVO();
AppTradeOrderSettlementRespVO.Price price = new AppTradeOrderSettlementRespVO.Price(); AppTradeOrderSettlementRespVO.Price price = new AppTradeOrderSettlementRespVO.Price();
price.setOriginalPrice(1000); price.setTotalPrice(1000);
price.setDeliveryPrice(200); price.setDeliveryPrice(200);
price.setCouponPrice(100); price.setCouponPrice(100);
price.setPointPrice(50); price.setPointPrice(50);
@ -184,4 +185,21 @@ public class AppTradeOrderController {
return success(orderCount); return success(orderCount);
} }
// ========== 订单项 ==========
@GetMapping("/item/get")
@Operation(summary = "获得交易订单项")
@Parameter(name = "id", description = "交易订单项编号")
public CommonResult<AppTradeOrderItemRespVO> getOrderItem(@RequestParam("id") Long id) {
TradeOrderItemDO item = tradeOrderService.getOrderItem(getLoginUserId(), id);
return success(TradeOrderConvert.INSTANCE.convert03(item));
}
// TODO 芋艿待实现
@PostMapping("/item/create-comment")
@Operation(summary = "创建交易订单项的评价")
public CommonResult<Long> createOrderItemComment() {
return success(0L);
}
} }

View File

@ -123,29 +123,30 @@ public class AppTradeOrderDetailRespVO {
@Schema(description = "商品 SPU 编号", required = true, example = "1") @Schema(description = "商品 SPU 编号", required = true, example = "1")
private Long spuId; private Long spuId;
@Schema(description = "商品 SPU 名称", required = true, example = "芋道源码") @Schema(description = "商品 SPU 名称", required = true, example = "芋道源码")
private String spuName; private String spuName;
@Schema(description = "商品 SKU 编号", required = true, example = "1") @Schema(description = "商品 SKU 编号", required = true, example = "1")
private Long skuId; private Long skuId;
/**
* 属性数组
*/
private List<AppProductPropertyValueDetailRespVO> properties;
@Schema(description = "商品图片", required = true, example = "https://www.iocoder.cn/1.png") @Schema(description = "商品图片", required = true, example = "https://www.iocoder.cn/1.png")
private String picUrl; private String picUrl;
@Schema(description = "购买数量", required = true, example = "1") @Schema(description = "购买数量", required = true, example = "1")
private Integer count; private Integer count;
@Schema(description = "商品原价(总)", required = true, example = "100") @Schema(description = "是否评价", required = true, example = "true")
private Integer originalPrice; private Boolean commentStatus;
// ========== 价格 + 支付基本信息 ==========
@Schema(description = "商品原价(单)", required = true, example = "100") @Schema(description = "商品原价(单)", required = true, example = "100")
private Integer originalUnitPrice; private Integer price;
/**
* 属性数组
*/
private List<AppProductPropertyValueDetailRespVO> properties;
} }

View File

@ -1,6 +1,6 @@
package cn.iocoder.yudao.module.trade.controller.app.order.vo; package cn.iocoder.yudao.module.trade.controller.app.order.vo;
import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemRespVO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@ -22,6 +22,9 @@ public class AppTradeOrderPageItemRespVO {
@Schema(description = "购买的商品数量", required = true, example = "10") @Schema(description = "购买的商品数量", required = true, example = "10")
private Integer productCount; private Integer productCount;
@Schema(description = "是否评价", required = true, example = "true")
private Boolean commentStatus;
// ========== 价格 + 支付基本信息 ========== // ========== 价格 + 支付基本信息 ==========
@Schema(description = "应付金额,单位:分", required = true, example = "1000") @Schema(description = "应付金额,单位:分", required = true, example = "1000")
@ -30,41 +33,6 @@ public class AppTradeOrderPageItemRespVO {
/** /**
* 订单项数组 * 订单项数组
*/ */
private List<Item> items; private List<AppTradeOrderItemRespVO> items;
@Schema(description = "用户 App - 交易订单的明细的订单项目")
@Data
public static class Item {
@Schema(description = "编号", required = true, example = "1")
private Long id;
@Schema(description = "商品 SPU 编号", required = true, example = "1")
private Long spuId;
@Schema(description = "商品 SPU 名称", required = true, example = "芋道源码")
private String spuName;
@Schema(description = "商品 SKU 编号", required = true, example = "1")
private Long skuId;
@Schema(description = "商品图片", required = true, example = "https://www.iocoder.cn/1.png")
private String picUrl;
@Schema(description = "购买数量", required = true, example = "1")
private Integer count;
@Schema(description = "商品原价(总)", required = true, example = "100")
private Integer originalPrice;
@Schema(description = "商品原价(单)", required = true, example = "100")
private Integer originalUnitPrice;
/**
* 属性数组
*/
private List<AppProductPropertyValueDetailRespVO> properties;
}
} }

View File

@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
// TODO 芋艿字段优化
@Schema(description = "交易订单分页 Request VO") @Schema(description = "交易订单分页 Request VO")
@Data @Data
public class AppTradeOrderPageReqVO extends PageParam { public class AppTradeOrderPageReqVO extends PageParam {
@ -15,4 +14,7 @@ public class AppTradeOrderPageReqVO extends PageParam {
@InEnum(value = TradeOrderStatusEnum.class, message = "订单状态必须是 {value}") @InEnum(value = TradeOrderStatusEnum.class, message = "订单状态必须是 {value}")
private Integer status; private Integer status;
@Schema(description = "是否评价", example = "true")
private Boolean commentStatus;
} }

View File

@ -61,7 +61,7 @@ public class AppTradeOrderSettlementRespVO {
public static class Price { public static class Price {
@Schema(description = "商品原价(总),单位:分", required = true, example = "500") @Schema(description = "商品原价(总),单位:分", required = true, example = "500")
private Integer originalPrice; private Integer totalPrice;
@Schema(description = "运费金额,单位:分", required = true, example = "50") @Schema(description = "运费金额,单位:分", required = true, example = "50")
private Integer deliveryPrice; private Integer deliveryPrice;

View File

@ -0,0 +1,39 @@
package cn.iocoder.yudao.module.trade.controller.app.order.vo.item;
import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Schema(description = "用户 App - 订单交易项 Response VO")
@Data
public class AppTradeOrderItemRespVO {
@Schema(description = "编号", required = true, example = "1")
private Long id;
@Schema(description = "商品 SPU 编号", required = true, example = "1")
private Long spuId;
@Schema(description = "商品 SPU 名称", required = true, example = "芋道源码")
private String spuName;
@Schema(description = "商品 SKU 编号", required = true, example = "1")
private Long skuId;
@Schema(description = "商品图片", required = true, example = "https://www.iocoder.cn/1.png")
private String picUrl;
@Schema(description = "购买数量", required = true, example = "1")
private Integer count;
@Schema(description = "商品原价(单)", required = true, example = "100")
private Integer price;
/**
* 属性数组
*/
private List<AppProductPropertyValueDetailRespVO> properties;
}

View File

@ -21,6 +21,7 @@ import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductProp
import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO;
import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderDetailRespVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderDetailRespVO;
import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageItemRespVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageItemRespVO;
import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemRespVO;
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; 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.dal.dataobject.order.TradeOrderItemDO;
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum;
@ -191,7 +192,7 @@ public interface TradeOrderConvert {
if (CollUtil.isEmpty(properties)) { if (CollUtil.isEmpty(properties)) {
continue; continue;
} }
AppTradeOrderPageItemRespVO.Item item = orderVO.getItems().get(i); AppTradeOrderItemRespVO item = orderVO.getItems().get(i);
item.setProperties(new ArrayList<>(properties.size())); item.setProperties(new ArrayList<>(properties.size()));
// 遍历每个 properties设置到 TradeOrderPageItemRespVO.Item // 遍历每个 properties设置到 TradeOrderPageItemRespVO.Item
properties.forEach(property -> { properties.forEach(property -> {
@ -237,4 +238,6 @@ public interface TradeOrderConvert {
} }
AppTradeOrderDetailRespVO convert3(TradeOrderDO order, List<TradeOrderItemDO> items); AppTradeOrderDetailRespVO convert3(TradeOrderDO order, List<TradeOrderItemDO> items);
AppTradeOrderItemRespVO convert03(TradeOrderItemDO bean);
} }

View File

@ -94,6 +94,13 @@ public class TradeOrderDO extends BaseDO {
* 商家备注 * 商家备注
*/ */
private String remark; private String remark;
/**
* 是否评价
*
* true - 已评价
* false - 未评价
*/
private Boolean commentStatus;
// ========== 价格 + 支付基本信息 ========== // ========== 价格 + 支付基本信息 ==========
@ -128,16 +135,17 @@ public class TradeOrderDO extends BaseDO {
/** /**
* 商品原价单位 * 商品原价单位
* *
* 基于 {@link TradeOrderItemDO#getOriginalPrice()} 求和 * totalPrice = {@link TradeOrderItemDO#getPrice()} * {@link TradeOrderItemDO#getCount()} 求和
* *
* 对应 taobao trade.total_fee 字段 * 对应 taobao trade.total_fee 字段
*/ */
private Integer originalPrice; private Integer totalPrice;
// TODO 芋艿是不是要删除这个字段
/** /**
* 订单原价单位 * 订单原价单位
* *
* 基于 {@link OrderItem#getPayPrice()} 求和 * 1. orderPrice = {@link OrderItem#getPayPrice()} 求和
* {@link #originalPrice} 的差异去除商品级优惠 * 2. orderPrice = {@link #totalPrice} - 商品级优惠
*/ */
private Integer orderPrice; private Integer orderPrice;
/** /**
@ -219,7 +227,7 @@ public class TradeOrderDO extends BaseDO {
// ========== 售后基本信息 ========== // ========== 售后基本信息 ==========
/** /**
* 收货状态 * 售后状态
* *
* 枚举 {@link TradeOrderAfterSaleStatusEnum} * 枚举 {@link TradeOrderAfterSaleStatusEnum}
*/ */

View File

@ -84,29 +84,23 @@ public class TradeOrderItemDO extends BaseDO {
* 购买数量 * 购买数量
*/ */
private Integer count; private Integer count;
// /** /**
// * 是否评论 TODO * 是否评价
// * *
// * false - 未评论 * true - 已评价
// * true - 已评论 * false - 未评价
// */ */
// private Boolean commented; private Boolean commentStatus;
// ========== 价格 + 支付基本信息 ========== // ========== 价格 + 支付基本信息 ==========
/**
* 商品原价单位
*
* = {@link #originalUnitPrice} * {@link #getCount()}
*/
private Integer originalPrice;
/** /**
* 商品原价单位 * 商品原价单位
* *
* 对应 ProductSkuDO price 字段 * 对应 ProductSkuDO price 字段
* 对应 taobao order.price 字段 * 对应 taobao order.price 字段
*/ */
private Integer originalUnitPrice; private Integer price;
/** /**
* 商品优惠单位 * 商品优惠单位
* *
@ -116,9 +110,9 @@ public class TradeOrderItemDO extends BaseDO {
*/ */
private Integer discountPrice; private Integer discountPrice;
/** /**
* 子订单实付金额不算主订单分摊金额单位 * 子订单实付金额不算主订单分摊金额单位
* *
* = {@link #originalPrice} * = {@link #price} * {@link #count}
* - {@link #discountPrice} * - {@link #discountPrice}
* *
* 对应 taobao order.payment 字段 * 对应 taobao order.payment 字段

View File

@ -40,6 +40,7 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
return selectPage(reqVO, new LambdaQueryWrapperX<TradeOrderDO>() return selectPage(reqVO, new LambdaQueryWrapperX<TradeOrderDO>()
.eq(TradeOrderDO::getUserId, userId) .eq(TradeOrderDO::getUserId, userId)
.eqIfPresent(TradeOrderDO::getStatus, reqVO.getStatus()) .eqIfPresent(TradeOrderDO::getStatus, reqVO.getStatus())
.eqIfPresent(TradeOrderDO::getCommentStatus, reqVO.getCommentStatus())
.orderByDesc(TradeOrderDO::getId)); // TODO 芋艿未来不同的 status不同的排序 .orderByDesc(TradeOrderDO::getId)); // TODO 芋艿未来不同的 status不同的排序
} }

View File

@ -169,7 +169,7 @@ public class TradeOrderServiceTest extends BaseDbUnitTest {
assertNull(tradeOrderDO.getRemark()); assertNull(tradeOrderDO.getRemark());
assertFalse(tradeOrderDO.getPayed()); assertFalse(tradeOrderDO.getPayed());
assertNull(tradeOrderDO.getPayTime()); assertNull(tradeOrderDO.getPayTime());
assertEquals(tradeOrderDO.getOriginalPrice(), 230); assertEquals(tradeOrderDO.getTotalPrice(), 230);
assertEquals(tradeOrderDO.getOrderPrice(), 100); assertEquals(tradeOrderDO.getOrderPrice(), 100);
assertEquals(tradeOrderDO.getDiscountPrice(), 0); assertEquals(tradeOrderDO.getDiscountPrice(), 0);
assertEquals(tradeOrderDO.getAdjustPrice(), 0); assertEquals(tradeOrderDO.getAdjustPrice(), 0);
@ -204,8 +204,8 @@ public class TradeOrderServiceTest extends BaseDbUnitTest {
//assertEquals(tradeOrderItemDO01.getSpuName(), sku01.getSpuName()); TODO 找不到spuName //assertEquals(tradeOrderItemDO01.getSpuName(), sku01.getSpuName()); TODO 找不到spuName
assertEquals(tradeOrderItemDO01.getPicUrl(), sku01.getPicUrl()); assertEquals(tradeOrderItemDO01.getPicUrl(), sku01.getPicUrl());
assertEquals(tradeOrderItemDO01.getCount(), 3); assertEquals(tradeOrderItemDO01.getCount(), 3);
assertEquals(tradeOrderItemDO01.getOriginalPrice(), 150); // assertEquals(tradeOrderItemDO01.getOriginalPrice(), 150);
assertEquals(tradeOrderItemDO01.getOriginalUnitPrice(), 50); assertEquals(tradeOrderItemDO01.getPrice(), 50);
assertEquals(tradeOrderItemDO01.getDiscountPrice(), 20); assertEquals(tradeOrderItemDO01.getDiscountPrice(), 20);
assertEquals(tradeOrderItemDO01.getPayPrice(), 130); assertEquals(tradeOrderItemDO01.getPayPrice(), 130);
assertEquals(tradeOrderItemDO01.getOrderPartPrice(), 7); assertEquals(tradeOrderItemDO01.getOrderPartPrice(), 7);
@ -224,8 +224,8 @@ public class TradeOrderServiceTest extends BaseDbUnitTest {
//assertEquals(tradeOrderItemDO02.getSpuName(), sku02.getSpuName()); TODO 找不到spuName //assertEquals(tradeOrderItemDO02.getSpuName(), sku02.getSpuName()); TODO 找不到spuName
assertEquals(tradeOrderItemDO02.getPicUrl(), sku02.getPicUrl()); assertEquals(tradeOrderItemDO02.getPicUrl(), sku02.getPicUrl());
assertEquals(tradeOrderItemDO02.getCount(), 4); assertEquals(tradeOrderItemDO02.getCount(), 4);
assertEquals(tradeOrderItemDO02.getOriginalPrice(), 80); // assertEquals(tradeOrderItemDO02.getOriginalPrice(), 80);
assertEquals(tradeOrderItemDO02.getOriginalUnitPrice(), 20); assertEquals(tradeOrderItemDO02.getPrice(), 20);
assertEquals(tradeOrderItemDO02.getDiscountPrice(), 40); assertEquals(tradeOrderItemDO02.getDiscountPrice(), 40);
assertEquals(tradeOrderItemDO02.getPayPrice(), 40); assertEquals(tradeOrderItemDO02.getPayPrice(), 40);
assertEquals(tradeOrderItemDO02.getOrderPartPrice(), 15); assertEquals(tradeOrderItemDO02.getOrderPartPrice(), 15);