yujian
2020-04-01 8a57b3a0ee3fa70e8d43eb12865f1c27d0d385d8
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteValidNumServiceImpl.java
New file
@@ -0,0 +1,151 @@
package com.yeshi.fanli.service.impl.user.invite;
import java.math.BigDecimal;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.user.UserInviteValidNumMapper;
import com.yeshi.fanli.dao.mybatis.user.UserInviteValidRecordMapper;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.UserInviteValidNum;
import com.yeshi.fanli.entity.bus.user.UserInviteValidRecord;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.invite.UserInviteValidNumService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
@Service
public class UserInviteValidNumServiceImpl implements UserInviteValidNumService {
   @Resource
   private UserInviteValidNumMapper userInviteValidNumMapper;
   @Resource
   private UserInviteValidRecordMapper userInviteValidRecordMapper;
   @Resource
   private ThreeSaleSerivce threeSaleSerivce;
   @Override
   public UserInviteValidNum selectByPrimaryKey(Long id) {
      return userInviteValidNumMapper.selectByPrimaryKey(id);
   }
   /**
    *  直接粉丝 +1
    * @param uid
    */
   @Transactional(rollbackFor = Exception.class)
   private void addNumFirst(Long uid) {
      UserInviteValidNum inviteValid = userInviteValidNumMapper.selectForUpdate(uid);
      if (inviteValid != null) {
         userInviteValidNumMapper.addNumFirst(uid, 1);
      } else {
         inviteValid = new UserInviteValidNum();
         inviteValid.setId(uid);
         inviteValid.setNumFirst(1);
         inviteValid.setNumSecond(0);
         inviteValid.setUpdateTime(new Date());
         userInviteValidNumMapper.insertSelective(inviteValid);
      }
   }
   /**
    *  间接粉丝 +1
    * @param uid
    */
   @Transactional(rollbackFor = Exception.class)
   private void addNumSecond(Long uid) {
      UserInviteValidNum inviteValid = userInviteValidNumMapper.selectForUpdate(uid);
      if (inviteValid != null) {
         userInviteValidNumMapper.addNumSecond(uid, 1);
      } else {
         inviteValid = new UserInviteValidNum();
         inviteValid.setId(uid);
         inviteValid.setNumFirst(0);
         inviteValid.setNumSecond(1);
         inviteValid.setUpdateTime(new Date());
         userInviteValidNumMapper.insertSelective(inviteValid);
      }
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public void addValidTeamNum(Long uid, BigDecimal payment, Date payDate) {
      if (uid == null || payment == null || payDate == null) {
         return;
      }
      try {
         // 付款金额小于1
         if (payment.compareTo(Constant.VIP_ORDER_PAY) < 0) {
            return;
         }
         // 是否上级
         ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
         if (threeSale == null) {
            return;
         }
         // 队员关系有效时间
         Long succeedTime = threeSale.getSucceedTime();
         if (succeedTime == null) {
            succeedTime = threeSale.getCreateTime();
         }
         // 下单时间在生产关系之前
         if (payDate.getTime() <= succeedTime.longValue()) {
            return;
         }
         Long bossId = threeSale.getBoss().getId();
         String uniqueKey = StringUtil.Md5(bossId + "#" + uid + "#" + UserInviteValidRecord.TYPE_ONE);
         UserInviteValidRecord record = userInviteValidRecordMapper.selectByUniqueKey(uniqueKey);
         if (record == null) {
            record = new UserInviteValidRecord();
            record.setUid(bossId);
            record.setWorkerId(uid);
            record.setType(UserInviteValidRecord.TYPE_ONE);
            record.setUniqueKey(uniqueKey);
            record.setCreateTime(new Date());
            userInviteValidRecordMapper.insertSelective(record);
            // 更新上级的直接粉丝数量
            addNumFirst(bossId);
         }
         // 是否上上级
         ThreeSale threeSaleSuper = threeSaleSerivce.getMyBoss(bossId);
         if (threeSaleSuper == null) {
            return;
         }
         // 间接关系
         Long bossIdSuper = threeSaleSuper.getBoss().getId();
         String uniqueKeySuper = StringUtil.Md5(bossIdSuper + "#" + uid + "#" + UserInviteValidRecord.TYPE_TWO);
         UserInviteValidRecord recordSuper = userInviteValidRecordMapper.selectByUniqueKey(uniqueKeySuper);
         if (recordSuper == null) {
            recordSuper = new UserInviteValidRecord();
            recordSuper.setUid(bossIdSuper);
            recordSuper.setWorkerId(uid);
            recordSuper.setType(UserInviteValidRecord.TYPE_TWO);
            recordSuper.setUniqueKey(uniqueKeySuper);
            recordSuper.setCreateTime(new Date());
            userInviteValidRecordMapper.insertSelective(recordSuper);
            // 更新上上级的间接粉丝数量
            addNumSecond(bossIdSuper);
         }
      } catch (Exception e) {
         LogHelper.error(e);
      }
   }
}