package cn.lili.event.impl; import cn.lili.common.utils.CurrencyUtil; import cn.lili.event.AfterSaleStatusChangeEvent; import cn.lili.event.TradeEvent; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.enums.RefundStatusEnum; import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.TradeService; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * 订单状态处理类 * * @author Chopper * @since 2020-07-03 11:20 **/ @Service public class OrderStatusHandlerExecute implements TradeEvent, AfterSaleStatusChangeEvent { @Autowired private TradeService tradeService; @Autowired private OrderItemService orderItemService; @Autowired private OrderService orderService; @Override public void orderCreate(TradeDTO tradeDTO) { //如果订单需要支付金额为0,则将订单步入到下一个流程 if (tradeDTO.getPriceDetailDTO().getFlowPrice() <= 0) { tradeService.payTrade(tradeDTO.getSn(), PaymentMethodEnum.BANK_TRANSFER.name(), "-1"); } } @Override public void afterSaleStatusChange(AfterSale afterSale) { Order order = orderService.getBySn(afterSale.getOrderSn()); OrderItem orderItem = orderItemService.getBySn(afterSale.getOrderItemSn()); if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) { if (orderItem.getReturnGoodsNumber().equals(orderItem.getNum())) { orderItem.setIsRefund(RefundStatusEnum.ALL_REFUND.name()); } else { orderItem.setIsRefund(RefundStatusEnum.PART_REFUND.name()); } orderItem.setRefundPrice(CurrencyUtil.add(afterSale.getActualRefundPrice(), orderItem.getRefundPrice())); orderItemService.updateByAfterSale(orderItem); //循环订单货物,判断是否已经全部售后 List orderItems = orderItemService.getByOrderSn(afterSale.getOrderSn()); // 总退货数量 int returnCount = 0; // 总购买数量 int deliverCount = 0; for (OrderItem item : orderItems) { returnCount += item.getReturnGoodsNumber(); deliverCount += item.getNum(); } if (returnCount == deliverCount) { orderService.systemCancel(afterSale.getOrderSn(),"订单货物全部退款",false); } } } }