package com.wooread.wooreadnovel.service.impl;
import com.wooread.wooreadbase.dto.BaseServiceOutput;
import com.wooread.wooreadnovel.dto.NovelHeadServiceInput;
import com.wooread.wooreadnovel.model.NovelChapter;
import com.wooread.wooreadnovel.model.NovelHead;
import com.wooread.wooreadnovel.service.NovelHeadService;
import com.wooread.wooreadnovel.service.UserService;
import cui.shibing.commonrepository.CommonRepository;
import cui.shibing.commonrepository.Specifications;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import javax.persistence.criteria.*;
import java.util.Collection;
import java.util.List;
import static com.wooread.wooreadbase.dto.BaseServiceOutput.ofFail;
import static com.wooread.wooreadbase.dto.BaseServiceOutput.ofSuccess;
import static com.wooread.wooreadbase.tools.MessageTools.message;
import static com.wooread.wooreadnovel.message.Msg.NovelHeadMsg.*;
import static cui.shibing.commonrepository.Specifications.equal;
import static cui.shibing.commonrepository.Specifications.like;
@Service
@Transactional
public class NovelHeadServiceImpl implements NovelHeadService {
@Resource(name = "NovelHead")
private CommonRepository<NovelHead, String> novelHeadCommonRepository;
@Resource(name = "NovelChapter")
private CommonRepository<NovelChapter, String> novelChapterCommonRepository;
@Autowired
private UserService userService;
@Override
public BaseServiceOutput<NovelHead> createNovelHead(NovelHeadServiceInput.CreateNovelHeadInput input) {
if (novelHeadCommonRepository.findAll(equal(
"novelName", input.getNovelName())).size() > 0) {
return ofFail(message(DUPLICATE_NOVEL.toString(), input.getNovelName()));
}
return userService.existUser(input.getUserId()).ifSuccess(isExist -> {
if (isExist) {
NovelHead novelHead = new NovelHead();
BeanUtils.copyProperties(input, novelHead);
try {
return ofSuccess(novelHeadCommonRepository.save(novelHead));
} catch (Exception e) {
// 捕捉重复小说名
return ofFail(message(DUPLICATE_NOVEL.toString(), input.getNovelName()), (NovelHead) null);
}
} else {
return ofFail(message(NO_SUCH_CREATOR.toString(), input.getUserId()), (NovelHead) null);
}
}).orElse(ofFail("error"));
}
@Override
public BaseServiceOutput<NovelHead> updateNovelHead(NovelHeadServiceInput.UpdateNovelHeadInput input) {
if (novelHeadCommonRepository.findAll(equal("novelName", input.getNovelName())).size() > 0) {
return ofFail(message(NO_SUCH_NOVEL.toString(), input.getNovelName()));
}
if (!userService.existUser(input.getUserId()).getPayload()) {
return ofFail(message(NO_SUCH_CREATOR.toString(), input.getUserId()));
}
return novelHeadCommonRepository.findById(input.getNovelId()).map(novelHead -> ofSuccess(() -> {
BeanUtils.copyProperties(input, novelHead);
return novelHeadCommonRepository.save(novelHead);
})).orElse(ofFail(message(NO_SUCH_NOVEL.toString(), input.getNovelName())));
}
@Override
public BaseServiceOutput<Boolean> deleteNovelHead(String novelId) {
return novelHeadCommonRepository.findById(novelId).map(novelHead -> {
return ofSuccess(() -> {
novelHeadCommonRepository.delete(novelHead);
novelChapterCommonRepository.deleteInBatch(novelChapterCommonRepository.findAll(equal("novelId", novelId)));
return true;
});
}).orElse(ofFail(message(NO_SUCH_NOVEL.toString(), novelId), false));
}
@Override
public BaseServiceOutput<Page<NovelHead>> listNovelHeads(NovelHeadServiceInput.QueryNovelHeadInput input, Pageable pageable) {
Specification<NovelHead> specification = buildListNovelHeadsSpecification(input);
return ofSuccess(()-> novelHeadCommonRepository.findAll(specification,pageable));
}
private Specification<NovelHead> buildListNovelHeadsSpecification(NovelHeadServiceInput.QueryNovelHeadInput input) {
Specification<NovelHead> specification = (Specification<NovelHead>) (root, criteriaQuery, criteriaBuilder)
-> criteriaQuery.where().getRestriction();
if (!StringUtils.isEmpty(input.getNovelId())) {
specification = equal("novelId", input.getNovelId());
}
if (!StringUtils.isEmpty(input.getNovelName())) {
specification = specification.and(like("novelName", "%" + input.getNovelName() + "%"));
}
if (!StringUtils.isEmpty(input.getClassName())) {
specification = specification.and(equal("className", input.getClassName()));
}
return specification;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于ssm框架的小说阅读网站.zip
共102个文件
java:49个
js:19个
vue:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
1 下载量 189 浏览量
2023-07-08
16:04:07
上传
评论 1
收藏 203KB ZIP 举报
温馨提示
基于ssm写的系统(含数据库文件) 语言:java 框架:ssm 数据库:mysql
资源推荐
资源详情
资源评论
收起资源包目录
基于ssm框架的小说阅读网站.zip (102个子文件)
.babelrc 402B
.editorconfig 147B
.eslintignore 51B
.gitignore 213B
.gitignore 80B
.gitkeep 0B
index.html 270B
NovelHeadServiceImpl.java 5KB
BaseServiceOutput.java 5KB
UserServiceImpl.java 5KB
RoleServiceImpl.java 4KB
NovelChapterServiceImpl.java 3KB
JwtUtils.java 3KB
UserController.java 3KB
JwtTokenGatewayFilterFactory.java 3KB
NovelHeadController.java 2KB
NovelChapterInfoServiceImpl.java 2KB
DefaultNovelClassInitor.java 2KB
NovelClassServiceImpl.java 2KB
LoginServiceImpl.java 2KB
NovelChapterController.java 2KB
GatewayApplication.java 2KB
NovelChapterInfoController.java 2KB
MessageTools.java 2KB
RoleController.java 2KB
UserServiceInput.java 2KB
ControllerAdvice.java 1KB
NovelApplication.java 1KB
Msg.java 1KB
NovelClassController.java 1KB
UserApplication.java 1KB
NovelHeadServiceInput.java 967B
UserService.java 827B
NovelHead.java 820B
UserInfo.java 768B
RoleServiceInput.java 761B
PhoneConstraintValidator.java 754B
NovelChapterServiceInput.java 747B
NovelHeadService.java 744B
Phone.java 710B
NovelChapterInfoService.java 701B
NovelChapterService.java 636B
RoleService.java 607B
Role.java 582B
NovelChapterInfo.java 567B
NovelChapter.java 556B
User.java 553B
UserService.java 524B
NovelChapterInfoServiceInput.java 499B
Msg.java 436B
LoginServiceInput.java 428B
EurekaServer.java 412B
NovelClass.java 400B
NovelClassService.java 359B
LoginService.java 282B
BaseApplication.java 162B
webpack.prod.conf.js 5KB
webpack.dev.conf.js 3KB
utils.js 3KB
webpack.base.conf.js 2KB
index.js 2KB
novel-api.js 2KB
check-versions.js 1KB
build.js 1KB
request-common.js 1KB
index.js 960B
user-api.js 827B
.eslintrc.js 791B
vue-loader.conf.js 553B
token.js 477B
main.js 439B
.postcssrc.js 246B
dev.env.js 156B
test.env.js 149B
prod.env.js 61B
package-lock.json 543KB
package.json 3KB
logo.png 7KB
logo.png 7KB
application.properties 566B
application.properties 565B
default-novel-class.properties 83B
message.properties 0B
message.properties 0B
message.properties 0B
deploy.sh 343B
NovelList.vue 2KB
NewNovelHead.vue 2KB
Register.vue 2KB
TopMenu.vue 2KB
LoginForm.vue 2KB
NovelListItem.vue 817B
Main.vue 679B
NoContent.vue 323B
App.vue 120B
pom.xml 4KB
pom.xml 4KB
pom.xml 3KB
pom.xml 3KB
pom.xml 2KB
共 102 条
- 1
- 2
资源评论
我慢慢地也过来了
- 粉丝: 7439
- 资源: 4013
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功