fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserVipController.java
@@ -26,6 +26,7 @@ import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.user.ThreeSaleDetail; import com.yeshi.fanli.entity.bus.user.vip.GiveVIPApplyInfo; import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum; import com.yeshi.fanli.exception.ParamsException; @@ -63,7 +64,13 @@ @RequestMapping(value = "applyVip") public void applyVip(AcceptData acceptData, GiveVIPApplyInfo info, String callback, PrintWriter out) { // TODO 查询开通人是否为他的下级 // 查询开通人是否为他的下级 ThreeSaleDetail detail = threeSaleDetailService.getByBossUidAndWorkerUid(info.getSourceUid(), info.getTargetUid()); if (detail == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该用户不是您的粉丝")); return; } try { info = giveVIPApplyInfoService.addGiveVIPApplyInfo(info); fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/vip/UserLevelStatisticMapper.java
@@ -2,6 +2,8 @@ import java.util.List; import org.apache.ibatis.annotations.Param; import com.yeshi.fanli.dto.vip.UserLevelStatisticDTO; public interface UserLevelStatisticMapper { @@ -15,7 +17,7 @@ * List<UserLevelStatisticDTO> 返回类型 * @throws */ List<UserLevelStatisticDTO> statisticFirstTeamLevelCount(Long uid); List<UserLevelStatisticDTO> statisticFirstTeamLevelCount(@Param("uid") Long uid); /** @@ -27,6 +29,6 @@ * List<UserLevelStatisticDTO> 返回类型 * @throws */ List<UserLevelStatisticDTO> statisticSecondTeamLevelCount(Long uid); List<UserLevelStatisticDTO> statisticSecondTeamLevelCount(@Param("uid") Long uid); } fanli/src/main/java/com/yeshi/fanli/mapping/user/vip/UserLevelStatisticMapper.xml
@@ -17,7 +17,7 @@ SELECT MAX(v.`vpi_process`) AS l FROM yeshi_ec_threesale s LEFT JOIN `yeshi_ec_user_vip_pre_info` v ON s.`worker_id`=v.`vpi_uid` WHERE s.`boss_id`=389677 GROUP BY s.`worker_id` s.`boss_id`=#{uid} GROUP BY s.`worker_id` ) a GROUP BY l; </select> @@ -33,7 +33,7 @@ SELECT MAX(v.`vpi_process`) AS l FROM yeshi_ec_threesale s LEFT JOIN yeshi_ec_threesale ss ON ss.`boss_id`=s.`worker_id` LEFT JOIN `yeshi_ec_user_vip_pre_info` v ON ss.`worker_id`=v.`vpi_uid` WHERE s.`boss_id`=389677 GROUP BY ss.`worker_id` s.`boss_id`=#{uid} AND ss.`worker_id`>0 GROUP BY ss.`worker_id` ) a GROUP BY l fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java
@@ -141,8 +141,7 @@ } userInfo = getUserInfoByTaoBaoOpenId(appId, tbUserInfo.getOpenid()); // 判断用户是否被删除 if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) userInfo = null; if (userInfo == null) {// 原先的账号不存在 userInfo = new UserInfo(); @@ -185,9 +184,7 @@ userInfo = getUserInfoByWXUnionId(appId, weiXinUser.getUnionid()); // 判断用户是否被删除 if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL )) if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) userInfo = null; // 直接用的微信登录 if (lastUser == null) { @@ -324,8 +321,7 @@ userInfo = getUserInfoByPhone(appId, phone); // 判断用户是否被删除 if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) userInfo = null; if (userInfo == null) {// 原先的账号不存在 @@ -451,7 +447,6 @@ } } /** * 根据系统与unionid寻找用户 * @@ -524,7 +519,7 @@ // 剔除被删除掉的用户 for (int i = 0; i < list.size(); i++) { if (list.get(i).getState() !=UserInfo.STATE_NORMAL) { if (list.get(i).getState() != UserInfo.STATE_NORMAL) { list.remove(i); i--; } @@ -856,7 +851,6 @@ String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.SMSLoginCount, phone); redisManager.removeCommonString(key); // 采用redis事务防止一个手机号多次注册问题 String watchKey = StringUtil.Md5("REGISTER:" + phone); Jedis jedis = jedisPool.getResource(); @@ -965,8 +959,8 @@ InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()); if (asInputStream != null) { FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) portrait = result.getUrl(); } else { @@ -1042,7 +1036,8 @@ UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); if (userInfo == null) { String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, StringUtil.Md5("WXLogin:" + weiXinUser.getUnionid())); String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, StringUtil.Md5("WXLogin:" + weiXinUser.getUnionid())); redisManager.cacheCommonString(key, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20); throw new UserAccountException(101, key); } @@ -1115,7 +1110,7 @@ } @Transactional(rollbackFor=UserAccountException.class) @Transactional(rollbackFor = UserAccountException.class) @Override public void bindWeiXin(AcceptData acceptData, Long uid, String code) throws UserAccountException { WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); @@ -1130,18 +1125,15 @@ } bindWeiXin(uid, weiXinUser); } @Transactional(rollbackFor=UserAccountException.class) @Transactional(rollbackFor = UserAccountException.class) @Override public void bindWeiXin(Long uid,WeiXinUser weiXinUser) throws UserAccountException { public void bindWeiXin(Long uid, WeiXinUser weiXinUser) throws UserAccountException { UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) { throw new UserAccountException(1, "用户不存在"); } if (weiXinUser == null) { throw new UserAccountException(2, "微信帐号授权失败"); } @@ -1189,8 +1181,9 @@ if (asInputStream == null) { LogHelper.test("微信头像下载失败: " + weiXinUser.getUnionid() + " " + headimgurl); } else { FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String .format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) { headimgurl = result.getUrl(); } else { @@ -1222,9 +1215,6 @@ @Override public UserInfo bindPhoneToLogin(String phone, String key, String appId, HttpServletRequest request) throws UserAccountException { UserInfo phoneUser = userInfoMapper.getEffectiveUserInfoByPhone(phone); if (phoneUser != null) throw new UserAccountException(1, "号码已经被占用"); // 判断手机号码是否被封禁 ForbiddenUserIdentifyCode identifyCode1 = forbiddenUserIdentifyCodeService @@ -1249,8 +1239,9 @@ if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) { InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()); if (asInputStream != null) { FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String .format(FilePathEnum.userWXPortrait.getPath() +"%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) portrait = result.getUrl(); } else { @@ -1261,21 +1252,37 @@ if (StringUtil.isNullOrEmpty(portrait)) portrait = Constant.systemCommonConfig.getDefaultPortrait(); // 创建新账户 userInfo = new UserInfo(); userInfo.setPhone(phone); userInfo.setPortrait(portrait); userInfo.setAppId(appId); userInfo.setNickName(weiXinUser.getNickname()); userInfo.setWxName(weiXinUser.getNickname()); userInfo.setWxOpenId(weiXinUser.getOpenid()); userInfo.setWxUnionId(weiXinUser.getUnionid()); userInfo.setWxPic(weiXinUser.getHeadimgurl()); userInfo.setLastLoginTime(System.currentTimeMillis()); userInfo.setLoginType(2); userInfo.setLastLoginIp(request.getRemoteHost()); userInfo.setState(UserInfo.STATE_NORMAL); addUser(userInfo); // 是否需要创建新账户 UserInfo phoneUser = userInfoMapper.getEffectiveUserInfoByPhone(phone); if (phoneUser != null) { // 绑定微信 if (StringUtil.isNullOrEmpty(phoneUser.getWxUnionId())) { try { bindWeiXin(phoneUser.getId(), weiXinUser); } catch (Exception e) { throw new UserAccountException(1, "微信绑定失败"); } } else { throw new UserAccountException(1, "该微信已被绑定"); } userInfo = userInfoMapper.selectAvailableByPrimaryKey(phoneUser.getId()); } else { // 创建新账户 userInfo = new UserInfo(); userInfo.setPhone(phone); userInfo.setPortrait(portrait); userInfo.setAppId(appId); userInfo.setNickName(weiXinUser.getNickname()); userInfo.setWxName(weiXinUser.getNickname()); userInfo.setWxOpenId(weiXinUser.getOpenid()); userInfo.setWxUnionId(weiXinUser.getUnionid()); userInfo.setWxPic(weiXinUser.getHeadimgurl()); userInfo.setLastLoginTime(System.currentTimeMillis()); userInfo.setLoginType(2); userInfo.setLastLoginIp(request.getRemoteHost()); userInfo.setState(UserInfo.STATE_NORMAL); addUser(userInfo); } Long uid = userInfo.getId(); ThreadUtil.run(new Runnable() { @@ -1427,6 +1434,5 @@ // 插入记录 userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_DELETE_OUT_OF_DATE, reason); } } fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/TeamFansInfoServiceImpl.java
@@ -19,6 +19,7 @@ import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.bus.user.UserInfoExtra; import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.count.HongBaoV2CountService; import com.yeshi.fanli.service.inter.order.CommonOrderService; import com.yeshi.fanli.service.inter.user.UserActiveLogService; @@ -37,68 +38,72 @@ @Resource private TeamFansInfoDao teamFansInfoDao; @Resource private ThreeSaleSerivce threeSaleSerivce; @Resource private UserInfoService userInfoService; private UserInfoService userInfoService; @Resource private UserInfoExtraService userInfoExtraService; @Resource private ThreeSaleExtraInfoSerivce threeSaleExtraInfoSerivce; @Resource private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; @Resource private HongBaoV2CountService hongBaoV2CountService; @Resource private UserInviteService userInviteService; @Resource private CommonOrderService commonOrderService; @Resource private UserActiveLogService userActiveLogService; @Override public void save(TeamFansInfo record) { if (record == null || record.getWorkerId() == null ) { if (record == null || record.getWorkerId() == null) { return; } record.setId(record.getWorkerId().toString()); // 无邀请关系 不操作 ThreeSale threeSale = threeSaleSerivce.selectByWorkerId(record.getWorkerId()); if (threeSale == null) return; record.setId(record.getWorkerId().toString()); TeamFansInfo teamFansInfo = teamFansInfoDao.get(record.getId()); if (teamFansInfo != null) { teamFansInfoDao.updateSelective(record); LogHelper.test("队员粉丝信息:更新-" + record.getId()); } else { initData(record); record.setCrateTime(new Date()); LogHelper.test("队员粉丝信息:新增-" + record.getId()); teamFansInfoDao.save(record); } } /** * 初始化数据 * @param record */ private void initData(TeamFansInfo record) { if (StringUtil.isNullOrEmpty(record.getNickName())) record.setNickName(""); record.setNickName(""); if (record.getLevel() == null) record.setLevel(UserLevelEnum.daRen); record.setLevel(UserLevelEnum.daRen); if (record.getStateValid() == null) record.setStateValid(false); if (record.getTaobaoBind() == null) record.setTaobaoBind(false); record.setTaobaoBind(false); if (record.getWeixinId() == null) record.setWeixinId(""); if (record.getPhone() == null) @@ -123,15 +128,15 @@ record.setMemoNameSup(""); if (record.getTagsSup() == null) record.setTagsSup(""); if (StringUtil.isNullOrEmpty(record.getWeixinId())) { record.setWeixinIdExist(false); } else { record.setWeixinIdExist(true); } } @Override public void addFansInfo(Long workerId, Long bossId, Date successTime) { UserInfo userInfo = userInfoService.selectByPKey(workerId); @@ -146,8 +151,7 @@ // 备注名 String memoName = null; ThreeSaleExtraInfo threeSaleExtraInfo = threeSaleExtraInfoSerivce.getbyBossIdAndWorkerId(bossId, workerId); ThreeSaleExtraInfo threeSaleExtraInfo = threeSaleExtraInfoSerivce.getbyBossIdAndWorkerId(bossId, workerId); if (threeSaleExtraInfo != null) { if (!StringUtil.isNullOrEmpty(threeSaleExtraInfo.getNickname())) { memoName = threeSaleExtraInfo.getNickname(); @@ -246,8 +250,7 @@ focusInfo.setId(workerId.toString()); save(focusInfo); } @Override public void updateMemoName(Long workerId, int type, String memoName) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -259,8 +262,7 @@ } save(teamFansInfo); } @Override public void updateTags(Long workerId, int type, String tags) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -272,8 +274,7 @@ } save(teamFansInfo); } @Override public void updateNickName(Long workerId, String nickName) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -281,8 +282,7 @@ teamFansInfo.setNickName(nickName); save(teamFansInfo); } @Override public void updateStateValid(Long workerId, boolean stateValid) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -290,7 +290,7 @@ teamFansInfo.setStateValid(stateValid); save(teamFansInfo); } @Override public void updateTaobaoBind(Long workerId, boolean taobaoBind) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -298,7 +298,7 @@ teamFansInfo.setTaobaoBind(taobaoBind); save(teamFansInfo); } @Override public void updateActiveTime(Long workerId, Date activeTime) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -307,7 +307,6 @@ save(teamFansInfo); } @Override public void updateWeixinId(Long workerId, String weixinId) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -320,8 +319,7 @@ } save(teamFansInfo); } @Override public void updateInviteCode(Long workerId, String inviteCode) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -329,7 +327,7 @@ teamFansInfo.setInviteCode(inviteCode); save(teamFansInfo); } @Override public void updatePhone(Long workerId, String phone) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -337,7 +335,7 @@ teamFansInfo.setPhone(phone); save(teamFansInfo); } @Override public void updateLevel(Long workerId, UserLevelEnum level) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -345,7 +343,7 @@ teamFansInfo.setWorkerId(workerId); save(teamFansInfo); } @Override public void updatePhoneOpen(Long workerId, boolean phoneOpen) { TeamFansInfo teamFansInfo = new TeamFansInfo(); @@ -353,21 +351,20 @@ teamFansInfo.setPhoneOpen(phoneOpen); save(teamFansInfo); } @Override public void updateIncome(Long workerId, BigDecimal income) { if (income == null) { income = BigDecimal.ZERO; } TeamFansInfo teamFansInfo = new TeamFansInfo(); teamFansInfo.setWorkerId(workerId); teamFansInfo.setIncome(income.multiply(BigDecimal.valueOf(100)).setScale(0, BigDecimal.ROUND_DOWN).intValue()); teamFansInfo.setIncomeTime(new Date()); save(teamFansInfo); } @Override public void updateFansNum(Long workerId) { long firstTeam = threeSaleSerivce.countFirstTeam(workerId); @@ -378,18 +375,17 @@ teamFansInfo.setFansNum(fansNum); save(teamFansInfo); } @Override public List<TeamFansInfo> query(int start, int count, int type, Long uid, ThreeSaleFocusDTO focusDTO) { return teamFansInfoDao.query(start, count, type, uid, focusDTO); } @Override public long count(int type, Long uid, ThreeSaleFocusDTO focusDTO) { return teamFansInfoDao.count(type, uid, focusDTO); } @Override public TeamFansInfo getbyWorkerId(Long workerId) { return teamFansInfoDao.getbyWorkerId(workerId); fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/user/UserTeamMessageListener.java
@@ -20,9 +20,12 @@ import com.yeshi.fanli.dto.mq.user.body.UserLevelChangedMQMsg; import com.yeshi.fanli.dto.mq.user.body.UserMoneyChangeMQMsg; import com.yeshi.fanli.dto.mq.user.body.UserPhoneOpenMQMsg; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.user.invite.TeamFansInfoService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleDetailService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; import com.yeshi.fanli.service.inter.user.vip.TeamUserLevelStatisticService; import com.yeshi.fanli.util.rocketmq.MQTopicName; import net.sf.json.JSONObject; @@ -41,6 +44,12 @@ @Resource private ThreeSaleDetailService threeSaleDetailService; @Resource private ThreeSaleSerivce threeSaleSerivce; @Resource private TeamUserLevelStatisticService teamUserLevelStatisticService; @Override public Action consume(Message message, ConsumeContext context) { @@ -90,10 +99,18 @@ // 更新上级的粉丝数量 teamFansInfoService.updateFansNum(mqMsg.getBossId()); // 添加粉丝信息 teamFansInfoService.addFansInfo(mqMsg.getWorkerId(), mqMsg.getBossId(),mqMsg.getSuccessTime()); teamFansInfoService.addFansInfo(mqMsg.getWorkerId(), mqMsg.getBossId(), mqMsg.getSuccessTime()); threeSaleDetailService.addByWorkerUid(mqMsg.getWorkerId()); // 更新队员统计信息 teamUserLevelStatisticService.initData(mqMsg.getBossId()); UserInfo boss = threeSaleSerivce.getBoss(mqMsg.getBossId()); if (boss != null) { teamUserLevelStatisticService.initData(boss.getId()); } } } else if (tag.equalsIgnoreCase(UserTopicTagEnum.userMoneyAdd.name())) {// 资金到账 JSONObject json = JSONObject.fromObject(new String(message.getBody()));