|
@@ -221,6 +221,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
} else if (Objects.equals(createReqVO.getDeliveryType(), DeliveryTypeEnum.PICK_UP.getType())) {
|
|
|
order.setReceiverName(createReqVO.getReceiverName()).setReceiverMobile(createReqVO.getReceiverMobile());
|
|
|
order.setPickUpVerifyCode(RandomUtil.randomNumbers(8)); // 随机一个核销码,长度为 8 位
|
|
|
+ } else if (Objects.equals(createReqVO.getDeliveryType(), DeliveryTypeEnum.VIRTUAL_PRODUCT.getType())) {
|
|
|
+ MemberAddressRespDTO address = addressApi.getAddress(createReqVO.getAddressId(), userId);
|
|
|
+ order.setReceiverName(createReqVO.getReceiverName()).setReceiverMobile(createReqVO.getReceiverMobile())
|
|
|
+ .setReceiverDetailAddress(address.getDetailAddress());
|
|
|
}
|
|
|
return order;
|
|
|
}
|
|
@@ -356,12 +360,19 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_DELIVERY)
|
|
|
public void deliveryOrder(TradeOrderDeliveryReqVO deliveryReqVO) {
|
|
|
+ //校验发货信息不能都为空
|
|
|
+ if(deliveryReqVO.getLogisticsNo() == null && deliveryReqVO.getDeliveryRemark() == null){
|
|
|
+ throw exception(ORDER_DELIVERY_DETAILS_IS_NULL);
|
|
|
+ }
|
|
|
+
|
|
|
// 1.1 校验并获得交易订单(可发货)
|
|
|
TradeOrderDO order = validateOrderDeliverable(deliveryReqVO.getId());
|
|
|
order.setLogisticsId(deliveryReqVO.getLogisticsId());
|
|
|
order.setLogisticsNo(deliveryReqVO.getLogisticsNo());
|
|
|
+ order.setAttachment(deliveryReqVO.getAttachment());
|
|
|
+ order.setDeliveryRemark(deliveryReqVO.getDeliveryRemark());
|
|
|
// 1.2 校验 deliveryType 是否为快递,是快递才可以发货
|
|
|
- if (ObjectUtil.notEqual(order.getDeliveryType(), DeliveryTypeEnum.EXPRESS.getType())) {
|
|
|
+ if (ObjectUtil.notEqual(order.getDeliveryType(), DeliveryTypeEnum.EXPRESS.getType()) || ObjectUtil.notEqual(order.getDeliveryType(), DeliveryTypeEnum.VIRTUAL_PRODUCT.getType())) {
|
|
|
throw exception(ORDER_DELIVERY_FAIL_DELIVERY_TYPE_NOT_EXPRESS);
|
|
|
}
|
|
|
|
|
@@ -369,7 +380,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
TradeOrderDO updateOrderObj = new TradeOrderDO();
|
|
|
// 2.1 快递发货
|
|
|
DeliveryExpressDO express = null;
|
|
|
- if (ObjectUtil.notEqual(deliveryReqVO.getLogisticsId(), TradeOrderDO.LOGISTICS_ID_NULL)) {
|
|
|
+ if (ObjectUtil.notEqual(deliveryReqVO.getLogisticsId(), TradeOrderDO.LOGISTICS_ID_NULL) && deliveryReqVO.getLogisticsId() != null) {
|
|
|
express = deliveryExpressService.validateDeliveryExpress(deliveryReqVO.getLogisticsId());
|
|
|
updateOrderObj.setLogisticsId(deliveryReqVO.getLogisticsId()).setLogisticsNo(deliveryReqVO.getLogisticsNo());
|
|
|
} else {
|
|
@@ -379,13 +390,20 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
try {
|
|
|
//发送订单订阅
|
|
|
- testSubscribe(order);
|
|
|
+ if (deliveryReqVO.getLogisticsId() != null && deliveryReqVO.getLogisticsNo() != null) {
|
|
|
+ testSubscribe(order);
|
|
|
+ }
|
|
|
} catch (Exception e) {
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
|
|
|
// 执行更新
|
|
|
- updateOrderObj.setStatus(TradeOrderStatusEnum.DELIVERED.getStatus()).setDeliveryTime(LocalDateTime.now());
|
|
|
+ if(deliveryReqVO.getDeliveryRemark() != null){
|
|
|
+ //如果是虚拟商品直接完成发货和签收
|
|
|
+ updateOrderObj.setStatus(TradeOrderStatusEnum.COMPLETED.getStatus()).setDeliveryTime(LocalDateTime.now()).setReceivingTime(LocalDateTime.now());
|
|
|
+ }else{
|
|
|
+ updateOrderObj.setStatus(TradeOrderStatusEnum.DELIVERED.getStatus()).setDeliveryTime(LocalDateTime.now());
|
|
|
+ }
|
|
|
int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(), updateOrderObj);
|
|
|
if (updateCount == 0) {
|
|
|
throw exception(ORDER_DELIVERY_FAIL_STATUS_NOT_UNDELIVERED);
|
|
@@ -408,617 +426,617 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
params.add(LocalDateTime.now().format(formatter));
|
|
|
params.add(tradeOrderItemMapper.getSupNameByOrderId(order.getId()));
|
|
|
- wcChatMessageUtils.sendWcChatMessage(order.getUserId(), WcChatMessageTemplateIdEnum.ORDER_DELIVERY.getTemplateId(),
|
|
|
- params, null,order.getUserId(), order.getId());
|
|
|
+ wcChatMessageUtils.sendWcChatMessage(order.getUserId(), WcChatMessageTemplateIdEnum.ORDER_DELIVERY2.getTemplateId(),
|
|
|
+ params, null, order.getUserId(), order.getId());
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * 订阅物流信息
|
|
|
- *
|
|
|
- * @param order 交易订单对象,包含物流信息和接收人手机号
|
|
|
- * @throws Exception 抛出异常,可能由于外部服务调用失败等原因
|
|
|
- */
|
|
|
-private void testSubscribe(TradeOrderDO order) throws Exception {
|
|
|
- // 根据物流ID获取配送信息
|
|
|
- DeliveryExpressDO deliveryExpress = deliveryExpressService.getDeliveryExpress(order.getLogisticsId());
|
|
|
-
|
|
|
- // 设置订阅参数,包括回调URL和手机号
|
|
|
- SubscribeParameters subscribeParameters = new SubscribeParameters();
|
|
|
- subscribeParameters.setCallbackurl("http://47.107.28.221:8002/admin-api/trade/order/callBackUrl?orderId=" + order.getId());
|
|
|
- subscribeParameters.setPhone(order.getReceiverMobile());
|
|
|
- //添加盐
|
|
|
- subscribeParameters.setSalt(order.getLogisticsNo());
|
|
|
-
|
|
|
- // 创建订阅参数实例,并设置相关公司代码、物流单号和密钥
|
|
|
- SubscribeParam subscribeParam = new SubscribeParam();
|
|
|
- subscribeParam.setParameters(subscribeParameters);
|
|
|
- subscribeParam.setCompany(deliveryExpress.getCode());
|
|
|
- subscribeParam.setNumber(order.getLogisticsNo());
|
|
|
- subscribeParam.setKey(key);
|
|
|
-
|
|
|
- // 构建订阅请求对象,设置请求模式和参数
|
|
|
- SubscribeReq subscribeReq = new SubscribeReq();
|
|
|
- subscribeReq.setSchema(ApiInfoConstant.SUBSCRIBE_SCHEMA);
|
|
|
- subscribeReq.setParam(new Gson().toJson(subscribeParam));
|
|
|
-
|
|
|
- // 调用订阅服务,并打印执行结果
|
|
|
- IBaseClient subscribe = new Subscribe();
|
|
|
- HttpResult execute = subscribe.execute(subscribeReq);
|
|
|
-
|
|
|
- Gson gson = new Gson();
|
|
|
- JsonObject jsonObject = gson.fromJson(execute.getBody(), JsonObject.class);
|
|
|
- boolean result = jsonObject.get("result").getAsBoolean();
|
|
|
- String returnCode = jsonObject.get("returnCode").getAsString();
|
|
|
-
|
|
|
- if (result && returnCode.equals("200")) {
|
|
|
- log.info("订单号:{}:订阅成功", order.getNo());
|
|
|
-
|
|
|
- order.setSubscriptionLogisticsInfo(TradeOrderSubscribeStatusEnum.SUBSCRIBE.getStatus());
|
|
|
- } else if (returnCode.equals("600") || returnCode.equals("601")) {
|
|
|
- throw exception(NOT_SUFFICIENT_FUNDS);
|
|
|
- } else {
|
|
|
- log.info("订单号:{}:订阅失败原因:{}",order.getNo(),jsonObject);
|
|
|
-
|
|
|
- order.setSubscriptionLogisticsInfo(TradeOrderSubscribeStatusEnum.abnormal.getStatus());
|
|
|
- }
|
|
|
- tradeOrderMapper.updateById(order);
|
|
|
+ /**
|
|
|
+ * 订阅物流信息
|
|
|
+ *
|
|
|
+ * @param order 交易订单对象,包含物流信息和接收人手机号
|
|
|
+ * @throws Exception 抛出异常,可能由于外部服务调用失败等原因
|
|
|
+ */
|
|
|
+ private void testSubscribe(TradeOrderDO order) throws Exception {
|
|
|
+ // 根据物流ID获取配送信息
|
|
|
+ DeliveryExpressDO deliveryExpress = deliveryExpressService.getDeliveryExpress(order.getLogisticsId());
|
|
|
+
|
|
|
+ // 设置订阅参数,包括回调URL和手机号
|
|
|
+ SubscribeParameters subscribeParameters = new SubscribeParameters();
|
|
|
+ subscribeParameters.setCallbackurl("http://47.107.28.221:8002/admin-api/trade/order/callBackUrl?orderId=" + order.getId());
|
|
|
+ subscribeParameters.setPhone(order.getReceiverMobile());
|
|
|
+ //添加盐
|
|
|
+ subscribeParameters.setSalt(order.getLogisticsNo());
|
|
|
+
|
|
|
+ // 创建订阅参数实例,并设置相关公司代码、物流单号和密钥
|
|
|
+ SubscribeParam subscribeParam = new SubscribeParam();
|
|
|
+ subscribeParam.setParameters(subscribeParameters);
|
|
|
+ subscribeParam.setCompany(deliveryExpress.getCode());
|
|
|
+ subscribeParam.setNumber(order.getLogisticsNo());
|
|
|
+ subscribeParam.setKey(key);
|
|
|
+
|
|
|
+ // 构建订阅请求对象,设置请求模式和参数
|
|
|
+ SubscribeReq subscribeReq = new SubscribeReq();
|
|
|
+ subscribeReq.setSchema(ApiInfoConstant.SUBSCRIBE_SCHEMA);
|
|
|
+ subscribeReq.setParam(new Gson().toJson(subscribeParam));
|
|
|
+
|
|
|
+ // 调用订阅服务,并打印执行结果
|
|
|
+ IBaseClient subscribe = new Subscribe();
|
|
|
+ HttpResult execute = subscribe.execute(subscribeReq);
|
|
|
+
|
|
|
+ Gson gson = new Gson();
|
|
|
+ JsonObject jsonObject = gson.fromJson(execute.getBody(), JsonObject.class);
|
|
|
+ boolean result = jsonObject.get("result").getAsBoolean();
|
|
|
+ String returnCode = jsonObject.get("returnCode").getAsString();
|
|
|
+
|
|
|
+ if (result && returnCode.equals("200")) {
|
|
|
+ log.info("订单号:{}:订阅成功", order.getNo());
|
|
|
+
|
|
|
+ order.setSubscriptionLogisticsInfo(TradeOrderSubscribeStatusEnum.SUBSCRIBE.getStatus());
|
|
|
+ } else if (returnCode.equals("600") || returnCode.equals("601")) {
|
|
|
+ throw exception(NOT_SUFFICIENT_FUNDS);
|
|
|
+ } else {
|
|
|
+ log.info("订单号:{}:订阅失败原因:{}", order.getNo(), jsonObject);
|
|
|
|
|
|
-}
|
|
|
+ order.setSubscriptionLogisticsInfo(TradeOrderSubscribeStatusEnum.abnormal.getStatus());
|
|
|
+ }
|
|
|
+ tradeOrderMapper.updateById(order);
|
|
|
|
|
|
-/**
|
|
|
- * 校验交易订单满足被发货的条件
|
|
|
- * <p>
|
|
|
- * 1. 交易订单未发货
|
|
|
- *
|
|
|
- * @param id 交易订单编号
|
|
|
- * @return 交易订单
|
|
|
- */
|
|
|
-private TradeOrderDO validateOrderDeliverable(Long id) {
|
|
|
- TradeOrderDO order = validateOrderExists(id);
|
|
|
- // 1. 校验订单是否未发货
|
|
|
- if (ObjectUtil.notEqual(TradeOrderRefundStatusEnum.NONE.getStatus(), order.getRefundStatus())) {
|
|
|
- throw exception(ORDER_DELIVERY_FAIL_REFUND_STATUS_NOT_NONE);
|
|
|
}
|
|
|
|
|
|
- // 2. 执行 TradeOrderHandler 前置处理
|
|
|
- tradeOrderHandlers.forEach(handler -> handler.beforeDeliveryOrder(order));
|
|
|
- return order;
|
|
|
-}
|
|
|
+ /**
|
|
|
+ * 校验交易订单满足被发货的条件
|
|
|
+ * <p>
|
|
|
+ * 1. 交易订单未发货
|
|
|
+ *
|
|
|
+ * @param id 交易订单编号
|
|
|
+ * @return 交易订单
|
|
|
+ */
|
|
|
+ private TradeOrderDO validateOrderDeliverable(Long id) {
|
|
|
+ TradeOrderDO order = validateOrderExists(id);
|
|
|
+ // 1. 校验订单是否未发货
|
|
|
+ if (ObjectUtil.notEqual(TradeOrderRefundStatusEnum.NONE.getStatus(), order.getRefundStatus())) {
|
|
|
+ throw exception(ORDER_DELIVERY_FAIL_REFUND_STATUS_NOT_NONE);
|
|
|
+ }
|
|
|
|
|
|
-@NotNull
|
|
|
-private TradeOrderDO validateOrderExists(Long id) {
|
|
|
- // 校验订单是否存在
|
|
|
- TradeOrderDO order = tradeOrderMapper.selectById(id);
|
|
|
- if (order == null) {
|
|
|
- throw exception(ORDER_NOT_FOUND);
|
|
|
+ // 2. 执行 TradeOrderHandler 前置处理
|
|
|
+ tradeOrderHandlers.forEach(handler -> handler.beforeDeliveryOrder(order));
|
|
|
+ return order;
|
|
|
}
|
|
|
- return order;
|
|
|
-}
|
|
|
|
|
|
-@Override
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_RECEIVE)
|
|
|
-public void receiveOrderByMember(Long userId, Long id) {
|
|
|
- // 校验并获得交易订单(可收货)
|
|
|
- TradeOrderDO order = validateOrderReceivable(userId, id);
|
|
|
+ @NotNull
|
|
|
+ private TradeOrderDO validateOrderExists(Long id) {
|
|
|
+ // 校验订单是否存在
|
|
|
+ TradeOrderDO order = tradeOrderMapper.selectById(id);
|
|
|
+ if (order == null) {
|
|
|
+ throw exception(ORDER_NOT_FOUND);
|
|
|
+ }
|
|
|
+ return order;
|
|
|
+ }
|
|
|
|
|
|
- // 收货订单
|
|
|
- receiveOrder0(order);
|
|
|
-}
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_RECEIVE)
|
|
|
+ public void receiveOrderByMember(Long userId, Long id) {
|
|
|
+ // 校验并获得交易订单(可收货)
|
|
|
+ TradeOrderDO order = validateOrderReceivable(userId, id);
|
|
|
|
|
|
-@Override
|
|
|
-public int receiveOrderBySystem() {
|
|
|
- // 1. 查询过期的待支付订单
|
|
|
- LocalDateTime expireTime = minusTime(tradeOrderProperties.getReceiveExpireTime());
|
|
|
- List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndDeliveryTimeLt(
|
|
|
- TradeOrderStatusEnum.DELIVERED.getStatus(), expireTime);
|
|
|
- if (CollUtil.isEmpty(orders)) {
|
|
|
- return 0;
|
|
|
+ // 收货订单
|
|
|
+ receiveOrder0(order);
|
|
|
}
|
|
|
|
|
|
- // 2. 遍历执行,逐个取消
|
|
|
- int count = 0;
|
|
|
- for (TradeOrderDO order : orders) {
|
|
|
- try {
|
|
|
- getSelf().receiveOrderBySystem(order);
|
|
|
- count++;
|
|
|
- } catch (Throwable e) {
|
|
|
- log.error("[receiveOrderBySystem][order({}) 自动收货订单异常]", order.getId(), e);
|
|
|
+ @Override
|
|
|
+ public int receiveOrderBySystem() {
|
|
|
+ // 1. 查询过期的待支付订单
|
|
|
+ LocalDateTime expireTime = minusTime(tradeOrderProperties.getReceiveExpireTime());
|
|
|
+ List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndDeliveryTimeLt(
|
|
|
+ TradeOrderStatusEnum.DELIVERED.getStatus(), expireTime);
|
|
|
+ if (CollUtil.isEmpty(orders)) {
|
|
|
+ return 0;
|
|
|
}
|
|
|
- }
|
|
|
- return count;
|
|
|
-}
|
|
|
|
|
|
-/**
|
|
|
- * 自动收货单个订单
|
|
|
- *
|
|
|
- * @param order 订单
|
|
|
- */
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_RECEIVE)
|
|
|
-public void receiveOrderBySystem(TradeOrderDO order) {
|
|
|
- receiveOrder0(order);
|
|
|
-}
|
|
|
+ // 2. 遍历执行,逐个取消
|
|
|
+ int count = 0;
|
|
|
+ for (TradeOrderDO order : orders) {
|
|
|
+ try {
|
|
|
+ getSelf().receiveOrderBySystem(order);
|
|
|
+ count++;
|
|
|
+ } catch (Throwable e) {
|
|
|
+ log.error("[receiveOrderBySystem][order({}) 自动收货订单异常]", order.getId(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
|
|
|
-/**
|
|
|
- * 收货订单的核心实现
|
|
|
- *
|
|
|
- * @param order 订单
|
|
|
- */
|
|
|
-private void receiveOrder0(TradeOrderDO order) {
|
|
|
- // 更新 TradeOrderDO 状态为已完成
|
|
|
- int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(),
|
|
|
- new TradeOrderDO().setStatus(TradeOrderStatusEnum.COMPLETED.getStatus()).setReceiveTime(LocalDateTime.now()));
|
|
|
- if (updateCount == 0) {
|
|
|
- throw exception(ORDER_RECEIVE_FAIL_STATUS_NOT_DELIVERED);
|
|
|
+ /**
|
|
|
+ * 自动收货单个订单
|
|
|
+ *
|
|
|
+ * @param order 订单
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_RECEIVE)
|
|
|
+ public void receiveOrderBySystem(TradeOrderDO order) {
|
|
|
+ receiveOrder0(order);
|
|
|
}
|
|
|
|
|
|
- // 插入订单日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus());
|
|
|
-}
|
|
|
+ /**
|
|
|
+ * 收货订单的核心实现
|
|
|
+ *
|
|
|
+ * @param order 订单
|
|
|
+ */
|
|
|
+ private void receiveOrder0(TradeOrderDO order) {
|
|
|
+ // 更新 TradeOrderDO 状态为已完成
|
|
|
+ int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(),
|
|
|
+ new TradeOrderDO().setStatus(TradeOrderStatusEnum.COMPLETED.getStatus()).setReceiveTime(LocalDateTime.now()));
|
|
|
+ if (updateCount == 0) {
|
|
|
+ throw exception(ORDER_RECEIVE_FAIL_STATUS_NOT_DELIVERED);
|
|
|
+ }
|
|
|
|
|
|
-/**
|
|
|
- * 校验交易订单满足可售货的条件
|
|
|
- * <p>
|
|
|
- * 1. 交易订单待收货
|
|
|
- *
|
|
|
- * @param userId 用户编号
|
|
|
- * @param id 交易订单编号
|
|
|
- * @return 交易订单
|
|
|
- */
|
|
|
-private TradeOrderDO validateOrderReceivable(Long userId, Long id) {
|
|
|
- // 校验订单是否存在
|
|
|
- TradeOrderDO order = tradeOrderMapper.selectByIdAndUserId(id, userId);
|
|
|
- if (order == null) {
|
|
|
- throw exception(ORDER_NOT_FOUND);
|
|
|
- }
|
|
|
- // 校验订单是否是待收货状态
|
|
|
- if (!TradeOrderStatusEnum.isDelivered(order.getStatus())) {
|
|
|
- throw exception(ORDER_RECEIVE_FAIL_STATUS_NOT_DELIVERED);
|
|
|
+ // 插入订单日志
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus());
|
|
|
}
|
|
|
- return order;
|
|
|
-}
|
|
|
|
|
|
-@Override
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CANCEL)
|
|
|
-public void cancelOrderByMember(Long userId, Long id) {
|
|
|
- // 1.1 校验存在
|
|
|
- TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id, userId);
|
|
|
- if (order == null) {
|
|
|
- throw exception(ORDER_NOT_FOUND);
|
|
|
- }
|
|
|
- // 1.2 校验状态
|
|
|
- if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.UNPAID.getStatus())) {
|
|
|
- throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
|
|
|
+ /**
|
|
|
+ * 校验交易订单满足可售货的条件
|
|
|
+ * <p>
|
|
|
+ * 1. 交易订单待收货
|
|
|
+ *
|
|
|
+ * @param userId 用户编号
|
|
|
+ * @param id 交易订单编号
|
|
|
+ * @return 交易订单
|
|
|
+ */
|
|
|
+ private TradeOrderDO validateOrderReceivable(Long userId, Long id) {
|
|
|
+ // 校验订单是否存在
|
|
|
+ TradeOrderDO order = tradeOrderMapper.selectByIdAndUserId(id, userId);
|
|
|
+ if (order == null) {
|
|
|
+ throw exception(ORDER_NOT_FOUND);
|
|
|
+ }
|
|
|
+ // 校验订单是否是待收货状态
|
|
|
+ if (!TradeOrderStatusEnum.isDelivered(order.getStatus())) {
|
|
|
+ throw exception(ORDER_RECEIVE_FAIL_STATUS_NOT_DELIVERED);
|
|
|
+ }
|
|
|
+ return order;
|
|
|
}
|
|
|
|
|
|
- // 2. 取消订单
|
|
|
- cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
|
|
|
-}
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CANCEL)
|
|
|
+ public void cancelOrderByMember(Long userId, Long id) {
|
|
|
+ // 1.1 校验存在
|
|
|
+ TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id, userId);
|
|
|
+ if (order == null) {
|
|
|
+ throw exception(ORDER_NOT_FOUND);
|
|
|
+ }
|
|
|
+ // 1.2 校验状态
|
|
|
+ if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.UNPAID.getStatus())) {
|
|
|
+ throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
|
|
|
+ }
|
|
|
|
|
|
-@Override
|
|
|
-public int cancelOrderBySystem() {
|
|
|
- // 1. 查询过期的待支付订单
|
|
|
- LocalDateTime expireTime = minusTime(tradeOrderProperties.getPayExpireTime());
|
|
|
- List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndCreateTimeLt(
|
|
|
- TradeOrderStatusEnum.UNPAID.getStatus(), expireTime);
|
|
|
- if (CollUtil.isEmpty(orders)) {
|
|
|
- return 0;
|
|
|
+ // 2. 取消订单
|
|
|
+ cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
|
|
|
}
|
|
|
|
|
|
- // 2. 遍历执行,逐个取消
|
|
|
- int count = 0;
|
|
|
- for (TradeOrderDO order : orders) {
|
|
|
- try {
|
|
|
- getSelf().cancelOrderBySystem(order);
|
|
|
- count++;
|
|
|
- } catch (Throwable e) {
|
|
|
- log.error("[cancelOrderBySystem][order({}) 过期订单异常]", order.getId(), e);
|
|
|
+ @Override
|
|
|
+ public int cancelOrderBySystem() {
|
|
|
+ // 1. 查询过期的待支付订单
|
|
|
+ LocalDateTime expireTime = minusTime(tradeOrderProperties.getPayExpireTime());
|
|
|
+ List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndCreateTimeLt(
|
|
|
+ TradeOrderStatusEnum.UNPAID.getStatus(), expireTime);
|
|
|
+ if (CollUtil.isEmpty(orders)) {
|
|
|
+ return 0;
|
|
|
}
|
|
|
- }
|
|
|
- return count;
|
|
|
-}
|
|
|
|
|
|
-/**
|
|
|
- * 自动取消单个订单
|
|
|
- *
|
|
|
- * @param order 订单
|
|
|
- */
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_CANCEL)
|
|
|
-public void cancelOrderBySystem(TradeOrderDO order) {
|
|
|
- cancelOrder0(order, TradeOrderCancelTypeEnum.PAY_TIMEOUT);
|
|
|
-}
|
|
|
+ // 2. 遍历执行,逐个取消
|
|
|
+ int count = 0;
|
|
|
+ for (TradeOrderDO order : orders) {
|
|
|
+ try {
|
|
|
+ getSelf().cancelOrderBySystem(order);
|
|
|
+ count++;
|
|
|
+ } catch (Throwable e) {
|
|
|
+ log.error("[cancelOrderBySystem][order({}) 过期订单异常]", order.getId(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
|
|
|
-/**
|
|
|
- * 取消订单的核心实现
|
|
|
- *
|
|
|
- * @param order 订单
|
|
|
- * @param cancelType 取消类型
|
|
|
- */
|
|
|
-private void cancelOrder0(TradeOrderDO order, TradeOrderCancelTypeEnum cancelType) {
|
|
|
- // 1. 更新 TradeOrderDO 状态为已取消
|
|
|
- int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(),
|
|
|
- new TradeOrderDO().setStatus(TradeOrderStatusEnum.CANCELED.getStatus())
|
|
|
- .setCancelType(cancelType.getType()).setCancelTime(LocalDateTime.now()));
|
|
|
- if (updateCount == 0) {
|
|
|
- throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
|
|
|
+ /**
|
|
|
+ * 自动取消单个订单
|
|
|
+ *
|
|
|
+ * @param order 订单
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_CANCEL)
|
|
|
+ public void cancelOrderBySystem(TradeOrderDO order) {
|
|
|
+ cancelOrder0(order, TradeOrderCancelTypeEnum.PAY_TIMEOUT);
|
|
|
}
|
|
|
|
|
|
- // 2. 执行 TradeOrderHandler 的后置处理
|
|
|
- List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
|
|
|
- tradeOrderHandlers.forEach(handler -> handler.afterCancelOrder(order, orderItems));
|
|
|
+ /**
|
|
|
+ * 取消订单的核心实现
|
|
|
+ *
|
|
|
+ * @param order 订单
|
|
|
+ * @param cancelType 取消类型
|
|
|
+ */
|
|
|
+ private void cancelOrder0(TradeOrderDO order, TradeOrderCancelTypeEnum cancelType) {
|
|
|
+ // 1. 更新 TradeOrderDO 状态为已取消
|
|
|
+ int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(),
|
|
|
+ new TradeOrderDO().setStatus(TradeOrderStatusEnum.CANCELED.getStatus())
|
|
|
+ .setCancelType(cancelType.getType()).setCancelTime(LocalDateTime.now()));
|
|
|
+ if (updateCount == 0) {
|
|
|
+ throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
|
|
|
+ }
|
|
|
|
|
|
- // 3. 增加订单日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.CANCELED.getStatus());
|
|
|
-}
|
|
|
+ // 2. 执行 TradeOrderHandler 的后置处理
|
|
|
+ List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
|
|
|
+ tradeOrderHandlers.forEach(handler -> handler.afterCancelOrder(order, orderItems));
|
|
|
|
|
|
-/**
|
|
|
- * 如果金额全部被退款,则取消订单
|
|
|
- * 如果还有未被退款的金额,则无需取消订单
|
|
|
- *
|
|
|
- * @param order 订单
|
|
|
- * @param refundPrice 退款金额
|
|
|
- */
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_CANCEL_AFTER_SALE)
|
|
|
-public void cancelOrderByAfterSale(TradeOrderDO order, Integer refundPrice) {
|
|
|
- // 1. 更新订单
|
|
|
- if (refundPrice < order.getPayPrice()) {
|
|
|
- return;
|
|
|
+ // 3. 增加订单日志
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.CANCELED.getStatus());
|
|
|
}
|
|
|
- tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
|
|
|
- .setStatus(TradeOrderStatusEnum.CANCELED.getStatus())
|
|
|
- .setCancelType(TradeOrderCancelTypeEnum.AFTER_SALE_CLOSE.getType()).setCancelTime(LocalDateTime.now()));
|
|
|
|
|
|
- // 2. 执行 TradeOrderHandler 的后置处理
|
|
|
- List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
|
|
|
- tradeOrderHandlers.forEach(handler -> handler.afterCancelOrder(order, orderItems));
|
|
|
-}
|
|
|
+ /**
|
|
|
+ * 如果金额全部被退款,则取消订单
|
|
|
+ * 如果还有未被退款的金额,则无需取消订单
|
|
|
+ *
|
|
|
+ * @param order 订单
|
|
|
+ * @param refundPrice 退款金额
|
|
|
+ */
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_CANCEL_AFTER_SALE)
|
|
|
+ public void cancelOrderByAfterSale(TradeOrderDO order, Integer refundPrice) {
|
|
|
+ // 1. 更新订单
|
|
|
+ if (refundPrice < order.getPayPrice()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
|
|
|
+ .setStatus(TradeOrderStatusEnum.CANCELED.getStatus())
|
|
|
+ .setCancelType(TradeOrderCancelTypeEnum.AFTER_SALE_CLOSE.getType()).setCancelTime(LocalDateTime.now()));
|
|
|
|
|
|
-@Override
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_DELETE)
|
|
|
-public void deleteOrder(Long userId, Long id) {
|
|
|
- // 1.1 校验存在
|
|
|
- TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id, userId);
|
|
|
- if (order == null) {
|
|
|
- throw exception(ORDER_NOT_FOUND);
|
|
|
+ // 2. 执行 TradeOrderHandler 的后置处理
|
|
|
+ List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
|
|
|
+ tradeOrderHandlers.forEach(handler -> handler.afterCancelOrder(order, orderItems));
|
|
|
}
|
|
|
- // 1.2 校验状态
|
|
|
- if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.CANCELED.getStatus())) {
|
|
|
- throw exception(ORDER_DELETE_FAIL_STATUS_NOT_CANCEL);
|
|
|
- }
|
|
|
- // 2. 删除订单
|
|
|
- tradeOrderMapper.deleteById(id);
|
|
|
|
|
|
- // 3. 记录日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
-}
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_DELETE)
|
|
|
+ public void deleteOrder(Long userId, Long id) {
|
|
|
+ // 1.1 校验存在
|
|
|
+ TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id, userId);
|
|
|
+ if (order == null) {
|
|
|
+ throw exception(ORDER_NOT_FOUND);
|
|
|
+ }
|
|
|
+ // 1.2 校验状态
|
|
|
+ if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.CANCELED.getStatus())) {
|
|
|
+ throw exception(ORDER_DELETE_FAIL_STATUS_NOT_CANCEL);
|
|
|
+ }
|
|
|
+ // 2. 删除订单
|
|
|
+ tradeOrderMapper.deleteById(id);
|
|
|
|
|
|
-@Override
|
|
|
-public void updateOrderRemark(TradeOrderRemarkReqVO reqVO) {
|
|
|
- // 校验并获得交易订单
|
|
|
- validateOrderExists(reqVO.getId());
|
|
|
+ // 3. 记录日志
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
+ }
|
|
|
|
|
|
- // 更新
|
|
|
- TradeOrderDO order = TradeOrderConvert.INSTANCE.convert(reqVO);
|
|
|
- tradeOrderMapper.updateById(order);
|
|
|
-}
|
|
|
+ @Override
|
|
|
+ public void updateOrderRemark(TradeOrderRemarkReqVO reqVO) {
|
|
|
+ // 校验并获得交易订单
|
|
|
+ validateOrderExists(reqVO.getId());
|
|
|
|
|
|
-@Override
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_UPDATE_PRICE)
|
|
|
-public void updateOrderPrice(TradeOrderUpdatePriceReqVO reqVO) {
|
|
|
- // 1.1 校验交易订单
|
|
|
- TradeOrderDO order = validateOrderExists(reqVO.getId());
|
|
|
- if (order.getPayStatus()) {
|
|
|
- throw exception(ORDER_UPDATE_PRICE_FAIL_PAID);
|
|
|
- }
|
|
|
- // 1.2 校验调价金额是否变化
|
|
|
- if (order.getAdjustPrice() > 0) {
|
|
|
- throw exception(ORDER_UPDATE_PRICE_FAIL_ALREADY);
|
|
|
- }
|
|
|
- // 1.3 支付价格不能为 0
|
|
|
- int newPayPrice = order.getPayPrice() + order.getAdjustPrice();
|
|
|
- if (newPayPrice <= 0) {
|
|
|
- throw exception(ORDER_UPDATE_PRICE_FAIL_PRICE_ERROR);
|
|
|
+ // 更新
|
|
|
+ TradeOrderDO order = TradeOrderConvert.INSTANCE.convert(reqVO);
|
|
|
+ tradeOrderMapper.updateById(order);
|
|
|
}
|
|
|
|
|
|
- // 2. 更新订单
|
|
|
- tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
|
|
|
- .setAdjustPrice(reqVO.getAdjustPrice()).setPayPrice(newPayPrice));
|
|
|
-
|
|
|
- // 3. 更新 TradeOrderItem,需要做 adjustPrice 的分摊
|
|
|
- List<TradeOrderItemDO> orderOrderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
|
|
|
- List<Integer> dividePrices = TradePriceCalculatorHelper.dividePrice2(orderOrderItems, newPayPrice);
|
|
|
- List<TradeOrderItemDO> updateItems = new ArrayList<>();
|
|
|
- for (int i = 0; i < orderOrderItems.size(); i++) {
|
|
|
- TradeOrderItemDO item = orderOrderItems.get(i);
|
|
|
- updateItems.add(new TradeOrderItemDO().setId(item.getId()).setAdjustPrice(dividePrices.get(i))
|
|
|
- .setPayPrice(item.getPayPrice() + dividePrices.get(i)));
|
|
|
- }
|
|
|
- tradeOrderItemMapper.updateBatch(updateItems);
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_UPDATE_PRICE)
|
|
|
+ public void updateOrderPrice(TradeOrderUpdatePriceReqVO reqVO) {
|
|
|
+ // 1.1 校验交易订单
|
|
|
+ TradeOrderDO order = validateOrderExists(reqVO.getId());
|
|
|
+ if (order.getPayStatus()) {
|
|
|
+ throw exception(ORDER_UPDATE_PRICE_FAIL_PAID);
|
|
|
+ }
|
|
|
+ // 1.2 校验调价金额是否变化
|
|
|
+ if (order.getAdjustPrice() > 0) {
|
|
|
+ throw exception(ORDER_UPDATE_PRICE_FAIL_ALREADY);
|
|
|
+ }
|
|
|
+ // 1.3 支付价格不能为 0
|
|
|
+ int newPayPrice = order.getPayPrice() + order.getAdjustPrice();
|
|
|
+ if (newPayPrice <= 0) {
|
|
|
+ throw exception(ORDER_UPDATE_PRICE_FAIL_PRICE_ERROR);
|
|
|
+ }
|
|
|
|
|
|
- // 4. 更新支付订单
|
|
|
- payOrderApi.updatePayOrderPrice(order.getPayOrderId(), newPayPrice);
|
|
|
+ // 2. 更新订单
|
|
|
+ tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
|
|
|
+ .setAdjustPrice(reqVO.getAdjustPrice()).setPayPrice(newPayPrice));
|
|
|
+
|
|
|
+ // 3. 更新 TradeOrderItem,需要做 adjustPrice 的分摊
|
|
|
+ List<TradeOrderItemDO> orderOrderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
|
|
|
+ List<Integer> dividePrices = TradePriceCalculatorHelper.dividePrice2(orderOrderItems, newPayPrice);
|
|
|
+ List<TradeOrderItemDO> updateItems = new ArrayList<>();
|
|
|
+ for (int i = 0; i < orderOrderItems.size(); i++) {
|
|
|
+ TradeOrderItemDO item = orderOrderItems.get(i);
|
|
|
+ updateItems.add(new TradeOrderItemDO().setId(item.getId()).setAdjustPrice(dividePrices.get(i))
|
|
|
+ .setPayPrice(item.getPayPrice() + dividePrices.get(i)));
|
|
|
+ }
|
|
|
+ tradeOrderItemMapper.updateBatch(updateItems);
|
|
|
|
|
|
- // 5. 记录订单日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus(),
|
|
|
- MapUtil.<String, Object>builder().put("oldPayPrice", MoneyUtils.fenToYuanStr(order.getPayPrice()))
|
|
|
- .put("newPayPrice", MoneyUtils.fenToYuanStr(newPayPrice)).build());
|
|
|
-}
|
|
|
+ // 4. 更新支付订单
|
|
|
+ payOrderApi.updatePayOrderPrice(order.getPayOrderId(), newPayPrice);
|
|
|
|
|
|
-@Override
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_UPDATE_ADDRESS)
|
|
|
-public void updateOrderAddress(TradeOrderUpdateAddressReqVO reqVO) {
|
|
|
- // 校验交易订单
|
|
|
- TradeOrderDO order = validateOrderExists(reqVO.getId());
|
|
|
- // 只有待发货状态,才可以修改订单收货地址;
|
|
|
- if (!TradeOrderStatusEnum.isUndelivered(order.getStatus())) {
|
|
|
- throw exception(ORDER_UPDATE_ADDRESS_FAIL_STATUS_NOT_DELIVERED);
|
|
|
+ // 5. 记录订单日志
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus(),
|
|
|
+ MapUtil.<String, Object>builder().put("oldPayPrice", MoneyUtils.fenToYuanStr(order.getPayPrice()))
|
|
|
+ .put("newPayPrice", MoneyUtils.fenToYuanStr(newPayPrice)).build());
|
|
|
}
|
|
|
|
|
|
- // 更新
|
|
|
- tradeOrderMapper.updateById(TradeOrderConvert.INSTANCE.convert(reqVO));
|
|
|
+ @Override
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_UPDATE_ADDRESS)
|
|
|
+ public void updateOrderAddress(TradeOrderUpdateAddressReqVO reqVO) {
|
|
|
+ // 校验交易订单
|
|
|
+ TradeOrderDO order = validateOrderExists(reqVO.getId());
|
|
|
+ // 只有待发货状态,才可以修改订单收货地址;
|
|
|
+ if (!TradeOrderStatusEnum.isUndelivered(order.getStatus())) {
|
|
|
+ throw exception(ORDER_UPDATE_ADDRESS_FAIL_STATUS_NOT_DELIVERED);
|
|
|
+ }
|
|
|
|
|
|
- // 记录订单日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
-}
|
|
|
+ // 更新
|
|
|
+ tradeOrderMapper.updateById(TradeOrderConvert.INSTANCE.convert(reqVO));
|
|
|
|
|
|
-@Override
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_PICK_UP_RECEIVE)
|
|
|
-public void pickUpOrderByAdmin(Long id) {
|
|
|
- getSelf().pickUpOrder(tradeOrderMapper.selectById(id));
|
|
|
-}
|
|
|
+ // 记录订单日志
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
+ }
|
|
|
|
|
|
-@Override
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_PICK_UP_RECEIVE)
|
|
|
-public void pickUpOrderByAdmin(String pickUpVerifyCode) {
|
|
|
- getSelf().pickUpOrder(tradeOrderMapper.selectOneByPickUpVerifyCode(pickUpVerifyCode));
|
|
|
-}
|
|
|
+ @Override
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_PICK_UP_RECEIVE)
|
|
|
+ public void pickUpOrderByAdmin(Long id) {
|
|
|
+ getSelf().pickUpOrder(tradeOrderMapper.selectById(id));
|
|
|
+ }
|
|
|
|
|
|
-@Override
|
|
|
-public TradeOrderDO getByPickUpVerifyCode(String pickUpVerifyCode) {
|
|
|
- return tradeOrderMapper.selectOneByPickUpVerifyCode(pickUpVerifyCode);
|
|
|
-}
|
|
|
+ @Override
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_PICK_UP_RECEIVE)
|
|
|
+ public void pickUpOrderByAdmin(String pickUpVerifyCode) {
|
|
|
+ getSelf().pickUpOrder(tradeOrderMapper.selectOneByPickUpVerifyCode(pickUpVerifyCode));
|
|
|
+ }
|
|
|
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-public void pickUpOrder(TradeOrderDO order) {
|
|
|
- if (order == null) {
|
|
|
- throw exception(ORDER_NOT_FOUND);
|
|
|
+ @Override
|
|
|
+ public TradeOrderDO getByPickUpVerifyCode(String pickUpVerifyCode) {
|
|
|
+ return tradeOrderMapper.selectOneByPickUpVerifyCode(pickUpVerifyCode);
|
|
|
}
|
|
|
- if (ObjUtil.notEqual(DeliveryTypeEnum.PICK_UP.getType(), order.getDeliveryType())) {
|
|
|
- throw exception(ORDER_RECEIVE_FAIL_DELIVERY_TYPE_NOT_PICK_UP);
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void pickUpOrder(TradeOrderDO order) {
|
|
|
+ if (order == null) {
|
|
|
+ throw exception(ORDER_NOT_FOUND);
|
|
|
+ }
|
|
|
+ if (ObjUtil.notEqual(DeliveryTypeEnum.PICK_UP.getType(), order.getDeliveryType())) {
|
|
|
+ throw exception(ORDER_RECEIVE_FAIL_DELIVERY_TYPE_NOT_PICK_UP);
|
|
|
+ }
|
|
|
+ receiveOrder0(order);
|
|
|
}
|
|
|
- receiveOrder0(order);
|
|
|
-}
|
|
|
|
|
|
// =================== Order Item ===================
|
|
|
|
|
|
-@Override
|
|
|
-public void updateOrderItemWhenAfterSaleCreate(Long id, Long afterSaleId) {
|
|
|
- // 更新订单项
|
|
|
- updateOrderItemAfterSaleStatus(id, TradeOrderItemAfterSaleStatusEnum.NONE.getStatus(),
|
|
|
- TradeOrderItemAfterSaleStatusEnum.APPLY.getStatus(), afterSaleId);
|
|
|
-}
|
|
|
-
|
|
|
-@Override
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-public void updateOrderItemWhenAfterSaleSuccess(Long id, Integer refundPrice) {
|
|
|
- // 1.1 更新订单项
|
|
|
- updateOrderItemAfterSaleStatus(id, TradeOrderItemAfterSaleStatusEnum.APPLY.getStatus(),
|
|
|
- TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus(), null);
|
|
|
- // 1.2 执行 TradeOrderHandler 的后置处理
|
|
|
- TradeOrderItemDO orderItem = tradeOrderItemMapper.selectById(id);
|
|
|
- TradeOrderDO order = tradeOrderMapper.selectById(orderItem.getOrderId());
|
|
|
- tradeOrderHandlers.forEach(handler -> handler.afterCancelOrderItem(order, orderItem));
|
|
|
-
|
|
|
- // 2.1 更新订单的退款金额、积分
|
|
|
- Integer orderRefundPrice = order.getRefundPrice() + refundPrice;
|
|
|
- Integer orderRefundPoint = order.getRefundPoint() + orderItem.getUsePoint();
|
|
|
- Integer refundStatus = isAllOrderItemAfterSaleSuccess(order.getId()) ?
|
|
|
- TradeOrderRefundStatusEnum.ALL.getStatus() // 如果都售后成功,则需要取消订单
|
|
|
- : TradeOrderRefundStatusEnum.PART.getStatus();
|
|
|
- tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
|
|
|
- .setRefundStatus(refundStatus)
|
|
|
- .setRefundPrice(orderRefundPrice).setRefundPoint(orderRefundPoint));
|
|
|
- // 2.2 如果全部退款,则进行取消订单
|
|
|
- getSelf().cancelOrderByAfterSale(order, orderRefundPrice);
|
|
|
-}
|
|
|
-
|
|
|
-@Override
|
|
|
-public void updateOrderItemWhenAfterSaleCancel(Long id) {
|
|
|
- // 更新订单项
|
|
|
- updateOrderItemAfterSaleStatus(id, TradeOrderItemAfterSaleStatusEnum.APPLY.getStatus(),
|
|
|
- TradeOrderItemAfterSaleStatusEnum.NONE.getStatus(), null);
|
|
|
-}
|
|
|
+ @Override
|
|
|
+ public void updateOrderItemWhenAfterSaleCreate(Long id, Long afterSaleId) {
|
|
|
+ // 更新订单项
|
|
|
+ updateOrderItemAfterSaleStatus(id, TradeOrderItemAfterSaleStatusEnum.NONE.getStatus(),
|
|
|
+ TradeOrderItemAfterSaleStatusEnum.APPLY.getStatus(), afterSaleId);
|
|
|
+ }
|
|
|
|
|
|
-private void updateOrderItemAfterSaleStatus(Long id, Integer oldAfterSaleStatus, Integer newAfterSaleStatus,
|
|
|
- Long afterSaleId) {
|
|
|
- // 更新订单项
|
|
|
- int updateCount = tradeOrderItemMapper.updateAfterSaleStatus(id, oldAfterSaleStatus, newAfterSaleStatus, afterSaleId);
|
|
|
- if (updateCount <= 0) {
|
|
|
- throw exception(ORDER_ITEM_UPDATE_AFTER_SALE_STATUS_FAIL);
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void updateOrderItemWhenAfterSaleSuccess(Long id, Integer refundPrice) {
|
|
|
+ // 1.1 更新订单项
|
|
|
+ updateOrderItemAfterSaleStatus(id, TradeOrderItemAfterSaleStatusEnum.APPLY.getStatus(),
|
|
|
+ TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus(), null);
|
|
|
+ // 1.2 执行 TradeOrderHandler 的后置处理
|
|
|
+ TradeOrderItemDO orderItem = tradeOrderItemMapper.selectById(id);
|
|
|
+ TradeOrderDO order = tradeOrderMapper.selectById(orderItem.getOrderId());
|
|
|
+ tradeOrderHandlers.forEach(handler -> handler.afterCancelOrderItem(order, orderItem));
|
|
|
+
|
|
|
+ // 2.1 更新订单的退款金额、积分
|
|
|
+ Integer orderRefundPrice = order.getRefundPrice() + refundPrice;
|
|
|
+ Integer orderRefundPoint = order.getRefundPoint() + orderItem.getUsePoint();
|
|
|
+ Integer refundStatus = isAllOrderItemAfterSaleSuccess(order.getId()) ?
|
|
|
+ TradeOrderRefundStatusEnum.ALL.getStatus() // 如果都售后成功,则需要取消订单
|
|
|
+ : TradeOrderRefundStatusEnum.PART.getStatus();
|
|
|
+ tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
|
|
|
+ .setRefundStatus(refundStatus)
|
|
|
+ .setRefundPrice(orderRefundPrice).setRefundPoint(orderRefundPoint));
|
|
|
+ // 2.2 如果全部退款,则进行取消订单
|
|
|
+ getSelf().cancelOrderByAfterSale(order, orderRefundPrice);
|
|
|
}
|
|
|
|
|
|
-}
|
|
|
+ @Override
|
|
|
+ public void updateOrderItemWhenAfterSaleCancel(Long id) {
|
|
|
+ // 更新订单项
|
|
|
+ updateOrderItemAfterSaleStatus(id, TradeOrderItemAfterSaleStatusEnum.APPLY.getStatus(),
|
|
|
+ TradeOrderItemAfterSaleStatusEnum.NONE.getStatus(), null);
|
|
|
+ }
|
|
|
|
|
|
-/**
|
|
|
- * 判断指定订单的所有订单项,是不是都售后成功
|
|
|
- *
|
|
|
- * @param id 订单编号
|
|
|
- * @return 是否都售后成功
|
|
|
- */
|
|
|
-private boolean isAllOrderItemAfterSaleSuccess(Long id) {
|
|
|
- List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id);
|
|
|
- return orderItems.stream().allMatch(orderItem -> Objects.equals(orderItem.getAfterSaleStatus(),
|
|
|
- TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus()));
|
|
|
-}
|
|
|
+ private void updateOrderItemAfterSaleStatus(Long id, Integer oldAfterSaleStatus, Integer newAfterSaleStatus,
|
|
|
+ Long afterSaleId) {
|
|
|
+ // 更新订单项
|
|
|
+ int updateCount = tradeOrderItemMapper.updateAfterSaleStatus(id, oldAfterSaleStatus, newAfterSaleStatus, afterSaleId);
|
|
|
+ if (updateCount <= 0) {
|
|
|
+ throw exception(ORDER_ITEM_UPDATE_AFTER_SALE_STATUS_FAIL);
|
|
|
+ }
|
|
|
|
|
|
-@Override
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_COMMENT)
|
|
|
-public Long createOrderItemCommentByMember(Long userId, AppTradeOrderItemCommentCreateReqVO createReqVO) {
|
|
|
- // 1.1 先通过订单项 ID,查询订单项是否存在
|
|
|
- TradeOrderItemDO orderItem = tradeOrderItemMapper.selectByIdAndUserId(createReqVO.getOrderItemId(), userId);
|
|
|
- if (orderItem == null) {
|
|
|
- throw exception(ORDER_ITEM_NOT_FOUND);
|
|
|
}
|
|
|
- // 1.2 校验订单相关状态
|
|
|
- TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderItem.getOrderId(), userId);
|
|
|
- if (order == null) {
|
|
|
- throw exception(ORDER_NOT_FOUND);
|
|
|
- }
|
|
|
- if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus())) {
|
|
|
- throw exception(ORDER_COMMENT_FAIL_STATUS_NOT_COMPLETED);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断指定订单的所有订单项,是不是都售后成功
|
|
|
+ *
|
|
|
+ * @param id 订单编号
|
|
|
+ * @return 是否都售后成功
|
|
|
+ */
|
|
|
+ private boolean isAllOrderItemAfterSaleSuccess(Long id) {
|
|
|
+ List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id);
|
|
|
+ return orderItems.stream().allMatch(orderItem -> Objects.equals(orderItem.getAfterSaleStatus(),
|
|
|
+ TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus()));
|
|
|
}
|
|
|
- if (ObjectUtil.notEqual(order.getCommentStatus(), Boolean.FALSE)) {
|
|
|
- throw exception(ORDER_COMMENT_STATUS_NOT_FALSE);
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_COMMENT)
|
|
|
+ public Long createOrderItemCommentByMember(Long userId, AppTradeOrderItemCommentCreateReqVO createReqVO) {
|
|
|
+ // 1.1 先通过订单项 ID,查询订单项是否存在
|
|
|
+ TradeOrderItemDO orderItem = tradeOrderItemMapper.selectByIdAndUserId(createReqVO.getOrderItemId(), userId);
|
|
|
+ if (orderItem == null) {
|
|
|
+ throw exception(ORDER_ITEM_NOT_FOUND);
|
|
|
+ }
|
|
|
+ // 1.2 校验订单相关状态
|
|
|
+ TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderItem.getOrderId(), userId);
|
|
|
+ if (order == null) {
|
|
|
+ throw exception(ORDER_NOT_FOUND);
|
|
|
+ }
|
|
|
+ if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus())) {
|
|
|
+ throw exception(ORDER_COMMENT_FAIL_STATUS_NOT_COMPLETED);
|
|
|
+ }
|
|
|
+ if (ObjectUtil.notEqual(order.getCommentStatus(), Boolean.FALSE)) {
|
|
|
+ throw exception(ORDER_COMMENT_STATUS_NOT_FALSE);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 创建评价
|
|
|
+ Long commentId = createOrderItemComment0(orderItem, createReqVO);
|
|
|
+
|
|
|
+ // 3. 如果订单项都评论了,则更新订单评价状态
|
|
|
+ List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
|
|
|
+ if (!anyMatch(orderItems, item -> Objects.equals(item.getCommentStatus(), Boolean.FALSE))) {
|
|
|
+ tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setCommentStatus(Boolean.TRUE)
|
|
|
+ .setFinishTime(LocalDateTime.now()));
|
|
|
+ // 增加订单日志。注意:只有在所有订单项都评价后,才会增加
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
+ }
|
|
|
+ return commentId;
|
|
|
}
|
|
|
|
|
|
- // 2. 创建评价
|
|
|
- Long commentId = createOrderItemComment0(orderItem, createReqVO);
|
|
|
+ @Override
|
|
|
+ public int createOrderItemCommentBySystem() {
|
|
|
+ // 1. 查询过期的待支付订单
|
|
|
+ LocalDateTime expireTime = minusTime(tradeOrderProperties.getCommentExpireTime());
|
|
|
+ List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndReceiveTimeLt(
|
|
|
+ TradeOrderStatusEnum.COMPLETED.getStatus(), expireTime, false);
|
|
|
+ if (CollUtil.isEmpty(orders)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
|
|
|
- // 3. 如果订单项都评论了,则更新订单评价状态
|
|
|
- List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
|
|
|
- if (!anyMatch(orderItems, item -> Objects.equals(item.getCommentStatus(), Boolean.FALSE))) {
|
|
|
- tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setCommentStatus(Boolean.TRUE)
|
|
|
- .setFinishTime(LocalDateTime.now()));
|
|
|
- // 增加订单日志。注意:只有在所有订单项都评价后,才会增加
|
|
|
- TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
+ // 2. 遍历执行,逐个取消
|
|
|
+ int count = 0;
|
|
|
+ for (TradeOrderDO order : orders) {
|
|
|
+ try {
|
|
|
+ getSelf().createOrderItemCommentBySystemBySystem(order);
|
|
|
+ count++;
|
|
|
+ } catch (Throwable e) {
|
|
|
+ log.error("[createOrderItemCommentBySystem][order({}) 过期订单异常]", order.getId(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return count;
|
|
|
}
|
|
|
- return commentId;
|
|
|
-}
|
|
|
|
|
|
-@Override
|
|
|
-public int createOrderItemCommentBySystem() {
|
|
|
- // 1. 查询过期的待支付订单
|
|
|
- LocalDateTime expireTime = minusTime(tradeOrderProperties.getCommentExpireTime());
|
|
|
- List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndReceiveTimeLt(
|
|
|
- TradeOrderStatusEnum.COMPLETED.getStatus(), expireTime, false);
|
|
|
- if (CollUtil.isEmpty(orders)) {
|
|
|
- return 0;
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void updateOrderCombinationInfo(Long orderId, Long activityId, Long combinationRecordId, Long headId) {
|
|
|
+ tradeOrderMapper.updateById(
|
|
|
+ new TradeOrderDO().setId(orderId).setCombinationActivityId(activityId)
|
|
|
+ .setCombinationRecordId(combinationRecordId).setCombinationHeadId(headId));
|
|
|
}
|
|
|
|
|
|
- // 2. 遍历执行,逐个取消
|
|
|
- int count = 0;
|
|
|
- for (TradeOrderDO order : orders) {
|
|
|
- try {
|
|
|
- getSelf().createOrderItemCommentBySystemBySystem(order);
|
|
|
- count++;
|
|
|
- } catch (Throwable e) {
|
|
|
- log.error("[createOrderItemCommentBySystem][order({}) 过期订单异常]", order.getId(), e);
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void cancelPaidOrder(Long userId, Long orderId) {
|
|
|
+ // TODO 非繁人:这里实现要优化下;
|
|
|
+ TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderId, userId);
|
|
|
+ if (order == null) {
|
|
|
+ throw exception(ORDER_NOT_FOUND);
|
|
|
}
|
|
|
+ cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
|
|
|
}
|
|
|
- return count;
|
|
|
-}
|
|
|
|
|
|
-@Override
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-public void updateOrderCombinationInfo(Long orderId, Long activityId, Long combinationRecordId, Long headId) {
|
|
|
- tradeOrderMapper.updateById(
|
|
|
- new TradeOrderDO().setId(orderId).setCombinationActivityId(activityId)
|
|
|
- .setCombinationRecordId(combinationRecordId).setCombinationHeadId(headId));
|
|
|
-}
|
|
|
+ /**
|
|
|
+ * 保存订单的签收时间
|
|
|
+ *
|
|
|
+ * @param com 快递公司编码
|
|
|
+ * @param nu 单号
|
|
|
+ */
|
|
|
+ public void updateOrder(String com, String nu, LocalDateTime time) {
|
|
|
+ DeliveryExpressDO deliveryExpressDO = deliveryExpressService.selectByCode(com);
|
|
|
+ TradeOrderDO tradeOrderDO = tradeOrderMapper.selectOne(new LambdaQueryWrapper<TradeOrderDO>()
|
|
|
+ .eq(TradeOrderDO::getLogisticsNo, nu)
|
|
|
+ .eq(TradeOrderDO::getLogisticsId, deliveryExpressDO.getId())
|
|
|
+ .isNull(TradeOrderDO::getReceivingTime)
|
|
|
+ );
|
|
|
+ if (tradeOrderDO == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ tradeOrderDO.setReceivingTime(time);
|
|
|
|
|
|
-@Override
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-public void cancelPaidOrder(Long userId, Long orderId) {
|
|
|
- // TODO 非繁人:这里实现要优化下;
|
|
|
- TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderId, userId);
|
|
|
- if (order == null) {
|
|
|
- throw exception(ORDER_NOT_FOUND);
|
|
|
+ tradeOrderMapper.updateById(tradeOrderDO);
|
|
|
}
|
|
|
- cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
|
|
|
-}
|
|
|
|
|
|
-/**
|
|
|
- * 保存订单的签收时间
|
|
|
- *
|
|
|
- * @param com 快递公司编码
|
|
|
- * @param nu 单号
|
|
|
- */
|
|
|
-public void updateOrder(String com, String nu, LocalDateTime time) {
|
|
|
- DeliveryExpressDO deliveryExpressDO = deliveryExpressService.selectByCode(com);
|
|
|
- TradeOrderDO tradeOrderDO = tradeOrderMapper.selectOne(new LambdaQueryWrapper<TradeOrderDO>()
|
|
|
- .eq(TradeOrderDO::getLogisticsNo, nu)
|
|
|
- .eq(TradeOrderDO::getLogisticsId, deliveryExpressDO.getId())
|
|
|
- .isNull(TradeOrderDO::getReceivingTime)
|
|
|
- );
|
|
|
- if (tradeOrderDO == null) {
|
|
|
- return;
|
|
|
+ @Override
|
|
|
+ public void updateOrderById(TradeOrderDO order) {
|
|
|
+ tradeOrderMapper.updateById(order);
|
|
|
}
|
|
|
- tradeOrderDO.setReceivingTime(time);
|
|
|
|
|
|
- tradeOrderMapper.updateById(tradeOrderDO);
|
|
|
-}
|
|
|
+ /**
|
|
|
+ * 创建单个订单的评论
|
|
|
+ *
|
|
|
+ * @param order 订单
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_COMMENT)
|
|
|
+ public void createOrderItemCommentBySystemBySystem(TradeOrderDO order) {
|
|
|
+ // 1. 查询未评论的订单项
|
|
|
+ List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderIdAndCommentStatus(
|
|
|
+ order.getId(), Boolean.FALSE);
|
|
|
+ if (CollUtil.isEmpty(orderItems)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
-@Override
|
|
|
-public void updateOrderById(TradeOrderDO order) {
|
|
|
- tradeOrderMapper.updateById(order);
|
|
|
-}
|
|
|
+ // 2. 逐个评论
|
|
|
+ for (TradeOrderItemDO orderItem : orderItems) {
|
|
|
+ // 2.1 创建评价
|
|
|
+ AppTradeOrderItemCommentCreateReqVO commentCreateReqVO = new AppTradeOrderItemCommentCreateReqVO()
|
|
|
+ .setOrderItemId(orderItem.getId()).setAnonymous(false).setContent("")
|
|
|
+ .setBenefitScores(5).setDescriptionScores(5);
|
|
|
+ createOrderItemComment0(orderItem, commentCreateReqVO);
|
|
|
|
|
|
-/**
|
|
|
- * 创建单个订单的评论
|
|
|
- *
|
|
|
- * @param order 订单
|
|
|
- */
|
|
|
-@Transactional(rollbackFor = Exception.class)
|
|
|
-@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_COMMENT)
|
|
|
-public void createOrderItemCommentBySystemBySystem(TradeOrderDO order) {
|
|
|
- // 1. 查询未评论的订单项
|
|
|
- List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderIdAndCommentStatus(
|
|
|
- order.getId(), Boolean.FALSE);
|
|
|
- if (CollUtil.isEmpty(orderItems)) {
|
|
|
- return;
|
|
|
+ // 2.2 更新订单项评价状态
|
|
|
+ tradeOrderItemMapper.updateById(new TradeOrderItemDO().setId(orderItem.getId()).setCommentStatus(Boolean.TRUE));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 所有订单项都评论了,则更新订单评价状态
|
|
|
+ tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setCommentStatus(Boolean.TRUE)
|
|
|
+ .setFinishTime(LocalDateTime.now()));
|
|
|
+ // 增加订单日志。注意:只有在所有订单项都评价后,才会增加
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
}
|
|
|
|
|
|
- // 2. 逐个评论
|
|
|
- for (TradeOrderItemDO orderItem : orderItems) {
|
|
|
- // 2.1 创建评价
|
|
|
- AppTradeOrderItemCommentCreateReqVO commentCreateReqVO = new AppTradeOrderItemCommentCreateReqVO()
|
|
|
- .setOrderItemId(orderItem.getId()).setAnonymous(false).setContent("")
|
|
|
- .setBenefitScores(5).setDescriptionScores(5);
|
|
|
- createOrderItemComment0(orderItem, commentCreateReqVO);
|
|
|
+ /**
|
|
|
+ * 创建订单项的评论的核心实现
|
|
|
+ *
|
|
|
+ * @param orderItem 订单项
|
|
|
+ * @param createReqVO 评论内容
|
|
|
+ * @return 评论编号
|
|
|
+ */
|
|
|
+ private Long createOrderItemComment0(TradeOrderItemDO orderItem, AppTradeOrderItemCommentCreateReqVO createReqVO) {
|
|
|
+ // 1. 创建评价
|
|
|
+ ProductCommentCreateReqDTO productCommentCreateReqDTO = TradeOrderConvert.INSTANCE.convert04(createReqVO, orderItem);
|
|
|
+ Long commentId = productCommentApi.createComment(productCommentCreateReqDTO);
|
|
|
|
|
|
- // 2.2 更新订单项评价状态
|
|
|
+ // 2. 更新订单项评价状态
|
|
|
tradeOrderItemMapper.updateById(new TradeOrderItemDO().setId(orderItem.getId()).setCommentStatus(Boolean.TRUE));
|
|
|
+ return commentId;
|
|
|
}
|
|
|
|
|
|
- // 3. 所有订单项都评论了,则更新订单评价状态
|
|
|
- tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setCommentStatus(Boolean.TRUE)
|
|
|
- .setFinishTime(LocalDateTime.now()));
|
|
|
- // 增加订单日志。注意:只有在所有订单项都评价后,才会增加
|
|
|
- TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 创建订单项的评论的核心实现
|
|
|
- *
|
|
|
- * @param orderItem 订单项
|
|
|
- * @param createReqVO 评论内容
|
|
|
- * @return 评论编号
|
|
|
- */
|
|
|
-private Long createOrderItemComment0(TradeOrderItemDO orderItem, AppTradeOrderItemCommentCreateReqVO createReqVO) {
|
|
|
- // 1. 创建评价
|
|
|
- ProductCommentCreateReqDTO productCommentCreateReqDTO = TradeOrderConvert.INSTANCE.convert04(createReqVO, orderItem);
|
|
|
- Long commentId = productCommentApi.createComment(productCommentCreateReqDTO);
|
|
|
-
|
|
|
- // 2. 更新订单项评价状态
|
|
|
- tradeOrderItemMapper.updateById(new TradeOrderItemDO().setId(orderItem.getId()).setCommentStatus(Boolean.TRUE));
|
|
|
- return commentId;
|
|
|
-}
|
|
|
-
|
|
|
// =================== 营销相关的操作 ===================
|
|
|
|
|
|
-/**
|
|
|
- * 获得自身的代理对象,解决 AOP 生效问题
|
|
|
- *
|
|
|
- * @return 自己
|
|
|
- */
|
|
|
-private TradeOrderUpdateServiceImpl getSelf() {
|
|
|
- return SpringUtil.getBean(getClass());
|
|
|
-}
|
|
|
+ /**
|
|
|
+ * 获得自身的代理对象,解决 AOP 生效问题
|
|
|
+ *
|
|
|
+ * @return 自己
|
|
|
+ */
|
|
|
+ private TradeOrderUpdateServiceImpl getSelf() {
|
|
|
+ return SpringUtil.getBean(getClass());
|
|
|
+ }
|
|
|
|
|
|
}
|