package top.wshape1.shiziapi.project.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.multipart.MultipartFile;
import top.wshape1.shiziapi.common.constant.BizCodeEnum;
import top.wshape1.shiziapi.common.constant.RedisConstant;
import top.wshape1.shiziapi.common.domain.CommonUser;
import top.wshape1.shiziapi.common.domain.ProjectSearch;
import top.wshape1.shiziapi.common.domain.to.ProjectUserIdTo;
import top.wshape1.shiziapi.common.domain.vo.PageVo;
import top.wshape1.shiziapi.common.exception.CustomException;
import top.wshape1.shiziapi.common.utils.R;
import top.wshape1.shiziapi.project.config.RabbitMqConfig;
import top.wshape1.shiziapi.project.domain.Member;
import top.wshape1.shiziapi.project.domain.Project;
import top.wshape1.shiziapi.project.domain.ProjectMembers;
import top.wshape1.shiziapi.project.domain.vo.ProjectVo;
import top.wshape1.shiziapi.project.feign.MessageFeignService;
import top.wshape1.shiziapi.project.feign.ThirdPartyFeignService;
import top.wshape1.shiziapi.project.feign.UaaFeignService;
import top.wshape1.shiziapi.project.mapper.ProjectMapper;
import top.wshape1.shiziapi.project.mapper.ProjectMembersMapper;
import top.wshape1.shiziapi.project.service.DocumentService;
import top.wshape1.shiziapi.project.service.LikeService;
import top.wshape1.shiziapi.project.service.ProjectService;
import top.wshape1.shiziapi.project.service.ReadService;
import top.wshape1.shiziapi.project.util.HotProjectUtil;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @author Wshape1
* @description 针对表【t_project】的数据库操作Service实现
* @since 2023-09-12 15:40:51
*/
@Service
@Slf4j
public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project>
implements ProjectService {
@Resource
private ProjectMembersMapper projectMembersMapper;
@Resource
private ThirdPartyFeignService thirdPartyFeignService;
@Resource
private UaaFeignService uaaFeignService;
@Resource
private MessageFeignService messageFeignService;
@Resource
private ThreadPoolExecutor threadPoolExecutor;
@Resource
@Lazy
private DocumentService documentService;
@Resource
private LikeService likeService;
@Resource
private ReadService readService;
@Resource
private RabbitTemplate rabbitTemplate;
@Resource
private RedisTemplate<String, Object> redisTemplate;
@Override
public PageVo projectListPageMy(Long id, Long page, Long limit, String keyword) {
Page<Project> qPage = this.page(PageDTO.of(page, limit),
new LambdaQueryWrapper<Project>()
.eq(Project::getUserId, id)
.like(StringUtils.hasText(keyword), Project::getName, keyword)
.orderByDesc(Project::getCreateTime)
);
return new PageVo(qPage);
}
@Override
public PageVo projectListPageHis(Long id, Long page, Long limit, String keyword) {
List<Long> ids = projectMembersMapper.selectParticipatingProjectIds(id);
Page<Project> qPage = PageDTO.of(page, limit);
if (ids != null && !ids.isEmpty()) {
qPage = this.page(qPage,
new LambdaQueryWrapper<Project>()
.in(Project::getId, ids)
.like(StringUtils.hasText(keyword), Project::getName, keyword)
.orderByDesc(Project::getCreateTime)
);
}
return new PageVo(qPage);
}
@Transactional
@Override
public void createProject(Long userId, ProjectVo projectVo) {
Project project = new Project();
project.setUserId(userId);
project.setName(projectVo.getName());
project.setDescription(projectVo.getDescription());
project.setIsPrivate(projectVo.getIsPrivate());
Date date = new Date();
project.setCreateTime(date);
project.setUpdateTime(date);
int insert = getBaseMapper().insert(project);
ProjectMembers projectMembers = new ProjectMembers();
projectMembers.setId(project.getId());
projectMembers.setUserId(userId);
projectMembers.setMembers("{}");
int insert1 = projectMembersMapper.insert(projectMembers);
if (insert > 0 && insert1 > 0)
// 是公共的,存入elastic
if (projectVo.getIsPrivate() == 0) {
CompletableFuture.runAsync(() -> {
ProjectSearch projectSearch = new ProjectSearch();
projectSearch.setId(project.getId());
projectSearch.setName(project.getName());
projectSearch.setDescription(project.getDescription());
projectSearch.setCoverUrl(project.getCoverUrl());
projectSearch.setCreateTime(project.getCreateTime());
projectSearch.setUpdateTime(project.getUpdateTime());
projectSearch.setLikeCount(0L);
projectSearch.setReadCount(0L);
R<String> userNameById = uaaFeignService.getUserNameById(userId);
if (userNameById.isSuccessful()) {
projectSearch.setUserName(userNameById.getData());
}
// searchFeignService.save(projectSearch);
// 发送rabbit消息给search服务
projectSearch.setOperate(1);
rabbitTemplate.convertAndSend(
RabbitMqConfig.SHIZIAPI_PROJECT_ELASTIC_EXCHANGE,
RabbitMqConfig.SHIZIAPI_PROJECT_ELASTIC_BINDING,
projectSearch
);
}, threadPoolExecutor);
}
}
@Override
public void modifyProject(Long userId, @Validated ProjectVo projectVo, MultipartFile file) {
Project one = this.getById(projectVo.getId());
if (one == null) {
throw new CustomException(R.instance(BizCodeEnum.PROJECT_NOT_EXIST_ERROR));
}
if (!one.getUserId().equals(userId)) {
ProjectMembers projectMembers = projectMembersMapper.selectById(projectVo.getId());
if (projectMembers.getMember(userId) == null) {
throw new CustomException(R.instance(BizCodeEnum.PROJECT_PERMISSION_ERROR));
}
}
LambdaUpdateWrapper<Project> updateWrapper = new LambdaUpdateWrapper<>();
Date updateTime = new Date();
updateWrapper
.eq(Project::getId, projectVo.getId())
.set(Project::getName, projectVo.getName())
.set(Project::getDescription, projectVo.getDescription())
.set(Project::getIsPrivate, projectVo.getIsPrivate())
.set(Project::getUpdateTime, updateTime);
String coverUrl = one.getCoverUrl();
if (file != null && !file.isEmpty()) {
// TODO 上传头像应该异步
String[] split = Objects.requireNonNull(file.getOriginalFilename()).split("\\.");
String suffix = split[sp
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
介绍 以项目的形式管理API文档,可以进行API的编辑、测试、Mock等操作,同时还可以添加富文本、Markdown等格式的文档,可以邀请好友加入项目,可以对项目进行公开,也可以发现其它公开项目。 主要技术栈: SpringBoot+SpringSecurity+MyBatisPlus+MySQL+Redis+RabbitMQ+ElasticSearch+Vue3+ElementPlus 微服务模块: 网关服务、认证授权服务、消息服务、项目服务、搜索服务、Mock服务、三方服务
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot的API管理平台源代码+数据库,以项目的形式管理API文档,可以进行API的编辑、测试、Mock等操作 (369个子文件)
MockTemplateMenu.css 158B
.gitignore 497B
.gitignore 253B
.gitignore 182B
UrlPage.html 1KB
CodePage.html 1KB
index.html 522B
ProjectServiceImpl.java 18KB
UserServiceImpl.java 16KB
ApiServiceImpl.java 14KB
DocumentServiceImpl.java 13KB
ProjectSearchServiceImpl.java 13KB
XxlJobHandler.java 8KB
OAuth2LoginSuccessHandler.java 8KB
ProjectController.java 7KB
MessageUserServiceImpl.java 7KB
JwtTokenFilter.java 7KB
UserController.java 6KB
MarkdownServiceImpl.java 6KB
RtfServiceImpl.java 6KB
LikeServiceImpl.java 5KB
ApiController.java 5KB
MockServiceImpl.java 5KB
JwtAuthorizationTokenFilter.java 5KB
MessageController.java 5KB
MailServiceImpl.java 5KB
RedisOAuth2AuthorizationRequestRepository.java 5KB
SecurityConfig.java 4KB
AvatarServiceImpl.java 4KB
MockController.java 4KB
SecurityConfig.java 4KB
LoginController.java 4KB
FolderServiceImpl.java 4KB
DocumentController.java 3KB
ShiziapiProjectApplicationTests.java 3KB
OAuth2AuthorizationRequestJsonDeserializer.java 3KB
MessageListener.java 3KB
GatewayGlobalFilter.java 3KB
ProjectService.java 3KB
ReadServiceImpl.java 3KB
ApiService.java 3KB
UserService.java 3KB
JwtUtil.java 3KB
MessageBroadcastServiceImpl.java 3KB
MyGlobalExceptionController.java 3KB
MyGlobalExceptionController.java 3KB
ElasticController.java 3KB
LikeController.java 3KB
WsSessionManager.java 3KB
ShiZiApiGatewayApplicationTests.java 3KB
MyGlobalExceptionController.java 2KB
JwtServiceImpl.java 2KB
MyGlobalExceptionController.java 2KB
MyGlobalExceptionController.java 2KB
MyHandshakeInterceptor.java 2KB
OAuth2AuthorizationRequestJsonSerializer.java 2KB
HotProjectUtil.java 2KB
RedisConfig.java 2KB
ProjectSearchService.java 2KB
RedisConfig.java 2KB
RedisConfig.java 2KB
RedisConfig.java 2KB
RedisConfig.java 2KB
MyRedirectStrategy.java 2KB
RtfService.java 2KB
MarkdownService.java 2KB
WebSocketServiceImpl.java 2KB
R.java 2KB
ProjectSearchListener.java 2KB
MarkdownController.java 2KB
RtfController.java 2KB
BizCodeEnum.java 2KB
SslUtil.java 2KB
MessageUserService.java 2KB
SecurityContextRepository.java 2KB
MessageFeignService.java 2KB
User.java 2KB
CoverServiceImpl.java 2KB
MyWebSocketHandler.java 2KB
XxlJobConfig.java 2KB
RabbitMqConfig.java 2KB
RabbitMqConfig.java 2KB
AliCloudConfig.java 2KB
SearchController.java 2KB
MockService.java 1KB
AvatarController.java 1KB
ProjectMembers.java 1KB
CommonUser.java 1KB
RedisConstant.java 1KB
UserLoginVo.java 1KB
MessageUser.java 1KB
UserDetailsServiceImpl.java 1KB
SearchFeignService.java 1KB
FolderService.java 1KB
Project.java 1KB
WebConfig.java 1KB
Mock.java 1KB
DocumentService.java 1KB
ApiContent.java 1KB
MessageBroadcastReadServiceImpl.java 1KB
共 369 条
- 1
- 2
- 3
- 4
资源评论
程序员柳
- 粉丝: 6252
- 资源: 1292
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功