yujian
2019-04-29 9a24f2802a3d6fe3e82c05e52f2880d65ad04dcf
fanli/src/main/java/com/yeshi/fanli/service/impl/hongbao/HongBaoV2ServiceImpl.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.service.impl.hongbao;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
@@ -19,7 +20,6 @@
import com.yeshi.fanli.dao.mybatis.order.CommonOrderGoodsMapper;
import com.yeshi.fanli.dao.mybatis.order.CommonOrderMapper;
import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper;
import com.yeshi.fanli.dao.mybatis.order.OrderItemMapper;
import com.yeshi.fanli.dao.mybatis.order.OrderMapper;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderMapper;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanOrderMapper;
@@ -27,6 +27,7 @@
import com.yeshi.fanli.dto.HongBaoDTO;
import com.yeshi.fanli.entity.bus.msg.MsgOrderDetail;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.order.CommonOrder;
@@ -66,9 +67,6 @@
   private TaoBaoOrderMapper taoBaoOrderMapper;
   @Resource
   private OrderItemMapper orderItemMapper;
   @Resource
   private CommonOrderMapper commonOrderMapper;
   @Resource
@@ -91,7 +89,6 @@
   @Resource
   private UserShareGoodsGroupService userShareGoodsGroupService;
   @Resource
   private HongBaoManageService hongBaoManageService;
@@ -150,7 +147,6 @@
      return hongBaoV2Mapper.selectByPrimaryKey(id);
   }
   @Transactional
   @Override
   public void addHongBao(List<CommonOrder> commonOrderList, int type) throws HongBaoException {
@@ -179,7 +175,6 @@
         if (hasAdd) {
            Iterator<Integer> its = notificationMap.keySet().iterator();
            while (its.hasNext()) {
               Integer t = its.next();
               HongBaoV2 notify = notificationMap.get(t).getHongBaoV2();
               CommonOrder commonOrder = notificationMap.get(t).getCommonOrder();
@@ -210,6 +205,11 @@
                        MsgOrderDetail.STATE_FK, null, money);
                  userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, commonOrder.getPayment(),
                        money, goodsCount, state);
                  break;
               case HongBaoV2.TYPE_SHARE_YIJI:
                  userOrderMsgNotificationService.orderShareFirstLevelStatistic(uid, orderId,
                        commonOrder.getPayment(), money, goodsCount, state, notify.getBeizhu());
                  break;
               }
            }
@@ -243,6 +243,9 @@
                  userOrderMsgNotificationService.orderInviteStateChanged(uid, orderId, commonOrder.getPayment(),
                        money, state);
                  break;
               case HongBaoV2.TYPE_SHARE_YIJI:
                  userOrderMsgNotificationService.orderShareFirstLevelStateChanged(uid, orderId,
                        commonOrder.getPayment(), money, state);
               }
            }
         }
@@ -342,7 +345,7 @@
         // 获取子红包
         List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId());
         if (children != null)
         if (children != null && children.size() > 0)
            for (HongBaoV2 child : children) {
               HongBaoV2 childUpdate = new HongBaoV2(child.getId());
               childUpdate.setState(hongBao.getState());
@@ -391,7 +394,110 @@
               }
            }
         else {// 修复之前二级,三级订单未统计到的情况
            if (!mianDan) {
               ThreeSale threeSale = threeSaleSerivce.selectByWorkerId(commonOrder.getUserInfo().getId());
               if (threeSale != null && threeSale.getSucceedTime() != null
                     && threeSale.getSucceedTime() <= commonOrder.getThirdCreateTime().getTime()) {
                  UserInfo boss = threeSaleSerivce.getBoss(commonOrder.getUserInfo().getId());
                  // 插入一级子红包
                  BigDecimal firstRate = hongBaoManageService
                        .getFirstInviteRate(boss.getRank() == null ? 0 : boss.getRank());
                  if (firstRate.compareTo(new BigDecimal(0)) <= 0)
                     return;
                  HongBaoV2 firstHongbao = new HongBaoV2();
                  firstHongbao.setUserInfo(boss);
                  firstHongbao.setUrank(boss.getRank());
                  firstHongbao.setParent(hongBao);
                  firstHongbao.setCreateTime(new Date());
                  firstHongbao.setType(HongBaoV2.TYPE_YIJI);
                  firstHongbao.setVersion(2);
                  firstHongbao.setState(hongBao.getState());
                  if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
                     firstHongbao.setMoney(
                           MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
                     Calendar calendar = Calendar.getInstance();
                     calendar.setTime(commonOrder.getSettleTime());
                     calendar.add(Calendar.MONTH, 1);
                     firstHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
                           calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
                           "yyyy-M-dd")));
                  } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
                     firstHongbao.setMoney(
                           MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
                  }
                  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);
                  }
                  // 插入二级子红包
                  boss = threeSaleSerivce.getBoss(boss.getId());
                  if (boss != null) {// 二级BOSS存在
                     BigDecimal secondRate = hongBaoManageService
                           .getSecondInviteRate(boss.getRank() == null ? 0 : boss.getRank());
                     if (secondRate.compareTo(new BigDecimal(0)) <= 0)
                        return;
                     HongBaoV2 secondHongbao = new HongBaoV2();
                     secondHongbao.setUserInfo(boss);
                     secondHongbao.setUrank(boss.getRank());
                     secondHongbao.setParent(hongBao);
                     secondHongbao.setCreateTime(new Date());
                     secondHongbao.setType(HongBaoV2.TYPE_ERJI);
                     secondHongbao.setVersion(2);
                     secondHongbao.setState(hongBao.getState());
                     if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
                        secondHongbao.setMoney(MoneyBigDecimalUtil.mul(hongBao.getMoney(),
                              secondRate.divide(new BigDecimal(100))));
                        Calendar calendar = Calendar.getInstance();
                        calendar.setTime(commonOrder.getSettleTime());
                        calendar.add(Calendar.MONTH, 1);
                        secondHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
                              calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
                              "yyyy-M-dd")));
                     } 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 (type == HongBaoV2.TYPE_SHARE_GOODS) {
         BigDecimal fanliRate = hongBaoManageService.getShareRate(commonOrder.getCreateTime().getTime());
         List<ShareGoodsActivityOrder> list = shareGoodsActivityOrderService
@@ -449,17 +555,20 @@
               childUpdate.setUpdateTime(new Date());
               BigDecimal rate = null;
               if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) {// 一级分享赚
                  rate = hongBaoManageService.getFirstShareRate(child.getUrank(),
                        commonOrder.getCreateTime().getTime());
                  rate = hongBaoManageService.getFirstShareRate(1, commonOrder.getCreateTime().getTime());
               } else if (child.getType() == HongBaoV2.TYPE_SHARE_ERJI) {// 二级分享赚
                  rate = hongBaoManageService.getSecondShareRate(child.getUrank(),
                        commonOrder.getCreateTime().getTime());
                  rate = hongBaoManageService.getSecondShareRate(1, commonOrder.getCreateTime().getTime());
               }
               // 以实际收入为准计算预估收益
               if (CommonOrder.STATE_JS == commonOrder.getState()) {
                  childUpdate.setMoney(
                        MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
                  if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-16",
                        "yyyy-MM-dd"))
                     childUpdate.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
                           rate.divide(new BigDecimal(100))));
                  Calendar calendar = Calendar.getInstance();
                  calendar.setTime(commonOrder.getSettleTime());
                  calendar.add(Calendar.MONTH, 1);
