package com.sinata.rest.modular.member.shop;
|
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.sinata.common.enums.EnumRedisKey;
|
import com.sinata.rest.common.ApiUtils;
|
import com.sinata.rest.modular.auth.util.JwtTokenUtil;
|
import com.sinata.rest.modular.auth.util.ThreadPoolUtil;
|
import com.sinata.rest.modular.member.controller.common.body.RegisterThirdUserRequest;
|
import com.sinata.rest.modular.member.controller.common.vo.LoginResponse;
|
import com.sinata.rest.modular.member.controller.common.vo.LoginVo;
|
import com.sinata.rest.modular.member.controller.common.vo.WeChatMiniAuthorizeVo;
|
import com.sinata.rest.modular.member.model.MemMerchant;
|
import com.sinata.rest.modular.member.service.IMemMerchantService;
|
import com.sinata.rest.modular.member.service.WechatNewService;
|
import com.sinata.rest.modular.system.controller.AuthController;
|
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.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.util.StringUtils;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import java.util.Objects;
|
|
@Slf4j
|
@RestController
|
@RequestMapping("/shopLogin")
|
@Api(tags = "核销小程序登录相关", description = "核销小程序登录相关")
|
public class ShopLoginController extends AuthController {
|
|
@Autowired
|
private WechatNewService wechatNewService;
|
|
@Autowired
|
private IMemMerchantService merchantService;
|
|
@Resource
|
private JwtTokenUtil jwtTokenUtil;
|
|
@Autowired
|
private RedisTemplateService redis;
|
|
|
/**
|
* 微信登录小程序授权登录
|
*/
|
@ApiOperation(value = "微信登录小程序授权登录",response = LoginResponse.class)
|
@RequestMapping(value = "/authorize/program/login", method = RequestMethod.POST)
|
public Object programLogin(@RequestBody @Validated RegisterThirdUserRequest request){
|
WeChatMiniAuthorizeVo response;
|
try {
|
response = wechatNewService.miniLogin(Boolean.FALSE, request);
|
} catch (Exception e) {
|
log.error("shop微信登录小程序授权登录失败,提示再试一次!");
|
return ApiUtils.returnNG("微信登陆失败", "微信登陆失败,请再试一次", -1);
|
}
|
|
if(Objects.isNull(response)){
|
return ApiUtils.returnNG("微信登陆失败");
|
}
|
log.info("小程序登陆成功 = " + JSON.toJSONString(response));
|
|
//通过小程序获取手机号 来查找用户
|
LambdaQueryWrapper<MemMerchant> wrapper = new LambdaQueryWrapper<>();
|
wrapper.eq(MemMerchant::getImAccount,response.getPhone());
|
wrapper.eq(MemMerchant::getIsDelete,0);
|
MemMerchant merchant = merchantService.getOne(wrapper,Boolean.FALSE);
|
if(Objects.isNull(merchant)){
|
return ApiUtils.returnNG("该手机号没有绑定核销门店,请联系总部解决");
|
}
|
return setUserAuth(merchant.getId());
|
}
|
|
@ApiOperation(value = "登录商家信息",response = MemMerchant.class)
|
@RequestMapping(value = "getMemMerchant", method = RequestMethod.GET)
|
public Object getMemMerchant(){
|
// 获取门店id
|
Integer merchantId = ThreadPoolUtil.getUserId();
|
MemMerchant merchant = merchantService.getById(merchantId);
|
if(Objects.isNull(merchant)){
|
return ApiUtils.returnNG("该手机号没有绑定核销门店,请联系总部解决");
|
}
|
MemMerchant memMerchant = new MemMerchant();
|
memMerchant.setMerchantName(merchant.getMerchantName());
|
memMerchant.setHeadPicture(merchant.getHeadPicture().split(",")[0]);
|
return memMerchant;
|
}
|
|
@GetMapping(value = "/pwd_login")
|
@ApiOperation(value = "密码登录", notes = "密码登录", response = LoginVo.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true),
|
@ApiImplicitParam(name = "password", value = "密码", dataType = "String", paramType = "query", required = true)
|
})
|
public Object loginPwd(String phone, String password) {
|
if (StringUtils.isEmpty(phone)) {
|
return ApiUtils.returnNG(null, "帐号或密码错误");
|
}
|
if (StringUtils.isEmpty(password)) {
|
return ApiUtils.returnNG(null, "帐号或密码错误");
|
}
|
//通过小程序获取手机号 来查找用户
|
LambdaQueryWrapper<MemMerchant> wrapper = new LambdaQueryWrapper<>();
|
wrapper.eq(MemMerchant::getImAccount,phone);
|
wrapper.eq(MemMerchant::getIsDelete,0);
|
MemMerchant user = merchantService.getOne(wrapper);
|
if (user == null) {
|
return ApiUtils.returnNG(null, "帐号或密码错误");
|
}
|
if (1 == user.getIsDelete()) {
|
return ApiUtils.returnNG(null, "您帐号已被锁定");
|
}
|
if (password.equals(user.getImPassword())) {
|
return ApiUtils.returnOK(setUserAuth(user.getId()));
|
} else {
|
return ApiUtils.returnNG(null, "帐号或密码错误");
|
}
|
}
|
|
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
|
redis.hashPushHashMap(EnumRedisKey.TOKEN_SHOP.index, id.toString(), token);
|
|
return map;
|
}
|
}
|