|
|
|
@ -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.exception.util.ServiceExceptionUtil.exception;
|
|
|
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
|
|
|
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
|
|
|
|
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.addTime;
|
|
|
|
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.minusTime;
|
|
|
|
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*;
|
|
|
|
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
@ -499,7 +499,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public int receiveOrderBySystem() {
|
|
|
|
public int receiveOrderBySystem() {
|
|
|
|
// 1. 查询过期的待支付订单
|
|
|
|
// 1. 查询过期的待支付订单
|
|
|
|
LocalDateTime expireTime = addTime(tradeOrderProperties.getReceiveExpireTime());
|
|
|
|
LocalDateTime expireTime = minusTime(tradeOrderProperties.getReceiveExpireTime());
|
|
|
|
List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndDeliveryTimeLt(
|
|
|
|
List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndDeliveryTimeLt(
|
|
|
|
TradeOrderStatusEnum.DELIVERED.getStatus(), expireTime);
|
|
|
|
TradeOrderStatusEnum.DELIVERED.getStatus(), expireTime);
|
|
|
|
if (CollUtil.isEmpty(orders)) {
|
|
|
|
if (CollUtil.isEmpty(orders)) {
|
|
|
|
@ -513,7 +513,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
getSelf().receiveOrderBySystem(order);
|
|
|
|
getSelf().receiveOrderBySystem(order);
|
|
|
|
count ++;
|
|
|
|
count ++;
|
|
|
|
} catch (Throwable e) {
|
|
|
|
} catch (Throwable e) {
|
|
|
|
log.error("[autoReceiveOrder][order({}) 自动收货订单异常]", order.getId(), e);
|
|
|
|
log.error("[receiveOrderBySystem][order({}) 自动收货订单异常]", order.getId(), e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return count;
|
|
|
|
return count;
|
|
|
|
@ -590,7 +590,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public int cancelOrderBySystem() {
|
|
|
|
public int cancelOrderBySystem() {
|
|
|
|
// 1. 查询过期的待支付订单
|
|
|
|
// 1. 查询过期的待支付订单
|
|
|
|
LocalDateTime expireTime = addTime(tradeOrderProperties.getPayExpireTime());
|
|
|
|
LocalDateTime expireTime = minusTime(tradeOrderProperties.getPayExpireTime());
|
|
|
|
List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndCreateTimeLt(
|
|
|
|
List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndCreateTimeLt(
|
|
|
|
TradeOrderStatusEnum.UNPAID.getStatus(), expireTime);
|
|
|
|
TradeOrderStatusEnum.UNPAID.getStatus(), expireTime);
|
|
|
|
if (CollUtil.isEmpty(orders)) {
|
|
|
|
if (CollUtil.isEmpty(orders)) {
|
|
|
|
@ -604,7 +604,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
getSelf().cancelOrderBySystem(order);
|
|
|
|
getSelf().cancelOrderBySystem(order);
|
|
|
|
count ++;
|
|
|
|
count ++;
|
|
|
|
} catch (Throwable e) {
|
|
|
|
} catch (Throwable e) {
|
|
|
|
log.error("[autoCancelOrder][order({}) 过期订单异常]", order.getId(), e);
|
|
|
|
log.error("[cancelOrderBySystem][order({}) 过期订单异常]", order.getId(), e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return count;
|
|
|
|
return count;
|
|
|
|
@ -726,7 +726,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
tradeOrderItemMapper.updateBatch(updateItems);
|
|
|
|
tradeOrderItemMapper.updateBatch(updateItems);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 6、更新支付订单
|
|
|
|
// 6、更新支付订单
|
|
|
|
payOrderApi.updatePayOrderPrice(order.getPayOrderId(), update.getPayPrice());
|
|
|
|
payOrderApi.updatePayOrderPrice(order.getPayOrderId(), update.getPayPrice());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -835,16 +834,29 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 判断指定订单的所有订单项,是不是都售后成功
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @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()));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_COMMENT)
|
|
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_COMMENT)
|
|
|
|
public Long createOrderItemComment(Long userId, AppTradeOrderItemCommentCreateReqVO createReqVO) {
|
|
|
|
public Long createOrderItemCommentByMember(Long userId, AppTradeOrderItemCommentCreateReqVO createReqVO) {
|
|
|
|
// 先通过订单项 ID,查询订单项是否存在
|
|
|
|
// 1.1 先通过订单项 ID,查询订单项是否存在
|
|
|
|
TradeOrderItemDO orderItem = tradeOrderItemMapper.selectByIdAndUserId(createReqVO.getOrderItemId(), userId);
|
|
|
|
TradeOrderItemDO orderItem = tradeOrderItemMapper.selectByIdAndUserId(createReqVO.getOrderItemId(), userId);
|
|
|
|
if (orderItem == null) {
|
|
|
|
if (orderItem == null) {
|
|
|
|
throw exception(ORDER_ITEM_NOT_FOUND);
|
|
|
|
throw exception(ORDER_ITEM_NOT_FOUND);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 校验订单相关状态
|
|
|
|
// 1.2 校验订单相关状态
|
|
|
|
TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderItem.getOrderId(), userId);
|
|
|
|
TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderItem.getOrderId(), userId);
|
|
|
|
if (order == null) {
|
|
|
|
if (order == null) {
|
|
|
|
throw exception(ORDER_NOT_FOUND);
|
|
|
|
throw exception(ORDER_NOT_FOUND);
|
|
|
|
@ -856,31 +868,91 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
throw exception(ORDER_COMMENT_STATUS_NOT_FALSE);
|
|
|
|
throw exception(ORDER_COMMENT_STATUS_NOT_FALSE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 1. 创建评价
|
|
|
|
// 2. 创建评价
|
|
|
|
ProductCommentCreateReqDTO productCommentCreateReqDTO = TradeOrderConvert.INSTANCE.convert04(createReqVO, orderItem);
|
|
|
|
Long commentId = createOrderItemComment0(orderItem, createReqVO);
|
|
|
|
Long comment = productCommentApi.createComment(productCommentCreateReqDTO);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 更新订单项评价状态
|
|
|
|
// 3. 如果订单项都评论了,则更新订单评价状态
|
|
|
|
tradeOrderItemMapper.updateById(new TradeOrderItemDO().setId(orderItem.getId()).setCommentStatus(Boolean.TRUE));
|
|
|
|
|
|
|
|
List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
|
|
|
|
List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
|
|
|
|
if (!anyMatch(orderItems, item -> Objects.equals(item.getCommentStatus(), Boolean.FALSE))) {
|
|
|
|
if (!anyMatch(orderItems, item -> Objects.equals(item.getCommentStatus(), Boolean.FALSE))) {
|
|
|
|
tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setCommentStatus(Boolean.TRUE));
|
|
|
|
tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setCommentStatus(Boolean.TRUE)
|
|
|
|
// 增加订单日志
|
|
|
|
.setFinishTime(LocalDateTime.now()));
|
|
|
|
|
|
|
|
// 增加订单日志。注意:只有在所有订单项都评价后,才会增加
|
|
|
|
TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
|
TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return comment;
|
|
|
|
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 id 订单编号
|
|
|
|
* @param order 订单
|
|
|
|
* @return 是否都售后成功
|
|
|
|
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private boolean isAllOrderItemAfterSaleSuccess(Long id) {
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id);
|
|
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_COMMENT)
|
|
|
|
return orderItems.stream().allMatch(orderItem -> Objects.equals(orderItem.getAfterSaleStatus(),
|
|
|
|
public void createOrderItemCommentBySystemBySystem(TradeOrderDO order) {
|
|
|
|
TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus()));
|
|
|
|
// 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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// =================== 营销相关的操作 ===================
|
|
|
|
// =================== 营销相关的操作 ===================
|
|
|
|
|