@@ -467,13 +576,34 @@
                        calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
                        "yyyy-M-dd")));
               } else if (CommonOrder.STATE_FK == commonOrder.getState()) {
                  if (commonOrder.getOrderNo().equalsIgnoreCase("314134177659155087"))
                     System.out.println("");
                  childUpdate.setMoney(
                        MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
                  if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-16",
                        "yyyy-MM-dd"))
                     childUpdate.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
                           rate.divide(new BigDecimal(100))));
                  else
                     childUpdate.setMoney(
                           MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
               }
               hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate);
               // 添加通知
               if (notificationMap.get(child.getType()) == null) {
                  HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
                  tempHongBao.setUserInfo(child.getUserInfo());
                  tempHongBao.setMoney(childUpdate.getMoney());
                  CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
                  tempCommonOrder.setPayment(commonOrder.getPayment());
                  notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
               } else {
                  // 增加付款金额与资金
                  HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType());
                  tempHongBaoOrder.getCommonOrder().setPayment(
                        tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
                  tempHongBaoOrder.getHongBaoV2()
                        .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(childUpdate.getMoney()));
                  notificationMap.put(child.getType(), tempHongBaoOrder);
               }
            }
      } else
         throw new HongBaoException(2, "type错误");
@@ -703,7 +833,6 @@
                  }
               }
            }
         }
         HongBaoV2 hongBao = new HongBaoV2();
@@ -750,6 +879,56 @@
            tempHongBaoOrder.getHongBaoV2()
                  .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney()));
            notificationMap.put(type, tempHongBaoOrder);
         }
         // 4月17日后才有一级分享赚
         if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-17", "yyyy-MM-dd")) {
            UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId());
            if (boss != null) {
               BigDecimal firstLevelRate = hongBaoManageService.getFirstShareRate(1,
                     commonOrder.getThirdCreateTime().getTime());
               HongBaoV2 child = new HongBaoV2();
               child.setParent(hongBao);
               child.setType(HongBaoV2.TYPE_SHARE_YIJI);
               if (commonOrder.getState() == CommonOrder.STATE_FK) {
                  child.setState(HongBaoV2.STATE_BUKELINGQU);
                  child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
                        firstLevelRate.divide(new BigDecimal(100))));
               } else if (commonOrder.getState() == CommonOrder.STATE_JS) {
                  child.setState(HongBaoV2.STATE_KELINGQU);
                  child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
                        firstLevelRate.divide(new BigDecimal(100))));
                  Calendar calendar = Calendar.getInstance();
                  calendar.setTime(commonOrder.getSettleTime());
                  calendar.add(Calendar.MONTH, 1);
                  child.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
                        calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
                        "yyyy-M-dd")));
               }
               child.setUserInfo(boss);
               child.setUrank(boss.getRank());
               child.setVersion(2);
               child.setCreateTime(new Date());
               hongBaoV2Mapper.insertSelective(child);
               // 添加通知
               if (notificationMap.get(HongBaoV2.TYPE_SHARE_YIJI) == null) {
                  HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
                  tempHongBao.setUserInfo(child.getUserInfo());
                  tempHongBao.setMoney(child.getMoney());
                  tempHongBao.setBeizhu(hongBao.getUserInfo().getNickName());
                  CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
                  tempCommonOrder.setPayment(commonOrder.getPayment());
                  notificationMap.put(HongBaoV2.TYPE_SHARE_YIJI, new HongBaoOrder(tempCommonOrder, tempHongBao));
               } else {
                  // 增加付款金额与资金
                  HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_SHARE_YIJI);
                  tempHongBaoOrder.getCommonOrder().setPayment(
                        tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
                  tempHongBaoOrder.getHongBaoV2()
                        .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney()));
                  notificationMap.put(HongBaoV2.TYPE_SHARE_YIJI, tempHongBaoOrder);
               }
            }
         }
         // 修改统计数据
@@ -833,4 +1012,20 @@
      else
         return money;
   }
   @Override
   public BigDecimal computeMoneyByUidAndState(Long uid, int state) {
      List<Integer> stateList = new ArrayList<>();
      stateList.add(state);
      BigDecimal money = hongBaoV2Mapper.computeMoneyByUidAndState(uid, stateList);
      if (money == null)
         return new BigDecimal(0);
      else
         return money;
   }
   @Override
   public List<HongBaoV2> listChildrenById(Long id){
      return hongBaoV2Mapper.listChildrenById(id);
   }
}