admin
2019-11-23 51a4ff5d777028d52a19c314a99f796334cb7b51
fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java
@@ -38,6 +38,7 @@
import com.yeshi.fanli.exception.order.HongBaoException;
import com.yeshi.fanli.exception.order.ShareGoodsActivityOrderException;
import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
import com.yeshi.fanli.exception.user.UserAccountException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
@@ -147,7 +148,7 @@
   @Transactional
   @Override
   public int addHongBao(List<CommonOrder> commonOrderList, int type) throws HongBaoException {
   public int addHongBao(List<CommonOrder> commonOrderList, int type) throws HongBaoException, UserAccountException {
      Set<Integer> stateSet = new HashSet<>();// 订单状态Set
      if (commonOrderList != null && commonOrderList.size() > 0) {
         int orderType = commonOrderList.get(0).getSourceType();
@@ -171,7 +172,7 @@
                  hasUpdate = true;
            }
         }
         /**
          * 通知用户的返利情况
          */
@@ -277,14 +278,14 @@
   @Transactional
   private boolean updateHongBao(HongBaoOrder hongBaoOrder, CommonOrder commonOrder, int type,
         Map<Integer, HongBaoOrder> notificationMap) throws HongBaoException {
         Map<Integer, HongBaoOrder> notificationMap) throws HongBaoException, UserAccountException {
      System.out.println(commonOrder.getOrderNo());
      // 锁行
      HongBaoV2 oldHongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBaoOrder.getHongBaoV2().getId());
      if (oldHongBao == null)
         throw new HongBaoException(10, "红包对象不存在");
      // 已经失效,已经领取,新老状态一致的红包不做处理
      if (oldHongBao.getState() == HongBaoV2.STATE_SHIXIAO || oldHongBao.getState() == HongBaoV2.STATE_YILINGQU)
      if (oldHongBao.getState() == HongBaoV2.STATE_SHIXIAO||oldHongBao.getState() == HongBaoV2.STATE_YILINGQU)
         return false;
      if (type == HongBaoV2.TYPE_ZIGOU) {// 获取自购的返利比例
@@ -313,7 +314,8 @@
                  MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
            if (mianDan)
               hongBao.setMoney(commonOrder.getPayment());
         } else if (commonOrder.getState() == CommonOrder.STATE_JS||commonOrder.getState() == CommonOrder.STATE_WQ) {
         } else if (commonOrder.getState() == CommonOrder.STATE_JS
               || commonOrder.getState() == CommonOrder.STATE_WQ) {
            hongBao.setState(HongBaoV2.STATE_KELINGQU);
            hongBao.setMoney(
                  MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
@@ -449,24 +451,31 @@
                  } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
                     firstHongbao.setMoney(
                           MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
                  } else if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) {
                     firstHongbao.setMoney(new BigDecimal(0));
                  }
                  hongBaoV2Mapper.insertSelective(firstHongbao);
                  // 用户通知
                  if (notificationMap.get(HongBaoV2.TYPE_YIJI) == null) {
                     HongBaoV2 tempHongBao = new HongBaoV2(firstHongbao.getId());
                     tempHongBao.setUserInfo(firstHongbao.getUserInfo());
                     tempHongBao.setMoney(firstHongbao.getMoney());
                     CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
                     tempCommonOrder.setPayment(commonOrder.getPayment());
                     notificationMap.put(HongBaoV2.TYPE_YIJI, new HongBaoOrder(tempCommonOrder, tempHongBao));
                  } else {
                     // 增加付款金额与资金
                     HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_YIJI);
                     tempHongBaoOrder.getCommonOrder().setPayment(
                           tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
                     tempHongBaoOrder.getHongBaoV2()
                           .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(firstHongbao.getMoney()));
                     notificationMap.put(HongBaoV2.TYPE_YIJI, tempHongBaoOrder);
                  if (firstHongbao.getMoney() != null
                        && firstHongbao.getMoney().compareTo(new BigDecimal(0)) > 0) {
                     hongBaoV2Mapper.insertSelective(firstHongbao);
                     // 用户通知
                     if (notificationMap.get(HongBaoV2.TYPE_YIJI) == null) {
                        HongBaoV2 tempHongBao = new HongBaoV2(firstHongbao.getId());
                        tempHongBao.setUserInfo(firstHongbao.getUserInfo());
                        tempHongBao.setMoney(firstHongbao.getMoney());
                        CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
                        tempCommonOrder.setPayment(commonOrder.getPayment());
                        notificationMap.put(HongBaoV2.TYPE_YIJI,
                              new HongBaoOrder(tempCommonOrder, tempHongBao));
                     } else {
                        // 增加付款金额与资金
                        HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_YIJI);
                        tempHongBaoOrder.getCommonOrder().setPayment(
                              tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
                        tempHongBaoOrder.getHongBaoV2().setMoney(
                              tempHongBaoOrder.getHongBaoV2().getMoney().add(firstHongbao.getMoney()));
                        notificationMap.put(HongBaoV2.TYPE_YIJI, tempHongBaoOrder);
                     }
                  }
                  // 插入二级子红包
@@ -497,26 +506,29 @@
                     } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
                        secondHongbao.setMoney(MoneyBigDecimalUtil.mul(hongBao.getMoney(),
                              secondRate.divide(new BigDecimal(100))));
                     }
                     hongBaoV2Mapper.insertSelective(secondHongbao);
                     // 用户通知
                     if (notificationMap.get(HongBaoV2.TYPE_ERJI) == null) {
                        HongBaoV2 tempHongBao = new HongBaoV2(secondHongbao.getId());
                        tempHongBao.setUserInfo(secondHongbao.getUserInfo());
                        tempHongBao.setMoney(secondHongbao.getMoney());
                        CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
                        tempCommonOrder.setPayment(commonOrder.getPayment());
                        notificationMap.put(HongBaoV2.TYPE_ERJI,
                              new HongBaoOrder(tempCommonOrder, tempHongBao));
                     } else {
                        // 增加付款金额与资金
                        HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_ERJI);
                        tempHongBaoOrder.getCommonOrder().setPayment(
                              tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
                        tempHongBaoOrder.getHongBaoV2().setMoney(
                              tempHongBaoOrder.getHongBaoV2().getMoney().add(secondHongbao.getMoney()));
                        notificationMap.put(HongBaoV2.TYPE_ERJI, tempHongBaoOrder);
                     } else if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
                        secondHongbao.setMoney(new BigDecimal(0));
                     if (secondHongbao.getMoney() != null
                           && secondHongbao.getMoney().compareTo(new BigDecimal(0)) > 0) {
                        hongBaoV2Mapper.insertSelective(secondHongbao);
                        // 用户通知
                        if (notificationMap.get(HongBaoV2.TYPE_ERJI) == null) {
                           HongBaoV2 tempHongBao = new HongBaoV2(secondHongbao.getId());
                           tempHongBao.setUserInfo(secondHongbao.getUserInfo());
                           tempHongBao.setMoney(secondHongbao.getMoney());
                           CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
                           tempCommonOrder.setPayment(commonOrder.getPayment());
                           notificationMap.put(HongBaoV2.TYPE_ERJI,
                                 new HongBaoOrder(tempCommonOrder, tempHongBao));
                        } else {
                           // 增加付款金额与资金
                           HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_ERJI);
                           tempHongBaoOrder.getCommonOrder().setPayment(tempHongBaoOrder.getCommonOrder()
                                 .getPayment().add(commonOrder.getPayment()));
                           tempHongBaoOrder.getHongBaoV2().setMoney(
                                 tempHongBaoOrder.getHongBaoV2().getMoney().add(secondHongbao.getMoney()));
                           notificationMap.put(HongBaoV2.TYPE_ERJI, tempHongBaoOrder);
                        }
                     }
                  }
               }
