admin
2020-04-22 d22d18f40d088277195e5c3ab587d07450f1a94d
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteSeparateServiceImpl.java
@@ -10,60 +10,80 @@
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.DateUtil;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.yeshi.fanli.dao.mybatis.user.UserInviteSeparateMapper;
import com.yeshi.fanli.dto.msg.MsgOtherVIPDTO;
import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
import com.yeshi.fanli.dto.mq.user.body.ThreeSaleSeparateMQMsg;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInviteSeparate;
import com.yeshi.fanli.entity.bus.user.vip.UserVIPPreInfo;
import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserInviteSeparateService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.invite.UserInviteMsgNotificationService;
import com.yeshi.fanli.service.inter.user.invite.UserInviteValidNumService;
import com.yeshi.fanli.service.inter.user.invite.UserInviteValidRecordService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPPreInfoService;
import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
@Service
public class UserInviteSeparateServiceImpl implements UserInviteSeparateService {
   @Resource
   private UserInviteSeparateMapper userInviteSeparateMapper;
   @Resource
   private UserVipConfigService userVipConfigService;
   @Lazy
   @Resource
   private ThreeSaleSerivce threeSaleSerivce;
   @Lazy
   @Resource
   private UserVIPPreInfoService userVIPPreInfoService;
   @Lazy
   @Resource
   private UserInfoService userInfoService;
   @Lazy
   @Resource
   private UserOtherMsgNotificationService userOtherMsgNotificationService;
   private UserInviteMsgNotificationService userInviteMsgNotificationService;
   @Lazy
   @Resource
   private UserInviteValidRecordService userInviteValidRecordService;
   @Lazy
   @Resource
   private UserInviteValidNumService userInviteValidNumService;
   @Resource(name = "producer")
   private Producer producer;
   @Override
   public void insertSelective(UserInviteSeparate record) {
      userInviteSeparateMapper.insertSelective(record);
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public void addPreSeparateRecord(Long workerId, Long bossId) {
      // 更新之前状态失效
      userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_INVALID);
      // 限制天数
      int limitDays = Integer.parseInt(userVipConfigService.getValueByKey("invite_separate_limit_days"));
      // 保存记录
      UserInviteSeparate inviteSeparate = new UserInviteSeparate();
      inviteSeparate.setBossId(bossId);
@@ -74,12 +94,12 @@
      inviteSeparate.setUpdateTime(new Date());
      userInviteSeparateMapper.insertSelective(inviteSeparate);
   }
   @Override
   public void updateInvalidByBossId(Long uid) {
      userInviteSeparateMapper.updateInvalidByBossId(uid);
   }
   @Override
   public void updateStateByWorkerIdAndBossId(Long workerId, Long bossId, int state) {
      userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, state);
@@ -89,14 +109,12 @@
   public UserInviteSeparate selectByWorkerIdAndBossId(Long workerId, Long bossId) {
      return userInviteSeparateMapper.selectByWorkerIdAndBossId(workerId, bossId);
   }
   @Override
   public List<UserInviteSeparate> getHandleOverdue(int start, int count) {
      return userInviteSeparateMapper.getHandleOverdue(start, count);
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public void inviteSeparate(UserInviteSeparate record) {
@@ -105,44 +123,76 @@
      Long workerId = record.getWorkerId();
      Long bossId = record.getBossId();
      ThreeSale threeSale = threeSaleSerivce.getMyBoss(workerId);
      if (threeSale == null) {
         // 成功脱离 不发消息
         // 已经成功脱离 不发消息
         userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_SUCCESS);
         return;
      }
      }
      boolean separate = false;
      UserVIPPreInfo info = userVIPPreInfoService.getVipByProcess(bossId, UserVIPPreInfo.PROCESS_1);
      UserVIPPreInfo info = userVIPPreInfoService.getLatestProcessInfo(bossId);
      if (info == null) {
         separate = true;
      } else if (info.getCreateTime().getTime() >= record.getEndTime().getTime()) {
         separate = true;
      } else if (info.getProcess() == UserVIPPreInfo.PROCESS_1) {
         if (info.getCreateTime().getTime() < record.getEndTime().getTime()) {
            separate = true; // 成为会员 晚于 脱离时间
         }
      } else if (info.getProcess() == UserVIPPreInfo.PROCESS_2) {
         Date upTime = info.getCreateTime();
         UserVIPPreInfo info1 = userVIPPreInfoService.getVipByProcess(bossId, UserVIPPreInfo.PROCESS_1);
         if (info1 != null) {
            upTime = info1.getCreateTime();
         }
         if (upTime.getTime() < record.getEndTime().getTime()) {
            separate = true; // 成为会员 晚于 脱离时间
         }
      }
      // 未脱离
      if (!separate) {
         userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_INVALID);
         return;
      }
      // 脱离关系
      userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_SUCCESS);
      // 脱离邀请关系
      threeSaleSerivce.inviteSeparate(workerId, bossId);
      if (!Constant.IS_TEST) {
         ThreeSaleSeparateMQMsg msg = new ThreeSaleSeparateMQMsg(bossId, workerId , new Date());
         Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.threeSaleSeparate, msg);
         producer.send(message);
      }
      
      // 直接有效粉丝脱离-1
      userInviteValidNumService.reduceValidNumFirst(bossId, workerId);
      // 间接有效粉丝脱离-1
      ThreeSale threeSaleSuper = threeSaleSerivce.getMyBoss(bossId);
      if (threeSaleSuper != null) {
         Long bossIdSuper = threeSaleSuper.getBoss().getId();
         userInviteValidNumService.reduceValidNumSecond(bossIdSuper, workerId);
      }
      // 通知上级消息
      try {
         // 提醒上级脱离
         Date date = new Date();
         UserInfo worker = userInfoService.selectByPKey(workerId);
         String nickName = worker.getNickName();
         userInviteMsgNotificationService.fansDivorced(bossId, nickName, date);
      if (!separate) {
         // 未脱离
         userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_INVALID);
      } else {
         // 脱离关系
         userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_SUCCESS);
         // 脱离邀请关系
         threeSaleSerivce.inviteSeparate(workerId, bossId);
         int limitDays = Integer.parseInt(userVipConfigService.getValueByKey("invite_separate_limit_days"));
         // 消息 TODO
         UserInfo userInfo = userInfoService.selectByPKey(workerId);
         MsgOtherVIPDTO msgboss = new MsgOtherVIPDTO();
         msgboss.setContent1(userInfo.getNickName() + workerId + "于"+ TimeUtil.formatDateDot(record.getCreateTime()) + "成功升级成为会员 ");
         msgboss.setContent2("很遗憾,你未能在" + limitDays + "天升级为会员 ");
         msgboss.setContent3("已与其脱离邀请关系");
         userOtherMsgNotificationService.teamSplitCallBoss(bossId, "如有疑问请联系我的-人工客服", msgboss);
         // 提醒上上级脱离
         if (threeSaleSuper != null) {
            Long bossIdSuper = threeSaleSuper.getBoss().getId();
            UserInfo boss = userInfoService.selectByPKey(workerId);
            userInviteMsgNotificationService.fansDivorcedIndirect(bossIdSuper, nickName, boss.getNickName(), date);
         }
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
   }
}