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")
private Integer originalUnitPrice;
private Integer price;
@Schema(description = "商品优惠(总)", required = true, example = "100")
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.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.item.AppTradeOrderItemRespVO;
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;
@ -53,7 +54,7 @@ public class AppTradeOrderController {
AppTradeOrderSettlementRespVO settlement = new AppTradeOrderSettlementRespVO();
AppTradeOrderSettlementRespVO.Price price = new AppTradeOrderSettlementRespVO.Price();
price.setOriginalPrice(1000);
price.setTotalPrice(1000);
price.setDeliveryPrice(200);
price.setCouponPrice(100);
price.setPointPrice(50);
@ -184,4 +185,21 @@ public class AppTradeOrderController {
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")
private Long spuId;
@Schema(description = "商品 SPU 名称", required = true, example = "芋道源码")
private String spuName;
@Schema(description = "商品 SKU 编号", required = true, example = "1")
private Long skuId;
/**
* 属性数组
*/
private List<AppProductPropertyValueDetailRespVO> properties;
@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 = "true")
private Boolean commentStatus;
// ========== 价格 + 支付基本信息 ==========
@Schema(description = "商品原价(单)", required = true, example = "100")
private Integer originalUnitPrice;
/**
* 属性数组
*/
private List<AppProductPropertyValueDetailRespVO> properties;
private Integer price;
}

View File

@ -1,6 +1,6 @@
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 lombok.Data;
@ -22,6 +22,9 @@ public class AppTradeOrderPageItemRespVO {
@Schema(description = "购买的商品数量", required = true, example = "10")
private Integer productCount;
@Schema(description = "是否评价", required = true, example = "true")
private Boolean commentStatus;
// ========== 价格 + 支付基本信息 ==========
@Schema(description = "应付金额,单位:分", required = true, example = "1000")
@ -30,41 +33,6 @@ public class AppTradeOrderPageItemRespVO {
/**
* 订单项数组
*/
private List<Item> 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;
}
private List<AppTradeOrderItemRespVO> items;
}

View File

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

View File

@ -61,7 +61,7 @@ public class AppTradeOrderSettlementRespVO {
public static class Price {
@Schema(description = "商品原价(总),单位:分", required = true, example = "500")
private Integer originalPrice;
private Integer totalPrice;
@Schema(description = "运费金额,单位:分", required = true, example = "50")
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.AppTradeOrderDetailRespVO;
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.TradeOrderItemDO;
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum;
@ -191,7 +192,7 @@ public interface TradeOrderConvert {
if (CollUtil.isEmpty(properties)) {
continue;
}
AppTradeOrderPageItemRespVO.Item item = orderVO.getItems().get(i);
AppTradeOrderItemRespVO item = orderVO.getItems().get(i);
item.setProperties(new ArrayList<>(properties.size()));
// 遍历每个 properties设置到 TradeOrderPageItemRespVO.Item
properties.forEach(property -> {
@ -237,4 +238,6 @@ public interface TradeOrderConvert {
}
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;
/**
* 是否评价
*
* 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 字段
*/
private Integer originalPrice;
private Integer totalPrice;
// TODO 芋艿是不是要删除这个字段
/**
* 订单原价单位
*
* 基于 {@link OrderItem#getPayPrice()} 求和
* {@link #originalPrice} 的差异去除商品级优惠
* 1. orderPrice = {@link OrderItem#getPayPrice()} 求和
* 2. orderPrice = {@link #totalPrice} - 商品级优惠
*/
private Integer orderPrice;
/**
@ -219,7 +227,7 @@ public class TradeOrderDO extends BaseDO {
// ========== 售后基本信息 ==========
/**
* 收货状态
* 售后状态
*
* 枚举 {@link TradeOrderAfterSaleStatusEnum}
*/

View File

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

View File

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

View File

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