package com.sinata.rest.modular.mall.controller;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.sinata.common.enums.EnumRedisKey;
|
import com.sinata.rest.common.ApiUtils;
|
import com.sinata.rest.core.util.ToolUtil;
|
import com.sinata.rest.modular.auth.util.JwtTokenUtil;
|
import com.sinata.rest.modular.auth.util.ThreadPoolUtil;
|
import com.sinata.rest.modular.mall.controller.body.BodyUserLogin;
|
import com.sinata.rest.modular.mall.controller.body.BodyUserRegister;
|
import com.sinata.rest.modular.mall.controller.vo.VoUserAccountState;
|
import com.sinata.rest.modular.mall.controller.vo.VoUserTripartiteState;
|
import com.sinata.rest.modular.mall.model.UserAppSet;
|
import com.sinata.rest.modular.mall.service.IUserAppSetService;
|
import com.sinata.rest.modular.member.controller.common.vo.LoginVo;
|
import com.sinata.rest.modular.member.controller.common.vo.RegisterVo;
|
import com.sinata.rest.modular.member.model.MemUser;
|
import com.sinata.rest.modular.member.service.IMemMemberGradeService;
|
import com.sinata.rest.modular.member.service.IMemUserService;
|
import com.sinata.rest.modular.system.controller.AuthController;
|
import com.sinata.rest.modular.system.service.ICityRegionService;
|
import com.sinata.rest.modular.system.service.RedisTemplateService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.util.Assert;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.validation.Valid;
|
import javax.validation.constraints.NotBlank;
|
import java.time.LocalDateTime;
|
|
@Slf4j
|
@RestController
|
@RequestMapping("/mall/user")
|
@Api(tags = "商城-用户", description = "三方登录")
|
public class MallUserController extends AuthController {
|
|
@Autowired
|
private IMemUserService userService;
|
@Resource
|
private JwtTokenUtil jwtTokenUtil;
|
@Autowired
|
private RedisTemplateService redisTemplateService;
|
@Autowired
|
private ICityRegionService regionService;
|
@Autowired
|
private IMemMemberGradeService gradeService;
|
@Autowired
|
private IUserAppSetService userAppSetService;
|
|
@GetMapping("/isExist")
|
@ApiOperation(value = "账号是否存在", response = VoUserAccountState.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query"),
|
@ApiImplicitParam(name = "wxOpenId", value = "微信open_id", dataType = "String", paramType = "query"),
|
})
|
public Object isExist(String phone, String wxOpenId) {
|
VoUserAccountState vo = new VoUserAccountState();
|
MemUser user = null;
|
if (null != phone) {
|
user = userService.getOne(new QueryWrapper<MemUser>().eq("phone", phone));
|
}
|
if (null != wxOpenId) {
|
user = userService.getOne(new QueryWrapper<MemUser>().eq("wx_open_id", wxOpenId));
|
}
|
if (ToolUtil.isNotEmpty(user)) {
|
vo.setState(1);
|
}
|
return ApiUtils.returnOK(vo);
|
}
|
|
@GetMapping("/isBindPhone")
|
@ApiOperation(value = "手机号是否绑定", notes = "手机号是否绑定/注册", response = VoUserTripartiteState.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", required = true, paramType = "query"),
|
})
|
public Object isBindPhone(@NotBlank String phone) {
|
VoUserTripartiteState vo = new VoUserTripartiteState();
|
MemUser user = userService.getOne(new QueryWrapper<MemUser>().eq("phone", phone));
|
if (null != user) {
|
vo.setPhoneState(1);
|
if (user.getWxOpenId() != null) {
|
vo.setWeChatBindState(1);
|
}
|
if (user.getQqAccount() != null) {
|
vo.setQqBindState(1);
|
}
|
if (user.getAppleOpenId() != null) {
|
vo.setAppleBindState(1);
|
}
|
}
|
return ApiUtils.returnOK(vo);
|
}
|
|
@PostMapping("/login")
|
@ApiOperation(value = "三方登录", notes = "三方登录", response = LoginVo.class)
|
public Object register(@Valid @RequestBody BodyUserLogin userLoginBo) {
|
if(userLoginBo.getType() == 1 && !StringUtils.isEmpty(userLoginBo.getWxOpenId())) {
|
//微信
|
return weChatLogin(userLoginBo.getWxOpenId());
|
} else {
|
return ApiUtils.returnNG(null,"登录失败");
|
}
|
}
|
|
@PostMapping(value = "/register")
|
@ApiOperation(value = "三方注册(包含手机号)", notes = "三方注册(包含手机号验证码注册)", response = RegisterVo.class)
|
public Object register(@RequestBody BodyUserRegister register) {
|
String msg = userService.mallRegisterUser(register);
|
if (!StringUtils.isEmpty(msg)) {
|
return ApiUtils.returnNG(null, msg);
|
} else {
|
LambdaQueryWrapper<MemUser> wrapper = new LambdaQueryWrapper();
|
wrapper.eq(MemUser::getPhone, register.getPhone());
|
MemUser user = userService.getOne(wrapper);
|
RegisterVo vo = wrapperUserInfo(user);
|
vo.setLogin(setUserAuth(user.getId()));
|
return ApiUtils.returnOK(vo);
|
}
|
}
|
|
@PutMapping(value = "/updateBindWxOpenId")
|
@ApiOperation(value = "绑定/解绑微信号", notes = "绑定/解绑微信号", response = ApiUtils.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "wxOpenId", dataType = "String", value = "微信OpenID(解除绑定为空)", paramType = "query"),
|
@ApiImplicitParam(name = "wxName", dataType = "String", value = "微信姓名", paramType = "query")
|
})
|
public Object updateBindOpenId(String wxOpenId, String wxName) {
|
// 获取用户ID
|
Integer userId = ThreadPoolUtil.getUserId();
|
if (StringUtils.isNotBlank(wxOpenId)) {
|
QueryWrapper<MemUser> wrapper = new QueryWrapper<>();
|
wrapper.eq("wx_open_id", wxOpenId);
|
// 绑定微信号
|
int count = userService.count(wrapper);
|
if(count <= 0) {
|
userService.bindWx(wxOpenId, wxName, userId);
|
}else {
|
return ApiUtils.returnNG(null,"微信已被绑定");
|
}
|
}
|
return ApiUtils.returnOK();
|
}
|
|
@GetMapping(value = "/updateProtocol")
|
@ApiOperation(value = "协议更新时间", httpMethod = "GET", notes = "返回协议更新时间", response = ApiUtils.class)
|
public Object updateProtocol() {
|
UserAppSet userAppSet = userAppSetService.getOne(null);
|
LocalDateTime date = null;
|
if (ToolUtil.isEmpty(userAppSet)) {
|
date = LocalDateTime.now();
|
}else {
|
date = userAppSet.getUpdateTime();
|
}
|
return ApiUtils.returnOK(date);
|
}
|
|
/**
|
* 微信登录
|
* @param wxOpenId
|
* @return
|
*/
|
public Object weChatLogin(String wxOpenId) {
|
// 获取用户信息
|
MemUser user = userService.getOne(new QueryWrapper<MemUser>().eq("wx_open_id", wxOpenId));
|
// 如果用户未微信注册
|
Assert.notNull(user, "微信未注册认证");
|
Assert.isTrue(user.getIsLock() == 0, "账号异常,请联系平台");
|
if (StringUtils.isEmpty(user.getImAccount())) {
|
//环信注册
|
userService.RingLetterRegister(user.getId(), null);
|
}
|
return setUserAuth(user.getId());
|
}
|
|
/**
|
* 封装用户信息
|
*/
|
public RegisterVo wrapperUserInfo(MemUser user) {
|
RegisterVo vo = new RegisterVo();
|
vo.setId(user.getId());
|
vo.setShowId(user.getShowId());
|
vo.setPhone(user.getPhone());
|
vo.setAvatar(user.getAvatar());
|
vo.setNickname(user.getNickName());
|
vo.setGender(user.getSex());
|
vo.setBirthday(user.getBirthday());
|
vo.setSignature(user.getSignature());
|
vo.setCityCode(user.getCityCode());
|
vo.setAddress(user.getAddress());
|
vo.setIsLock(user.getIsLock() == 1);
|
vo.setFullName(regionService.getFullName(user.getCityCode()));
|
vo.setGradeName(gradeService.getById(user.getMemberGradeId()).getGradeName());
|
vo.setWxOpenId(user.getWxOpenId());
|
vo.setQqAccount(user.getQqAccount());
|
vo.setAppleOpenId(user.getAppleOpenId());
|
vo.setRealName(user.getRealName());
|
vo.setIdCard(user.getIdCard());
|
vo.setAuditState(user.getAuditState());
|
vo.setImAccount(user.getImAccount());
|
vo.setImPassword(user.getImPassword());
|
return vo;
|
}
|
|
/**
|
* 封装用户登录认证信息
|
*/
|
public LoginVo setUserAuth(Integer id) {
|
// 获取混淆MD5签名用的随机字符串
|
final String randomKey = jwtTokenUtil.getRandomKey();
|
// 获取Token
|
final String token = jwtTokenUtil.generateToken(id.toString(), randomKey);
|
// 封装用户登录认证信息
|
LoginVo map = new LoginVo();
|
map.setId(id);
|
map.setRandomKey(randomKey);
|
map.setToken(token);
|
// 缓存中存token
|
redisTemplateService.hashPushHashMap(EnumRedisKey.TOKEN.index, id.toString(), token);
|
return map;
|
}
|
|
}
|