package cn.wisenergy.service.app.impl; import cn.wisenergy.mapper.RecommendUserMapper; import cn.wisenergy.mapper.TeamUserInfoMapper; import cn.wisenergy.mapper.UsersMapper; import cn.wisenergy.model.app.RecommendUser; import cn.wisenergy.model.app.TeamUserInfo; import cn.wisenergy.model.app.User; import cn.wisenergy.service.app.UserLevelService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; /** * @author zw * @ Description: 用户升级功能业务实现 * @ Author : zw * @ Date : 2021/2/24 17:06 */ @Service @Slf4j public class UserLevelServiceImlp extends ServiceImpl<UsersMapper,User> implements UserLevelService { @Autowired UsersMapper usersMapper; @Autowired RecommendUserMapper recommendUserMapper; @Autowired TeamUserInfoMapper teamUserInfoMapper; @Override @Transactional public void userLevelUpgrade(String userId) { //当前用户对象 User user = usersMapper.getByUserId(userId); //当前用户直推表对象 RecommendUser recommendUser = recommendUserMapper.getByUserId(userId); //当前用户团队信息表对象 TeamUserInfo teamUserInfoMapperByUserId = teamUserInfoMapper.getByUserId(userId); //当前用户的跨境额度(业绩) BigDecimal crossBorderLine = user.getCrossBorderLine(); //当前用户等级 Integer userLevel = user.getUserLevel(); //当前用户的邀请码 String beInvitedCode = user.getBeInvitedCode(); //通过当前用户推荐人邀请码获取邀请人的userId String inviteUserId = usersMapper.getByBeInvitedCode(beInvitedCode).getUserId(); //邀请人的直推用户信息 RecommendUser inviteRecommendUser = recommendUserMapper.getByUserId(inviteUserId); //用户等级升级为幼苗 1 //若当前用户等级为0(普通用户)且跨境额度(业绩消费金额)>= 3980 进行升级0-->1 if (userLevel == 0 && crossBorderLine.intValue() >= 3980){ user.setUserLevel(1); usersMapper.updateById(user); //用户推荐人邀请码为 1 时 该用户没有邀请人 if ("1".equals(beInvitedCode)){ return ; }else { //推荐人直推信息表数据维护 //若邀请人直推用户信息中的普通用户数量为0是则不用变化,否则普通用户数量-1 if(inviteRecommendUser.getNormalUserNum() == 0){ inviteRecommendUser.setNormalUserNum(inviteRecommendUser.getNormalUserNum()); }else { //普通用户-1 inviteRecommendUser.setNormalUserNum(inviteRecommendUser.getNormalUserNum()-1); } //邀请人直推用户信息中的幼苗用户数量为+1 inviteRecommendUser.setSeedlingNum(inviteRecommendUser.getSeedlingNum()+1); recommendUserMapper.updateById(inviteRecommendUser); //团队用户表数据维护 teamUserInfoNormalToSeed(inviteUserId); //用户升级成功时,进行邀请人等级自查是否达到升级条件 userLevelUpgrade(inviteUserId); } } //用户等级升级为青铜树 2 //当前用户等级为幼苗用户(1)时 且当前用户直推人数中幼苗等级>=5人<20人时 if (userLevel == 1 && recommendUser.getSeedlingNum() >= 5 && recommendUser.getSeedlingNum() < 20){ user.setUserLevel(2); usersMapper.updateById(user); //用户被邀请码为 1 时 该用户没有邀请人 if ("1".equals(user.getBeInvitedCode())){ return; } else { //若邀请人直推用户信息中的幼苗用户数量为0是则不用变化,否则幼苗用户数量-1 if(inviteRecommendUser.getSeedlingNum() == 0){ inviteRecommendUser.setSeedlingNum(inviteRecommendUser.getSeedlingNum()); }else { //幼苗用户-1 inviteRecommendUser.setSeedlingNum(inviteRecommendUser.getSeedlingNum()-1); } //邀请人直推用户信息中的青铜树用户数量为+1 inviteRecommendUser.setBronzeTreeNum(inviteRecommendUser.getBronzeTreeNum()+1); recommendUserMapper.updateById(inviteRecommendUser); //团队用户表数据维护 teamUserInfoSeedToBronze(inviteUserId); //用户升级成功时,进行邀请人等级自查是否达到升级条件 userLevelUpgrade(inviteUserId); } } //用户等级升级为白银树 3 if(userLevel == 2 && recommendUser.getSeedlingNum() >= 20 && recommendUser.getSeedlingNum() < 50){ user.setUserLevel(3); usersMapper.updateById(user); //用户被邀请码为 1 时 该用户没有邀请人 if ("1".equals(user.getBeInvitedCode())){ return; }else { //推荐人直推信息表数据维护 //若邀请人直推用户信息中的青铜树用户数量为0是则不用变化,否则青铜树用户数量-1 if(inviteRecommendUser.getBronzeTreeNum() == 0){ inviteRecommendUser.setBronzeTreeNum(inviteRecommendUser.getBronzeTreeNum()); }else { //青铜树用户-1 inviteRecommendUser.setBronzeTreeNum(inviteRecommendUser.getBronzeTreeNum() - 1); } //邀请人直推用户信息中的白银用户数量 + 1 inviteRecommendUser.setSilverTreeNum(inviteRecommendUser.getSilverTreeNum()+1); recommendUserMapper.updateById(inviteRecommendUser); //团队用户表数据维护 teamUserInfoBronzeToSilver(inviteUserId); //用户升级成功时,进行邀请人等级自查是否达到升级条件 userLevelUpgrade(inviteUserId); } } //用户等级升级为黄金树 4 //:todo 条件:团队中青铜树数量>=20 if (userLevel == 3 && recommendUser.getSeedlingNum() >=50 && recommendUser.getSilverTreeNum() >= 4 && teamUserInfoMapperByUserId.getBronzeTreeNum() >= 20){ user.setUserLevel(4); usersMapper.updateById(user); //用户被邀请码为 1 时 该用户没有邀请人 if ("1".equals(user.getBeInvitedCode())){ return; }else { //推荐人直推信息表数据维护 //若邀请人直推用户信息中的白银树用户数量为0是则不用变化,否则白银树用户数量-1 if(inviteRecommendUser.getSilverTreeNum() == 0){ inviteRecommendUser.setSilverTreeNum(inviteRecommendUser.getSilverTreeNum()); }else { //白银树用户-1 inviteRecommendUser.setSilverTreeNum(inviteRecommendUser.getSilverTreeNum() - 1); } //邀请人直推用户信息中的黄金用户数量 + 1 inviteRecommendUser.setGoldTreeNum(inviteRecommendUser.getGoldTreeNum() + 1); recommendUserMapper.updateById(inviteRecommendUser); //团队用户表数据维护 teamUserInfoSilverToGoldTree(inviteUserId); //用户升级成功时,进行邀请人等级自查是否达到升级条件 userLevelUpgrade(inviteUserId); } } //用户等级级升级为农场主 5 //:todo 条件:团队中白银树数量>=40 if (userLevel == 4 && recommendUser.getSeedlingNum() >= 70 && recommendUser.getGoldTreeNum() >= 5 && teamUserInfoMapperByUserId.getSilverTreeNum() >= 40){ user.setUserLevel(5); usersMapper.updateById(user); //用户被邀请码为 1 时 该用户没有邀请人 if ("1".equals(user.getBeInvitedCode())){ return; }else { //推荐人直推信息表数据维护 //若邀请人直推用户信息中的黄金树用户数量为0是则不用变化,否则黄金树用户数量-1 if(inviteRecommendUser.getGoldTreeNum() == 0){ inviteRecommendUser.setGoldTreeNum(inviteRecommendUser.getGoldTreeNum()); }else { //黄金树用户-1 inviteRecommendUser.setGoldTreeNum(inviteRecommendUser.getGoldTreeNum() - 1); } //邀请人直推用户信息中的农场主用户数量 + 1 inviteRecommendUser.setGoldTreeNum(inviteRecommendUser.getFarmerNum() + 1); recommendUserMapper.updateById(inviteRecommendUser); //团队用户表数据维护 teamUserInfoGoldTreeToFarmer(inviteUserId); //用户升级成功时,进行邀请人等级自查是否达到升级条件 userLevelUpgrade(inviteUserId); } } //用户等级升级为森林之星 6 // todo: 条件:团队中白银树数量>=70 && 条件:团队中黄金树数量>=30 if (userLevel == 5 && recommendUser.getSeedlingNum() >= 80 && recommendUser.getFarmerNum() >= 5 && teamUserInfoMapperByUserId.getSilverTreeNum() >= 70 && teamUserInfoMapperByUserId.getGoldTreeNum() >= 30){ user.setUserLevel(6); usersMapper.updateById(user); //用户被邀请码为 1 时 该用户没有邀请人 if ("1".equals(user.getBeInvitedCode())){ return; }else { //推荐人直推信息表数据维护 //若邀请人直推用户信息中的农场主用户数量为0是则不用变化,否则农场主用户数量-1 if(inviteRecommendUser.getFarmerNum() == 0){ inviteRecommendUser.setFarmerNum(inviteRecommendUser.getFarmerNum()); }else { //农场主用户-1 inviteRecommendUser.setFarmerNum(inviteRecommendUser.getFarmerNum() - 1); } //邀请人直推用户信息中的森林之星用户数量 + 1 inviteRecommendUser.setForestStartNum(inviteRecommendUser.getForestStartNum() + 1); recommendUserMapper.updateById(inviteRecommendUser); //团队用户表数据维护 teamUserInfoFarmerToForestStart(inviteUserId); //用户升级成功时,进行邀请人等级自查是否达到升级条件 userLevelUpgrade(inviteUserId); } } //用户等级升级为西田森合伙人 7 //:todo 条件:团队中白银树数量>=90 && 条件:团队中黄金树数量>=50 条件:团队中农场主数量>=30 if (userLevel == 6 && recommendUser.getSeedlingNum() >= 100 && recommendUser.getForestStartNum() >= 1 && teamUserInfoMapperByUserId.getSilverTreeNum() >= 90 && teamUserInfoMapperByUserId.getFarmerNum() >= 30){ user.setUserLevel(7); usersMapper.updateById(user); //用户被邀请码为 1 时 该用户没有邀请人 if ("1".equals(user.getBeInvitedCode())){ return; }else { //推荐人直推信息表数据维护 //若邀请人直推用户信息中的森林之星用户数量为0是则不用变化,否则森林之星用户数量-1 if(inviteRecommendUser.getForestStartNum() == 0){ inviteRecommendUser.setForestStartNum(inviteRecommendUser.getForestStartNum()); }else { //森林之星用户-1 inviteRecommendUser.setForestStartNum(inviteRecommendUser.getForestStartNum() - 1); } //邀请人直推用户信息中的西田森合伙人用户数量 + 1 inviteRecommendUser.setPartnerNum(inviteRecommendUser.getPartnerNum() + 1); recommendUserMapper.updateById(inviteRecommendUser); //团队用户表数据维护 teamUserInfoForestStartToPartner(inviteUserId); //用户升级成功时,进行邀请人等级自查是否达到升级条件 userLevelUpgrade(inviteUserId); } } } /** * 团队用户表数据维护(森林之星用户升级至西田森合伙人用户时) * @param inviteUserId 邀请人userid */ private void teamUserInfoForestStartToPartner(String inviteUserId) { //邀请人的团队信息表对象 TeamUserInfo teamNumInfoBuyId = teamUserInfoMapper.getByUserId(inviteUserId); //邀请人的用户表对象 User byUserId = usersMapper.getByUserId(teamNumInfoBuyId.getUserId()); //通过邀请人的用户信息获取邀请人的推荐人邀请码 String beinvitedCodeUserId = usersMapper.getByBeInvitedCode(byUserId.getBeInvitedCode()).getUserId(); //邀请人团队信息表中森林之星用户数量 = 0 时,森林之星用户数量不用变化,否则森林之星用户数量 - 1 if(teamNumInfoBuyId.getForestStartNum() == 0){ teamNumInfoBuyId.setForestStartNum(teamNumInfoBuyId.getForestStartNum()); }else { //森林之星用户数量 - 1 teamNumInfoBuyId.setForestStartNum(teamNumInfoBuyId.getForestStartNum() - 1); } //西田森合伙人用户数量 + 1 teamNumInfoBuyId.setPartnerNum(teamNumInfoBuyId.getPartnerNum() + 1); teamUserInfoMapper.updateById(teamNumInfoBuyId); if("1".equals(byUserId.getBeInvitedCode())){ return; } teamUserInfoForestStartToPartner(beinvitedCodeUserId); } /** * 团队用户表数据维护(农场主用户升级至森林之星用户时) * @param inviteUserId 邀请人userid */ private void teamUserInfoFarmerToForestStart(String inviteUserId) { //邀请人的团队信息表对象 TeamUserInfo teamNumInfoBuyId = teamUserInfoMapper.getByUserId(inviteUserId); //邀请人的用户表对象 User byUserId = usersMapper.getByUserId(teamNumInfoBuyId.getUserId()); //通过邀请人的用户信息获取邀请人的推荐人邀请码 String beinvitedCodeUserId = usersMapper.getByBeInvitedCode(byUserId.getBeInvitedCode()).getUserId(); //邀请人团队信息表中农场主用户数量 = 0 时,农场主用户数量不用变化,否则农场主用户数量 - 1 if(teamNumInfoBuyId.getFarmerNum() == 0){ teamNumInfoBuyId.setFarmerNum(teamNumInfoBuyId.getFarmerNum()); }else { //农场主用户数量 - 1 teamNumInfoBuyId.setFarmerNum(teamNumInfoBuyId.getFarmerNum() - 1); } //森林之星用户数量 + 1 teamNumInfoBuyId.setForestStartNum(teamNumInfoBuyId.getForestStartNum() + 1); teamUserInfoMapper.updateById(teamNumInfoBuyId); if("1".equals(byUserId.getBeInvitedCode())){ return; } //递归向上修改团队用户信息表 teamUserInfoFarmerToForestStart(beinvitedCodeUserId); } /** * 团队用户表数据维护(黄金树用户升级至农场主用户时) * @param inviteUserId 邀请人userid */ private void teamUserInfoGoldTreeToFarmer(String inviteUserId) { //邀请人的团队信息表对象 TeamUserInfo teamNumInfoBuyId = teamUserInfoMapper.getByUserId(inviteUserId); //邀请人的用户表对象 User byUserId = usersMapper.getByUserId(teamNumInfoBuyId.getUserId()); //通过邀请人的用户信息获取邀请人的推荐人邀请码 String beinvitedCodeUserId = usersMapper.getByBeInvitedCode(byUserId.getBeInvitedCode()).getUserId(); //邀请人团队信息表中黄金树用户数量 = 0 时,黄金树用户数量不用变化,否则黄金树用户数量 - 1 if(teamNumInfoBuyId.getGoldTreeNum() == 0){ teamNumInfoBuyId.setGoldTreeNum(teamNumInfoBuyId.getGoldTreeNum()); }else { //黄金树用户数量 - 1 teamNumInfoBuyId.setGoldTreeNum(teamNumInfoBuyId.getGoldTreeNum() - 1); } //农场主数量 + 1 teamNumInfoBuyId.setFarmerNum(teamNumInfoBuyId.getFarmerNum() + 1); teamUserInfoMapper.updateById(teamNumInfoBuyId); if("1".equals(byUserId.getBeInvitedCode())){ return; } //递归向上修改团队用户信息表 teamUserInfoGoldTreeToFarmer(beinvitedCodeUserId); } /** * 团队用户表数据维护(白银树用户升级至黄金树用户时) * @param inviteUserId 邀请人userid */ private void teamUserInfoSilverToGoldTree(String inviteUserId) { //邀请人的团队信息表对象 TeamUserInfo teamNumInfoBuyId = teamUserInfoMapper.getByUserId(inviteUserId); //邀请人的用户表对象 User byUserId = usersMapper.getByUserId(teamNumInfoBuyId.getUserId()); //通过邀请人的用户信息获取邀请人的推荐人邀请码 String beinvitedCodeUserId = usersMapper.getByBeInvitedCode(byUserId.getBeInvitedCode()).getUserId(); //邀请人团队信息表中白银树用户数量 = 0 时,白银树用户数量不用变化,否则白银树用户数量 - 1 if(teamNumInfoBuyId.getSilverTreeNum() == 0){ teamNumInfoBuyId.setSilverTreeNum(teamNumInfoBuyId.getSilverTreeNum()); }else { //白银树用户数量 - 1 teamNumInfoBuyId.setSilverTreeNum(teamNumInfoBuyId.getSilverTreeNum()-1); } //黄金树用户数量 - 1 teamNumInfoBuyId.setGoldTreeNum(teamNumInfoBuyId.getGoldTreeNum() + 1); teamUserInfoMapper.updateById(teamNumInfoBuyId); if("1".equals(byUserId.getBeInvitedCode())){ return; } //递归向上修改团队用户信息表 teamUserInfoSilverToGoldTree(beinvitedCodeUserId); } /** * 团队用户表数据维护(青铜树用户升级至白银树用户时) * @param inviteUserId 邀请人userid */ private void teamUserInfoBronzeToSilver(String inviteUserId) { //邀请人的团队信息表对象 TeamUserInfo teamNumInfoBuyId = teamUserInfoMapper.getByUserId(inviteUserId); //邀请人的用户表对象 User byUserId = usersMapper.getByUserId(teamNumInfoBuyId.getUserId()); //通过邀请人的用户信息获取邀请人的推荐人邀请码 String beinvitedCodeUserId = usersMapper.getByBeInvitedCode(byUserId.getBeInvitedCode()).getUserId(); //邀请人团队信息表中青铜树用户数量 = 0 时,青铜树用户数量不用变化,否则青铜树用户数量 - 1 if(teamNumInfoBuyId.getBronzeTreeNum() == 0){ teamNumInfoBuyId.setBronzeTreeNum(teamNumInfoBuyId.getBronzeTreeNum()); }else { //青铜树用户数量 - 1 teamNumInfoBuyId.setBronzeTreeNum(teamNumInfoBuyId.getBronzeTreeNum()-1); } //白银树用户数量+1 teamNumInfoBuyId.setSilverTreeNum(teamNumInfoBuyId.getSilverTreeNum() + 1); teamUserInfoMapper.updateById(teamNumInfoBuyId); if("1".equals(byUserId.getBeInvitedCode())){ return; } //递归向上修改团队用户信息表 teamUserInfoBronzeToSilver(beinvitedCodeUserId); } /** * 团队用户表数据维护(幼苗用户升级至青铜用户时) * @param inviteUserId 邀请人userid */ private void teamUserInfoSeedToBronze(String inviteUserId) { //邀请人的团队信息表对象 TeamUserInfo teamNumInfoBuyId = teamUserInfoMapper.getByUserId(inviteUserId); //邀请人的用户表对象 User byUserId = usersMapper.getByUserId(teamNumInfoBuyId.getUserId()); //通过邀请人的用户信息获取邀请人的推荐人邀请码 String beinvitedCodeUserId = usersMapper.getByBeInvitedCode(byUserId.getBeInvitedCode()).getUserId(); //邀请人团队信息表中幼苗用户数量 = 0 时,幼苗用户数量不用变化,否则幼苗用户数量 - 1 if(teamNumInfoBuyId.getSeedlingNum() == 0){ teamNumInfoBuyId.setSeedlingNum(teamNumInfoBuyId.getSeedlingNum()); }else { //幼苗用户数量-1 teamNumInfoBuyId.setSeedlingNum(teamNumInfoBuyId.getSeedlingNum()-1); } //邀请人的团队用户信息表中青铜树数量 + 1 teamNumInfoBuyId.setBronzeTreeNum(teamNumInfoBuyId.getBronzeTreeNum() + 1); teamUserInfoMapper.updateById(teamNumInfoBuyId); if("1".equals(byUserId.getBeInvitedCode())){ return; } //递归向上修改团队用户信息表 teamUserInfoSeedToBronze(beinvitedCodeUserId); } /** * 团队用户表数据维护(普通用户升级至幼苗用户时) * @param inviteUserId 邀请人userid */ private void teamUserInfoNormalToSeed(String inviteUserId){ //邀请人的团队信息表对象 TeamUserInfo teamNumInfoBuyId = teamUserInfoMapper.getByUserId(inviteUserId); //邀请人的用户表对象 User intiveUserByUserId = usersMapper.getByUserId(teamNumInfoBuyId.getUserId()); //通过邀请人的用户信息获取邀请人的推荐人邀请码 String beinvitedCodeUserId = usersMapper.getByBeInvitedCode(intiveUserByUserId.getBeInvitedCode()).getUserId(); //邀请人团队信息表中普通用户数量 = 0 时,普通用户数量不用变化,否则普通用户数量 - 1 if(teamNumInfoBuyId.getNormalUserNum() == 0){ teamNumInfoBuyId.setNormalUserNum(teamNumInfoBuyId.getNormalUserNum()); }else { //普通用户数量-1 teamNumInfoBuyId.setNormalUserNum(teamNumInfoBuyId.getNormalUserNum()-1); } //邀请人的团队用户信息表中幼苗数量 + 1 teamNumInfoBuyId.setSeedlingNum(teamNumInfoBuyId.getSeedlingNum() + 1); teamUserInfoMapper.updateById(teamNumInfoBuyId); if("1".equals(intiveUserByUserId.getBeInvitedCode())){ return; } //递归向上修改团队用户信息表 teamUserInfoNormalToSeed(beinvitedCodeUserId); } }