admin
2019-07-24 c8a99ed8218fe034e9c33236969fcbec9eac75bb
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -17,14 +17,11 @@
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.AccountMessageMapper;
import com.yeshi.fanli.dao.mybatis.HongBaoManageMapper;
import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper;
import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper;
import com.yeshi.fanli.dao.mybatis.order.OrderMapper;
import com.yeshi.fanli.dao.mybatis.share.PidUserMapper;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanOrderMapper;
import com.yeshi.fanli.dto.HongBao;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
@@ -46,14 +43,12 @@
import com.yeshi.fanli.exception.order.CommonOrderException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.hongbao.AccountDetailsHongBaoMapService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.LostOrderService;
import com.yeshi.fanli.service.inter.order.OrderProcessService;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoBuyRelationMapService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanDrawBackService;
@@ -63,7 +58,6 @@
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.util.CMQManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.TimeUtil;
@@ -77,22 +71,7 @@
   private OrderMapper orderMapper;
   @Resource
   private PidUserMapper pidUserMapper;
   @Resource
   private UserInfoMapper userInfoMapper;
   @Resource
   private HongBaoManageMapper hongBaoManageMapper;
   @Resource
   private AccountMessageMapper accountMessageMapper;
   @Resource
   private OrderService orderService;
   @Resource
   private PushService pushService;
   @Resource
   private UserNotificationService userNotificationService;
@@ -107,16 +86,10 @@
   private TaoBaoOrderService taoBaoOrderService;
   @Resource
   private RedisManager redisManager;
   @Resource
   private LostOrderService lostOrderService;
   @Resource
   private TaoBaoWeiQuanOrderMapper taoBaoWeiQuanOrderMapper;
   @Resource
   private HongBaoManageService hongBaoManageService;
   @Resource
   private AccountDetailsHongBaoMapService accountDetailsHongBaoMapService;
@@ -139,8 +112,17 @@
   @Resource
   private UserMoneyService userMoneyService;
   @Resource
   private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService;
   @Resource
   private CommonOrderService commonOrderService;
   @Resource
   private HongBaoV2Service hongBaoV2Service;
   @Override
   public void processOrder(Map<String, List<TaoBaoOrder>> orders) {
   public synchronized void processOrder(Map<String, List<TaoBaoOrder>> orders) {
      List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID);
      // 分离出返利订单与分享赚订单
@@ -161,18 +143,19 @@
            } 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());
               PidUser pidUser = pidUserMapper.selectByPid(pid);
               if (pidUser != null && pidUser.getType() == PidUser.TYPE_SHARE_GOODS) {// 商品分享订单
                  // List<PidOrder> pidOrderList = new ArrayList<>();
                  // for (TaoBaoOrder order : list) {
                  // pidOrderList.add(TaoBaoOrderUtil.convertToPidOrder(order));
                  // }
                  // sharePidOrderMap.put(orderId, pidOrderList);
                  shareOrderMap.put(orderId, list);
               } else {// 普通返利订单
                  fanliOrderMap.put(orderId, list);
               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);
            }
         }
      }
@@ -181,41 +164,6 @@
      processShopingFanliOrder(fanliOrderMap);
      // 处理分享赚订单
      processShareGoodsOrder(shareOrderMap);
   }
   /**
    * 利用redis的原子性将订单号锁住,不让其他处理
    *
    * @param orderId
    */
   private void redisLockOrder(String orderId) {
      String key = "doorder-" + orderId;
      redisManager.cacheCommonString(key, "1");
   }
   /**
    * 订单解锁
    *
    * @param orderId
    */
   private void redisUnlockOrder(String orderId) {
      String key = "doorder-" + orderId;
      redisManager.removeCommonString(key);
   }
   /**
    * 订单是否被锁住了
    *
    * @param orderId
    * @return
    */
   private boolean isRedisLockOrder(String orderId) {
      String key = "doorder-" + orderId;
      String doing = redisManager.getCommonString(key);
      if (!StringUtil.isNullOrEmpty(doing))
         return true;
      else
         return false;
   }
   @Override
