| | |
| | | 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 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
|
| | | */
|
| | | private void addNumFirst(Long uid) {
|
| | | UserInviteValidNum inviteValid = userInviteValidNumMapper.selectForUpdate(uid);
|
| | | if (inviteValid != null) {
|
| | | userInviteValidNumMapper.addNumFirst(uid, 1);
|
| | | } else {
|
| | | inviteValid = new UserInviteValidNum();
|
| | | inviteValid.setNumFirst(1);
|
| | | inviteValid.setNumSecond(0);
|
| | | inviteValid.setUpdateTime(new Date());
|
| | | userInviteValidNumMapper.insertSelective(inviteValid);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 间接粉丝 +1
|
| | | * @param uid
|
| | | */
|
| | | private void addNumSecond(Long uid) {
|
| | | UserInviteValidNum inviteValid = userInviteValidNumMapper.selectForUpdate(uid);
|
| | | if (inviteValid != null) {
|
| | | userInviteValidNumMapper.addNumSecond(uid, 1);
|
| | | } else {
|
| | | inviteValid = new UserInviteValidNum();
|
| | | inviteValid.setNumFirst(0);
|
| | | inviteValid.setNumSecond(1);
|
| | | inviteValid.setUpdateTime(new Date());
|
| | | userInviteValidNumMapper.insertSelective(inviteValid);
|
| | | }
|
| | | }
|
| | | |
| | | @Override
|
| | | 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 + "#" + bossId + "#" + UserInviteValidRecord.TYPE_TWO);
|
| | | UserInviteValidRecord recordSuper = userInviteValidRecordMapper.selectByUniqueKey(uniqueKeySuper);
|
| | | if (recordSuper == null) {
|
| | | recordSuper = new UserInviteValidRecord();
|
| | | recordSuper.setUid(bossIdSuper);
|
| | | recordSuper.setWorkerId(bossId);
|
| | | recordSuper.setType(UserInviteValidRecord.TYPE_TWO);
|
| | | recordSuper.setUniqueKey(uniqueKeySuper);
|
| | | recordSuper.setCreateTime(new Date());
|
| | | userInviteValidRecordMapper.insertSelective(recordSuper);
|
| | | |
| | | // 更新上上级的间接粉丝数量
|
| | | addNumSecond(bossIdSuper);
|
| | | }
|
| | | } catch (Exception e) {
|
| | | LogHelper.error(e);
|
| | | }
|
| | | }
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | }
|
| | | package com.yeshi.fanli.service.impl.user.invite; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import com.aliyun.openservices.ons.api.Message; |
| | | import com.aliyun.openservices.ons.api.Producer; |
| | | import com.yeshi.fanli.dao.mybatis.user.UserInviteValidNumMapper; |
| | | import com.yeshi.fanli.dao.mybatis.user.UserInviteValidRecordMapper; |
| | | import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; |
| | | import com.yeshi.fanli.dto.mq.user.body.BeComeValidUserMQMsg; |
| | | import com.yeshi.fanli.entity.bus.user.ThreeSale; |
| | | import com.yeshi.fanli.entity.bus.user.UserInfo; |
| | | 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.order.CommonOrderService; |
| | | import com.yeshi.fanli.service.inter.user.UserInfoService; |
| | | import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; |
| | | import com.yeshi.fanli.service.inter.user.invite.UserInviteValidNumService; |
| | | import com.yeshi.fanli.service.manger.msg.RocketMQManager; |
| | | import com.yeshi.fanli.util.Constant; |
| | | import com.yeshi.fanli.util.StringUtil; |
| | | import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; |
| | | import com.yeshi.fanli.util.rocketmq.MQTopicName; |
| | | |
| | | @Service |
| | | public class UserInviteValidNumServiceImpl implements UserInviteValidNumService { |
| | | @Resource |
| | | private UserInviteValidNumMapper userInviteValidNumMapper; |
| | | |
| | | @Resource |
| | | private UserInviteValidRecordMapper userInviteValidRecordMapper; |
| | | |
| | | @Lazy |
| | | @Resource |
| | | private ThreeSaleSerivce threeSaleSerivce; |
| | | |
| | | @Lazy |
| | | @Resource |
| | | private UserInfoService userInfoService; |
| | | |
| | | @Lazy |
| | | @Resource |
| | | private CommonOrderService commonOrderService; |
| | | |
| | | @Resource |
| | | private RocketMQManager rocketMQManager; |
| | | |
| | | @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 |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void reduceValidNumFirst(Long uid, Long workerId) { |
| | | UserInviteValidRecord record = userInviteValidRecordMapper.getByUidAndWorkerId(uid, workerId, |
| | | UserInviteValidRecord.TYPE_ONE); |
| | | if (record == null) { |
| | | return; |
| | | } |
| | | |
| | | UserInviteValidNum inviteValid = userInviteValidNumMapper.selectForUpdate(uid); |
| | | if (inviteValid != null) { |
| | | int num = 0; |
| | | if (inviteValid.getNumFirst() > 0) { |
| | | num = inviteValid.getNumFirst() - 1; |
| | | } |
| | | inviteValid.setId(uid); |
| | | inviteValid.setNumFirst(num); |
| | | inviteValid.setUpdateTime(new Date()); |
| | | userInviteValidNumMapper.updateByPrimaryKeySelective(inviteValid); |
| | | } |
| | | |
| | | // 删除有效记录 |
| | | userInviteValidRecordMapper.deleteByPrimaryKey(record.getId()); |
| | | } |
| | | |
| | | /** |
| | | * 直接粉丝 -1 |
| | | * @param uid |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void reduceValidNumSecond(Long uid, Long workerId) { |
| | | UserInviteValidRecord record = userInviteValidRecordMapper.getByUidAndWorkerId(uid, workerId, |
| | | UserInviteValidRecord.TYPE_TWO); |
| | | if (record == null) { |
| | | return; |
| | | } |
| | | |
| | | UserInviteValidNum inviteValid = userInviteValidNumMapper.selectForUpdate(uid); |
| | | if (inviteValid != null) { |
| | | int num = 0; |
| | | if (inviteValid.getNumFirst() > 0) { |
| | | num = inviteValid.getNumSecond() - 1; |
| | | } |
| | | inviteValid.setId(uid); |
| | | inviteValid.setNumSecond(num); |
| | | inviteValid.setUpdateTime(new Date()); |
| | | userInviteValidNumMapper.updateByPrimaryKeySelective(inviteValid); |
| | | } |
| | | |
| | | // 删除有效记录 |
| | | userInviteValidRecordMapper.deleteByPrimaryKey(record.getId()); |
| | | } |
| | | |
| | | /** |
| | | * 间接粉丝 +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(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); |
| | | } |
| | | |
| | | // 发送成为有效粉丝的消息 |
| | | if (!Constant.IS_TEST) { |
| | | BeComeValidUserMQMsg msg = new BeComeValidUserMQMsg(uid, new Date()); |
| | | Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.becomeValidUser, |
| | | msg); |
| | | rocketMQManager.sendNormalMsg(message, null); |
| | | } |
| | | |
| | | // 是否上上级 |
| | | ThreeSale threeSaleSuper = threeSaleSerivce.getMyBoss(bossId); |
| | | if (threeSaleSuper == null) { |
| | | return; |
| | | } |
| | | // 间接关系 |
| | | Long bossIdSuper = threeSaleSuper.getBoss().getId(); |
| | | String uniqueKeySuper = StringUtil.Md5(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); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void syncInfoAgain(Long workerId) { |
| | | // 更新上级 |
| | | ThreeSale threeSale = threeSaleSerivce.getByWorkerId(workerId); |
| | | if (threeSale == null) { |
| | | return; |
| | | } |
| | | |
| | | Long uid = threeSale.getBoss().getId(); |
| | | UserInfo userInfo = userInfoService.selectByPKey(uid); |
| | | if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) { |
| | | return; |
| | | } |
| | | |
| | | int countTeam1 = 0; |
| | | List<ThreeSale> listFirstTeam = threeSaleSerivce.listFirstTeam(0, Integer.MAX_VALUE, uid); |
| | | if (listFirstTeam != null && listFirstTeam.size() > 0) { |
| | | for (ThreeSale firstTeam : listFirstTeam) { |
| | | if (firstTeam.getWorker() == null || firstTeam.getWorker().getId() == null) { |
| | | continue; |
| | | } |
| | | Long wid = firstTeam.getWorker().getId(); |
| | | String uniqueKey = StringUtil.Md5(wid + "#" + UserInviteValidRecord.TYPE_ONE); |
| | | UserInviteValidRecord record = userInviteValidRecordMapper.selectByUniqueKey(uniqueKey); |
| | | if (record != null) { |
| | | countTeam1++; |
| | | } else { |
| | | long countValid = commonOrderService.countOrderByUidAndSettled(wid, Constant.VIP_ORDER_PAY); |
| | | if (countValid > 0) { |
| | | countTeam1++; |
| | | |
| | | record = new UserInviteValidRecord(); |
| | | record.setUid(uid); |
| | | record.setWorkerId(wid); |
| | | record.setType(UserInviteValidRecord.TYPE_ONE); |
| | | record.setUniqueKey(uniqueKey); |
| | | record.setCreateTime(new Date()); |
| | | userInviteValidRecordMapper.insertSelective(record); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | UserInviteValidNum inviteValid = userInviteValidNumMapper.selectForUpdate(uid); |
| | | if (inviteValid != null) { |
| | | UserInviteValidNum updateObj = new UserInviteValidNum(); |
| | | updateObj.setId(uid); |
| | | updateObj.setNumFirst(countTeam1); |
| | | ; |
| | | userInviteValidNumMapper.updateByPrimaryKeySelective(updateObj); |
| | | } else { |
| | | inviteValid = new UserInviteValidNum(); |
| | | inviteValid.setId(uid); |
| | | inviteValid.setNumFirst(countTeam1); |
| | | inviteValid.setNumSecond(0); |
| | | inviteValid.setUpdateTime(new Date()); |
| | | userInviteValidNumMapper.insertSelective(inviteValid); |
| | | } |
| | | |
| | | // 更新上上级信息 |
| | | ThreeSale superThreeSale = threeSaleSerivce.getByWorkerId(uid); |
| | | if (superThreeSale == null) { |
| | | return; |
| | | } |
| | | |
| | | Long superUid = superThreeSale.getBoss().getId(); |
| | | UserInfo superUserInfo = userInfoService.selectByPKey(superUid); |
| | | if (superUserInfo == null || superUserInfo.getState() != UserInfo.STATE_NORMAL) { |
| | | return; |
| | | } |
| | | |
| | | int countTeam2 = 0; |
| | | List<ThreeSale> listSecondTeam = threeSaleSerivce.listSecondTeam(0, Integer.MAX_VALUE, superUid); |
| | | if (listSecondTeam != null && listSecondTeam.size() > 0) { |
| | | for (ThreeSale team : listSecondTeam) { |
| | | if (team.getWorker() == null || team.getWorker().getId() == null) { |
| | | continue; |
| | | } |
| | | Long wid = team.getWorker().getId(); |
| | | String uniqueKeySuper = StringUtil.Md5(wid + "#" + UserInviteValidRecord.TYPE_TWO); |
| | | UserInviteValidRecord recordSuper = userInviteValidRecordMapper.selectByUniqueKey(uniqueKeySuper); |
| | | if (recordSuper != null) { |
| | | countTeam2++; |
| | | } else { |
| | | long countValid = commonOrderService.countOrderByUidAndSettled(wid, Constant.VIP_ORDER_PAY); |
| | | if (countValid > 0) { |
| | | countTeam2++; |
| | | |
| | | recordSuper = new UserInviteValidRecord(); |
| | | recordSuper.setUid(superUid); |
| | | recordSuper.setWorkerId(wid); |
| | | recordSuper.setType(UserInviteValidRecord.TYPE_TWO); |
| | | recordSuper.setUniqueKey(uniqueKeySuper); |
| | | recordSuper.setCreateTime(new Date()); |
| | | userInviteValidRecordMapper.insertSelective(recordSuper); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | UserInviteValidNum inviteValid2 = userInviteValidNumMapper.selectForUpdate(superUid); |
| | | if (inviteValid2 != null) { |
| | | UserInviteValidNum updateObj = new UserInviteValidNum(); |
| | | updateObj.setId(superUid); |
| | | updateObj.setNumSecond(countTeam2); |
| | | userInviteValidNumMapper.updateByPrimaryKeySelective(updateObj); |
| | | } else { |
| | | inviteValid2 = new UserInviteValidNum(); |
| | | inviteValid2.setId(superUid); |
| | | inviteValid2.setNumFirst(0); |
| | | inviteValid2.setNumSecond(countTeam2); |
| | | inviteValid2.setUpdateTime(new Date()); |
| | | userInviteValidNumMapper.insertSelective(inviteValid2); |
| | | } |
| | | } |
| | | |
| | | } |