提交 226e4486 作者: xiaowang

消息推送token验证

上级 6ddbedf5
......@@ -20,4 +20,6 @@ public interface WxApiService {
String getStableAccessToken() throws Exception;
String checkSignature(Map<String, String> params) throws Exception;
ResultBody mediaCheckAsync(String openid, String mediaUrl);
}
......@@ -32,201 +32,204 @@ import java.util.stream.Collectors;
/**
* @Author LW
*
* @date 2023/5/15 10:29 概要:动态信息实现层
*/
@Service
public class DynamicServiceImpl implements DynamicService {
@Resource private DynamicDAO dynamicDAO;
@Resource private LikeDAO likeDAO;
@Resource private CommentDAO commentDAO;
@Autowired private UserAppApi userAppApi;
@Resource
private DynamicDAO dynamicDAO;
@Resource
private LikeDAO likeDAO;
@Resource
private CommentDAO commentDAO;
@Autowired
private UserAppApi userAppApi;
@Override
@Transactional(rollbackFor = Exception.class)
public ResultBody insertDynamic(DynamicVO dynamicVO, Integer userAccountId) {
// 插入动态基本信息
ForumDynamicDO forumDynamicDO = new ForumDynamicDO(dynamicVO);
forumDynamicDO.setRootPath(null);
forumDynamicDO.setUserAccountId(userAccountId);
dynamicDAO.insertDynamic(forumDynamicDO);
// 插入动态资源
if (CollectionUtils.isNotEmpty(dynamicVO.getMediaVO())) {
for (MediaVO mediaVO : dynamicVO.getMediaVO()) {
dynamicDAO.insertResource(forumDynamicDO.getId(), mediaVO.getType(), mediaVO.getUrl());
}
@Override
@Transactional(rollbackFor = Exception.class)
public ResultBody insertDynamic(DynamicVO dynamicVO, Integer userAccountId) {
// 插入动态基本信息
ForumDynamicDO forumDynamicDO = new ForumDynamicDO(dynamicVO);
forumDynamicDO.setRootPath(null);
forumDynamicDO.setUserAccountId(userAccountId);
dynamicDAO.insertDynamic(forumDynamicDO);
// 插入动态资源
if (CollectionUtils.isNotEmpty(dynamicVO.getMediaVO())) {
for (MediaVO mediaVO : dynamicVO.getMediaVO()) {
dynamicDAO.insertResource(forumDynamicDO.getId(), mediaVO.getType(), mediaVO.getUrl());
}
}
return ResultBody.success("动态发布成功");
}
return ResultBody.success("动态发布成功");
}
@Override
public ResultBody likeDynamic(Integer userId, Integer dynamicId) {
// 获取动态信息
ForumDynamicDO forumDynamicDO = dynamicDAO.getDynamicInfo(dynamicId);
if (!likeDAO.isLiked(userId, dynamicId)) {
likeDAO.insertLike(userId, dynamicId);
dynamicDAO.updateDynamicLikeCount(dynamicId, forumDynamicDO.getVersion());
} else {
likeDAO.deleteLike(userId, dynamicId);
dynamicDAO.updateSubDynamicLikeCount(dynamicId, forumDynamicDO.getVersion());
@Override
public ResultBody likeDynamic(Integer userId, Integer dynamicId) {
// 获取动态信息
ForumDynamicDO forumDynamicDO = dynamicDAO.getDynamicInfo(dynamicId);
if (!likeDAO.isLiked(userId, dynamicId)) {
likeDAO.insertLike(userId, dynamicId);
dynamicDAO.updateDynamicLikeCount(dynamicId, forumDynamicDO.getVersion());
} else {
likeDAO.deleteLike(userId, dynamicId);
dynamicDAO.updateSubDynamicLikeCount(dynamicId, forumDynamicDO.getVersion());
}
return ResultBody.success();
}
return ResultBody.success();
}
@Override
@Transactional(rollbackFor = Exception.class)
public ResultBody commentDynamic(CommentVO commentVO, Integer userAccountId) {
ForumDynamicDO forumDynamicDO = dynamicDAO.getDynamicInfo(commentVO.getDynamicId());
if (forumDynamicDO == null) {
return ResultBody.error("动态不存在或已删除");
@Override
@Transactional(rollbackFor = Exception.class)
public ResultBody commentDynamic(CommentVO commentVO, Integer userAccountId) {
ForumDynamicDO forumDynamicDO = dynamicDAO.getDynamicInfo(commentVO.getDynamicId());
if (forumDynamicDO == null) {
return ResultBody.error("动态不存在或已删除");
}
// 新增评论
ForumDynamicDO comment = new ForumDynamicDO();
comment.setUserAccountId(userAccountId);
comment.setDescription(commentVO.getContent());
comment.defaultInfo();
comment.setRootPath(commentVO.getRootPath());
dynamicDAO.insertDynamic(comment);
// 修改评论数量
dynamicDAO.updateDynamicCommentCount(commentVO.getDynamicId(), forumDynamicDO.getVersion());
return ResultBody.success();
}
// 新增评论
ForumDynamicDO comment = new ForumDynamicDO();
comment.setUserAccountId(userAccountId);
comment.setDescription(commentVO.getContent());
comment.defaultInfo();
comment.setRootPath(commentVO.getRootPath());
dynamicDAO.insertDynamic(comment);
// 修改评论数量
dynamicDAO.updateDynamicCommentCount(commentVO.getDynamicId(), forumDynamicDO.getVersion());
return ResultBody.success();
}
@Override
public ResultBody deleteComment(Integer id) {
commentDAO.deleteComment(id);
return ResultBody.success();
}
@Override
public ResultBody dynamicDetails(Integer dynamicId, Integer userId, HttpServletRequest request) {
// 判断此动态是否还存在
//ForumDynamicDO dynamicInfo = dynamicDAO.getDynamicInfo(dynamicId);
ForumDynamicDO dynamicInfo = dynamicDAO.getDynamicInfoById(dynamicId);
if (dynamicInfo == null) {
return ResultBody.error("动态不存在!");
@Override
public ResultBody deleteComment(Integer id) {
commentDAO.deleteComment(id);
return ResultBody.success();
}
DynamicVO dynamicVO = dynamicInfo.buildDynamicVO();
// 设置是否点赞
boolean liked = likeDAO.isLiked(userId, dynamicId);
UserAccountSimpleDTO userAccountSimpleDTO =
userAppApi.feignGetUserSimpleInfo(
dynamicInfo.getUserAccountId(), request.getHeader(TokenConstant.TOKEN));
UserBaseInfoVO userBaseInfoVO = new UserBaseInfoVO();
userBaseInfoVO.setNickName(userAccountSimpleDTO.getNickName());
userBaseInfoVO.setUserImg(userAccountSimpleDTO.getUserImg());
dynamicVO.setUserBaseInfo(userBaseInfoVO);
dynamicVO.setLikes(liked);
// 获取媒体资源
List<ForumResourceDO> forumResourceList = dynamicDAO.listDynamicResources(dynamicId);
if (CollectionUtils.isNotEmpty(forumResourceList)) {
List<MediaVO> MediaVOList =
forumResourceList.stream().map(ForumResourceDO::buildMedia).collect(Collectors.toList());
dynamicVO.setMediaVO(MediaVOList);
}
// 动态评论列表
List<DynamicVO> listDynamic = getCommentInfo(dynamicId, request);
dynamicVO.setCommentAndReplyVO(listDynamic);
return ResultBody.success(dynamicVO);
}
private List<DynamicVO> getCommentInfo(Integer dynamicId, HttpServletRequest request) {
// 获取下面所有的一级评论
List<ForumDynamicDO> forumDynamic = dynamicDAO.getDynamicComment(dynamicId.toString());
if (forumDynamic == null) {
return new ArrayList<>();
@Override
public ResultBody dynamicDetails(Integer dynamicId, Integer userId, HttpServletRequest request) {
// 判断此动态是否还存在
//ForumDynamicDO dynamicInfo = dynamicDAO.getDynamicInfo(dynamicId);
ForumDynamicDO dynamicInfo = dynamicDAO.getDynamicInfoById(dynamicId);
if (dynamicInfo == null) {
return ResultBody.error("动态不存在!");
}
DynamicVO dynamicVO = dynamicInfo.buildDynamicVO();
// 设置是否点赞
boolean liked = likeDAO.isLiked(userId, dynamicId);
UserAccountSimpleDTO userAccountSimpleDTO =
userAppApi.feignGetUserSimpleInfo(
dynamicInfo.getUserAccountId(), request.getHeader(TokenConstant.TOKEN));
UserBaseInfoVO userBaseInfoVO = new UserBaseInfoVO();
userBaseInfoVO.setNickName(userAccountSimpleDTO.getNickName());
userBaseInfoVO.setUserImg(userAccountSimpleDTO.getUserImg());
dynamicVO.setUserBaseInfo(userBaseInfoVO);
dynamicVO.setLikes(liked);
// 获取媒体资源
List<ForumResourceDO> forumResourceList = dynamicDAO.listDynamicResources(dynamicId);
if (CollectionUtils.isNotEmpty(forumResourceList)) {
List<MediaVO> MediaVOList =
forumResourceList.stream().map(ForumResourceDO::buildMedia).collect(Collectors.toList());
dynamicVO.setMediaVO(MediaVOList);
}
// 动态评论列表
List<DynamicVO> listDynamic = getCommentInfo(dynamicId, request);
dynamicVO.setCommentAndReplyVO(listDynamic);
return ResultBody.success(dynamicVO);
}
List<Integer> userAccountIds =
forumDynamic.stream().map(ForumDynamicDO::getUserAccountId).collect(Collectors.toList());
UserAccountQO bUserAccountQO = new UserAccountQO();
bUserAccountQO.setUserIds(userAccountIds);
bUserAccountQO.setPageNo(1);
bUserAccountQO.setPageSize(999);
// 获取用户的信息
List<UserAccountSimpleDTO> userAccountSimpleDTOS =
userAppApi.feignListAppUserAccount(bUserAccountQO, request.getHeader(TokenConstant.TOKEN));
List<DynamicVO> listDynamic =
forumDynamic.stream().map(ForumDynamicDO::buildDynamicVO).collect(Collectors.toList());
for (DynamicVO dynamicVO : listDynamic) {
for (UserAccountSimpleDTO userAccountSimpleDTO : userAccountSimpleDTOS) {
if (dynamicVO.getUserAccountId().equals(userAccountSimpleDTO.getId())) {
UserBaseInfoVO userBaseInfoVO = new UserBaseInfoVO();
userBaseInfoVO.setNickName(userAccountSimpleDTO.getNickName());
userBaseInfoVO.setUserImg(userAccountSimpleDTO.getUserImg());
userBaseInfoVO.setUserName(userAccountSimpleDTO.getUserName());
userBaseInfoVO.setPhone(userAccountSimpleDTO.getPhoneNum());
userBaseInfoVO.setUid(userAccountSimpleDTO.getUid());
dynamicVO.setUserBaseInfo(userBaseInfoVO);
break;
private List<DynamicVO> getCommentInfo(Integer dynamicId, HttpServletRequest request) {
// 获取下面所有的一级评论
List<ForumDynamicDO> forumDynamic = dynamicDAO.getDynamicComment(dynamicId.toString());
if (forumDynamic == null) {
return new ArrayList<>();
}
}
}
return listDynamic;
}
List<Integer> userAccountIds =
forumDynamic.stream().map(ForumDynamicDO::getUserAccountId).collect(Collectors.toList());
UserAccountQO bUserAccountQO = new UserAccountQO();
bUserAccountQO.setUserIds(userAccountIds);
bUserAccountQO.setPageNo(1);
bUserAccountQO.setPageSize(999);
// 获取用户的信息
List<UserAccountSimpleDTO> userAccountSimpleDTOS =
userAppApi.feignListAppUserAccount(bUserAccountQO, request.getHeader(TokenConstant.TOKEN));
@Override
public PageResult dynamicList(
Integer pageNo, Integer pageSize, Integer userId, HttpServletRequest request) {
int count = dynamicDAO.countDynamicList();
if (count == 0) {
return PageResult.buildPage(pageNo, pageSize, 0);
}
int itemIndex = (pageNo - 1) * pageSize;
List<ForumDynamicDO> forumDynamicList = dynamicDAO.dynamicList(itemIndex, pageSize);
// 动态id集合
List<Integer> ids =
forumDynamicList.stream().map(ForumDynamicDO::getId).collect(Collectors.toList());
// 根据id集合查询图片
List<ForumResourceDO> forumImageList = dynamicDAO.listDynamicPicture(ids);
Map<Integer, List<ForumResourceDO>> ImageMap =
forumImageList.stream().collect(Collectors.groupingBy(ForumResourceDO::getDynamicId));
// 获取用户信息
Set<Integer> userIds =
forumDynamicList.stream().map(ForumDynamicDO::getUserAccountId).collect(Collectors.toSet());
List<Integer> userIdList = new ArrayList<>(userIds);
UserAccountQO bUserAccountQO = new UserAccountQO();
bUserAccountQO.setUserIds(userIdList);
List<UserAccountSimpleDTO> userAccountSimpleDTOS =
userAppApi.feignListAppUserAccount(bUserAccountQO, request.getHeader(TokenConstant.TOKEN));
Map<Integer, UserAccountSimpleDTO> userAccountInfoMap =
userAccountSimpleDTOS.stream()
.collect(Collectors.toMap(UserAccountSimpleDTO::getId, Function.identity()));
// 获取liked信息
List<ForumDynamicDO> forumDynamicDOS = likeDAO.selectLiked(userId, ids);
List<DynamicVO> dynamicVOList =
forumDynamicList.stream()
.map(
d -> {
DynamicVO dynamicVO = d.buildDynamicVO();
List<ForumResourceDO> forumResourceDOList = ImageMap.get(d.getId());
if (CollectionUtils.isNotEmpty(forumResourceDOList)) {
dynamicVO.setMediaVO(
forumResourceDOList.stream()
.map(ForumResourceDO::buildMedia)
.collect(Collectors.toList()));
}
UserAccountSimpleDTO userAccountSimpleDTO =
userAccountInfoMap.get(d.getUserAccountId());
if (userAccountSimpleDTO != null) {
List<DynamicVO> listDynamic =
forumDynamic.stream().map(ForumDynamicDO::buildDynamicVO).collect(Collectors.toList());
for (DynamicVO dynamicVO : listDynamic) {
for (UserAccountSimpleDTO userAccountSimpleDTO : userAccountSimpleDTOS) {
if (dynamicVO.getUserAccountId().equals(userAccountSimpleDTO.getId())) {
UserBaseInfoVO userBaseInfoVO = new UserBaseInfoVO();
userBaseInfoVO.setNickName(userAccountSimpleDTO.getNickName());
userBaseInfoVO.setUserImg(userAccountSimpleDTO.getUserImg());
userBaseInfoVO.setUserName(userAccountSimpleDTO.getUserName());
userBaseInfoVO.setPhone(userAccountSimpleDTO.getPhoneNum());
userBaseInfoVO.setUid(userAccountSimpleDTO.getUid());
dynamicVO.setUserBaseInfo(userBaseInfoVO);
}
// 设置是否点赞
for (ForumDynamicDO forumDynamicDO : forumDynamicDOS) {
if (forumDynamicDO.getId().equals(d.getId())) {
dynamicVO.setLikes(true);
break;
} else {
dynamicVO.setLikes(false);
}
}
return dynamicVO;
})
.collect(Collectors.toList());
return PageResult.buildPage(pageNo, pageSize, count, dynamicVOList);
}
break;
}
}
}
return listDynamic;
}
@Override
public PageResult dynamicList(
Integer pageNo, Integer pageSize, Integer userId, HttpServletRequest request) {
int count = dynamicDAO.countDynamicList();
if (count == 0) {
return PageResult.buildPage(pageNo, pageSize, 0);
}
int itemIndex = (pageNo - 1) * pageSize;
List<ForumDynamicDO> forumDynamicList = dynamicDAO.dynamicList(itemIndex, pageSize);
// 动态id集合
List<Integer> ids =
forumDynamicList.stream().map(ForumDynamicDO::getId).collect(Collectors.toList());
// 根据id集合查询图片
List<ForumResourceDO> forumImageList = dynamicDAO.listDynamicPicture(ids);
Map<Integer, List<ForumResourceDO>> ImageMap =
forumImageList.stream().collect(Collectors.groupingBy(ForumResourceDO::getDynamicId));
// 获取用户信息
Set<Integer> userIds =
forumDynamicList.stream().map(ForumDynamicDO::getUserAccountId).collect(Collectors.toSet());
List<Integer> userIdList = new ArrayList<>(userIds);
UserAccountQO bUserAccountQO = new UserAccountQO();
bUserAccountQO.setUserIds(userIdList);
List<UserAccountSimpleDTO> userAccountSimpleDTOS =
userAppApi.feignListAppUserAccount(bUserAccountQO, request.getHeader(TokenConstant.TOKEN));
Map<Integer, UserAccountSimpleDTO> userAccountInfoMap =
userAccountSimpleDTOS.stream()
.collect(Collectors.toMap(UserAccountSimpleDTO::getId, Function.identity()));
// 获取liked信息
List<ForumDynamicDO> forumDynamicDOS = likeDAO.selectLiked(userId, ids);
List<DynamicVO> dynamicVOList =
forumDynamicList.stream()
.map(
d -> {
DynamicVO dynamicVO = d.buildDynamicVO();
List<ForumResourceDO> forumResourceDOList = ImageMap.get(d.getId());
if (CollectionUtils.isNotEmpty(forumResourceDOList)) {
dynamicVO.setMediaVO(
forumResourceDOList.stream()
.map(ForumResourceDO::buildMedia)
.collect(Collectors.toList()));
}
UserAccountSimpleDTO userAccountSimpleDTO =
userAccountInfoMap.get(d.getUserAccountId());
if (userAccountSimpleDTO != null) {
UserBaseInfoVO userBaseInfoVO = new UserBaseInfoVO();
userBaseInfoVO.setNickName(userAccountSimpleDTO.getNickName());
userBaseInfoVO.setUserImg(userAccountSimpleDTO.getUserImg());
dynamicVO.setUserBaseInfo(userBaseInfoVO);
}
// 设置是否点赞
for (ForumDynamicDO forumDynamicDO : forumDynamicDOS) {
if (forumDynamicDO.getId().equals(d.getId())) {
dynamicVO.setLikes(true);
break;
} else {
dynamicVO.setLikes(false);
}
}
return dynamicVO;
})
.collect(Collectors.toList());
return PageResult.buildPage(pageNo, pageSize, count, dynamicVOList);
}
}
......@@ -9,6 +9,7 @@ import com.mmc.csf.common.util.wx.WXMsgPushUtils;
import com.mmc.csf.release.constant.UserSystemConstant;
import com.mmc.csf.release.constant.WxConstant;
import com.mmc.csf.release.service.WxApiService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
......@@ -24,6 +25,7 @@ import java.util.concurrent.TimeUnit;
* 概要:
*/
@Service
@Slf4j
public class WxApiServiceImpl implements WxApiService {
@Autowired
private UserSystemConstant userSystemConstant;
......@@ -31,6 +33,13 @@ public class WxApiServiceImpl implements WxApiService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* 文本识别
*
* @param openid
* @param content
* @return
*/
@Override
public ResultBody msgSecCheck(String openid, String content) {
try {
......@@ -41,10 +50,7 @@ public class WxApiServiceImpl implements WxApiService {
param.put("scene", 3);
param.put("openid", openid);
String url = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + accessToken;
String res = HttpHelper.httpPost(url, param.toString());
JSONObject result = JSONObject.parseObject(res);
JSONObject resultData = result.getJSONObject(WxConstant.RESULT);
if (!resultData.getString(WxConstant.LABEL).equals(WxConstant.LABEL_DATA)) {
if (buildParams(param, url)) {
return ResultBody.error(ResultEnum.DYNAMIC_SENSITIVE_INFO);
}
} catch (Exception e) {
......@@ -53,6 +59,43 @@ public class WxApiServiceImpl implements WxApiService {
return ResultBody.success();
}
/**
* 图片视频识别
*
* @param openid
* @param mediaUrl
* @return
*/
@Override
public ResultBody mediaCheckAsync(String openid, String mediaUrl) {
try {
String accessToken = this.getStableAccessToken();
JSONObject param = new JSONObject();
param.put("media_url", mediaUrl);
param.put("media_type", 2);
param.put("version", 2);
param.put("scene", 3);
param.put("openid", openid);
String url = "https://api.weixin.qq.com/wxa/media_check_async?access_token=" + accessToken;
if (buildParams(param, url)) {
return ResultBody.error(ResultEnum.DYNAMIC_SENSITIVE_INFO);
}
} catch (Exception e) {
e.printStackTrace();
}
return ResultBody.success();
}
private boolean buildParams(JSONObject param, String url) throws Exception {
String res = HttpHelper.httpPost(url, param.toString());
JSONObject result = JSONObject.parseObject(res);
JSONObject resultData = result.getJSONObject(WxConstant.RESULT);
if (!resultData.getString(WxConstant.LABEL).equals(WxConstant.LABEL_DATA)) {
return true;
}
return false;
}
@Override
public String getStableAccessToken() {
//token有效期为7200s,需要保存起来,先从redis中获取accessToken,没有则请求获取
......
......@@ -34,3 +34,4 @@ data-filter:
- /release/actuator/health/readiness
- /release/tender/infoById
- /release/wechat/checkSignature
- /release/wechat/mediaCheckAsync
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论