Commit 6234ca3c by 邹磊浩

解析公众号openid重定向

parent fcb44dd4
...@@ -246,7 +246,7 @@ xss: ...@@ -246,7 +246,7 @@ xss:
# 过滤开关 # 过滤开关
enabled: true enabled: true
# 排除链接(多个用逗号分隔) # 排除链接(多个用逗号分隔)
excludes: /system/notice,/system/hospital excludes: /system/notice,/system/hospital,/system/goods
# 匹配链接 # 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/* urlPatterns: /system/*,/monitor/*,/tool/*
......
...@@ -52,6 +52,12 @@ ...@@ -52,6 +52,12 @@
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.39</version>
</dependency>
<!-- JSON工具类 --> <!-- JSON工具类 -->
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
......
...@@ -42,6 +42,11 @@ public class SysUser extends BaseEntity { ...@@ -42,6 +42,11 @@ public class SysUser extends BaseEntity {
private String openId; private String openId;
/** /**
* 微信公众号openid
*/
private String wxOpenid;
/**
* 部门ID * 部门ID
*/ */
private Long deptId; private Long deptId;
......
package com.pz.common.response;
import lombok.Data;
@Data
public class WxAuthResponse {
private String access_token;
private String openid;
private String expires_in;
private String refresh_token;
private String scope;
}
...@@ -6,20 +6,28 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; ...@@ -6,20 +6,28 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult; import cn.dev33.satoken.util.SaResult;
import com.alibaba.fastjson.JSONObject;
import com.pz.common.constant.Constants; import com.pz.common.constant.Constants;
import com.pz.common.core.controller.BaseController; import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.R; import com.pz.common.core.domain.R;
import com.pz.common.core.domain.entity.SysUser;
import com.pz.common.exception.ServiceException; import com.pz.common.exception.ServiceException;
import com.pz.common.response.WxAuthResponse;
import com.pz.common.utils.StringUtils; import com.pz.common.utils.StringUtils;
import com.pz.common.config.WechatConfiguration; import com.pz.common.config.WechatConfiguration;
import com.pz.merchant.domain.WechatUserInfo; import com.pz.merchant.domain.WechatUserInfo;
import com.pz.merchant.domain.bo.WechatLoginBo; import com.pz.merchant.domain.bo.WechatLoginBo;
import com.pz.system.mapper.SysUserMapper;
import com.pz.system.service.ISysUserService;
import com.pz.system.service.SysLoginService; import com.pz.system.service.SysLoginService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
/** /**
...@@ -38,6 +46,8 @@ public class WechatLoginController extends BaseController { ...@@ -38,6 +46,8 @@ public class WechatLoginController extends BaseController {
private final SysLoginService loginService; private final SysLoginService loginService;
private final SysUserMapper sysUserMapper;
/** /**
* 登录 * 登录
* *
...@@ -71,6 +81,25 @@ public class WechatLoginController extends BaseController { ...@@ -71,6 +81,25 @@ public class WechatLoginController extends BaseController {
} }
/** /**
* 解析公众号openid重定向
*/
@SaIgnore
@GetMapping("wxopenid")
public void wxopenid(String userId, String code, String state, HttpServletResponse response) throws IOException {
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx6cc2fd1bca9472ae&secret=2edf95828b1a19fc5149f6650cde71f1&code=" + code
+ "&grant_type=authorization_code";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);
WxAuthResponse authResponse = JSONObject.parseObject(result, WxAuthResponse.class);
String mpOpenId = authResponse.getOpenid();
SysUser sysUser = new SysUser();
sysUser.setUserId(Long.valueOf(userId));
sysUser.setWxOpenid(mpOpenId);
sysUserMapper.updateById(sysUser);
response.sendRedirect("https://peizheng.shanpeikj.com/wx/index.html");
}
/**
* 注销 * 注销
*/ */
@GetMapping("logout") @GetMapping("logout")
......
...@@ -4,7 +4,9 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; ...@@ -4,7 +4,9 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.pz.common.annotation.ExcelDictFormat; import com.pz.common.annotation.ExcelDictFormat;
import com.pz.common.convert.ExcelDictConvert; import com.pz.common.convert.ExcelDictConvert;
import com.pz.common.core.domain.BaseEntity;
import com.pz.system.domain.Carousel; import com.pz.system.domain.Carousel;
import com.pz.system.domain.StoreGoodsTag;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -18,7 +20,7 @@ import java.util.List; ...@@ -18,7 +20,7 @@ import java.util.List;
*/ */
@Data @Data
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
public class StoreGoodsVo { public class StoreGoodsVo extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -109,4 +111,8 @@ public class StoreGoodsVo { ...@@ -109,4 +111,8 @@ public class StoreGoodsVo {
private List<Carousel> carousel; private List<Carousel> carousel;
private List<Integer> ids; private List<Integer> ids;
private List<StoreGoodsTagVo> list;
private String typeName;
} }
package com.pz.system.service; package com.pz.system.service;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.common.constant.CacheConstants; import com.pz.common.constant.CacheConstants;
...@@ -23,10 +25,8 @@ import com.pz.common.exception.user.CaptchaException; ...@@ -23,10 +25,8 @@ import com.pz.common.exception.user.CaptchaException;
import com.pz.common.exception.user.CaptchaExpireException; import com.pz.common.exception.user.CaptchaExpireException;
import com.pz.common.exception.user.UserException; import com.pz.common.exception.user.UserException;
import com.pz.common.helper.LoginHelper; import com.pz.common.helper.LoginHelper;
import com.pz.common.utils.DateUtils; import com.pz.common.response.WxAuthResponse;
import com.pz.common.utils.MessageUtils; import com.pz.common.utils.*;
import com.pz.common.utils.ServletUtils;
import com.pz.common.utils.StringUtils;
import com.pz.common.utils.redis.RedisUtils; import com.pz.common.utils.redis.RedisUtils;
import com.pz.common.utils.spring.SpringUtils; import com.pz.common.utils.spring.SpringUtils;
import com.pz.merchant.domain.WechatUserInfo; import com.pz.merchant.domain.WechatUserInfo;
...@@ -36,7 +36,11 @@ import lombok.RequiredArgsConstructor; ...@@ -36,7 +36,11 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.Duration; import java.time.Duration;
import java.util.List; import java.util.List;
import java.util.function.Supplier; import java.util.function.Supplier;
...@@ -151,7 +155,7 @@ public class SysLoginService { ...@@ -151,7 +155,7 @@ public class SysLoginService {
public String xccLogin(WechatUserInfo loginBo) { public String xccLogin(WechatUserInfo loginBo) {
SysUser user = loadUserByOpenid(loginBo.getOpenId()); SysUser user = loadUserByOpenid(loginBo.getOpenId());
if (user == null) { if (user == null) {
SysUser userByPhone = userMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPhonenumber,loginBo.getMobilePhone())); SysUser userByPhone = userMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPhonenumber, loginBo.getMobilePhone()));
// 若该手机号已经被注册,则直接绑定OpenID // 若该手机号已经被注册,则直接绑定OpenID
if (userByPhone != null) { if (userByPhone != null) {
userByPhone.setOpenId(loginBo.getOpenId()); userByPhone.setOpenId(loginBo.getOpenId());
...@@ -189,6 +193,7 @@ public class SysLoginService { ...@@ -189,6 +193,7 @@ public class SysLoginService {
return StpUtil.getTokenValue(); return StpUtil.getTokenValue();
} }
/** /**
* 退出登录 * 退出登录
*/ */
......
...@@ -11,8 +11,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -11,8 +11,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.common.utils.JsonUtils; import com.pz.common.utils.JsonUtils;
import com.pz.system.domain.StoreApply; import com.pz.system.domain.StoreApply;
import com.pz.system.domain.StoreGoodsTag;
import com.pz.system.domain.vo.StoreApplyVo; import com.pz.system.domain.vo.StoreApplyVo;
import com.pz.system.mapper.StoreApplyMapper; import com.pz.system.mapper.StoreApplyMapper;
import com.pz.system.mapper.StoreGoodsCategoryMapper;
import com.pz.system.mapper.StoreGoodsTagMapper; import com.pz.system.mapper.StoreGoodsTagMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -43,12 +45,20 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService { ...@@ -43,12 +45,20 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
private final StoreGoodsTagMapper goodsTagMapper; private final StoreGoodsTagMapper goodsTagMapper;
private final StoreGoodsCategoryMapper storeGoodsCategoryMapper;
/** /**
* 查询商品 * 查询商品
*/ */
@Override @Override
public StoreGoodsVo queryById(Integer id) { public StoreGoodsVo queryById(Integer id) {
return baseMapper.selectVoById(id); StoreGoodsVo storeGoodsVo = baseMapper.selectVoById(id);
if (StringUtils.isNotBlank(storeGoodsVo.getTags())) {
List<Integer> ids = JsonUtils.parseArray(storeGoodsVo.getTags(), Integer.class);
//查询商品标签
storeGoodsVo.setList(goodsTagMapper.selectVoList(new LambdaQueryWrapper<StoreGoodsTag>().in(StoreGoodsTag::getId, ids)));
}
return storeGoodsVo;
} }
/** /**
...@@ -75,8 +85,14 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService { ...@@ -75,8 +85,14 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
storeGoodsVos.forEach(storeGoodsVo -> { storeGoodsVos.forEach(storeGoodsVo -> {
if (StringUtils.isNotBlank(storeGoodsVo.getTags())) { if (StringUtils.isNotBlank(storeGoodsVo.getTags())) {
List<Integer> ids = JsonUtils.parseArray(storeGoodsVo.getTags(), Integer.class); List<Integer> ids = JsonUtils.parseArray(storeGoodsVo.getTags(), Integer.class);
//查询商品标签
storeGoodsVo.setIds(ids); storeGoodsVo.setList(goodsTagMapper.selectVoList(new LambdaQueryWrapper<StoreGoodsTag>().in(StoreGoodsTag::getId, ids)));
}
if (null != storeGoodsVo.getCategoryId()) {
Optional.ofNullable(storeGoodsCategoryMapper.selectVoById(storeGoodsVo.getCategoryId()))
.ifPresent(storeGoodsCategoryVo -> {
storeGoodsVo.setTypeName(storeGoodsCategoryVo.getTitle());
});
} }
}); });
}); });
...@@ -162,7 +178,10 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService { ...@@ -162,7 +178,10 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
@Override @Override
public Boolean updateByBo(StoreGoodsBo bo) { public Boolean updateByBo(StoreGoodsBo bo) {
StoreGoods update = BeanUtil.toBean(bo, StoreGoods.class); StoreGoods update = BeanUtil.toBean(bo, StoreGoods.class);
validEntityBeforeSave(update); if (CollectionUtils.isNotEmpty(bo.getTagIds())) {
String tags = JsonUtils.toJsonString(bo.getTagIds());
update.setTags(tags);
}
return baseMapper.updateById(update) > 0; return baseMapper.updateById(update) > 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment