实现类中的方法有太多的逻辑,一些不影响返回的逻辑操作 ,可以异步去处理 加速了前端访问接口的速度和效率
直接上部分代码
实现类方法:
/** * 商户确认用户已支付 * * @param orderId 订单ID * @param confirmStatus 确认状态 */ @Override public void confirmUserPayed(String orderId, String confirmStatus) { CommonOrder userOrder = commonOrderRepository.findById(orderId).orElse(null); DomainUtils.checkNull(userOrder, "订单不存在"); if (!OrderStatus.USER_CONFIRM_PAYED.equals(userOrder.getOrderStatus())) { throw new CommonException("用户还未确认付款,不可确认收款或取消"); } //判断提交状态 switch (ConfirmStatus.valueOf(confirmStatus)) { case SUCCESS: userOrder.setOrderStatus(OrderStatus.WAITSEND);//待发货状态 break; case CANCEL: userOrder.setOrderStatus(OrderStatus.CONCEL); //修改账单状态 CommonBill bill = commonBillRepository.findByOrderId(orderId); DomainUtils.checkNull(bill, "未查询到对应账单"); bill.setBillStatus(BillStatus.CANCEL);//取消账单 commonBillRepository.save(bill); //发送消息给用户 sendMessageService.sendConfirmOrderFialMsg(userOrder, bill.getFormId(), "商家已确认订单金额未到账,订单已取消", "惠商城商品", "若有疑问,请咨询商家。"); break; default: throw new CommonException("传入状态有误"); } //执行更新 commonOrderRepository.save(userOrder); //异步处理库存和销量 try { handlerNewestStore.handlerCommonPayed(userOrder); } catch (Exception e) { log.error("处理库存异常 订单ID: %s", userOrder.getId()); } }
异步处理服务类:
package com.yikesong.favourablelife.service.async;
import com.yikesong.favourablelife.dao.NewestRepository;
import com.yikesong.favourablelife.dao.OrderItemRepository;
import com.yikesong.favourablelife.exception.CommonException;
import com.yikesong.favourablelife.pojo.entity.Newest;
import com.yikesong.favourablelife.pojo.entity.OrderItem;
import com.yikesong.favourablelife.pojo.entity.baseclass.Order;
import com.yikesong.favourablelife.pojo.enums.CartHandlerType;
import com.yikesong.favourablelife.service.IShopCartService;
import com.yikesong.favourablelife.utils.DomainUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
/**
* 处理商品销量 库存
*
* @Author xs
* @Date 2019/7/12 11:04
*/
@Slf4j
@Component
@Transactional
public class HandlerNewestStore {
@Autowired
private OrderItemRepository orderItemRepository;
@Autowired
private NewestRepository newestRepository;
@Autowired
private IShopCartService shopCartService;
/**
* 异步处理商品库存
*
* @param order 订单
*/
@Async
public void handlerCommonPayed(Order order) {
//查询订单条目
List<OrderItem> orderItemList = orderItemRepository.findByOrderId(order.getId());
//遍历订单条目
if (orderItemList == null || orderItemList.size() <= 0) {
throw new CommonException(String.format("警告!! 订单条目异常 订单ID: %s", order.getId()));
}
for (OrderItem orderItem : orderItemList) {
try {
Newest newest = newestRepository.findById(orderItem.getGoodsId()).orElse(null);
DomainUtils.checkNull(newest, "商品不存在-处理商品库存");
//减库存
int storeCount = newest.getStoreCount() - orderItem.getNum();
if (storeCount <= 0) {
storeCount = 0;
//处理购物车售罄
shopCartService.handlerSaleOut(orderItem.getGoodsId(), CartHandlerType.SALEOUT, null);
}
newest.setStoreCount(storeCount);
//增加销量
int saleCount = (newest.getSaleCount() == null ? 0 : newest.getSaleCount()) + orderItem.getNum();
newest.setSaleCount(saleCount);
newestRepository.save(newest);
} catch (Exception e) {
log.error("处理商品库存异常 商品ID: {}", orderItem.getGoodsId());
}
}
}
}
原文:https://www.cnblogs.com/aijiajia1314/p/11407348.html