@@ -236,7 +184,7 @@
            // 出错了就不处理该订单了,需要定期检查
            // 更改丢失订单的状态
            lostOrderService.processSuceess(orderId);
            lostOrderService.processSuceess(orderId, Constant.SOURCE_TYPE_TAOBAO);
         } catch (HongBaoException e1) {
            e1.printStackTrace();
@@ -273,30 +221,6 @@
         }
      }
   }
   /**
    * 获取最大的创建时间与最小的创建时间
    *
    * @param hongBaoList
    * @return
    */
   private Map<String, Long> getMaxAndMinCreateTime(List<HongBao> hongBaoList) {
      if (hongBaoList.size() > 0) {
         Map<String, Long> map = new HashMap<>();
         long min = hongBaoList.get(0).getCreatetime();
         long max = hongBaoList.get(0).getCreatetime();
         for (HongBao hb : hongBaoList) {
            if (hb.getCreatetime() > max)
               max = hb.getCreatetime();
            if (hb.getCreatetime() < min)
               min = hb.getCreatetime();
         }
         map.put("max", max);
         map.put("min", min);
         return map;
      }
      return null;
   }
   @Override
@@ -358,21 +282,6 @@
      }
   }
   /**
    * 判断订单是否失效 全部订单失效才判断为失效
    *
    * @param list
    * @return
    */
   private boolean isOrderValid(List<TaoBaoOrder> list) {
      int validCount = 0;
      for (TaoBaoOrder order : list) {
         if (order.getOrderState().equalsIgnoreCase("订单失效"))
            validCount++;
      }
      return validCount >= list.size();
   }
   @Resource
   private HongBaoOrderMapper hongBaoOrderMapper;