@@ -543,7 +555,8 @@
            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
            hongBao.setMoney(
                  MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
         } else if (commonOrder.getState() == CommonOrder.STATE_JS||commonOrder.getState() == CommonOrder.STATE_WQ) {
         } else if (commonOrder.getState() == CommonOrder.STATE_JS
               || commonOrder.getState() == CommonOrder.STATE_WQ) {
            hongBao.setState(HongBaoV2.STATE_KELINGQU);
            hongBao.setMoney(
                  MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
@@ -591,7 +604,8 @@
               }
               // 以实际收入为准计算预估收益
               if (CommonOrder.STATE_JS == commonOrder.getState()||CommonOrder.STATE_WQ == commonOrder.getState()) {
               if (CommonOrder.STATE_JS == commonOrder.getState()
                     || CommonOrder.STATE_WQ == commonOrder.getState()) {
                  childUpdate.setMoney(
                        MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
                  if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-16",
@@ -645,7 +659,7 @@
   @Transactional
   private void saveHongBao(CommonOrder commonOrder, int type, Map<Integer, HongBaoOrder> notificationMap)
         throws HongBaoException {
         throws HongBaoException, UserAccountException {
      if (type == HongBaoV2.TYPE_ZIGOU) {// 获取自购的返利比例
         BigDecimal fanliRate = hongBaoManageService.getFanLiRate(commonOrder.getCreateTime().getTime());
         // 查询是否有免单计划
@@ -691,7 +705,8 @@
            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
            hongBao.setMoney(
                  MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
         } else if (commonOrder.getState() == CommonOrder.STATE_JS||CommonOrder.STATE_WQ == commonOrder.getState()) {
         } else if (commonOrder.getState() == CommonOrder.STATE_JS
               || CommonOrder.STATE_WQ == commonOrder.getState()) {
            hongBao.setState(HongBaoV2.STATE_KELINGQU);
            hongBao.setMoney(
                  MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
@@ -711,6 +726,8 @@
            hongBao.setMoney(mianDanMoney);
         UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
         if (user == null)
            throw new UserAccountException(1001, "用户不存在/被封禁");
         hongBao.setUrank(user.getRank());
         hongBao.setOrderType(commonOrder.getSourceType());
         hongBaoV2Mapper.insertSelective(hongBao);
@@ -898,7 +915,8 @@
            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
            hongBao.setMoney(
                  MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), shareRate.divide(new BigDecimal(100))));
         } else if (commonOrder.getState() == CommonOrder.STATE_JS||commonOrder.getState() == CommonOrder.STATE_WQ) {
         } else if (commonOrder.getState() == CommonOrder.STATE_JS
               || commonOrder.getState() == CommonOrder.STATE_WQ) {
            hongBao.setState(HongBaoV2.STATE_KELINGQU);
            hongBao.setMoney(
                  MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), shareRate.divide(new BigDecimal(100))));
@@ -909,6 +927,8 @@
                  calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
         }
         UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
         if (user == null)
            throw new UserAccountException(1001, "用户不存在/被封禁");
         hongBao.setUrank(user.getRank());
         hongBao.setUserInfo(user);
         hongBao.setOrderType(commonOrder.getSourceType());
@@ -950,7 +970,8 @@
                  child.setState(HongBaoV2.STATE_BUKELINGQU);
                  child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
                        firstLevelRate.divide(new BigDecimal(100))));
               } else if (commonOrder.getState() == CommonOrder.STATE_JS||commonOrder.getState() == CommonOrder.STATE_WQ) {
               } else if (commonOrder.getState() == CommonOrder.STATE_JS
                     || commonOrder.getState() == CommonOrder.STATE_WQ) {
                  child.setState(HongBaoV2.STATE_KELINGQU);
                  child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
                        firstLevelRate.divide(new BigDecimal(100))));
@@ -966,7 +987,7 @@
               child.setVersion(2);
               child.setCreateTime(new Date());
               child.setOrderType(commonOrder.getSourceType());
               if (child.getMoney().compareTo(new BigDecimal(0)) > 0) {
               if (child.getMoney() != null && child.getMoney().compareTo(new BigDecimal(0)) > 0) {
                  hongBaoV2Mapper.insertSelective(child);
                  // 添加通知
                  if (notificationMap.get(HongBaoV2.TYPE_SHARE_YIJI) == null) {
@@ -1011,7 +1032,6 @@
               e1.printStackTrace();
            }
         }
      } else
         throw new HongBaoException(2, "type错误");
   }