package com.yeshi.fanli.controller.wxmp.v1;
|
|
import java.io.PrintWriter;
|
import java.math.BigDecimal;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpSession;
|
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.yeshi.utils.JsonUtil;
|
import org.yeshi.utils.entity.wx.WXMPSessionInfo;
|
import org.yeshi.utils.wx.WXXCXUtil;
|
|
import com.google.gson.GsonBuilder;
|
import com.yeshi.fanli.dto.WXMPAcceptData;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.user.ThreeSale;
|
import com.yeshi.fanli.entity.bus.user.UserActiveLog;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
|
import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord.ModifyTypeEnum;
|
import com.yeshi.fanli.entity.system.BusinessSystem;
|
import com.yeshi.fanli.exception.user.UserInfoException;
|
import com.yeshi.fanli.exception.user.UserInfoExtraException;
|
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.user.MaskKeyService;
|
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
|
import com.yeshi.fanli.service.inter.user.UserCustomSettingsService;
|
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
|
import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
|
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.ThreadUtil;
|
import com.yeshi.fanli.util.VersionUtil;
|
import com.yeshi.fanli.util.annotation.UserActive;
|
import com.yeshi.fanli.vo.user.UserInfoExtraVO;
|
|
import net.sf.json.JSONObject;
|
|
@Controller("WXMPUserController")
|
@RequestMapping("/wxmp/api/v1/user")
|
public class UserController {
|
|
public final static String WXMP_SESSION_INFO_KEY = "WXMP-SESSION-INFO";
|
|
@Resource
|
private UserInfoExtraService userInfoExtraService;
|
|
@Resource
|
private MaskKeyService maskKeyService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private UserInfoModifyRecordService userInfoModifyRecordService;
|
|
@Resource
|
private UserVIPInfoService userVIPInfoService;
|
|
@Resource
|
private UserActiveLogService userActiveLogService;
|
|
@Resource
|
private BusinessSystemService businessSystemService;
|
|
@Resource
|
private UserCustomSettingsService userCustomSettingsService;
|
|
@Resource
|
private ThreeSaleSerivce threeSaleSerivce;
|
|
@Resource
|
private ConfigService configService;
|
|
/**
|
* 获取openId
|
*
|
* @param acceptData
|
* @param code
|
* @param out
|
*/
|
@RequestMapping("getOpenId")
|
public void getOpenId(WXMPAcceptData acceptData, String code, HttpSession session, PrintWriter out) {
|
if (StringUtil.isNullOrEmpty(code)) {
|
out.print(JsonUtil.loadFalseResult("code为空"));
|
return;
|
}
|
|
WXMPSessionInfo info = WXXCXUtil.getSessionInfo(Constant.WXMP_APP_INFO, code);
|
if (info != null) {
|
session.setAttribute(WXMP_SESSION_INFO_KEY, info);
|
JSONObject data = new JSONObject();
|
data.put("openId", info.getOpenId());
|
out.print(JsonUtil.loadTrueResult(data));
|
} else {
|
out.print(JsonUtil.loadFalseResult("openId获取失败"));
|
}
|
}
|
|
@RequestMapping(value = "saveInfo")
|
public void saveInfo(AcceptData acceptData, String nickName, String weiXin, Integer sex, Long uid,
|
String inviteCode, MultipartFile qrCodeFile, HttpServletRequest request, PrintWriter out) {
|
try {
|
if (uid == null) {
|
out.print(JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
// 修改昵称
|
if (!StringUtil.isNullOrEmpty(nickName)) {
|
if (nickName.length() > 200) {
|
out.print(JsonUtil.loadFalseResult("昵称过长"));
|
return;
|
}
|
|
if (maskKeyService.examineContent(nickName)) {
|
out.print(JsonUtil.loadFalseResult("不能包含敏感词汇"));
|
return;
|
}
|
userInfoService.saveUserInfo(nickName, uid);
|
|
userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.nickName, nickName);
|
}
|
|
// 修改微信号
|
if (!StringUtil.isNullOrEmpty(weiXin)) {
|
if (weiXin.length() > 32) {
|
out.print(JsonUtil.loadFalseResult("微信号过长"));
|
return;
|
}
|
|
UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
|
if (userInfoExtra != null) {
|
UserInfoExtra extra = new UserInfoExtra();
|
extra.setId(userInfoExtra.getId());
|
extra.setWeiXin(weiXin);
|
userInfoExtraService.saveUserInfoExtra(extra);
|
|
userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.setWeiXinNum, weiXin);
|
}
|
}
|
|
// 修改性别
|
if (sex != null && sex > 0 && sex < 3) {
|
UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
|
if (userInfoExtra != null) {
|
UserInfoExtra extra = new UserInfoExtra();
|
extra.setId(userInfoExtra.getId());
|
extra.setSex(sex);
|
userInfoExtraService.saveUserInfoExtra(extra);
|
|
userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.gender, sex + "");
|
}
|
}
|
|
if (!StringUtil.isNullOrEmpty(inviteCode)) {// 邀请码不为空
|
inviteCode = inviteCode.trim();
|
if (inviteCode.length() >= 4 && inviteCode.length() <= 12) {
|
|
if (!userVIPInfoService.isVIP(uid)) {
|
out.print(JsonUtil.loadFalseResult(20, "只有超级会员才能修改"));
|
return;
|
}
|
|
try {
|
userInfoExtraService.updateInviteCodeVip(inviteCode, uid);
|
out.print(JsonUtil.loadTrueResult("保存成功"));
|
return;
|
} catch (UserInfoExtraException e) {
|
out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMessage()));
|
}
|
} else {
|
out.print(JsonUtil.loadFalseResult(1, "邀请码必须为4到12位"));
|
return;
|
}
|
}
|
|
// 二维码
|
if (qrCodeFile != null) {
|
userInfoExtraService.uploadERCode(qrCodeFile, uid);
|
}
|
|
out.print(JsonUtil.loadTrueResult("保存成功"));
|
} catch (UserInfoException e) {
|
out.print(JsonUtil.loadFalseResult(e.getMsg()));
|
e.printStackTrace();
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult("保存失败"));
|
e.printStackTrace();
|
}
|
}
|
|
private void outUserInfoHandle(UserInfo user) {
|
|
// 红包处理
|
user.setTotalHongBao(new BigDecimal(0));
|
user.setNoOpenHongBao(new BigDecimal(0));
|
user.setCanOpenHongBao(new BigDecimal(0));
|
|
// 电话号码处理
|
if (!StringUtil.isNullOrEmpty(user.getPhone())) {
|
if (user.getPhone().length() > 5) {
|
String phone = user.getPhone().substring(0, 3);
|
phone += "******";
|
phone += user.getPhone().substring(user.getPhone().length() - 2, user.getPhone().length());
|
user.setPhone(phone);
|
}
|
}
|
|
UserInfoExtraVO userInfoExtra = userInfoExtraService.getInfoExtraVOByUid(user.getId());
|
if (userInfoExtra != null && userInfoExtra.getUserRank() != null) {
|
String picture = userInfoExtra.getUserRank().getPicture();
|
String icon = userInfoExtra.getUserRank().getIcon();
|
user.setRankNamePicture(picture);
|
user.setRankIcon(icon);
|
}
|
}
|
|
/**
|
* 获取用户信息
|
*
|
* @param acceptData
|
* @param form
|
* @param requst
|
* @param out
|
*/
|
@UserActive(uid = "#uid")
|
@RequestMapping(value = "getUserInfo", method = RequestMethod.POST)
|
public void getuserinfoNew(AcceptData acceptData, Long uid, HttpServletRequest requst, PrintWriter out) {
|
try {
|
BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
|
acceptData.getPackages());
|
if (system == null) {
|
out.print(JsonUtil.loadFalseResult("系统不存在"));
|
return;
|
}
|
|
if (uid == null) {
|
out.print(JsonUtil.loadFalseResult("请求参数为空"));
|
return;
|
}
|
|
UserInfo userInfo = userInfoService.getUserInfo(uid);
|
|
// 添加用户活跃记录
|
UserActiveLog userActiveLog = new UserActiveLog();
|
userActiveLog.setChannel(acceptData.getChannel());
|
userActiveLog.setIp(requst.getRemoteHost());
|
userActiveLog.setUid(userInfo.getId());
|
userActiveLog.setVersionCode(acceptData.getVersion());
|
userActiveLog.setOsVersion(acceptData.getOsVersion());
|
userActiveLog.setDeviceType(acceptData.getDeviceType());
|
userActiveLog.setDevice(acceptData.getDevice());
|
userActiveLogService.addUserActiveLog(userActiveLog);
|
|
// 处理用户信息
|
outUserInfoHandle(userInfo);
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
JSONObject data = new JSONObject();
|
|
boolean tailor = false;
|
int welfareCenterNews = 0;
|
String invitCode = null;
|
UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
|
if (userInfoExtra != null) {
|
if (userInfoExtra.getCouponNews() != null) {
|
welfareCenterNews = userInfoExtra.getCouponNews();
|
}
|
// vip邀请码优先
|
if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip())) {
|
invitCode = userInfoExtra.getInviteCodeVip();
|
} else if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
|
tailor = true;
|
invitCode = userInfoExtra.getInviteCode();
|
}
|
|
if (userInfoExtra.getUserRank() != null) {
|
String picture = userInfoExtra.getUserRank().getPicture();
|
String icon = userInfoExtra.getUserRank().getIcon();
|
userInfo.setRankNamePicture(picture);
|
userInfo.setRankIcon(icon);
|
} else {
|
userInfo.setRankNamePicture(null);
|
userInfo.setRankIcon(null);
|
}
|
|
if (userInfoExtra.getSex() != null)
|
userInfo.setSex(userInfoExtra.getSex());
|
|
if (!StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin()))
|
userInfo.setWeiXin(userInfoExtra.getWeiXin());
|
|
// 二维码
|
userInfo.setErCode(userInfoExtra.getErCode());
|
}
|
// 显示邀请码特制入口
|
data.put("tailor", tailor);
|
|
// 1.6.5 之后返回 微信号提示
|
if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion()))
|
userInfo.setWeiXinTip("添加微信号后,你的邀请人和直接粉丝可以通过微信与你建立联系。");
|
|
data.put("user", JsonUtil.getConvertBigDecimalToStringBuilder(gsonBuilder).create().toJson(userInfo));
|
data.put("invitCode", invitCode); // 邀请码
|
if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip()))
|
data.put("invitCodeUpdated", true);// 邀请码是否已经修改过
|
else
|
data.put("invitCodeUpdated", false);
|
data.put("vipLink", configService.get("vip_link"));// 超级会员升级链接
|
|
if (!StringUtil.isNullOrEmpty(invitCode)) {
|
String bossName = "";
|
ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
|
if (threeSale != null && threeSale.getBoss() != null) {
|
bossName = threeSale.getBoss().getNickName();
|
}
|
data.put("bossName", bossName);
|
}
|
|
out.print(JsonUtil.loadTrueResult(data));
|
|
final UserInfo uuser = userInfo;
|
ThreadUtil.run(new Runnable() {
|
public void run() {
|
// 获取邀请码:若无邀请码且存在有效的队员关系 则自动生成邀请码
|
userInfoExtraService.getInviteCodeByUid(uuser.getId());
|
|
// 更新用户附加信息,老用户不存在的需要添加
|
try {
|
userInfoExtraService.updateUserRankByUid(uuser.getId());
|
} catch (UserInfoExtraException e) {
|
e.printStackTrace();
|
}
|
}
|
});
|
|
} catch (UserInfoException e) {
|
out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult("获取失败"));
|
e.printStackTrace();
|
}
|
}
|
|
}
|