zoukankan      html  css  js  c++  java
  • 异步处理操作<记录>

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

    直接上部分代码

    实现类方法:

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

    
    
    


  • 相关阅读:
    通过网页源代码看“饭否”的网站架构
    SD2.0课程等待时候的摘抄
    SD2.0阿里妈妈的研发过程
    转:编程8字专静谦筹悟慎透恒
    SD2.0第一天总体印象
    SD2.0《Web2.0网站性能调优实践》貌似是抄袭的文章
    SD2.02个课合成一个课
    SD2.0第2天总体印象
    variant
    [zz]C++程序员的阅读清单
  • 原文地址:https://www.cnblogs.com/aijiajia1314/p/11407348.html
Copyright © 2011-2022 走看看