提交 226e4486 作者: xiaowang

消息推送token验证

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