puzhibing
2023-10-08 22199bbdda579861736420fe26c2873ab0f5d21c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
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;
    }
}