|
@@ -0,0 +1,128 @@
|
|
|
+package com.yc.ship.module.trade.service.order.handler;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.yc.ship.module.product.api.VoyageApi;
|
|
|
+import com.yc.ship.module.product.api.dto.OrderRoomUseDTO;
|
|
|
+import com.yc.ship.module.product.api.dto.ReduceStockReqDTO;
|
|
|
+import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
|
|
|
+import com.yc.ship.module.trade.dal.dataobject.order.TradeDetailDO;
|
|
|
+import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
|
|
|
+import com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO;
|
|
|
+import com.yc.ship.module.trade.enums.TradeOrderStatusEnum;
|
|
|
+import com.yc.ship.module.trade.service.order.bo.TradeOrderBO;
|
|
|
+import com.yc.ship.module.trade.service.order.bo.TradeOrderDetailBO;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.core.annotation.Order;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Component
|
|
|
+@Order(TradeOrderHandler.PRE_ORDER_STOCK)
|
|
|
+@Slf4j
|
|
|
+public class TradeStockOrderHandler implements TradeOrderHandler{
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private VoyageApi voyageApi;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void beforeOrderCreate(TradeOrderBO order) {
|
|
|
+ Integer sellMethod = order.getTradeOrderDO().getSellMethod();
|
|
|
+
|
|
|
+ switch (sellMethod) {
|
|
|
+ case 1: //OTC
|
|
|
+ reduceStock(order);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void reduceStock(TradeOrderBO order){
|
|
|
+ ReduceStockReqDTO reqDTO = new ReduceStockReqDTO();
|
|
|
+ reqDTO.setOrderId(order.getTradeOrderDO().getId());
|
|
|
+ reqDTO.setOrderStatus(order.getTradeOrderDO().getOrderStatus());
|
|
|
+ reqDTO.setType(DistributorOrStoreEnum.DISTRIBUTOR.getValue());//TODO: 当前默认为分销商,扣分销商库存,门店的后续再完善
|
|
|
+ reqDTO.setVoyageId(order.getTradeOrderDO().getVoyageId());
|
|
|
+ reqDTO.setDistributorId(Long.valueOf(order.getTradeOrderDO().getSourceId()));
|
|
|
+ reqDTO.setStoreId(order.getTradeOrderDO().getStoreId());
|
|
|
+ reqDTO.setUseRoomNum(order.getSummary().getUseRoomTotalNum());
|
|
|
+ List<TradeOrderDetailBO> tradeOrderDetailBOList = order.getTradeOrderDetailBOList();
|
|
|
+ List<TradeVisitorDO> tradeDetailDOList = tradeOrderDetailBOList.stream().flatMap(list1 -> {
|
|
|
+ List<TradeVisitorDO> roomNums = list1.getTradeVisitorDOList();
|
|
|
+ if(roomNums != null) {
|
|
|
+ return roomNums.stream();
|
|
|
+ }
|
|
|
+ return new ArrayList<TradeVisitorDO>().stream();
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ List<OrderRoomUseDTO> orderRoomUseDTOList = new ArrayList<>();
|
|
|
+ Map<String, Long> collect = tradeDetailDOList.stream().collect(Collectors.groupingBy(TradeVisitorDO::getRoomId, Collectors.counting()));
|
|
|
+ collect.keySet().stream().forEach(roomId -> {
|
|
|
+ OrderRoomUseDTO orderRoomUseDTO = new OrderRoomUseDTO();
|
|
|
+ orderRoomUseDTO.setRoomId(Long.valueOf(roomId));
|
|
|
+ orderRoomUseDTO.setNum(BigDecimal.valueOf(collect.get(roomId)).divide(new BigDecimal(2)));
|
|
|
+ orderRoomUseDTOList.add(orderRoomUseDTO);
|
|
|
+ });
|
|
|
+ reqDTO.setOrderRoomList(orderRoomUseDTOList);
|
|
|
+ Integer orderStatus = reqDTO.getOrderStatus();
|
|
|
+ if(orderStatus == TradeOrderStatusEnum.YD.getStatus()) {
|
|
|
+ voyageApi.preReduceStock(reqDTO);
|
|
|
+ }else {
|
|
|
+ //TODO:走定单扣库存
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterOrderCreate(TradeOrderBO order) {
|
|
|
+ TradeOrderHandler.super.afterOrderCreate(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterCancelOrder(TradeOrderDO tradeOrderDO) {
|
|
|
+ TradeOrderHandler.super.afterCancelOrder(tradeOrderDO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterOrderCreateFail(TradeOrderBO order) {
|
|
|
+ TradeOrderHandler.super.afterOrderCreateFail(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterSupplierOrderCreateFail(TradeOrderDO tradeOrderDO) {
|
|
|
+ TradeOrderHandler.super.afterSupplierOrderCreateFail(tradeOrderDO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterProcessSuccess(TradeOrderDO tradeOrderDO) {
|
|
|
+ TradeOrderHandler.super.afterProcessSuccess(tradeOrderDO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterProcessFail(TradeOrderDO tradeOrderDO) {
|
|
|
+ TradeOrderHandler.super.afterProcessFail(tradeOrderDO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterRefundOrder(Long refundId) {
|
|
|
+ TradeOrderHandler.super.afterRefundOrder(refundId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterRefundAmountSuccess(Long orderId, Long refundId, BigDecimal refundAmount) {
|
|
|
+ TradeOrderHandler.super.afterRefundAmountSuccess(orderId, refundId, refundAmount);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterCheckSuccess(Long orderId) {
|
|
|
+ TradeOrderHandler.super.afterCheckSuccess(orderId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void processOrderCreateSuccess(TradeOrderDO tradeOrderDO) {
|
|
|
+ TradeOrderHandler.super.processOrderCreateSuccess(tradeOrderDO);
|
|
|
+ }
|
|
|
+}
|