|
|
@@ -1,14 +1,30 @@
|
|
|
package com.cyksj.service.mini.impl;
|
|
|
|
|
|
+import cn.hutool.core.util.RandomUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.cyksj.config.YhMiniConfig;
|
|
|
+import com.cyksj.dto.Result;
|
|
|
+import com.cyksj.enums.GatewayResponse;
|
|
|
+import com.cyksj.mapper.UserMapper;
|
|
|
+import com.cyksj.mapper.mini.ArticleMapper;
|
|
|
+import com.cyksj.mapper.mini.ArticleUserMarkMapper;
|
|
|
+import com.cyksj.model.dto.MiniProgramSession;
|
|
|
+import com.cyksj.model.entity.ArticleUserMark;
|
|
|
+import com.cyksj.model.entity.User;
|
|
|
+import com.cyksj.model.request.MiniArticleReq;
|
|
|
+import com.cyksj.model.views.ArticleDetailView;
|
|
|
import com.cyksj.model.wechat.MiniURLLink;
|
|
|
import com.cyksj.redis.RedisService;
|
|
|
import com.cyksj.service.mini.MiniService;
|
|
|
import com.cyksj.service.wechat.WeChatService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.dao.DuplicateKeyException;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.Optional;
|
|
|
+
|
|
|
/*
|
|
|
*项目名: netflix
|
|
|
*文件名: MiniServiceImpl
|
|
|
@@ -25,6 +41,12 @@ public class MiniServiceImpl implements MiniService {
|
|
|
|
|
|
private final RedisService redisService;
|
|
|
|
|
|
+ private final UserMapper userMapper;
|
|
|
+
|
|
|
+ private final ArticleUserMarkMapper articleUserMarkMapper;
|
|
|
+
|
|
|
+ private final ArticleMapper articleMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public String getMiniURLLink(String path, String query) throws Exception {
|
|
|
MiniURLLink miniURLLink = new MiniURLLink();
|
|
|
@@ -34,4 +56,92 @@ public class MiniServiceImpl implements MiniService {
|
|
|
String linkUrl = weChatService.getMiniURLLink(accessToken, miniURLLink);
|
|
|
return linkUrl;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public User wxlogin(String code, String appId) throws Exception {
|
|
|
+ MiniProgramSession code2Session = weChatService.code2Session(appId, code);
|
|
|
+ String unionId = code2Session.getUnionid();
|
|
|
+ String openId = code2Session.getOpenid();
|
|
|
+ User user = Optional.ofNullable(
|
|
|
+ userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getUnionid, unionId)
|
|
|
+ .last("limit 1")))
|
|
|
+ .orElseGet(() -> userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getOpenId, openId)
|
|
|
+ .last("limit 1")));
|
|
|
+
|
|
|
+ user = Optional.ofNullable(user).orElseGet(() -> new User().setOpenId(openId).setUnionid(unionId));
|
|
|
+ user.setUnionid(unionId);
|
|
|
+ user.setOpenId(openId);
|
|
|
+ user.setRegisterEnv(User.RegisterEnv.h5.name());
|
|
|
+ if (user.getId() == null) {
|
|
|
+ user.setNickname(String.format("银河小程序用户%s", RandomUtil.randomString(5)));
|
|
|
+ userMapper.insert(user);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ userMapper.updateById(user);
|
|
|
+ }
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Result<String> markArticle(MiniArticleReq miniArticleReq) {
|
|
|
+ Long userId = miniArticleReq.getUserId();
|
|
|
+ Long articleId = miniArticleReq.getId();
|
|
|
+ Integer type = miniArticleReq.getType();
|
|
|
+ ArticleUserMark mark = articleUserMarkMapper.selectOne(Wrappers.lambdaQuery(ArticleUserMark.class)
|
|
|
+ .eq(ArticleUserMark::getUserId, userId)
|
|
|
+ .eq(ArticleUserMark::getArticleId, articleId).last("limit 1"));
|
|
|
+ if (mark == null) {
|
|
|
+ mark = new ArticleUserMark();
|
|
|
+ mark.setUserId(userId);
|
|
|
+ mark.setArticleId(articleId);
|
|
|
+ if (type == 1) mark.setIsDz(true);
|
|
|
+ if (type == 2) mark.setIsCol(true);
|
|
|
+ try {
|
|
|
+ articleUserMarkMapper.insert(mark);
|
|
|
+ } catch (DuplicateKeyException e) {
|
|
|
+
|
|
|
+ }
|
|
|
+ if (type == 1) return GatewayResponse.SUCCESS.newBuilder().toResult("点赞成功");
|
|
|
+ if (type == 2) return GatewayResponse.SUCCESS.newBuilder().toResult("收藏成功");
|
|
|
+ }
|
|
|
+ if (type == 1) {
|
|
|
+ Boolean isDz = mark.getIsDz();
|
|
|
+
|
|
|
+ mark.setIsDz(!isDz);
|
|
|
+ articleUserMarkMapper.updateById(mark);
|
|
|
+ if (!isDz) {
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult("点赞成功");
|
|
|
+ }
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult("取消成功");
|
|
|
+ }
|
|
|
+ if (type == 2) {
|
|
|
+ Boolean isCol = mark.getIsCol();
|
|
|
+
|
|
|
+ mark.setIsCol(!isCol);
|
|
|
+ articleUserMarkMapper.updateById(mark);
|
|
|
+ if (!isCol) {
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult("收藏成功");
|
|
|
+ }
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult("取消成功");
|
|
|
+ }
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ArticleDetailView getArticleDetailView(Long articleId, Long userId) {
|
|
|
+ ArticleDetailView detailView = articleMapper.getArticleDetailById(articleId);
|
|
|
+ if (userId != null) {
|
|
|
+ Optional.ofNullable(articleUserMarkMapper.selectOne(Wrappers.lambdaQuery(ArticleUserMark.class)
|
|
|
+ .eq(ArticleUserMark::getUserId, userId)
|
|
|
+ .eq(ArticleUserMark::getArticleId, articleId)
|
|
|
+ .last("limit 1"))).ifPresentOrElse(mark -> {
|
|
|
+ detailView.setIsDz(mark.getIsDz());
|
|
|
+ detailView.setIsCol(mark.getIsCol());
|
|
|
+ }, () -> {
|
|
|
+ detailView.setIsDz(false);
|
|
|
+ detailView.setIsCol(false);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return detailView;
|
|
|
+ }
|
|
|
}
|