admin
2019-12-21 31d40dd7320db9a6fa7bd88bda546bcb195b2147
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -51,6 +51,7 @@
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.exception.elme.ElmeOrderException;
import com.yeshi.fanli.exception.money.OrderMoneySettleException;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.exception.order.CommonOrderException;
@@ -60,6 +61,7 @@
import com.yeshi.fanli.exception.user.UserAccountException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.elme.ElmeHongBaoOrderMapService;
import com.yeshi.fanli.service.inter.elme.ElmeOrderProcessService;
import com.yeshi.fanli.service.inter.elme.ElmeOrderService;
import com.yeshi.fanli.service.inter.hongbao.AccountDetailsHongBaoMapService;
import com.yeshi.fanli.service.inter.money.UserMoneyService;
@@ -202,6 +204,7 @@
      Iterator<String> its = orders.keySet().iterator();
      Map<String, List<TaoBaoOrder>> fanliOrderMap = new HashMap<>();
      Map<String, List<TaoBaoOrder>> shareOrderMap = new HashMap<>();
      Map<String, List<TaoBaoOrder>> elmeOrderMap = new HashMap<>();
      while (its.hasNext()) {
         String orderId = its.next();
@@ -209,26 +212,32 @@
            List<TaoBaoOrder> list = orders.get(orderId);
            String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(),
                  list.get(0).getSourceMediaId(), list.get(0).getAdPositionId());
            if ("饿了么".equalsIgnoreCase(list.get(0).getOrderType())) {
               // 处理饿了么订单
               elmeOrderMap.put(orderId, list);
            }
            if (!StringUtil.isNullOrEmpty(list.get(0).getSpecialId())
                  || pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID)) {// 设置渠道ID当做会员运营ID的位置ID
               fanliOrderMap.put(orderId, list);
            } else if (!StringUtil.isNullOrEmpty(list.get(0).getRelationId())) {
               shareOrderMap.put(orderId, list);
            } else {
               // 通过红包查询
               CommonOrder commonOrder = commonOrderService
                     .selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, list.get(0).getTradeId());
            else {
               if (!StringUtil.isNullOrEmpty(list.get(0).getSpecialId())
                     || pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID)) {// 设置渠道ID当做会员运营ID的位置ID
                  fanliOrderMap.put(orderId, list);
               } else if (!StringUtil.isNullOrEmpty(list.get(0).getRelationId())) {
                  shareOrderMap.put(orderId, list);
               } else {
                  // 通过红包查询
                  CommonOrder commonOrder = commonOrderService
                        .selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, list.get(0).getTradeId());
               if (commonOrder != null) {
                  HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
                  if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null
                        && hongBaoOrder.getHongBaoV2().getType() == HongBaoV2.TYPE_SHARE_GOODS) {
                     shareOrderMap.put(orderId, list);
                     continue;
                  if (commonOrder != null) {
                     HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
                     if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null
                           && hongBaoOrder.getHongBaoV2().getType() == HongBaoV2.TYPE_SHARE_GOODS) {
                        shareOrderMap.put(orderId, list);
                        continue;
                     }
                  }
                  fanliOrderMap.put(orderId, list);
               }
               fanliOrderMap.put(orderId, list);
            }
         }
      }
@@ -237,6 +246,54 @@
      processShopingFanliOrder(fanliOrderMap);
      // 处理分享赚订单
      processShareGoodsOrder(shareOrderMap);
      // 处理饿了么订单
      processElemeOrder(elmeOrderMap);
   }
   private ElmeOrder createElmeOrder(TaoBaoOrder taoBaoOrder) {
      ElmeOrder elmeOrder = new ElmeOrder();
      elmeOrder.setChannelId("");
      elmeOrder.setCreateTime(new Date());
      elmeOrder
            .setOrderDate(new Date(TimeUtil.convertToTimeTemp(taoBaoOrder.getCreateTime(), "yyyy-MM-dd HH:mm:ss")));
      elmeOrder.setOrderId(taoBaoOrder.getOrderId());
      elmeOrder.setPayMoney(taoBaoOrder.getPayment());
      elmeOrder.setRid(taoBaoOrder.getRelationId());
      if (taoBaoOrder.getOrderState().equalsIgnoreCase("订单结算"))
         elmeOrder.setIsSettle(true);
      else
         elmeOrder.setIsSettle(false);
      if (!taoBaoOrder.getOrderState().equalsIgnoreCase("订单失效"))
         elmeOrder.setState(1);
      else {
         elmeOrder.setState(0);
         elmeOrder.setPayMoney(new BigDecimal(0));
      }
      elmeOrder.setTrackPid(
            String.format("mm_124933865_%s_%s", taoBaoOrder.getSourceMediaId(), taoBaoOrder.getAdPositionId()));
      if (!StringUtil.isNullOrEmpty(taoBaoOrder.getRelationId())) {
         UserExtraTaoBaoInfo extraInfo = userExtraTaoBaoInfoService.getByRelationId(taoBaoOrder.getRelationId());
         if (extraInfo != null)
            elmeOrder.setUid(extraInfo.getUser().getId());
      }
      return elmeOrder;
   }
   private void processElemeOrder(Map<String, List<TaoBaoOrder>> orders) {
      for (Iterator<String> its = orders.keySet().iterator(); its.hasNext();) {
         String orderId = its.next();
         List<TaoBaoOrder> orderList = orders.get(orderId);
         for (TaoBaoOrder taoBaoOrder : orderList) {
            ElmeOrder elmeOrder = createElmeOrder(taoBaoOrder);
            try {
               elmeOrderProcessService.processOrder(elmeOrder);
            } catch (ElmeOrderException e) {
               e.printStackTrace();
            }
         }
      }
   }
   @Override
