yujian
2019-09-02 9eeda0d3049b71877c373c04d65533939b5582ef
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoOrderServiceImpl.java
@@ -1,26 +1,30 @@
package com.yeshi.fanli.service.impl.taobao;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderMapper;
import com.yeshi.fanli.entity.admin.ReslutOrder;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderTradeMapMapper;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoOrderTradeMap;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
import com.yeshi.fanli.vo.order.TaoBaoOrderVO;
@Service
public class TaoBaoOrderServiceImpl implements TaoBaoOrderService {
@@ -31,6 +35,16 @@
   @Resource
   private RedisManager redisManager;
   @Resource
   private TaoBaoOrderTradeMapMapper taoBaoOrderTradeMapMapper;
   /**
    * 获取订单的哈希值
    *
    * @param list
    * @return
    */
   @Override
   public void addTaoBaoOrderList(List<TaoBaoOrder> list) {
      if (list == null || list.size() == 0)
@@ -39,7 +53,7 @@
      Iterator<String> its = map.keySet().iterator();
      while (its.hasNext()) {
         String orderId = its.next();
         String key = "addorder-" + orderId;
         String key = "addorder-" + TaoBaoOrderUtil.getOrderDataHashCode(map.get(orderId));
         // redis做频率限制
         try {
            if (Constant.IS_OUTNET) {
@@ -51,6 +65,7 @@
         } catch (Exception e) {
         }
         addTaoBaoOrder(orderId, map.get(orderId));
         try {
            // 6小时内不再处理
@@ -59,32 +74,85 @@
         } catch (Exception e) {
         }
      }
   }
   @Transactional
   private void addTaoBaoOrderTradeMap(TaoBaoOrder order) {
      if (order == null || StringUtil.isNullOrEmpty(order.getTradeId()))
         return;
      TaoBaoOrderTradeMap map = new TaoBaoOrderTradeMap();
      map.setCreateTime(new Date());
      map.setTaoBaoOrder(order);
      map.setTradeId(order.getTradeId());
      TaoBaoOrderTradeMap oldMap = taoBaoOrderTradeMapMapper.selectByTradeId(order.getTradeId());
      if (oldMap == null)
         taoBaoOrderTradeMapMapper.insertSelective(map);
   }
   @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();
            }
         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);
         }
      } else {
         boolean hasPayOrder = false;
         for (TaoBaoOrder order : oldOrderList)
            if (order.getOrderState().equalsIgnoreCase("订单付款")) {
               hasPayOrder = true;
               break;
            }
         // 删除原来的订单,加入新订单
         if (hasPayOrder) {
         if (StringUtil.isNullOrEmpty(oldOrderList.get(0).getTradeId())) {
            taoBaoOrderMapper.deleteByOrderId(orderId);
            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) {
                  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);
               }
            }
         }
      }
@@ -96,73 +164,54 @@
   }
   @Override
   public List<ReslutOrder> queryJoinHongBao(int start, int count, String key, String startTime, String endTime,
         Integer type, Integer days) throws Exception {
      return taoBaoOrderMapper.queryJoinHongBao(start, count, key, startTime, endTime, type, days);
   }
   @Override
   public int countQueryJoinHongBao(String key, String startTime, String endTime, Integer type, Integer days)
         throws Exception {
      return taoBaoOrderMapper.countQueryJoinHongBao(key, startTime, endTime, type, days);
   }
   @Override
   public double countEstimate(String date) throws Exception {
      return taoBaoOrderMapper.countEstimate(date);
   }
   @Override
   public List<TaoBaoOrder> getStateByOrderIdAndPayment(String orderId, String payment) throws Exception {
      return taoBaoOrderMapper.getStateByOrderIdAndPayment(orderId, payment);
   public void bindSpecialIdAndRealtionId(String tradeId, String specialId, String realtionId) {
      if (StringUtil.isNullOrEmpty(specialId) && StringUtil.isNullOrEmpty(realtionId))
         return;
      TaoBaoOrder order = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(tradeId);
      if (order != null) {
         TaoBaoOrder update = new TaoBaoOrder();
         update.setId(order.getId());
         update.setSpecialId(specialId);
         update.setRelationId(realtionId);
         update.setLatestUpdateTime(new Date());
         taoBaoOrderMapper.updateByPrimaryKeySelective(update);
      }
   }
   @Override
   public List<TaoBaoOrderVO> listQuery(int start, int count,Integer keyType, String key,
         String startTime, String endTime, Integer state) throws Exception {
      List<TaoBaoOrderVO> listData = taoBaoOrderMapper.listQuery(start, count, keyType, key, startTime, endTime, state);
      for (TaoBaoOrderVO taoBaoOrderVO : listData) {
         String orderState = taoBaoOrderVO.getOrderState();
         if ("订单付款".equals(orderState)) {
            taoBaoOrderVO.setOrderState("1");
         }else if ("订单结算".equals(orderState) || "订单成功".equals(orderState)) {
            taoBaoOrderVO.setOrderState("2");
         } else if ("订单失效".equals(orderState)) {
            taoBaoOrderVO.setOrderState("3");
         }
         /* 到账状态 */
         String moneyState = taoBaoOrderVO.getUserMoneyState();
         if ((HongBaoV2.STATE_BUKELINGQU+"").equals(moneyState)
               || (HongBaoV2.STATE_KELINGQU+"").equals(moneyState)) {
            taoBaoOrderVO.setUserMoneyState("1"); // 未到账
         } else if ((HongBaoV2.STATE_YILINGQU + "").equals(moneyState)) {
            taoBaoOrderVO.setUserMoneyState("2"); // 已到账
         } else {
            taoBaoOrderVO.setUserMoneyState("3"); // 已失效
         }
         String userHongBaoType = taoBaoOrderVO.getUserHongBaoType();
         if ((HongBaoV2.TYPE_ZIGOU+"").equals(userHongBaoType)) {
            taoBaoOrderVO.setUserHongBaoType("1"); // 自购
         } else if ((HongBaoV2.TYPE_SHARE_GOODS + "").equals(userHongBaoType)) {
            taoBaoOrderVO.setUserHongBaoType("2"); // 分享
         } else {
            taoBaoOrderVO.setUserHongBaoType("3"); // 邀请
         }
      }
      return listData;
   public TaoBaoOrder selectByTradeId(String tradeId) {
      return taoBaoOrderMapper.selectTaoBaoOrderByTradeId(tradeId);
   }
   @Override
   public long countQuery(Integer keyType, String key, String startTime, String endTime,
         Integer state) throws Exception {
      return taoBaoOrderMapper.countQuery(keyType, key, startTime, endTime, state);
   public List<TaoBaoOrder> listAllOrder(int page, int pageSize) {
      return taoBaoOrderMapper.listAllOrder(null, (page - 1) * pageSize, pageSize);
   }
   @Override
   public long countAllOrder() {
      return taoBaoOrderMapper.countAllOrder(null);
   }
   @Override
   public TaoBaoOrder selectByPrimaryKey(Long id) {
      return taoBaoOrderMapper.selectByPrimaryKey(id);
   }
   @Override
   public List<TaoBaoOrder> listBySettlementTime(Long minTime, Long maxTime, int page, int pageSize) {
      return taoBaoOrderMapper.listBySettlementTime(minTime, maxTime, (page - 1) * pageSize, pageSize);
   }
   @Override
   public Long countBySettlementTime(Long minTime, Long maxTime) {
      return taoBaoOrderMapper.countBySettlementTime(minTime, maxTime);
   }
}