admin
2020-05-06 24a8d17e007545f7426c48352109aa1a9c6587ee
fanli/src/main/java/com/yeshi/fanli/service/impl/order/tb/TaoBaoOrderServiceImpl.java
@@ -9,16 +9,22 @@
import javax.annotation.Resource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderGoodsMapper;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderMapper;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderTradeMapMapper;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoOrderGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoOrderTradeMap;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
@@ -35,6 +41,12 @@
   @Resource
   private TaoBaoOrderTradeMapMapper taoBaoOrderTradeMapMapper;
   @Resource(name = "transactionManager")
   private DataSourceTransactionManager transactionManager;
   @Resource
   private TaoBaoOrderGoodsMapper taoBaoOrderGoodsMapper;
   /**
    * 获取订单的哈希值
    * 
@@ -50,7 +62,8 @@
      Iterator<String> its = map.keySet().iterator();
      while (its.hasNext()) {
         String orderId = its.next();
         String key = "addorder-" + TaoBaoOrderUtil.getOrderDataHashCode(map.get(orderId));
         String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.addOrder,
               TaoBaoOrderUtil.getOrderDataHashCode(map.get(orderId)));
         // redis做频率限制
         try {
            if (Constant.IS_OUTNET) {
@@ -87,71 +100,85 @@
         taoBaoOrderTradeMapMapper.insertSelective(map);
   }
   // 添加淘宝订单
   private void insertTaoBaoOrder(TaoBaoOrder taoBaoOrder) {
      taoBaoOrderMapper.insertSelective(taoBaoOrder);
      addTaoBaoOrderTradeMap(taoBaoOrder);
      addTaoBaoOrderGoods(taoBaoOrder.getGoods());
   }
   @Transactional
   @Override
   public void addTaoBaoOrder(String orderId, List<TaoBaoOrder> list) {
      LogHelper.test("订单号与订单数量:" + orderId + "-" + list.size());
      // 验证orderby是否正确
      if (list != null && list.size() > 0) {
         int maxOrderBy = list.get(0).getOrderBy();
         if (list.size() > 1)
            for (TaoBaoOrder order : list) {
               if (order.getOrderBy() > maxOrderBy)
                  maxOrderBy = order.getOrderBy();
      TransactionStatus transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());
      try {
         LogHelper.test("订单号与订单数量:" + orderId + "-" + list.size());
         // 验证orderby是否正确
         if (list != null && list.size() > 0) {
            int maxOrderBy = list.get(0).getOrderBy();
            if (list.size() > 1)
               for (TaoBaoOrder order : list) {
                  if (order.getOrderBy() > maxOrderBy)
                     maxOrderBy = order.getOrderBy();
               }
            if (list.size() != maxOrderBy) {
               LogHelper.test("捕捉到排序值错误:" + orderId);
               throw new Exception();
            }
         if (list.size() != maxOrderBy) {
            LogHelper.test("捕捉到排序值错误:" + orderId);
            return;
         }
      }
      // 验证tradeId问题
      Set<String> tradesIds = new HashSet<>();
      for (TaoBaoOrder order : list) {
         tradesIds.add(order.getTradeId());
      }
      // 有重复的交易ID不处理
      if (tradesIds.size() != list.size()) {
         LogHelper.test("检测到交易ID重复问题:" + orderId);
         return;
      }
      List<TaoBaoOrder> oldOrderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
      if (oldOrderList == null || oldOrderList.size() == 0) {
         for (TaoBaoOrder taoBaoOrder : list) {
            taoBaoOrder.setLatestUpdateTime(new Date());
            taoBaoOrderMapper.insertSelective(taoBaoOrder);
            addTaoBaoOrderTradeMap(taoBaoOrder);
         // 验证tradeId问题
         Set<String> tradesIds = new HashSet<>();
         for (TaoBaoOrder order : list) {
            tradesIds.add(order.getTradeId());
         }
      } else {
         if (StringUtil.isNullOrEmpty(oldOrderList.get(0).getTradeId())) {
            taoBaoOrderMapper.deleteByOrderId(orderId);
         // 有重复的交易ID不处理
         if (tradesIds.size() != list.size()) {
            LogHelper.test("检测到交易ID重复问题:" + orderId);
            throw new Exception();
         }
         List<TaoBaoOrder> oldOrderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
         if (oldOrderList == null || oldOrderList.size() == 0) {
            for (TaoBaoOrder taoBaoOrder : list) {
               taoBaoOrder.setLatestUpdateTime(new Date());
               taoBaoOrderMapper.insertSelective(taoBaoOrder);
               addTaoBaoOrderTradeMap(taoBaoOrder);
               insertTaoBaoOrder(taoBaoOrder);
            }
         } else {
            // 按tradeId更新
            for (TaoBaoOrder taoBaoOrder : list) {
               TaoBaoOrder order = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(taoBaoOrder.getTradeId());
               if (order == null) {
            if (StringUtil.isNullOrEmpty(oldOrderList.get(0).getTradeId())) {
               taoBaoOrderMapper.deleteByOrderId(orderId);
               for (TaoBaoOrder taoBaoOrder : list) {
                  taoBaoOrder.setLatestUpdateTime(new Date());
                  taoBaoOrderMapper.insertSelective(taoBaoOrder);
                  addTaoBaoOrderTradeMap(taoBaoOrder);
               } else {
                  taoBaoOrder.setId(order.getId());
                  if (!StringUtil.isNullOrEmpty(order.getRelationId()))
                     taoBaoOrder.setRelationId(order.getRelationId());
                  if (!StringUtil.isNullOrEmpty(order.getSpecialId()))
                     taoBaoOrder.setSpecialId(order.getSpecialId());
                  taoBaoOrder.setLatestUpdateTime(new Date());
                  taoBaoOrderMapper.updateByPrimaryKeySelective(taoBaoOrder);
                  addTaoBaoOrderTradeMap(taoBaoOrder);
                  insertTaoBaoOrder(taoBaoOrder);
               }
            } else {
               // 按tradeId更新
               for (TaoBaoOrder taoBaoOrder : list) {
                  TaoBaoOrder order = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(taoBaoOrder.getTradeId());
                  if (order == null) {
                     taoBaoOrder.setLatestUpdateTime(new Date());
                     insertTaoBaoOrder(taoBaoOrder);
                  } else {
                     taoBaoOrder.setId(order.getId());
                     if (!StringUtil.isNullOrEmpty(order.getRelationId()))
                        taoBaoOrder.setRelationId(order.getRelationId());
                     if (!StringUtil.isNullOrEmpty(order.getSpecialId()))
                        taoBaoOrder.setSpecialId(order.getSpecialId());
                     taoBaoOrder.setLatestUpdateTime(new Date());
                     taoBaoOrderMapper.updateByPrimaryKeySelective(taoBaoOrder);
                     addTaoBaoOrderTradeMap(taoBaoOrder);
                  }
               }
            }
         }
         // 提交事务
         transactionManager.commit(transactionStatus);
      } catch (Exception e) {
         e.printStackTrace();
         transactionManager.rollback(transactionStatus);
      }
   }
@@ -211,4 +238,27 @@
      return taoBaoOrderMapper.countBySettlementTime(minTime, maxTime);
   }
   @Override
   public List<TaoBaoOrder> listByStateAndCreateTime(String state, Date minCreateTime, Date maxCreateTime) {
      return taoBaoOrderMapper.listByStateAndCreateTime(state, minCreateTime.getTime(), maxCreateTime.getTime());
   }
   @Override
   public Long countOrderByDay(String preDay) {
      return taoBaoOrderMapper.countOrderByDay(preDay);
   }
   @Override
   public void addTaoBaoOrderGoods(TaoBaoOrderGoods goods) {
      if (goods == null || StringUtil.isNullOrEmpty(goods.getTradeId()))
         return;
      TaoBaoOrderGoods oldGoods = taoBaoOrderGoodsMapper.selectByTradeId(goods.getTradeId());
      if (oldGoods != null)
         return;
      if (goods.getCreateTime() == null)
         goods.setCreateTime(new Date());
      taoBaoOrderGoodsMapper.insertSelective(goods);
   }
}