@@ -77,7 +77,7 @@ import java.util.Set;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception ;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.* ;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.add Time ;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.minus Time ;
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.* ;
/**
@@ -499,7 +499,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
@Override
public int receiveOrderBySystem ( ) {
// 1. 查询过期的待支付订单
LocalDateTime expireTime = add Time( tradeOrderProperties . getReceiveExpireTime ( ) ) ;
LocalDateTime expireTime = minus Time( tradeOrderProperties . getReceiveExpireTime ( ) ) ;
List < TradeOrderDO > orders = tradeOrderMapper . selectListByStatusAndDeliveryTimeLt (
TradeOrderStatusEnum . DELIVERED . getStatus ( ) , expireTime ) ;
if ( CollUtil . isEmpty ( orders ) ) {
@@ -513,7 +513,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
getSelf ( ) . receiveOrderBySystem ( order ) ;
count + + ;
} catch ( Throwable e ) {
log . error ( " [autoR eceiveOrder][order({}) 自动收货订单异常] " , order . getId ( ) , e ) ;
log . error ( " [r eceiveOrderBySystem ][order({}) 自动收货订单异常] " , order . getId ( ) , e ) ;
}
}
return count ;
@@ -590,7 +590,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
@Override
public int cancelOrderBySystem ( ) {
// 1. 查询过期的待支付订单
LocalDateTime expireTime = add Time( tradeOrderProperties . getPayExpireTime ( ) ) ;
LocalDateTime expireTime = minus Time( tradeOrderProperties . getPayExpireTime ( ) ) ;
List < TradeOrderDO > orders = tradeOrderMapper . selectListByStatusAndCreateTimeLt (
TradeOrderStatusEnum . UNPAID . getStatus ( ) , expireTime ) ;
if ( CollUtil . isEmpty ( orders ) ) {
@@ -604,7 +604,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
getSelf ( ) . cancelOrderBySystem ( order ) ;
count + + ;
} catch ( Throwable e ) {
log . error ( " [autoC ancelOrder][order({}) 过期订单异常] " , order . getId ( ) , e ) ;
log . error ( " [c ancelOrderBySystem ][order({}) 过期订单异常] " , order . getId ( ) , e ) ;
}
}
return count ;
@@ -726,7 +726,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
}
tradeOrderItemMapper . updateBatch ( updateItems ) ;
// 6、更新支付订单
payOrderApi . updatePayOrderPrice ( order . getPayOrderId ( ) , update . getPayPrice ( ) ) ;
}
@@ -835,41 +834,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
}
}
@Override
@Transactional ( rollbackFor = Exception . class )
@TradeOrderLog ( operateType = TradeOrderOperateTypeEnum . MEMBER_COMMENT )
public Long createOrderItemComment ( Long userId , AppTradeOrderItemCommentCreateReqVO createReqVO ) {
// 先通过订单项 ID, 查询订单项是否存在
TradeOrderItemDO orderItem = tradeOrderItemMapper . selectByIdAndUserId ( createReqVO . getOrderItemId ( ) , userId ) ;
if ( orderItem = = null ) {
throw exception ( ORDER_ITEM_NOT_FOUND ) ;
}
// 校验订单相关状态
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 ) ;
}
// 1. 创建评价
ProductCommentCreateReqDTO productCommentCreateReqDTO = TradeOrderConvert . INSTANCE . convert04 ( createReqVO , orderItem ) ;
Long comment = productCommentApi . createComment ( productCommentCreateReqDTO ) ;
// 2. 更新订单项评价状态
tradeOrderItemMapper . updateById ( new TradeOrderItemDO ( ) . setId ( orderItem . getId ( ) ) . setCommentStatus ( Boolean . TRUE ) ) ;
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 ) ) ;
// 增加订单日志
TradeOrderLogUtils . setOrderInfo ( order . getId ( ) , order . getStatus ( ) , order . getStatus ( ) ) ;
}
return comment ;
}
/**
* 判断指定订单的所有订单项,是不是都售后成功
@@ -883,6 +847,114 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
TradeOrderItemAfterSaleStatusEnum . SUCCESS . getStatus ( ) ) ) ;
}
@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 ;
}
@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 ;
}
// 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 ;
}
/**
* 创建单个订单的评论
*
* @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. 逐个评论
for ( TradeOrderItemDO orderItem : orderItems ) {
// 2.1 创建评价
AppTradeOrderItemCommentCreateReqVO commentCreateReqVO = new AppTradeOrderItemCommentCreateReqVO ( )
. setOrderItemId ( orderItem . getId ( ) ) . setAnonymous ( false ) . setContent ( " " )
. setBenefitScores ( 5 ) . setDescriptionScores ( 5 ) ;
createOrderItemComment0 ( orderItem , commentCreateReqVO ) ;
// 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 ( ) ) ;
}
/**
* 创建订单项的评论的核心实现
*
* @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 ;
}
// =================== 营销相关的操作 ===================
@Async