WechatServiceImpl.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package com.ydtech.modules.admin.service.impl;
  2. import cn.dev33.satoken.session.SaSession;
  3. import cn.dev33.satoken.stp.StpUtil;
  4. import com.ydtech.core.page.HttpResult;
  5. import com.ydtech.exception.SystemException;
  6. import com.ydtech.modules.admin.dao.SysUserRoleMapper;
  7. import com.ydtech.modules.admin.model.SysUser;
  8. import com.ydtech.modules.admin.model.vo.WechatBindVo;
  9. import com.ydtech.modules.admin.model.vo.WechatLoginVo;
  10. import com.ydtech.modules.admin.model.vo.WechatVo;
  11. import com.ydtech.modules.admin.service.SysUserService;
  12. import com.ydtech.modules.admin.service.WechatService;
  13. import lombok.RequiredArgsConstructor;
  14. import lombok.extern.slf4j.Slf4j;
  15. import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
  16. import me.chanjar.weixin.common.error.WxErrorException;
  17. import me.chanjar.weixin.mp.api.WxMpService;
  18. import org.springframework.beans.factory.annotation.Value;
  19. import org.springframework.data.redis.core.StringRedisTemplate;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.util.ObjectUtils;
  22. @Slf4j
  23. @Service
  24. @RequiredArgsConstructor
  25. public class WechatServiceImpl implements WechatService {
  26. @Value("${pyramid.dept.id}")
  27. private String pyramid;
  28. private final SysUserService sysUserService;
  29. private final WxMpService wxMpService;
  30. @Override
  31. public HttpResult<WechatVo> login(WechatLoginVo wechatLoginVo) throws WxErrorException {
  32. WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatLoginVo.getCode());
  33. String openId = accessToken.getOpenId();
  34. SysUser sysUser = sysUserService.lambdaQuery()
  35. .eq(SysUser::getOpenid, openId)
  36. .one();
  37. // 没有绑定微信
  38. if (sysUser == null) {
  39. throw new SystemException("您还未绑定工号。");
  40. }
  41. SysUser.verifyUser(sysUser);
  42. String token = StpUtil.createLoginSession(sysUser.getId());
  43. StpUtil.getSessionByLoginId(sysUser.getId()).set(SaSession.USER, sysUser);
  44. WechatVo wechatVo = new WechatVo(token, sysUser.getId());
  45. return HttpResult.ok("", wechatVo);
  46. }
  47. @Override
  48. public HttpResult<Object> bind(WechatBindVo wechatBindVo, String userId) throws WxErrorException {
  49. WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatBindVo.getCode());
  50. String openId = accessToken.getOpenId();
  51. SysUser sysUser = sysUserService.lambdaQuery().eq(SysUser::getOpenid, openId).one();
  52. if (sysUser != null) {
  53. throw new SystemException("同一微信不能重复绑定");
  54. }
  55. SysUser user = sysUserService.lambdaQuery().eq(SysUser::getId, userId).one();
  56. if (ObjectUtils.isEmpty(user)) {
  57. throw new SystemException("你输入的工号不存在");
  58. }
  59. user.setOpenid(openId);
  60. boolean update = sysUserService.updateById(user);
  61. if (update) {
  62. return HttpResult.ok("绑定成功");
  63. }
  64. throw new SystemException("绑定失败");
  65. }
  66. }