fanli/src/main/java/com/yeshi/fanli/controller/client/v1/SMSController.java
@@ -15,6 +15,7 @@ import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService; import com.yeshi.fanli.service.inter.user.SMSService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKey; @@ -84,6 +85,11 @@ return; } phone = phone.replaceAll(" ", ""); if (Constant.IS_TEST) { out.print(JsonUtil.loadTrueResult("发送成功")); return; } sendMSNnew(phone, slideVerify, 1, StringUtil.Md5(phone + "-" + acceptData.getDevice()), out); } @@ -123,6 +129,11 @@ return; } if (Constant.IS_TEST) { out.print(JsonUtil.loadTrueResult("发送成功")); return; } sendMSNnew(phone, slideVerify, 2, StringUtil.Md5(phone + "-" + acceptData.getDevice()), out); } fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java
@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.yeshi.utils.JsonUtil; import com.yeshi.fanli.dto.wx.WXAccountInfoDTO; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.msg.UserSystemMsg; import com.yeshi.fanli.entity.bus.msg.UserSystemMsgTypeEnum; @@ -20,6 +21,8 @@ import com.yeshi.fanli.entity.bus.user.ThreeSaleExtraInfo; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.bus.user.UserInfoExtra; import com.yeshi.fanli.entity.bus.user.WeiXinUser; import com.yeshi.fanli.exception.user.UserAccountException; import com.yeshi.fanli.exception.user.UserInfoExtraException; import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.msg.UserSystemMsgService; @@ -29,7 +32,10 @@ import com.yeshi.fanli.service.inter.user.invite.ThreeSaleExtraInfoSerivce; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKey; import com.yeshi.fanli.util.wx.WXLoginUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -38,6 +44,9 @@ @RequestMapping("api/v2/invite") public class InviteControllerV2 { @Resource private RedisManager redisManager; @Resource private ConfigService configService; @@ -79,19 +88,34 @@ } /** * 邀请码微信 * 邀请码微信验证 * * @param out */ @RequestMapping(value = "verifyWX") public void verifyWX(AcceptData acceptData, Long uid, String code, PrintWriter out) { try { UserInfo userInfo = userInfoExtraService.getInviterInfo( Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()), uid, code); WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); // 获取微信信息 WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret()); if (weiXinUser == null) throw new UserInfoExtraException(1, "微信授权失败"); String wxUnionId = weiXinUser.getUnionid(); if (wxUnionId == null || wxUnionId.trim().length() == 0) throw new UserInfoExtraException(1, "微信授权失败"); String activeWX = StringUtil.Md5("activeWX:" + weiXinUser.getUnionid()); redisManager.cacheCommonString(activeWX, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20); // 邀请关系用户信息 UserInfo userInfo = userInfoExtraService.getInviterInfo(uid, wxUnionId); JSONObject data = new JSONObject(); data.put("nickName", userInfo.getNickName()); data.put("portrait", userInfo.getPortrait()); data.put("tips", "确认要成为TA的一级队员吗?邀请关系一旦建立不可更改。"); data.put("key", activeWX); out.print(JsonUtil.loadTrueResult(data)); } catch (UserInfoExtraException e) { out.print(JsonUtil.loadFalseResult(e.getMsg())); @@ -99,6 +123,40 @@ } /** * 微信激活 * @param acceptData * @param uid * @param key 验证返回的key * @param out */ @RequestSerializableByKey(key = "'activeInviteWX-'+#uid") @RequestMapping(value = "activeInviteWX") public void activeInviteWX(AcceptData acceptData, Long uid, String key, PrintWriter out) { try { String value = redisManager.getCommonString(key); if (StringUtil.isNullOrEmpty(value)) throw new UserAccountException(1, "微信授权失效"); WeiXinUser weiXinUser = JsonUtil.getSimpleGson().fromJson(value, WeiXinUser.class); if (weiXinUser == null) throw new UserAccountException(1, "微信授权失效"); userInfoExtraService.activeInviteWX(uid, weiXinUser); // 删除缓存 redisManager.removeCommonString(key); out.print(JsonUtil.loadTrueResult("邀请码激活成功")); } catch (UserInfoExtraException e) { out.print(JsonUtil.loadFalseResult(e.getMsg())); } catch (Exception e) { out.print(JsonUtil.loadFalseResult("邀请码激活失败")); e.printStackTrace(); } } /** * 用户队员列表查询 1.5.3查询有效队员 * * @param acceptData fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java
@@ -45,6 +45,7 @@ import com.yeshi.fanli.util.ThreadUtil; import com.yeshi.fanli.util.VersionUtil; import com.yeshi.fanli.util.account.UserUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKey; import net.sf.json.JSONObject; @@ -237,6 +238,7 @@ * @param phone * @param out */ @RequestSerializableByKey(key = "'bindPhoneLogin-'+#phone") @RequestMapping(value = "bindPhoneLogin") public void bindPhoneLogin(AcceptData acceptData,String vcode, String phone, String key, HttpServletRequest request, PrintWriter out) { BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(), fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java
@@ -3,6 +3,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; @@ -15,7 +16,9 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.yeshi.utils.HttpUtil; import org.yeshi.utils.JsonUtil; import org.yeshi.utils.entity.FileUploadResult; import org.yeshi.utils.tencentcloud.COSManager; import com.google.gson.Gson; @@ -1082,7 +1085,7 @@ // 通过Code换取信息 WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserAccountException(1, "微信帐号授权失败"); @@ -1120,9 +1123,26 @@ spreadUserImgService.deleteImgUrl(userInfo.getId()); } else { LogHelper.test("微信unionID不存在:" + weiXinUser.getUnionid()); String portrait = null; if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) { InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()); if (asInputStream != null) { FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format("/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) portrait = result.getUrl(); } else { portrait = weiXinUser.getHeadimgurl(); } } if (StringUtil.isNullOrEmpty(portrait)) portrait = Constant.systemCommonConfig.getDefaultPortrait(); // 创建新账户 userInfo = new UserInfo(); userInfo.setPortrait(weiXinUser.getHeadimgurl()); userInfo.setPortrait(portrait); userInfo.setAppId(appId); userInfo.setNickName(weiXinUser.getNickname()); userInfo.setWxName(weiXinUser.getNickname()); @@ -1170,7 +1190,7 @@ // 通过Code换取信息 WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(wxCode, wxAccount.getAppId(), WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(wxCode, wxAccount.getAppId(), wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserAccountException(1, "微信帐号授权失败"); @@ -1184,45 +1204,23 @@ throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); } // 采用redis事务防止一个微信号多次注册问题 String watchKey = StringUtil.Md5("REGISTER:" + weiXinUser.getUnionid()); Jedis jedis = jedisPool.getResource(); try { jedis.watch(watchKey); if (jedis.get(watchKey) != null && Integer.parseInt(jedis.get(watchKey)) > 1) throw new UserAccountException(10, "请稍后再试"); Transaction tran = jedis.multi(); tran.incr(watchKey); List<Object> exec = tran.exec(); if (exec == null || exec.size() == 0) throw new UserAccountException(10, "请稍后再试"); UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); if (userInfo == null) { redisManager.cacheCommonString(watchKey, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20); throw new UserAccountException(101, watchKey); } LogHelper.test("微信unionID存在:" + weiXinUser.getUnionid()); // 更新账户登录信息 updateLonginInfo(userInfo, loginType, request); Long uid = userInfo.getId(); ThreadUtil.run(new Runnable() { public void run() { // 删除邀请分享图 spreadUserImgService.deleteImgUrl(uid); } }); return userInfo; } catch (Exception e) { e.printStackTrace(); } finally { jedis.del(watchKey); jedis.unwatch(); jedisPool.returnResource(jedis); UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); if (userInfo == null) { String longinKey = StringUtil.Md5("WXLogin:" + weiXinUser.getUnionid()); redisManager.cacheCommonString(longinKey, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20); throw new UserAccountException(101, longinKey); } throw new UserAccountException(10, "请稍后再试"); // 更新账户登录信息 updateLonginInfo(userInfo, loginType, request); Long uid = userInfo.getId(); ThreadUtil.run(new Runnable() { public void run() { // 删除邀请分享图 spreadUserImgService.deleteImgUrl(uid); } }); return userInfo; } @@ -1291,7 +1289,7 @@ throw new UserAccountException(1, "用户不存在"); } WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserAccountException(2, "微信帐号授权失败"); @@ -1335,7 +1333,20 @@ String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait(); if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait) && defaultPortrait.equals(user.getPortrait())) { updateUserInfo.setPortrait(weiXinUser.getHeadimgurl()); String headimgurl = weiXinUser.getHeadimgurl(); InputStream asInputStream = HttpUtil.getAsInputStream(headimgurl); if (asInputStream == null) { LogHelper.test("微信头像下载失败: " +weiXinUser.getUnionid()+ " " + headimgurl); } else { FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format("/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) { headimgurl = result.getUrl(); } else { LogHelper.test("微信头像上传失败: " +weiXinUser.getUnionid()+ " " + headimgurl); } } updateUserInfo.setPortrait(headimgurl); } userInfoMapper.updateByPrimaryKeySelective(updateUserInfo); @@ -1378,73 +1389,69 @@ if (weiXinUser == null) throw new UserAccountException(1, "微信授权失效,请使用微信重新登录"); String watchKey = StringUtil.Md5("REGISTER:" + weiXinUser.getUnionid()); Jedis jedis = jedisPool.getResource(); try { jedis.watch(watchKey); if (jedis.get(watchKey) != null && Integer.parseInt(jedis.get(watchKey)) > 1) throw new UserAccountException(10, "请稍后再试"); Transaction tran = jedis.multi(); tran.incr(watchKey); List<Object> exec = tran.exec(); if (exec == null || exec.size() == 0) throw new UserAccountException(10, "请稍后再试"); UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); // 直接用的微信登录 if (userInfo != null) throw new UserAccountException(10, "该微信号已被占用"); // 创建新账户 userInfo = new UserInfo(); userInfo.setPortrait(weiXinUser.getHeadimgurl()); 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() { public void run() { try { // 第一次登录时创建用户额外信息 userInfoExtraService.createUserInfoExtra(uid); } catch (Exception e) { e.printStackTrace(); } // 加入绑定记录 UserAccountBindingHistory history = new UserAccountBindingHistory(); history.setContent(phone); history.setType(UserAccountBindingHistory.TYPE_PHONE); history.setUid(uid); history.setFirst(true); userAccountBindingHistoryService.addUserAccountBindingHistory(history); userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone); userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid()); } }); // 删除缓存 redisManager.removeCommonString(key); return userInfo; } catch (Exception e) { e.printStackTrace(); } finally { jedis.del(watchKey); jedis.unwatch(); jedisPool.returnResource(jedis); UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); // 直接用的微信登录 if (userInfo != null) throw new UserAccountException(10, "该微信号已被占用"); String portrait = null; if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) { InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()); if (asInputStream != null) { FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format("/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) portrait = result.getUrl(); } else { portrait = weiXinUser.getHeadimgurl(); } } throw new UserAccountException(10, "请稍后再试"); 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); Long uid = userInfo.getId(); ThreadUtil.run(new Runnable() { public void run() { try { // 第一次登录时创建用户额外信息 userInfoExtraService.createUserInfoExtra(uid); } catch (Exception e) { e.printStackTrace(); } // 加入绑定记录 UserAccountBindingHistory history = new UserAccountBindingHistory(); history.setContent(phone); history.setType(UserAccountBindingHistory.TYPE_PHONE); history.setUid(uid); history.setFirst(true); userAccountBindingHistoryService.addUserAccountBindingHistory(history); userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone); userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid()); } }); // 删除缓存 redisManager.removeCommonString(key); return userInfo; } fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java
@@ -1,5 +1,6 @@ package com.yeshi.fanli.service.impl.user; import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -13,6 +14,9 @@ import org.springframework.stereotype.Service; import org.yeshi.utils.DateUtil; import org.yeshi.utils.HttpUtil; import org.yeshi.utils.entity.FileUploadResult; import org.yeshi.utils.tencentcloud.COSManager; import com.yeshi.fanli.dao.mybatis.user.UserInfoExtraMapper; import com.yeshi.fanli.dao.mybatis.user.UserRankRecordMapper; @@ -399,7 +403,7 @@ } // 获取微信信息 WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserInfoExtraException(1, "微信授权失败"); @@ -438,7 +442,20 @@ String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait(); if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait) && defaultPortrait.equals(invitee.getPortrait())) { updateUserInfo.setPortrait(weiXinUser.getHeadimgurl()); String headimgurl = weiXinUser.getHeadimgurl(); InputStream asInputStream = HttpUtil.getAsInputStream(headimgurl); if (asInputStream == null) { LogHelper.test("微信头像下载失败: " +weiXinUser.getUnionid()+ " " + headimgurl); } else { FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format("/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) { headimgurl = result.getUrl(); } else { LogHelper.test("微信头像上传失败: " +weiXinUser.getUnionid()+ " " + headimgurl); } } updateUserInfo.setPortrait(headimgurl); } userInfoService.updateByPrimaryKeySelective(updateUserInfo); @@ -500,6 +517,137 @@ } } @Override public void activeInviteWX(Long uid, WeiXinUser weiXinUser) throws UserInfoExtraException { if (uid == null || weiXinUser == null) { throw new UserInfoExtraException(1, "激活信息不完整"); } // 用户信息 UserInfo invitee = userInfoService.selectByPKey(uid); if (invitee == null) { throw new UserInfoExtraException(1, "用户不存在"); } // 用户额外信息 UserInfoExtra extra = userInfoExtraMapper.getInfoExtraByUid(uid); if (extra != null) { String inviteCodeHas = extra.getInviteCode(); if (inviteCodeHas != null && inviteCodeHas.trim().length() > 0) { throw new UserInfoExtraException(1, "已经激活, 无需再次激活"); } } String wxUnionId = weiXinUser.getUnionid(); if (wxUnionId == null || wxUnionId.trim().length() == 0) { throw new UserInfoExtraException(1, "微信授权失败"); } // 验证数据 String wxUnionIdExist = invitee.getWxUnionId(); if (StringUtil.isNullOrEmpty(wxUnionIdExist)) { UserInfo newUser = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); if (newUser != null) { throw new UserInfoExtraException(1, "此微信已被其他帐号绑定"); } // 自动绑定微信 UserInfo updateUserInfo = new UserInfo(uid); updateUserInfo.setWxOpenId(weiXinUser.getOpenid()); updateUserInfo.setWxUnionId(weiXinUser.getUnionid()); updateUserInfo.setWxName(weiXinUser.getNickname()); updateUserInfo.setWxPic(weiXinUser.getHeadimgurl()); // 将默认昵称替换成微信昵称 String defaultNickName = Constant.systemCommonConfig.getDefaultNickName(); if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(weiXinUser.getNickname())) { defaultNickName = defaultNickName + uid; if ((defaultNickName.equals(invitee.getNickName()) || "返利券".equals(invitee.getNickName()) || invitee.getNickName().startsWith(Constant.systemCommonConfig.getDefaultNickName()))) { updateUserInfo.setNickName(weiXinUser.getNickname()); } } // 将默认头像替换成微信头像 String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait(); if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait) && defaultPortrait.equals(invitee.getPortrait())) { String headimgurl = weiXinUser.getHeadimgurl(); InputStream asInputStream = HttpUtil.getAsInputStream(headimgurl); if (asInputStream == null) { LogHelper.test("微信头像下载失败: " +weiXinUser.getUnionid()+ " " + headimgurl); } else { FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format("/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) { headimgurl = result.getUrl(); } else { LogHelper.test("微信头像上传失败: " +weiXinUser.getUnionid()+ " " + headimgurl); } } updateUserInfo.setPortrait(headimgurl); } userInfoService.updateByPrimaryKeySelective(updateUserInfo); } else if (!wxUnionId.equals(wxUnionIdExist)) { throw new UserInfoExtraException(1, "绑定微信与激活微信不一致"); } // 邀请人ID -1.5.3新版 Long inviterId = userInviteRecordService.getNewestInviterId(wxUnionId); // 兼容1.5.3 之前版本 ThreeSale threeSale = threeSaleSerivce.getByWorkerId(uid); if (inviterId == null && threeSale != null) { Long bossId = threeSale.getBoss().getId(); UserInfoExtra inviterExtra = userInfoExtraMapper.getInfoExtraByUid(bossId); if (inviterExtra != null && inviterExtra.getInviteCode() == null) { // 更新邀请码 UserInfoExtra inviterInfoExtra = new UserInfoExtra(); inviterInfoExtra.setId(inviterExtra.getId()); inviterInfoExtra.setInviteCode(UserUtil.getInviteCode(bossId)); userInfoExtraMapper.updateByPrimaryKeySelective(inviterInfoExtra); } } // 没有被邀请过 if (inviterId == null && threeSale == null) { throw new UserInfoExtraException(1, "没有对应的邀请关系"); } // 绑定关系 try { threeSaleSerivce.bindRelationshipByWX(invitee, inviterId, threeSale); } catch (ThreeSaleException e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } throw new UserInfoExtraException(1, "关系绑定时失败"); } // 邀请码有效、生成邀请码 String inviteCode = UserUtil.getInviteCode(uid); if (inviteCode == null || inviteCode.trim().length() == 0) { throw new UserInfoExtraException(1, "激活码生成失败"); } // 保存邀请码 UserInfoExtra userInfoExtra = new UserInfoExtra(); userInfoExtra.setUserInfo(invitee); userInfoExtra.setInviteCode(inviteCode); userInfoExtra.setUpdateTime(new Date()); if (extra != null) { userInfoExtra.setId(extra.getId()); userInfoExtraMapper.updateByPrimaryKeySelective(userInfoExtra); } else { userInfoExtra.setCreateTime(new Date()); userInfoExtraMapper.insertSelective(userInfoExtra); } } @Override public UserInfoExtra getUserInfoExtra(Long uid) { return userInfoExtraMapper.getInfoExtraByUid(uid); @@ -606,9 +754,9 @@ } @Override public UserInfo getInviterInfo(WXAccountInfoDTO wxAccount, Long uid, String code) throws UserInfoExtraException { if (code == null) { throw new UserInfoExtraException(1, "code信息不完整"); public UserInfo getInviterInfo(Long uid, String wxUnionId) throws UserInfoExtraException { if (wxUnionId == null) { throw new UserInfoExtraException(1, "unionId信息不完整"); } // 用户信息 @@ -626,20 +774,10 @@ } } // 获取微信信息 WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserInfoExtraException(1, "微信授权失败"); } String wxUnionId = weiXinUser.getUnionid(); if (wxUnionId == null || wxUnionId.trim().length() == 0) { throw new UserInfoExtraException(1, "微信授权失败"); } // 验证数据 String wxUnionIdExist = invitee.getWxUnionId(); if (StringUtil.isNullOrEmpty(wxUnionIdExist)) { UserInfo newUser = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); UserInfo newUser = userInfoService.getEffectiveUserInfoByWXUnionId(wxUnionId); if (newUser != null) { throw new UserInfoExtraException(1, "此微信已被其他帐号绑定"); } fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoExtraService.java
@@ -4,6 +4,7 @@ import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.bus.user.UserInfoExtra; import com.yeshi.fanli.entity.bus.user.UserRank; import com.yeshi.fanli.entity.bus.user.WeiXinUser; import com.yeshi.fanli.exception.user.UserInfoExtraException; import com.yeshi.fanli.vo.user.UserInfoExtraVO; @@ -120,7 +121,7 @@ * @return * @throws UserInfoExtraException */ public UserInfo getInviterInfo(WXAccountInfoDTO wxAccount,Long uid, String code) throws UserInfoExtraException; public UserInfo getInviterInfo(Long uid, String wxUnionId) throws UserInfoExtraException; /** * 更新信息 + 加锁 @@ -136,5 +137,13 @@ * @return */ public void updateGoldCoin(Long id, Integer goldCoin); /** * 新版邀请激活 * @param uid * @param weiXinUser * @throws UserInfoExtraException */ public void activeInviteWX(Long uid, WeiXinUser weiXinUser) throws UserInfoExtraException; } fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java
@@ -287,7 +287,12 @@ goodsInfo.setTitle(goods.getTitle()); goodsInfo.setSalesType(1); // 默认月销量 goodsInfo.setZkPrice(goods.getZkPrice()); goodsInfo.setProvcity(goods.getProvcity()); String provcity = goods.getProvcity(); if (!StringUtil.isNullOrEmpty(provcity)) { String [] arr = provcity.split("\\s+"); goodsInfo.setProvcity(arr[arr.length-1]); } List<String> imgList = goods.getImgList(); if (imgList != null) { fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java
@@ -919,6 +919,7 @@ goods.setSellerId(item.optLong("seller_id")); goods.setShopTitle(item.optString("shop_title")); goods.setTitle(item.optString("title")); goods.setProvcity(item.optString("provcity")); if (!StringUtil.isNullOrEmpty(item.optString("level_one_category_id"))) { goods.setRootCatId(item.optInt("level_one_category_id")); @@ -1840,6 +1841,7 @@ goods.setSellerId(item.optLong("seller_id")); goods.setShopTitle(item.optString("shop_title")); goods.setTitle(item.optString("title")); goods.setProvcity(item.optString("provcity")); if (!StringUtil.isNullOrEmpty(item.optString("level_one_category_id"))) { goods.setRootCatId(item.optInt("level_one_category_id")); utils/src/main/java/org/yeshi/utils/HttpUtil.java
@@ -583,4 +583,25 @@ return result; } /** * 获取post返回location * @param url * @return */ public static String getLocation(String url) { HttpClient client = new HttpClient(); PostMethod method = new PostMethod(url); try { client.executeMethod(method); return method.getResponseHeader("location").getValue(); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } }