Commit e942b52a67471b6b79f525be52b1df371dcc8b90

Authored by YunaiV
1 parent e745bb66

mall:订单详情:调整售后字段

Showing 11 changed files with 67 additions and 67 deletions
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/delivery/DeliveryTypeEnum.java renamed to yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/delivery/DeliveryTypeEnum.java
1   -package cn.iocoder.yudao.module.product.enums.delivery;
  1 +package cn.iocoder.yudao.module.trade.enums.delivery;
2 2  
3 3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
4 4 import lombok.AllArgsConstructor;
... ... @@ -15,9 +15,8 @@ import java.util.Arrays;
15 15 @AllArgsConstructor
16 16 public enum DeliveryTypeEnum implements IntArrayValuable {
17 17  
18   - // TODO 芋艿:英文单词,需要再想下;
19 18 EXPRESS(1, "快递发货"),
20   - USER(2, "用户自提"),;
  19 + PICK_UP(2, "用户自提"),;
21 20  
22 21 public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DeliveryTypeEnum::getMode).toArray();
23 22  
... ...
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/order/TradeOrderItemAfterSaleStatusEnum.java
... ... @@ -17,8 +17,8 @@ import java.util.Arrays;
17 17 public enum TradeOrderItemAfterSaleStatusEnum implements IntArrayValuable {
18 18  
19 19 NONE(0, "未售后"),
20   - APPLY(1, "售后中"),
21   - SUCCESS(2, "已退款");
  20 + APPLY(10, "售后中"),
  21 + SUCCESS(20, "售后成功");
22 22  
23 23 public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(TradeOrderItemAfterSaleStatusEnum::getStatus).toArray();
24 24  
... ... @@ -31,9 +31,6 @@ public enum TradeOrderItemAfterSaleStatusEnum implements IntArrayValuable {
31 31 */
32 32 private final String name;
33 33  
34   - // TODO 芋艿:EXPIRED 已失效不允许申请售后
35   - // TODO 芋艿:PART_AFTER_SALE 部分售后
36   -
37 34 @Override
38 35 public int[] array() {
39 36 return ARRAYS;
... ...
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/order/TradeOrderAfterSaleStatusEnum.java renamed to yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/order/TradeOrderRefundStatusEnum.java
... ... @@ -7,19 +7,19 @@ import lombok.RequiredArgsConstructor;
7 7 import java.util.Arrays;
8 8  
9 9 /**
10   - * 交易订单 - 售后状态
  10 + * 交易订单 - 退款状态
11 11 *
12 12 * @author Sin
13 13 */
14 14 @RequiredArgsConstructor
15 15 @Getter
16   -public enum TradeOrderAfterSaleStatusEnum implements IntArrayValuable {
  16 +public enum TradeOrderRefundStatusEnum implements IntArrayValuable {
17 17  
18 18 NONE(0, "未退款"),
19   - PART(1, "部分退款"),
20   - ALL(2, "全部退款");
  19 + PART(10, "部分退款"),
  20 + ALL(20, "全部退款");
21 21  
22   - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(TradeOrderAfterSaleStatusEnum::getStatus).toArray();
  22 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(TradeOrderRefundStatusEnum::getStatus).toArray();
23 23  
24 24 /**
25 25 * 状态值
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java
... ... @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
13 13 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
14 14 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
15 15 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
  16 +import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties;
16 17 import cn.iocoder.yudao.module.trade.service.order.TradeOrderService;
17 18 import io.swagger.v3.oas.annotations.Operation;
18 19 import io.swagger.v3.oas.annotations.Parameter;
... ... @@ -46,6 +47,9 @@ public class AppTradeOrderController {
46 47 @Resource
47 48 private ProductPropertyValueApi productPropertyValueApi;
48 49  
  50 + @Resource
  51 + private TradeOrderProperties tradeOrderProperties;
  52 +
49 53 @GetMapping("/settlement")
50 54 @Operation(summary = "获得订单结算信息")
51 55 @PreAuthenticated
... ... @@ -154,7 +158,8 @@ public class AppTradeOrderController {
154 158 List<ProductPropertyValueDetailRespDTO> propertyValueDetails = productPropertyValueApi
155 159 .getPropertyValueDetailList(TradeOrderConvert.INSTANCE.convertPropertyValueIds(orderItems));
156 160 // 最终组合
157   - return success(TradeOrderConvert.INSTANCE.convert02(order, orderItems, propertyValueDetails));
  161 + return success(TradeOrderConvert.INSTANCE.convert02(order, orderItems,
  162 + propertyValueDetails, tradeOrderProperties));
158 163 }
159 164  
160 165 @GetMapping("/page")
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderDetailRespVO.java
1 1 package cn.iocoder.yudao.module.trade.controller.app.order.vo;
2 2  
3   -import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO;
  3 +import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemRespVO;
4 4 import io.swagger.v3.oas.annotations.media.Schema;
5 5 import lombok.Data;
6 6  
... ... @@ -38,6 +38,9 @@ public class AppTradeOrderDetailRespVO {
38 38 @Schema(description = "订单取消时间")
39 39 private LocalDateTime cancelTime;
40 40  
  41 + @Schema(description = "是否评价", required = true, example = "true")
  42 + private Boolean commentStatus;
  43 +
41 44 // ========== 价格 + 支付基本信息 ==========
42 45  
43 46 @Schema(description = "是否已支付", required = true, example = "true")
... ... @@ -49,6 +52,9 @@ public class AppTradeOrderDetailRespVO {
49 52 @Schema(description = "付款时间")
50 53 private LocalDateTime payTime;
51 54  
  55 + @Schema(description = "付款超时时间", required = true)
  56 + private LocalDateTime payExpireTime;
  57 +
52 58 @Schema(description = "支付渠道", required = true, example = "wx_lite_pay")
53 59 private String payChannelCode;
54 60  
... ... @@ -72,6 +78,9 @@ public class AppTradeOrderDetailRespVO {
72 78  
73 79 // ========== 收件 + 物流基本信息 ==========
74 80  
  81 + @Schema(description = "配送方式", required = true, example = "1")
  82 + private Integer deliveryType;
  83 +
75 84 @Schema(description = "发货物流单号", example = "1024")
76 85 private String logisticsNo;
77 86  
... ... @@ -112,42 +121,6 @@ public class AppTradeOrderDetailRespVO {
112 121 /**
113 122 * 订单项数组
114 123 */
115   - private List<Item> items;
116   -
117   - @Schema(description = "用户 App - 交易订单的分页项的订单项目")
118   - @Data
119   - public static class Item {
120   -
121   - @Schema(description = "编号", required = true, example = "1")
122   - private Long id;
123   -
124   - @Schema(description = "商品 SPU 编号", required = true, example = "1")
125   - private Long spuId;
126   - @Schema(description = "商品 SPU 名称", required = true, example = "芋道源码")
127   - private String spuName;
128   -
129   - @Schema(description = "商品 SKU 编号", required = true, example = "1")
130   - private Long skuId;
131   -
132   - /**
133   - * 属性数组
134   - */
135   - private List<AppProductPropertyValueDetailRespVO> properties;
136   -
137   - @Schema(description = "商品图片", required = true, example = "https://www.iocoder.cn/1.png")
138   - private String picUrl;
139   -
140   - @Schema(description = "购买数量", required = true, example = "1")
141   - private Integer count;
142   -
143   - @Schema(description = "是否评价", required = true, example = "true")
144   - private Boolean commentStatus;
145   -
146   - // ========== 价格 + 支付基本信息 ==========
147   -
148   - @Schema(description = "商品原价(单)", required = true, example = "100")
149   - private Integer price;
150   -
151   - }
  124 + private List<AppTradeOrderItemRespVO> items;
152 125  
153 126 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderPageItemRespVO.java
... ... @@ -37,6 +37,11 @@ public class AppTradeOrderPageItemRespVO {
37 37 @Schema(description = "应付金额,单位:分", required = true, example = "1000")
38 38 private Integer payPrice;
39 39  
  40 + // ========== 收件 + 物流基本信息 ==========
  41 +
  42 + @Schema(description = "配送方式", required = true, example = "1")
  43 + private Integer deliveryType;
  44 +
40 45 /**
41 46 * 订单项数组
42 47 */
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/item/AppTradeOrderItemRespVO.java
... ... @@ -15,25 +15,38 @@ public class AppTradeOrderItemRespVO {
15 15  
16 16 @Schema(description = "商品 SPU 编号", required = true, example = "1")
17 17 private Long spuId;
18   -
19 18 @Schema(description = "商品 SPU 名称", required = true, example = "芋道源码")
20 19 private String spuName;
21 20  
22 21 @Schema(description = "商品 SKU 编号", required = true, example = "1")
23 22 private Long skuId;
24 23  
  24 + /**
  25 + * 属性数组
  26 + */
  27 + private List<AppProductPropertyValueDetailRespVO> properties;
  28 +
25 29 @Schema(description = "商品图片", required = true, example = "https://www.iocoder.cn/1.png")
26 30 private String picUrl;
27 31  
28 32 @Schema(description = "购买数量", required = true, example = "1")
29 33 private Integer count;
30 34  
  35 + @Schema(description = "是否评价", required = true, example = "true")
  36 + private Boolean commentStatus;
  37 +
  38 + // ========== 价格 + 支付基本信息 ==========
  39 +
31 40 @Schema(description = "商品原价(单)", required = true, example = "100")
32 41 private Integer price;
33 42  
34   - /**
35   - * 属性数组
36   - */
37   - private List<AppProductPropertyValueDetailRespVO> properties;
  43 + // ========== 营销基本信息 ==========
  44 +
  45 + // TODO 芋艿:在捉摸一下
  46 +
  47 + // ========== 售后基本信息 ==========
38 48  
  49 + @Schema(description = "售后状态", required = true, example = "1")
  50 + private Integer afterSaleStatus;
  51 +
39 52 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java
... ... @@ -212,8 +212,9 @@ public interface TradeOrderConvert {
212 212 AppProductPropertyValueDetailRespVO convert02(ProductPropertyValueDetailRespDTO bean);
213 213  
214 214 default AppTradeOrderDetailRespVO convert02(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
215   - List<ProductPropertyValueDetailRespDTO> propertyValueDetails) {
  215 + List<ProductPropertyValueDetailRespDTO> propertyValueDetails, TradeOrderProperties tradeOrderProperties) {
216 216 AppTradeOrderDetailRespVO orderVO = convert3(order, orderItems);
  217 + orderVO.setPayExpireTime(addTime(tradeOrderProperties.getExpireTime()));
217 218 // 处理商品属性
218 219 Map<Long, ProductPropertyValueDetailRespDTO> propertyValueDetailMap = convertMap(propertyValueDetails, ProductPropertyValueDetailRespDTO::getValueId);
219 220 for (int i = 0; i < orderItems.size(); i++) {
... ... @@ -221,7 +222,7 @@ public interface TradeOrderConvert {
221 222 if (CollUtil.isEmpty(properties)) {
222 223 continue;
223 224 }
224   - AppTradeOrderDetailRespVO.Item item = orderVO.getItems().get(i);
  225 + AppTradeOrderItemRespVO item = orderVO.getItems().get(i);
225 226 item.setProperties(new ArrayList<>(properties.size()));
226 227 // 遍历每个 properties,设置到 TradeOrderPageItemRespVO.Item 中
227 228 properties.forEach(property -> {
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderDO.java
... ... @@ -3,8 +3,9 @@ package cn.iocoder.yudao.module.trade.dal.dataobject.order;
3 3 import cn.iocoder.yudao.framework.common.enums.TerminalEnum;
4 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5 5 import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateRespDTO.OrderItem;
  6 +import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum;
6 7 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderCancelTypeEnum;
7   -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderAfterSaleStatusEnum;
  8 +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderRefundStatusEnum;
8 9 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderDeliveryStatusEnum;
9 10 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
10 11 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;
... ... @@ -180,6 +181,12 @@ public class TradeOrderDO extends BaseDO {
180 181  
181 182 // ========== 收件 + 物流基本信息 ==========
182 183 /**
  184 + * 配送方式
  185 + *
  186 + * 枚举 {@link DeliveryTypeEnum}
  187 + */
  188 + private Integer deliveryType;
  189 + /**
183 190 * 配置模板的编号
184 191 *
185 192 * 关联 DeliveryTemplateDO 的 id 编号
... ... @@ -229,9 +236,9 @@ public class TradeOrderDO extends BaseDO {
229 236 /**
230 237 * 售后状态
231 238 *
232   - * 枚举 {@link TradeOrderAfterSaleStatusEnum}
  239 + * 枚举 {@link TradeOrderRefundStatusEnum}
233 240 */
234   - private Integer afterSaleStatus;
  241 + private Integer refundStatus;
235 242 /**
236 243 * 退款金额,单位:分
237 244 *
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java
... ... @@ -178,12 +178,12 @@ public class TradeOrderServiceImpl implements TradeOrderService {
178 178 tradeOrderDO.setNo(IdUtil.getSnowflakeNextId() + ""); // TODO @LeeYan9: 思考下, 怎么生成好点哈; 这个是会展示给用户的;
179 179 tradeOrderDO.setStatus(TradeOrderStatusEnum.UNPAID.getStatus());
180 180 tradeOrderDO.setType(TradeOrderTypeEnum.NORMAL.getType());
181   - tradeOrderDO.setAfterSaleStatus(TradeOrderAfterSaleStatusEnum.NONE.getStatus());
  181 + tradeOrderDO.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus());
182 182 tradeOrderDO.setProductCount(getSumValue(order.getItems(), PriceCalculateRespDTO.OrderItem::getCount, Integer::sum));
183 183 tradeOrderDO.setTerminal(TerminalEnum.H5.getTerminal()); // todo 数据来源?
184 184 tradeOrderDO.setAdjustPrice(0).setPayed(false); // 支付信息
185 185 tradeOrderDO.setDeliveryStatus(TradeOrderDeliveryStatusEnum.UNDELIVERED.getStatus()); // 物流信息
186   - tradeOrderDO.setAfterSaleStatus(TradeOrderAfterSaleStatusEnum.NONE.getStatus()).setRefundPrice(0); // 退款信息
  186 + tradeOrderDO.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0); // 退款信息
187 187 tradeOrderMapper.insert(tradeOrderDO);
188 188 return tradeOrderDO;
189 189 }
... ... @@ -491,7 +491,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
491 491 Integer orderRefundPrice = order.getRefundPrice() + refundPrice;
492 492 if (isAllOrderItemAfterSaleSuccess(order.getId())) { // 如果都售后成功,则需要取消订单
493 493 tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
494   - .setAfterSaleStatus(TradeOrderAfterSaleStatusEnum.ALL.getStatus()).setRefundPrice(orderRefundPrice)
  494 + .setRefundStatus(TradeOrderRefundStatusEnum.ALL.getStatus()).setRefundPrice(orderRefundPrice)
495 495 .setCancelType(TradeOrderCancelTypeEnum.AFTER_SALE_CLOSE.getType()).setCancelTime(LocalDateTime.now()));
496 496  
497 497 // TODO 芋艿:记录订单日志
... ... @@ -499,7 +499,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
499 499 // TODO 芋艿:站内信?
500 500 } else { // 如果部分售后,则更新退款金额
501 501 tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
502   - .setAfterSaleStatus(TradeOrderAfterSaleStatusEnum.PART.getStatus()).setRefundPrice(orderRefundPrice));
  502 + .setRefundStatus(TradeOrderRefundStatusEnum.PART.getStatus()).setRefundPrice(orderRefundPrice));
503 503 }
504 504  
505 505 // TODO 芋艿:未来如果有分佣,需要更新相关分佣订单为已失效
... ...
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceTest.java
... ... @@ -185,7 +185,7 @@ public class TradeOrderServiceTest extends BaseDbUnitTest {
185 185 assertEquals(tradeOrderDO.getReceiverMobile(), "15601691300");
186 186 assertEquals(tradeOrderDO.getReceiverAreaId(), 3306);
187 187 assertEquals(tradeOrderDO.getReceiverDetailAddress(), "土豆村");
188   - assertEquals(tradeOrderDO.getAfterSaleStatus(), TradeOrderAfterSaleStatusEnum.NONE.getStatus());
  188 + assertEquals(tradeOrderDO.getRefundStatus(), TradeOrderRefundStatusEnum.NONE.getStatus());
189 189 assertEquals(tradeOrderDO.getRefundPrice(), 0);
190 190 assertEquals(tradeOrderDO.getCouponPrice(), 30);
191 191 assertEquals(tradeOrderDO.getPointPrice(), 10);
... ...