yujian
2020-04-13 c93dfa3912f0fed74faa2f5f3ef42c318a04a7a2
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -60,6 +60,7 @@
import com.yeshi.fanli.exception.order.TaoBaoWeiQuanException;
import com.yeshi.fanli.exception.user.UserAccountException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.log.OrderLogHelper;
import com.yeshi.fanli.service.inter.elme.ElmeHongBaoOrderMapService;
import com.yeshi.fanli.service.inter.elme.ElmeOrderProcessService;
import com.yeshi.fanli.service.inter.elme.ElmeOrderService;
@@ -79,7 +80,7 @@
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.service.manger.HongBaoV2AddManager;
import com.yeshi.fanli.service.manger.order.HongBaoV2AddManager;
import com.yeshi.fanli.util.CMQManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
@@ -213,11 +214,14 @@
            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);
            }
            else {
               // 饿了么订单开始归入到淘宝订单
               if (TimeUtil.convertToTimeTemp(list.get(0).getCreateTime(), "yyyy-MM-dd HH:mm:ss") > TimeUtil
                     .convertToTimeTemp("2020-04-15", "yyyy-MM-dd")) {
                  fanliOrderMap.put(orderId, list);
               } else {
                  elmeOrderMap.put(orderId, list);
               }
            } else {
               if (!StringUtil.isNullOrEmpty(list.get(0).getSpecialId())
                     || pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID)) {// 设置渠道ID当做会员运营ID的位置ID
                  fanliOrderMap.put(orderId, list);
@@ -263,6 +267,13 @@
         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())) {
@@ -284,7 +295,7 @@
            } catch (ElmeOrderException e) {
               e.printStackTrace();
            }
         }
      }
   }
@@ -410,7 +421,7 @@
   private HongBaoOrderMapper hongBaoOrderMapper;
   @Override
   @Transactional
   @Transactional(rollbackFor = Exception.class)
   public void fanli(HongBaoV2 hb1) throws TaoBaoWeiQuanException {
      // 查询最新的红包数据
      hb1 = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hb1.getId());
@@ -477,18 +488,27 @@
      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) {
                     e.printStackTrace();
                     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));
      }
@@ -517,13 +537,8 @@
      if (orderList != null && orderList.size() > 0 & !StringUtil.isNullOrEmpty(orderList.get(0).getSettlementTime()))
         order.setJieSuanTime(
               new Date(TimeUtil.convertToTimeTemp(orderList.get(0).getSettlementTime(), "yyyy-MM-dd HH:mm:ss")));
      // if (order.getJieSuanTime().getTime() >=
      // TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) {
      // return;
      // }
      // TODO 处理维权成功但是已到账的订单
      // 处理维权成功但是已到账的订单
      if (order.getJieSuanTime().getTime() > TimeUtil.convertToTimeTemp("2019-01-01", "yyyy-MM-dd")) {// 结算时间在2月1号的开始处理已到账但是维权的
         CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
               order.getOrderItemId());
@@ -534,15 +549,34 @@
               TaoBaoWeiQuanDrawBack drawBack = taoBaoWeiQuanDrawBackService
                     .selectByOrderItemId(order.getOrderItemId());
               if (drawBack == null) {// 还未扣款
                  OrderLogHelper.taoBaoWeiQuan("已到账未扣款处理:子订单号:" + order.getOrderItemId());
                  try {
                     taoBaoWeiQuanDrawBackService.doWeiQuanFanli(order.getOrderId());
                     taoBaoWeiQuanDrawBackService.doWeiQuanFanli(order.getOrderId(), true);
                     taoBaoWeiQuanDrawBackService.doWeiQuanShare(order.getOrderId());
                     taoBaoWeiQuanDrawBackService.doWeiQuanInvite(order.getOrderId());
                  } catch (TaoBaoWeiQuanException e) {
                     try {
                        LogHelper.errorDetailInfo(e, null, "订单号:" + order.getOrderId());
                        LogHelper.errorDetailInfo(e, "到账后处理维权扣款出错", "订单号:" + order.getOrderId());
                     } catch (Exception e1) {
                        e1.printStackTrace();
                     }
                  }
               } else {
                  // 查询子红包是否已到账
                  List<HongBaoV2> children = hongBaoV2Service
                        .listChildrenById(hongBaoOrder.getHongBaoV2().getId());
                  for (HongBaoV2 hongBaoV2 : children) {
                     if (hongBaoV2.getState() == HongBaoV2.STATE_YILINGQU) {
                        try {
                           taoBaoWeiQuanDrawBackService.doWeiQuanInvite(order.getOrderId());
                        } catch (TaoBaoWeiQuanException e) {
                           try {
                              LogHelper.errorDetailInfo(e, "到账后处理维权扣款出错", "订单号:" + order.getOrderId());
                           } catch (Exception e1) {
                              e1.printStackTrace();
                           }
                        }
                        break;
                     }
                  }
               }
@@ -637,9 +671,16 @@
         if (oldOrder == null) {
            Long targetUid = null;
            if (pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID)
                  && !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {
                  && !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {// 处理非返利商品库的商品
               targetUid = taoBaoBuyRelationMapService.selectUidByRelationId(orderList.get(0).getRelationId());
            } else if (pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_ELEME_PID)
                  && !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {// 处理饿了么的订单
               UserExtraTaoBaoInfo extraInfo = userExtraTaoBaoInfoService
                     .getByRelationId(orderList.get(0).getRelationId());
               if (extraInfo != null) {
                  targetUid = extraInfo.getUser().getId();
               }
            } else if (!StringUtil.isNullOrEmpty(orderList.get(0).getSpecialId())) {
               UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService
                     .getBySpecialId(orderList.get(0).getSpecialId());
@@ -708,7 +749,8 @@
               order.setOrderType(Constant.SOURCE_TYPE_TAOBAO);
               order.setUserInfo(new UserInfo(uid));
               try {
                  PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order);
                  if (!Constant.IS_TEST)
                     PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order);
               } catch (Exception e) {
               }
            }
@@ -1151,7 +1193,9 @@
            update.setUpdateTime(new Date());
            hongBaoV2Service.updateByPrimaryKeySelective(update);
         }
      userSystemCouponService.systemGiveRewardCoupon(uid, 1, orderId, sourceType, "因商家违约未能结算返利或商家已经关店");
      // TODO 商家关店跑路需要赠送金币
      // userSystemCouponService.systemGiveRewardCoupon(uid, 1, orderId,
      // sourceType, "因商家违约未能结算返利或商家已经关店");
   }
   @Transactional
@@ -1194,9 +1238,9 @@
   @Resource
   private ElmeOrderService elmeOrderService;
   @Resource
   private ElmeOrderProcessService elmeOrderProcessService;
   /**
    * 获取饿了么可以返利的红包
    * 
@@ -1282,12 +1326,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);
         }
   }
   /**