实现类中的方法有太多的逻辑,一些不影响返回的逻辑操作 ,可以异步去处理 加速了前端访问接口的速度和效率
直接上部分代码
实现类方法:
/** * 商户确认用户已支付 * * @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()); } } } }