@@ -387,16 +296,20 @@
         LogHelper.error("返利失败:" + hb1.getId());
         return;
      }
      // 维权中的不返利
      List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper
            .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "维权创建");
      if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0)
         return;
      taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper
            .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "等待处理");
      if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0)
         return;
      if (hongBaoOrder.getCommonOrder() != null
            && hongBaoOrder.getCommonOrder().getSourceType() == Constant.SOURCE_TYPE_TAOBAO) {
         // 维权中的不返利
         List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper
               .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "维权创建");
         if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0)
            return;
         taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper
               .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "等待处理");
         if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0)
            return;
      }
      // 查询同一订单号的红包
      List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(
@@ -477,7 +390,7 @@
         }
         // 站内信+推送
         UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
         UserInfo user = userInfoMapper.selectByPKey(uid);
         try {
            userNotificationService.orderFanliRecieved(uid, hongBaoOrder.getCommonOrder().getOrderNo(),
                  userGoodsCount.get(uid), user.getMyHongBao(), money);
@@ -504,9 +417,8 @@
      if (hongBaoOrder.getCommonOrder().getSettleTime() != null && hongBaoOrder.getCommonOrder().getSettleTime()
            .getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) {
         try {
            taoBaoWeiQuanDrawBackService.doWeiQuanFanli(hongBaoOrder.getCommonOrder().getOrderNo());
            if (hongBaoOrder.getCommonOrder().getSourceType() == Constant.SOURCE_TYPE_TAOBAO)
               taoBaoWeiQuanDrawBackService.doWeiQuanFanli(hongBaoOrder.getCommonOrder().getOrderNo());
         } catch (TaoBaoWeiQuanException e) {
            if (e.getCode() == TaoBaoWeiQuanException.CODE_NEDD_UPDATE_ORDER) {
               List<TaoBaoOrder> olist = taoBaoOrderService
@@ -545,7 +457,7 @@
   public void weiQuanOrder(List<TaoBaoWeiQuanOrder> orderList) {
      if (orderList != null)
         for (TaoBaoWeiQuanOrder order : orderList) {
            if (order.getState().equalsIgnoreCase("维权成功")) {
            if (order.getState().contains("维权成功")) {
               CMQManager.getInstance().addWeiQuanOrderMsg(order);
            }
         }
@@ -579,8 +491,8 @@
               if (drawBack == null) {// 还未扣款
                  try {
                     taoBaoWeiQuanDrawBackService.doWeiQuanFanli(order.getOrderId());
                     taoBaoWeiQuanDrawBackService.doWeiQuanInvite(order.getOrderId());
                     taoBaoWeiQuanDrawBackService.doWeiQuanShare(order.getOrderId());
                     taoBaoWeiQuanDrawBackService.doWeiQuanInvite(order.getOrderId());
                  } catch (TaoBaoWeiQuanException e) {
                     try {
                        LogHelper.errorDetailInfo(e, null, "订单号:" + order.getOrderId());
@@ -731,7 +643,6 @@
      // 邀请赚到账
      if (invitemoney.compareTo(new BigDecimal(0)) > 0) {
         userInfoMapper.addHongBaoByUid(uid, invitemoney);
         // 添加新版详情记录
         try {
@@ -752,7 +663,9 @@
            UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInvite(uid, (int) validCount,
                  (int) weiQuanCount, (int) invalidCount, invitemoney, new Date());
            userMoneyDetailMapper.insert(userMoneyDetail);
            // 增加资金
            userMoneyService.addUserMoney(uid, invitemoney, userMoneyDetail);
            // 添加到红包返利记录集合
            accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, userMoneyDetail.getId());
         } catch (UserMoneyDetailException e) {
@@ -829,7 +742,6 @@
       */
      if (sharemoney.compareTo(new BigDecimal(0)) > 0) {
         userInfoMapper.addHongBaoByUid(uid, sharemoney);
         // 添加新版详情记录
         try {
            // 计算本月的有效订单,失效订单,维权订单
@@ -850,7 +762,9 @@
            UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShare(uid, (int) validCount,
                  (int) weiQuanCount, (int) invalidCount, sharemoney, new Date());
            userMoneyDetailMapper.insert(userMoneyDetail);
            // 添加资金
            userMoneyService.addUserMoney(uid, sharemoney, userMoneyDetail);
            // 添加到红包返利记录集合
            accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, userMoneyDetail.getId());
         } catch (UserMoneyDetailException e) {
@@ -880,12 +794,6 @@
   }
   @Resource
   private CommonOrderService commonOrderService;
   @Resource
   private HongBaoV2Service hongBaoV2Service;
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   @Override
   public void processShopingFanliOrderNew(String orderId, List<TaoBaoOrder> orderList)
@@ -901,11 +809,11 @@
         String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(),
               orderList.get(0).getSourceMediaId(), orderList.get(0).getAdPositionId());
         Order oldOrder = orderMapper.selectOrderByOrderId(orderId);
         Order oldOrder = orderMapper.selectOrderByOrderIdAndOrderType(orderId, Constant.SOURCE_TYPE_TAOBAO);
         // 原来不存在订单
         Long uid = null;
         if (oldOrder == null) {
            PidUser pidUser = pidUserMapper.selectByPid(pid);
            PidUser pidUser = null;// pidUserMapper.selectByPid(pid);
            if (pidUser != null) {
               uid = pidUser.getUid();
@@ -923,15 +831,20 @@
               orderMapper.insertSelective(order);
               oldOrder = order;
            } else {
               UserExtraTaoBaoInfo info = null;
               Long targetUid = null;
               if (pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID)
                     && !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {
                  info = userExtraTaoBaoInfoService.getByRelationId(orderList.get(0).getRelationId());
                  targetUid = taoBaoBuyRelationMapService.selectUidByRelationId(orderList.get(0).getRelationId());
               } else if (!StringUtil.isNullOrEmpty(orderList.get(0).getSpecialId())) {
                  info = userExtraTaoBaoInfoService.getBySpecialId(orderList.get(0).getSpecialId());
                  UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService
                        .getBySpecialId(orderList.get(0).getSpecialId());
                  if (info != null && info.getUser() != null)
                     targetUid = info.getUser().getId();
               }
               if (info != null && info.getUser() != null) {
                  uid = info.getUser().getId();
               if (targetUid != null) {
                  uid = targetUid;
                  // 插入到Order中
                  // 添加到订单中去
                  Order order = new Order();
@@ -985,6 +898,7 @@
         try {
            commonOrderList = commonOrderService.addTaoBaoOrder(orderList, uid);
            hongBaoV2Service.addHongBao(commonOrderList, HongBaoV2.TYPE_ZIGOU);
         } catch (CommonOrderException e) {
            try {
               LogHelper.errorDetailInfo(e, "addTaoBaoOrder或addHongBao出错", "订单号:" + orderId);
@@ -1003,7 +917,7 @@
               orderList.get(0).getSourceMediaId(), orderList.get(0).getAdPositionId());
         // 原来不存在订单
         Long uid = null;
         PidUser pidUser = pidUserMapper.selectByPid(pid);
         PidUser pidUser = null; // pidUserMapper.selectByPid(pid);-PID机制移除
         if (pidUser != null)
            uid = pidUser.getUid();
         else {
@@ -1013,6 +927,20 @@
         }
         // 尚未找到和PID对应的用户
         if (uid == null) {
            // 通过红包查询
            CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
                  orderList.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) {
                  uid = hongBaoOrder.getHongBaoV2().getUserInfo().getId();
               }
            }
         }
         if (uid == null)
            return;