|
@@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
|
import cn.iocoder.yudao.framework.common.core.KeyValue;
|
|
|
import cn.iocoder.yudao.framework.common.enums.TerminalEnum;
|
|
|
+import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
|
|
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
|
|
import cn.iocoder.yudao.module.member.api.address.AddressApi;
|
|
|
import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
|
|
@@ -321,38 +322,39 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_PAY)
|
|
|
public void updateOrderPaid(Long id, Long payOrderId) {
|
|
|
- // 校验并获得交易订单(可支付)
|
|
|
+ // 1. 校验并获得交易订单(可支付)
|
|
|
KeyValue<TradeOrderDO, PayOrderRespDTO> orderResult = validateOrderPayable(id, payOrderId);
|
|
|
TradeOrderDO order = orderResult.getKey();
|
|
|
PayOrderRespDTO payOrder = orderResult.getValue();
|
|
|
|
|
|
- // 更新 TradeOrderDO 状态为已支付,等待发货
|
|
|
+ // 2. 更新 TradeOrderDO 状态为已支付,等待发货
|
|
|
int updateCount = tradeOrderMapper.updateByIdAndStatus(id, order.getStatus(),
|
|
|
new TradeOrderDO().setStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus()).setPayStatus(true)
|
|
|
.setPayTime(LocalDateTime.now()).setPayChannelCode(payOrder.getChannelCode()));
|
|
|
if (updateCount == 0) {
|
|
|
throw exception(ORDER_UPDATE_PAID_STATUS_NOT_UNPAID);
|
|
|
}
|
|
|
- // 校验活动
|
|
|
+
|
|
|
+ // 3. 校验活动
|
|
|
// 1、拼团活动
|
|
|
// TODO @puhui999:这块也抽象到 handler 里
|
|
|
if (Objects.equals(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
|
|
|
// 更新拼团状态 TODO puhui999:订单支付失败或订单支付过期删除这条拼团记录
|
|
|
combinationRecordApi.updateRecordStatusToInProgress(order.getUserId(), order.getId(), LocalDateTime.now());
|
|
|
}
|
|
|
- // TODO 芋艿:发送订单变化的消息
|
|
|
-
|
|
|
- // TODO 芋艿:发送站内信
|
|
|
|
|
|
- // TODO 芋艿:OrderLog
|
|
|
-
|
|
|
- // 增加用户积分(赠送)
|
|
|
- addUserPoint(order.getUserId(), order.getGivePoint(), MemberPointBizTypeEnum.ORDER_REWARD, order.getId());
|
|
|
- // 增加用户经验
|
|
|
+ // 4.1 增加用户积分(赠送)
|
|
|
+ addUserPoint(order.getUserId(), order.getGivePoint(), MemberPointBizTypeEnum.ORDER_GIVE, order.getId());
|
|
|
+ // 4.2 增加用户经验
|
|
|
getSelf().addUserExperienceAsync(order.getUserId(), order.getPayPrice(), order.getId());
|
|
|
- // 增加用户佣金
|
|
|
+ // 4.3 增加用户佣金
|
|
|
getSelf().addBrokerageAsync(order.getUserId(), order.getId());
|
|
|
+
|
|
|
+ // 5. 记录订单日志
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.UNDELIVERED.getStatus());
|
|
|
+ TradeOrderLogUtils.setUserInfo(order.getUserId(), UserTypeEnum.MEMBER.getValue());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -435,8 +437,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
throw exception(ORDER_DELIVERY_FAIL_STATUS_NOT_UNDELIVERED);
|
|
|
}
|
|
|
|
|
|
- // TODO 芋艿:发送订单变化的消息
|
|
|
-
|
|
|
// 发送站内信
|
|
|
tradeMessageService.sendMessageWhenDeliveryOrder(new TradeOrderMessageWhenDeliveryOrderReqBO().setOrderId(order.getId())
|
|
|
.setUserId(order.getUserId()).setMessage(null));
|
|
@@ -488,10 +488,54 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_RECEIVE)
|
|
|
- public void receiveOrder(Long userId, Long id) {
|
|
|
+ public void receiveOrderByMember(Long userId, Long id) {
|
|
|
// 校验并获得交易订单(可收货)
|
|
|
TradeOrderDO order = validateOrderReceivable(userId, id);
|
|
|
|
|
|
+ // 收货订单
|
|
|
+ receiveOrder0(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int receiveOrderBySystem() {
|
|
|
+ // 1. 查询过期的待支付订单
|
|
|
+ LocalDateTime expireTime = addTime(tradeOrderProperties.getReceiveExpireTime());
|
|
|
+ List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndDeliveryTimeLt(
|
|
|
+ TradeOrderStatusEnum.DELIVERED.getStatus(), expireTime);
|
|
|
+ if (CollUtil.isEmpty(orders)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 遍历执行,逐个取消
|
|
|
+ int count = 0;
|
|
|
+ for (TradeOrderDO order : orders) {
|
|
|
+ try {
|
|
|
+ getSelf().receiveOrderBySystem(order);
|
|
|
+ count ++;
|
|
|
+ } catch (Throwable e) {
|
|
|
+ log.error("[autoReceiveOrder][order({}) 自动收货订单异常]", order.getId(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自动收货单个订单
|
|
|
+ *
|
|
|
+ * @param order 订单
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_RECEIVE)
|
|
|
+ public void receiveOrderBySystem(TradeOrderDO order) {
|
|
|
+ receiveOrder0(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 收货订单的核心实现
|
|
|
+ *
|
|
|
+ * @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()));
|
|
@@ -499,14 +543,137 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
throw exception(ORDER_RECEIVE_FAIL_STATUS_NOT_DELIVERED);
|
|
|
}
|
|
|
|
|
|
- // TODO 芋艿:lili 发送订单变化的消息
|
|
|
+ // 插入订单日志
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验交易订单满足可售货的条件
|
|
|
+ *
|
|
|
+ * 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ @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);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 取消订单
|
|
|
+ cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int cancelOrderBySystem() {
|
|
|
+ // 1. 查询过期的待支付订单
|
|
|
+ LocalDateTime expireTime = addTime(tradeOrderProperties.getPayExpireTime());
|
|
|
+ List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndCreateTimeLt(
|
|
|
+ TradeOrderStatusEnum.UNPAID.getStatus(), expireTime);
|
|
|
+ if (CollUtil.isEmpty(orders)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
|
|
|
- // TODO 芋艿:lili 发送商品被购买完成的数据
|
|
|
+ // 2. 遍历执行,逐个取消
|
|
|
+ int count = 0;
|
|
|
+ for (TradeOrderDO order : orders) {
|
|
|
+ try {
|
|
|
+ getSelf().cancelOrderBySystem(order);
|
|
|
+ count ++;
|
|
|
+ } catch (Throwable e) {
|
|
|
+ log.error("[autoCancelOrder][order({}) 过期订单异常]", order.getId(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
|
|
|
- // TODO 芋艿:销售佣金的记录;
|
|
|
+ /**
|
|
|
+ * 自动取消单个订单
|
|
|
+ *
|
|
|
+ * @param order 订单
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_CANCEL)
|
|
|
+ public void cancelOrderBySystem(TradeOrderDO order) {
|
|
|
+ cancelOrder0(order, TradeOrderCancelTypeEnum.PAY_TIMEOUT);
|
|
|
+ }
|
|
|
|
|
|
- // 插入订单日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus());
|
|
|
+ /**
|
|
|
+ * 取消订单的核心实现
|
|
|
+ *
|
|
|
+ * @param order 订单
|
|
|
+ * @param cancelType 取消类型
|
|
|
+ */
|
|
|
+ private void cancelOrder0(TradeOrderDO order, TradeOrderCancelTypeEnum cancelType) {
|
|
|
+ Long id = order.getId();
|
|
|
+ // 1. 更新 TradeOrderDO 状态为已取消
|
|
|
+ int updateCount = tradeOrderMapper.updateByIdAndStatus(id, 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. TODO 活动相关库存回滚需要活动 id,活动 id 怎么获取?app 端能否传过来;回复:从订单里拿呀
|
|
|
+ tradeOrderHandlers.forEach(handler -> handler.rollback());
|
|
|
+
|
|
|
+ // 3. 回滚库存
|
|
|
+ List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id);
|
|
|
+ productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems));
|
|
|
+
|
|
|
+ // 4. 回滚优惠券
|
|
|
+ if (order.getCouponId() != null && order.getCouponId() > 0) {
|
|
|
+ couponApi.returnUsedCoupon(order.getCouponId());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 回滚积分(抵扣的)
|
|
|
+ addUserPoint(order.getUserId(), order.getUsePoint(), MemberPointBizTypeEnum.ORDER_CANCEL, order.getId());
|
|
|
+
|
|
|
+ // 6. 增加订单日志
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.CANCELED.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);
|
|
|
+
|
|
|
+ // 3. 记录日志
|
|
|
+ TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -604,33 +771,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
tradeOrderMapper.updateById(update);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 校验交易订单满足可售货的条件
|
|
|
- *
|
|
|
- * 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;
|
|
|
- }
|
|
|
-
|
|
|
// =================== Order Item ===================
|
|
|
|
|
|
+ // TODO 疯狂:帮我重构下:
|
|
|
+ // 1. updateOrderItemAfterSaleStatus 拆分成三个方法:发起;同意;拒绝。原因是,职责更清晰,操作日志也更容易记录;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- // TODO 芋艿:
|
|
|
public void updateOrderItemAfterSaleStatus(Long id, Integer oldAfterSaleStatus, Integer newAfterSaleStatus,
|
|
|
Long afterSaleId, Integer refundPrice) {
|
|
|
// 如果退款成功,则 refundPrice 非空
|
|
@@ -658,6 +805,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
TradeOrderItemDO orderItem = tradeOrderItemMapper.selectById(id);
|
|
|
TradeOrderDO order = tradeOrderMapper.selectById(orderItem.getOrderId());
|
|
|
Integer orderRefundPrice = order.getRefundPrice() + refundPrice;
|
|
|
+ // TODO @疯狂:809 到 817 改成:cancelOrderByAfterSale:相当于全部售后成功后,就是要取消胆子;
|
|
|
if (isAllOrderItemAfterSaleSuccess(order.getId())) { // 如果都售后成功,则需要取消订单
|
|
|
tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
|
|
|
.setRefundStatus(TradeOrderRefundStatusEnum.ALL.getStatus()).setRefundPrice(orderRefundPrice).setRefundPoint(order.getRefundPoint() + orderItem.getUsePoint())
|
|
@@ -667,7 +815,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
// TODO 芋艿:要不要退优惠劵
|
|
|
|
|
|
- // TODO 芋艿:站内信?
|
|
|
} else { // 如果部分售后,则更新退款金额
|
|
|
tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
|
|
|
.setRefundStatus(TradeOrderRefundStatusEnum.PART.getStatus()).setRefundPrice(orderRefundPrice));
|
|
@@ -676,6 +823,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
// TODO 芋艿:这块扣减规则,需要在考虑下
|
|
|
// 售后成功后,执行数据回滚逻辑
|
|
|
if (Objects.equals(newAfterSaleStatus, TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus())) {
|
|
|
+ // TODO @疯狂:这里库存也要扣减下;
|
|
|
// 扣减用户积分(赠送的)
|
|
|
reduceUserPoint(order.getUserId(), orderItem.getGivePoint(), MemberPointBizTypeEnum.AFTER_SALE_DEDUCT_GIVE, afterSaleId);
|
|
|
// 增加用户积分(返还抵扣)
|
|
@@ -723,113 +871,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
return comment;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CANCEL)
|
|
|
- public void cancelOrder(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);
|
|
|
- }
|
|
|
-
|
|
|
- // 2. 取消订单
|
|
|
- cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public int autoCancelOrder() {
|
|
|
- // 1. 查询过期的待支付订单
|
|
|
- LocalDateTime expireTime = addTime(tradeOrderProperties.getExpireTime());
|
|
|
- List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndCreateTimeLt(
|
|
|
- TradeOrderStatusEnum.UNPAID.getStatus(), expireTime);
|
|
|
- if (CollUtil.isEmpty(orders)) {
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- // 2. 遍历执行,逐个取消
|
|
|
- int count = 0;
|
|
|
- for (TradeOrderDO order : orders) {
|
|
|
- try {
|
|
|
- getSelf().autoCancelOrder(order);
|
|
|
- count ++;
|
|
|
- } catch (Throwable e) {
|
|
|
- log.error("[autoCancelOrder][order({}) 过期订单异常]", order.getId(), e);
|
|
|
- }
|
|
|
- }
|
|
|
- return count;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 自动取消单个订单
|
|
|
- *
|
|
|
- * @param order 订单
|
|
|
- */
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_CANCEL)
|
|
|
- public void autoCancelOrder(TradeOrderDO order) {
|
|
|
- cancelOrder0(order, TradeOrderCancelTypeEnum.PAY_TIMEOUT);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 取消订单的核心实现
|
|
|
- *
|
|
|
- * @param order 订单
|
|
|
- * @param cancelType 取消类型
|
|
|
- */
|
|
|
- private void cancelOrder0(TradeOrderDO order, TradeOrderCancelTypeEnum cancelType) {
|
|
|
- Long id = order.getId();
|
|
|
- // 1. 更新 TradeOrderDO 状态为已取消
|
|
|
- int updateCount = tradeOrderMapper.updateByIdAndStatus(id, 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);
|
|
|
- }
|
|
|
-
|
|
|
- // 2. TODO 活动相关库存回滚需要活动 id,活动 id 怎么获取?app 端能否传过来;回复:从订单里拿呀
|
|
|
- tradeOrderHandlers.forEach(handler -> handler.rollback());
|
|
|
-
|
|
|
- // 3. 回滚库存
|
|
|
- List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id);
|
|
|
- productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems));
|
|
|
-
|
|
|
- // 4. 回滚优惠券
|
|
|
- if (order.getCouponId() != null && order.getCouponId() > 0) {
|
|
|
- couponApi.returnUsedCoupon(order.getCouponId());
|
|
|
- }
|
|
|
-
|
|
|
- // 5. 回滚积分(抵扣的)
|
|
|
- addUserPoint(order.getUserId(), order.getUsePoint(), MemberPointBizTypeEnum.ORDER_CANCEL, order.getId());
|
|
|
-
|
|
|
- // 6. 增加订单日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.CANCELED.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);
|
|
|
-
|
|
|
- // 3. 记录日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 判断指定订单的所有订单项,是不是都售后成功
|
|
|
*
|
|
@@ -842,6 +883,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus()));
|
|
|
}
|
|
|
|
|
|
+ // =================== 营销相关的操作 ===================
|
|
|
+
|
|
|
@Async
|
|
|
protected void addUserExperienceAsync(Long userId, Integer payPrice, Long orderId) {
|
|
|
int bizType = MemberExperienceBizTypeEnum.ORDER.getType();
|