@@ -360,7 +417,7 @@
   private HongBaoOrderMapper hongBaoOrderMapper;
   @Override
   @Transactional
   @Transactional(rollbackFor = Exception.class)
   public void fanli(HongBaoV2 hb1) throws TaoBaoWeiQuanException {
      // 查询最新的红包数据
      hb1 = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hb1.getId());
@@ -427,18 +484,26 @@
      String key = mainUser.getId() + "-" + UUID.randomUUID().toString();
      msg.setKey(key);
      try {
         orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
            @Override
            public TransactionStatus execute(Message arg0, Object arg1) {
               try {
                  orderMoneySettleService.ziGouSettle(hongBaoOrder.getCommonOrder().getOrderNo(),
                        hongBaoOrder.getCommonOrder().getSourceType(), key);
                  return TransactionStatus.CommitTransaction;
               } catch (Exception e) {
                  return TransactionStatus.RollbackTransaction;
         if (!Constant.IS_TEST)
            orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
               @Override
               public TransactionStatus execute(Message arg0, Object arg1) {
                  try {
                     orderMoneySettleService.ziGouSettle(hongBaoOrder.getCommonOrder().getOrderNo(),
                           hongBaoOrder.getCommonOrder().getSourceType(), key);
                     return TransactionStatus.CommitTransaction;
                  } catch (Exception e) {
                     return TransactionStatus.RollbackTransaction;
                  }
               }
            }, null);
         else{
            try {
               orderMoneySettleService.ziGouSettle(hongBaoOrder.getCommonOrder().getOrderNo(),
                     hongBaoOrder.getCommonOrder().getSourceType(), key);
            } catch (Exception e) {
            }
         }, null);
         }
      } catch (Exception e) {
         LogHelper.mqError(e.getMessage(), msg.getTopic(), msg.getTag(), new Gson().toJson(mqMsg));
      }
@@ -525,7 +590,7 @@
   }
   @Override
   @Transactional
   @Transactional(rollbackFor = Exception.class)
   public void fanliInvaiteAndShare(Long uid) throws TaoBaoWeiQuanException {
      // 邀请赚到账
      try {
@@ -533,7 +598,7 @@
      } catch (OrderMoneySettleException e) {
         e.printStackTrace();
      }
      //
      try {
         orderMoneySettleService.inviteSettleJD(uid);
      } catch (OrderMoneySettleException e) {
@@ -1144,6 +1209,9 @@
   @Resource
   private ElmeOrderService elmeOrderService;
   @Resource
   private ElmeOrderProcessService elmeOrderProcessService;
   /**
    * 获取饿了么可以返利的红包
    * 
@@ -1209,13 +1277,12 @@
   @Transactional
   private void addHongBaoWithMQ(List<CommonOrderAddResultDTO> commonOrderList, String orderId, Long uid,
         int sourceType, int hongBaoType) {
      final List<CommonOrder> coList = convertCommonOrder(commonOrderList);
      int resultCode = 0;
      try {
         long time = TimeUtil.convertToTimeTemp("2019-12-06", "yyyy-MM-dd");
         if (!Constant.IS_TEST)
            time = TimeUtil.convertToTimeTemp("2020-01-01", "yyyy-MM-dd");
            time = TimeUtil.convertToTimeTemp("2019-12-20", "yyyy-MM-dd");
         if (coList.get(0).getThirdCreateTime().getTime() < time)
            resultCode = hongBaoV2Service.addHongBao(coList, hongBaoType);
@@ -1230,12 +1297,13 @@
      } catch (UserAccountException e) {
      }
      if (resultCode == 1) {// 只发送新增消息
         OrderMQMsg mqMsg = new OrderMQMsg(orderId, sourceType, uid, OrderMQMsg.HANDLE_TYPE_ADD,
               isCommonOrderValid(coList), 0, new Date());
         Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderStatistic, mqMsg);
         producer.send(msg);
      }
      if (!Constant.IS_TEST)
         if (resultCode == 1) {// 只发送新增消息
            OrderMQMsg mqMsg = new OrderMQMsg(orderId, sourceType, uid, OrderMQMsg.HANDLE_TYPE_ADD,
                  isCommonOrderValid(coList), 0, new Date());
            Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderStatistic, mqMsg);
            producer.send(msg);
         }
   }
   /**