异步处理操作<记录>

实现类中的方法有太多的逻辑,一些不影响返回的逻辑操作 ,可以异步去处理 加速了前端访问接口的速度和效率

直接上部分代码

实现类方法:

  /**
     * 商户确认用户已支付
     *
     * @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