yujian
2020-01-18 f4a0f2acc63d7785eab108419a4e16f5f688cb95
fanli/src/main/java/com/yeshi/fanli/service/impl/order/tb/TaoBaoOrderServiceImpl.java
@@ -9,8 +9,11 @@
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.TaoBaoOrderMapper;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderTradeMapMapper;
@@ -19,6 +22,7 @@
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 +39,9 @@
   @Resource
   private TaoBaoOrderTradeMapMapper taoBaoOrderTradeMapMapper;
   @Resource(name = "transactionManager")
   private DataSourceTransactionManager transactionManager;
   /**
    * 获取订单的哈希值
    * 
@@ -50,7 +57,7 @@
      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) {
@@ -90,68 +97,77 @@
   @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);
            }
         } 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);
               }
            } else {
               // 按tradeId更新
               for (TaoBaoOrder taoBaoOrder : list) {
                  TaoBaoOrder order = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(taoBaoOrder.getTradeId());
                  if (order == null) {
                     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);
                  }
               }
            }
         }
         // 提交事务
         transactionManager.commit(transactionStatus);
      } catch (Exception e) {
         transactionManager.rollback(transactionStatus);
      }
   }
@@ -211,4 +227,9 @@
      return taoBaoOrderMapper.countBySettlementTime(minTime, maxTime);
   }
   @Override
   public List<TaoBaoOrder> listByStateAndCreateTime(String state, Date minCreateTime, Date maxCreateTime) {
      return taoBaoOrderMapper.listByStateAndCreateTime(state, minCreateTime.getTime(), maxCreateTime.getTime());
   }
}