package com.yeshi.makemoney.app.controller.client.api;
|
|
import com.yeshi.makemoney.app.dto.user.LoginInfoDTO;
|
import com.yeshi.makemoney.app.entity.user.UserExtraInfo;
|
import com.yeshi.makemoney.app.entity.user.UserInfo;
|
import com.yeshi.makemoney.app.entity.user.UserLoginRecord;
|
import com.yeshi.makemoney.app.entity.user.WXUserInfo;
|
import com.yeshi.makemoney.app.entity.vip.UserVIPInfo;
|
import com.yeshi.makemoney.app.exception.user.LoginException;
|
import com.yeshi.makemoney.app.exception.user.UserAccountException;
|
import com.yeshi.makemoney.app.service.inter.goldcorn.GoldCornGetRecordService;
|
import com.yeshi.makemoney.app.service.inter.money.UserMoneyService;
|
import com.yeshi.makemoney.app.service.inter.team.TeamInviteRelationService;
|
import com.yeshi.makemoney.app.service.inter.user.UserAccountService;
|
import com.yeshi.makemoney.app.service.inter.user.UserExtraInfoService;
|
import com.yeshi.makemoney.app.service.inter.user.UserInfoService;
|
import com.yeshi.makemoney.app.service.inter.user.WXUserInfoService;
|
import com.yeshi.makemoney.app.service.inter.vip.VIPService;
|
import com.yeshi.makemoney.app.service.manager.VerifyCodeManager;
|
import com.yeshi.makemoney.app.utils.ApiCodeConstant;
|
import com.yeshi.makemoney.app.utils.ImageUtil;
|
import com.yeshi.makemoney.app.utils.annotation.UserLogin;
|
import com.yeshi.makemoney.app.vo.AcceptData;
|
import com.yeshi.makemoney.app.vo.user.UserAssetsVO;
|
import com.yeshi.makemoney.app.vo.user.UserInfoVO;
|
import com.ks.lib.common.exception.ParamsException;
|
import com.ks.push.exception.BPushDeviceTokenException;
|
import com.ks.push.pojo.DO.BPushDeviceToken;
|
import com.ks.push.pojo.DO.PushPlatform;
|
import com.ks.push.service.BDeviceTokenService;
|
import org.apache.commons.codec.digest.DigestUtils;
|
import org.apache.dubbo.config.annotation.Reference;
|
import org.springframework.lang.Nullable;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.yeshi.utils.*;
|
import org.yeshi.utils.entity.FileUploadResult;
|
import org.yeshi.utils.tencentcloud.COSManager;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.InputStream;
|
import java.math.BigDecimal;
|
import java.util.Date;
|
|
/**
|
* @author hxh
|
* @title: UserController
|
* @description: 用户接口
|
* @date 2021/11/16 17:37
|
*/
|
@Controller
|
@RequestMapping("api/v1/user")
|
public class UserController {
|
|
@Resource
|
private UserAccountService userAccountService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private UserExtraInfoService userExtraInfoService;
|
|
@Resource
|
private WXUserInfoService wxUserInfoService;
|
|
@Resource
|
private VerifyCodeManager verifyCodeManager;
|
|
// @Reference(version = "1.0", check = false)
|
private BDeviceTokenService bDeviceTokenService;
|
|
@Resource
|
private GoldCornGetRecordService goldCornGetRecordService;
|
|
@Resource
|
private UserMoneyService userMoneyService;
|
|
@Resource
|
private TeamInviteRelationService teamInviteRelationService;
|
|
@ResponseBody
|
@RequestMapping("loginPhone")
|
public String loginPhone(AcceptData acceptData, String phone, String vcode, String token, HttpServletRequest request) {
|
LoginInfoDTO loginInfo = new LoginInfoDTO();
|
loginInfo.setIpInfo(IPUtil.getRemotIP(request) + ":" + request.getRemotePort());
|
loginInfo.setLoginType(UserLoginRecord.TYPE_LOGIN_PHONE);
|
if (!StringUtil.isNullOrEmpty(phone)) {
|
if (StringUtil.isNullOrEmpty(vcode)) {
|
return JsonUtil.loadFalseResult("请上传验证码");
|
}
|
|
loginInfo.setPhone(phone);
|
loginInfo.setVcode(vcode);
|
|
} else if (!StringUtil.isNullOrEmpty(token)) {
|
loginInfo.setPhoneAuthInfo(token);
|
} else {
|
return JsonUtil.loadFalseResult("信息不完整");
|
}
|
loginInfo.setSystem(acceptData.getSystem());
|
return login(loginInfo, acceptData);
|
}
|
|
|
@ResponseBody
|
@RequestMapping("loginWX")
|
public String loginWX(AcceptData acceptData, String code, HttpServletRequest request) {
|
LoginInfoDTO loginInfo = new LoginInfoDTO();
|
loginInfo.setIpInfo(IPUtil.getRemotIP(request) + ":" + request.getRemotePort());
|
loginInfo.setLoginType(UserLoginRecord.TYPE_LOGIN_WX);
|
if (StringUtil.isNullOrEmpty(code)) {
|
return JsonUtil.loadFalseResult("信息不完整");
|
}
|
loginInfo.setWxCode(code);
|
loginInfo.setSystem(acceptData.getSystem());
|
return login(loginInfo, acceptData);
|
}
|
|
private String login(LoginInfoDTO loginInfo, AcceptData acceptData) {
|
try {
|
UserInfo userInfo = userAccountService.login(loginInfo);
|
ThreadUtil.run(new Runnable() {
|
@Override
|
public void run() {
|
try {
|
//登录成功
|
bDeviceTokenService.bindUid(acceptData.getSystem().name(), acceptData.getUtdId(), userInfo.getId() + "");
|
} catch (Exception e) {
|
|
}
|
}
|
});
|
|
return outUserInfoForLogin(userInfo);
|
} catch (LoginException e) {
|
return JsonUtil.loadFalseResult(e.getMessage());
|
}
|
}
|
|
private String outUserInfoForLogin(UserInfo userInfo) {
|
UserInfoVO vo = UserInfoVO.create(userInfo, userExtraInfoService.get(userInfo.getId()));
|
//是否需要填写邀请码
|
Long bossId = teamInviteRelationService.getBossUid(userInfo.getId());
|
if (bossId != null) {
|
vo.setHasBoss(true);
|
} else {
|
vo.setHasBoss(false);
|
}
|
return JsonUtil.loadTrueResult(JsonUtil.getSimpleGson().toJson(vo));
|
}
|
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("bindWX")
|
public String bindWX(AcceptData acceptData, Long uid, String code) {
|
|
try {
|
userAccountService.bindWX(uid, code);
|
} catch (UserAccountException e) {
|
e.printStackTrace();
|
return JsonUtil.loadFalseResult(e.getMsg());
|
}
|
|
return JsonUtil.loadTrueResult("");
|
}
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("bindPhone")
|
public String bindPhone(AcceptData acceptData, Long uid, String phone, String vcode, String token) {
|
|
try {
|
userAccountService.bindPhone(uid, phone, vcode, token);
|
} catch (UserAccountException e) {
|
e.printStackTrace();
|
return JsonUtil.loadFalseResult(e.getMsg());
|
}
|
|
return JsonUtil.loadTrueResult("");
|
}
|
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("logout")
|
public String logout(AcceptData acceptData, Long uid) {
|
try {
|
//解绑UID
|
bDeviceTokenService.unBindUid(acceptData.getSystem().name(), acceptData.getUtdId());
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return JsonUtil.loadTrueResult("");
|
}
|
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("unRegister")
|
public String unRegister(AcceptData acceptData, String vcode, String phone) {
|
|
if (StringUtil.isNullOrEmpty(vcode)) {
|
return JsonUtil.loadFalseResult("验证码不能为空");
|
}
|
|
if (StringUtil.isNullOrEmpty(phone)) {
|
return JsonUtil.loadFalseResult("手机号不能为空");
|
}
|
|
if (!verifyCodeManager.isPhoneCodeRight(acceptData.getSystem(), phone, vcode)) {
|
return JsonUtil.loadFalseResult("验证码错误");
|
}
|
|
UserInfo user = userInfoService.selectValidByPhone(acceptData.getSystem(), phone);
|
if (user == null) {
|
return JsonUtil.loadFalseResult("不存在绑定该手机号的用户");
|
}
|
//注销
|
userAccountService.unRegister(user.getId());
|
return JsonUtil.loadTrueResult("");
|
}
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("getUserInfo")
|
public String getUserInfo(AcceptData acceptData, Long uid) {
|
|
UserInfo user = userInfoService.get(uid);
|
|
if (user == null) {
|
return JsonUtil.loadFalseResult("用户不存在");
|
}
|
|
if (user.getStatus() == UserInfo.STATUS_FORBIDDEN) {
|
return JsonUtil.loadFalseResult(ApiCodeConstant.CODE_FAIL_USER_FORBIDDEN, "账号被封禁");
|
}
|
|
if (user.getStatus() == UserInfo.STATUS_OWN_DELETE) {
|
return JsonUtil.loadFalseResult(ApiCodeConstant.CODE_FAIL_USER_DELETE, "用户已被删除");
|
}
|
|
|
UserInfoVO vo = UserInfoVO.create(user, userExtraInfoService.get(uid), user.getWxUser() == null ? null : wxUserInfoService.get(user.getWxUser().getId()));
|
|
return JsonUtil.loadTrueResult(vo);
|
}
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("updateUserInfo")
|
public String updateUserInfo(AcceptData acceptData, Long uid, String nickName, @Nullable @RequestParam("portrait") MultipartFile portrait, String portraitMD5) {
|
|
UserInfo user = userInfoService.get(uid);
|
|
if (user == null) {
|
return JsonUtil.loadFalseResult("用户不存在");
|
}
|
|
UserInfo update = new UserInfo();
|
update.setId(uid);
|
|
if (!StringUtil.isNullOrEmpty(nickName)) {
|
update.setNickName(nickName);
|
}
|
|
if (portrait != null) {
|
|
if (StringUtil.isNullOrEmpty(portraitMD5)) {
|
return JsonUtil.loadFalseResult("头像文件加密值为空");
|
}
|
|
try {
|
String md5 = DigestUtils.md5Hex(portrait.getBytes());
|
if (!portraitMD5.equalsIgnoreCase(md5)) {
|
return JsonUtil.loadFalseResult("头像文件加密值错误");
|
}
|
|
InputStream inputStream = portrait.getInputStream();
|
String contentType = portrait.getContentType();
|
String key = String.format("/imgs/portrait/%s_%s.png", uid, md5);
|
FileUploadResult result = COSManager.getInstance().uploadFile(inputStream, key);
|
if (result == null) {
|
return JsonUtil.loadFalseResult("上传出错");
|
}
|
update.setPortrait(ImageUtil.getCOSImageUrl(key));
|
} catch (Exception e) {
|
return JsonUtil.loadFalseResult("头像修改出错");
|
}
|
}
|
|
userInfoService.update(update);
|
if (portrait != null) {
|
//删除原来的头像
|
if (!user.getPortrait().contains("default")) {
|
try {
|
COSManager.getInstance().deleteFileByKey(ImageUtil.getUrlKey(user.getPortrait()));
|
} catch (Exception e) {
|
}
|
}
|
}
|
|
return JsonUtil.loadTrueResult("");
|
}
|
|
@ResponseBody
|
@RequestMapping("uploadPushRegId")
|
public String uploadPushRegId(AcceptData acceptData, Long uid, String regId) {
|
|
BPushDeviceToken deviceToken = new BPushDeviceToken();
|
deviceToken.setAppCode(acceptData.getSystem().name());
|
deviceToken.setDeviceId(acceptData.getUtdId());
|
deviceToken.setBuildModel(acceptData.getDeviceType());
|
deviceToken.setBuildVersion(acceptData.getOsVersion());
|
deviceToken.setToken(regId);
|
deviceToken.setType(PushPlatform.jpush);
|
if (uid != null) {
|
deviceToken.setUid(uid + "");
|
}
|
deviceToken.setVersionCode(acceptData.getVersion());
|
|
try {
|
bDeviceTokenService.save(deviceToken);
|
return JsonUtil.loadTrueResult("");
|
} catch (BPushDeviceTokenException e) {
|
return JsonUtil.loadTrueResult(e.getMessage());
|
} catch (ParamsException e) {
|
return JsonUtil.loadTrueResult(e.getMessage());
|
}
|
|
}
|
|
/**
|
* @return java.lang.String
|
* @author hxh
|
* @description 用户资产
|
* @date 14:36 2022/4/20
|
* @param: acceptData
|
* @param: uid
|
**/
|
@ResponseBody
|
@RequestMapping("getUserAssets")
|
public String getUserAssets(AcceptData acceptData, Long uid) {
|
Long goldCorn = goldCornGetRecordService.getGoldCornByDay(uid, new Date());
|
BigDecimal money = userMoneyService.getBalance(uid);
|
|
UserAssetsVO vo = new UserAssetsVO();
|
vo.setGoldCorn(goldCorn == null ? 0 : Integer.parseInt(goldCorn + ""));
|
vo.setBalance(money.setScale(2).toString());
|
return JsonUtil.loadTrueResult(vo);
|
|
}
|
|
|
}
|