| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package com.ydtech.modules.admin.service.impl;
- import cn.dev33.satoken.session.SaSession;
- import cn.dev33.satoken.stp.StpUtil;
- import com.ydtech.core.page.HttpResult;
- import com.ydtech.exception.SystemException;
- import com.ydtech.modules.admin.dao.SysUserRoleMapper;
- import com.ydtech.modules.admin.model.SysUser;
- import com.ydtech.modules.admin.model.vo.WechatBindVo;
- import com.ydtech.modules.admin.model.vo.WechatLoginVo;
- import com.ydtech.modules.admin.model.vo.WechatVo;
- import com.ydtech.modules.admin.service.SysUserService;
- import com.ydtech.modules.admin.service.WechatService;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
- import me.chanjar.weixin.common.error.WxErrorException;
- import me.chanjar.weixin.mp.api.WxMpService;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.StringRedisTemplate;
- import org.springframework.stereotype.Service;
- import org.springframework.util.ObjectUtils;
- @Slf4j
- @Service
- @RequiredArgsConstructor
- public class WechatServiceImpl implements WechatService {
- @Value("${pyramid.dept.id}")
- private String pyramid;
- private final SysUserService sysUserService;
- private final WxMpService wxMpService;
- @Override
- public HttpResult<WechatVo> login(WechatLoginVo wechatLoginVo) throws WxErrorException {
- WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatLoginVo.getCode());
- String openId = accessToken.getOpenId();
- SysUser sysUser = sysUserService.lambdaQuery()
- .eq(SysUser::getOpenid, openId)
- .one();
- // 没有绑定微信
- if (sysUser == null) {
- throw new SystemException("您还未绑定工号。");
- }
- SysUser.verifyUser(sysUser);
- String token = StpUtil.createLoginSession(sysUser.getId());
- StpUtil.getSessionByLoginId(sysUser.getId()).set(SaSession.USER, sysUser);
- WechatVo wechatVo = new WechatVo(token, sysUser.getId());
- return HttpResult.ok("", wechatVo);
- }
- @Override
- public HttpResult<Object> bind(WechatBindVo wechatBindVo, String userId) throws WxErrorException {
- WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatBindVo.getCode());
- String openId = accessToken.getOpenId();
- SysUser sysUser = sysUserService.lambdaQuery().eq(SysUser::getOpenid, openId).one();
- if (sysUser != null) {
- throw new SystemException("同一微信不能重复绑定");
- }
- SysUser user = sysUserService.lambdaQuery().eq(SysUser::getId, userId).one();
- if (ObjectUtils.isEmpty(user)) {
- throw new SystemException("你输入的工号不存在");
- }
- user.setOpenid(openId);
- boolean update = sysUserService.updateById(user);
- if (update) {
- return HttpResult.ok("绑定成功");
- }
- throw new SystemException("绑定失败");
- }
- }
|