service层的主要代码: public LoginVo login(UserLoginRequestDto userLoginRequestDto) { //1.调用微信开放平台小程序的api--code2Session,根据code获取openId String openId = wechatService.getOpenId(userLoginRequestDto.getCode()); //2.根据openId查询用户 Member member = getByOpenId(openId); //3.用户为null,新增,需要构建新的member对象,并设置openId; 不为null,老用户 member = ObjectUtil.isNotEmpty(member) ? member : Member.builder() .openId(openId) .build(); //4.调用微信开放平台小程序的api,获取手机号(得先调用获得token) String phone = wechatService.getPhone(userLoginRequestDto.getPhoneCode()); //5.新用户绑定手机号;老用户更新手机号(手机号与数据库不一致) if(ObjectUtil.notEqual(member.getPhone(),phone)){ member.setPhone(phone);//更新手机号 saveOrUpdate(member); //新用户新增,老用户更新 } //6.jwt生成token,封装对象,返回结果 Map<String, Object> claims = new HashMap<>(); claims.put(Constants.JWT_USERID, member.getId()); claims.put(Constants.JWT_USERNAME, member.getName()); //调用写好的工具包,生成token String token = JwtUtil.createJWT(jwtTokenManagerProperties.getBase64EncodedSecretKey(), jwtTokenManagerProperties.getTtl(), claims); //封装对象 LoginVo loginVo = new LoginVo(); loginVo.setToken(token); loginVo.setNickName(member.getName()); return loginVo; }
//根据id判断用户是否存在 新用户新增,老用户更新 private void saveOrUpdate(Member member) { // 判断id存在 不存在则新增,否则是更新 if (ObjectUtil.isNotEmpty(member.getId())) { memberMapper.update(member);//老用户更新 return; } // 保存新的用户 //随机组装用户名,词组+手机号后四位 String nickName = DEFAULT_NICKNAME_PREFIX.get((int) (Math.random() * DEFAULT_NICKNAME_PREFIX.size())) + StringUtils.substring(member.getPhone(), 7); member.setName(nickName); memberMapper.insert(member);//新用户新增 }