Merge branch 'refs/heads/main' into release-2024-04-25

release-2024-08-08
pikaqiudeshujia 7 months ago
commit ef9e7f152a

@ -400,7 +400,7 @@ public class CommentController extends BaseController {
List<CommentResp> list = (List<CommentResp>) cacheChannel.get(Constants.J2CACHE_REGION_JOURNAL_COMMENT_PAGE_CHILDREN+"_"+parentId,page+"_"+size, key->getChildrenCommentList(parentId,page,size),true).getValue(); List<CommentResp> list = (List<CommentResp>) cacheChannel.get(Constants.J2CACHE_REGION_JOURNAL_COMMENT_PAGE_CHILDREN+"_"+parentId,page+"_"+size, key->getChildrenCommentList(parentId,page,size),true).getValue();
// List<CommentResp> list = getChildrenCommentList(parentId,page,size); // List<CommentResp> list = getChildrenCommentList(parentId,page,size);
//验证是否登录并且拿到ID //验证是否登录并且拿到ID
Long count = (Long) cacheChannel.get(Constants.J2CACHE_REGION_JOURNAL_COMMENT_PAGE_CHILDREN_COUNT,parentId, key->getChildrenCommentListCount(parentId,page,size),true).getValue(); Integer count = (Integer) cacheChannel.get(Constants.J2CACHE_REGION_JOURNAL_COMMENT_PAGE_CHILDREN_COUNT,parentId, key->getChildrenCommentListCount(parentId,page,size),true).getValue();
UserLoginDto userLoginDto = getUserLoginDto(authorization); UserLoginDto userLoginDto = getUserLoginDto(authorization);
if (null == userLoginDto) { if (null == userLoginDto) {
@ -409,7 +409,7 @@ public class CommentController extends BaseController {
String userId = userLoginDto.getUserId(); String userId = userLoginDto.getUserId();
Set<String> publicationLikeSet = publicationLikeDao.findAllByUserId(userId).parallelStream().map(p->p.getLikedItemId()).collect(Collectors.toSet()); Set<String> publicationLikeSet = publicationLikeDao.findAllByUserId(userId).parallelStream().map(p->p.getLikedItemId()).collect(Collectors.toSet());
list = list.parallelStream().map(c->updateHaveThumbup(c,publicationLikeSet)).collect(Collectors.toList()); list = list.parallelStream().map(c->updateHaveThumbup(c,publicationLikeSet)).collect(Collectors.toList());
return Result.success(new PageResult<CommentResp>(count,list)); return Result.success(new PageResult<CommentResp>(Long.valueOf(count),list));
} }

@ -7,10 +7,11 @@ spring:
uri: http://116.62.145.60:12000 uri: http://116.62.145.60:12000
# uri: http://127.0.0.1:12000 # uri: http://127.0.0.1:12000
redis: lettuce:
# 地址, 多个地址使用‘,’逗号分割 # 地址, 多个地址使用‘,’逗号分割
hosts: ${spring.redis.host}:${spring.redis.port} hosts: ${spring.redis.host}:${spring.redis.port}
password: ${spring.redis.password} password: ${spring.redis.password}
timeout: 180000
j2cache: j2cache:
openSpringCache: true openSpringCache: true
@ -26,7 +27,7 @@ j2cache:
L2: L2:
#使用springRedis替换二级缓存 #使用springRedis替换二级缓存
provider_class: net.oschina.j2cache.cache.support.redis.SpringRedisProvider provider_class: net.oschina.j2cache.cache.support.redis.SpringRedisProvider
config_section: redis config_section: lettuce
#使用springRedis进行广播通知缓失效 #使用springRedis进行广播通知缓失效
broadcast: net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy broadcast: net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy

@ -13,6 +13,8 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;
import util.IdWorker; import util.IdWorker;
import util.JwtUtil; import util.JwtUtil;
@ -27,6 +29,7 @@ import java.net.UnknownHostException;
@EnableFeignClients @EnableFeignClients
@EnableJpaAuditing @EnableJpaAuditing
@EnableCaching @EnableCaching
@EnableAsync
public class MusicApplication { public class MusicApplication {
static Logger logger= LoggerFactory.getLogger(MusicApplication.class); static Logger logger= LoggerFactory.getLogger(MusicApplication.class);
public static void main(String[] args) throws UnknownHostException { public static void main(String[] args) throws UnknownHostException {

@ -9,6 +9,7 @@ import com.luoo.music.dto.request.cms.JournalPublishReq;
import com.luoo.music.dto.request.cms.JournalQueryModel; import com.luoo.music.dto.request.cms.JournalQueryModel;
import com.luoo.music.dto.response.cms.JournalListRespDto; import com.luoo.music.dto.response.cms.JournalListRespDto;
import com.luoo.music.dto.response.cms.JournalRespDto; import com.luoo.music.dto.response.cms.JournalRespDto;
import com.luoo.music.listener.CleanJournalCache;
import com.luoo.music.service.CMSJournalService; import com.luoo.music.service.CMSJournalService;
import com.luoo.music.service.S3Service; import com.luoo.music.service.S3Service;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -35,9 +36,8 @@ public class CMSJournalController {
private CMSJournalService journalService; private CMSJournalService journalService;
@Autowired @Autowired
private S3Service s3Service; private S3Service s3Service;
@Autowired @Autowired
private CacheChannel cacheChannel; private CleanJournalCache cleanJournalCache;
@ApiOperation(value = "查询期刊列表", notes = "查询期刊列表") @ApiOperation(value = "查询期刊列表", notes = "查询期刊列表")
@RequestMapping(value="/search/{page}/{size}", method= RequestMethod.POST) @RequestMapping(value="/search/{page}/{size}", method= RequestMethod.POST)
@ -50,20 +50,10 @@ public class CMSJournalController {
@ApiOperation(value = "新增期刊", notes = "新增期刊") @ApiOperation(value = "新增期刊", notes = "新增期刊")
@RequestMapping(value = "/add", method = RequestMethod.POST) @RequestMapping(value = "/add", method = RequestMethod.POST)
public Result add(@ApiParam(value = "期刊信息", required = true) @Valid @RequestBody JournalAddModel addModel){ public Result add(@ApiParam(value = "期刊信息", required = true) @Valid @RequestBody JournalAddModel addModel){
cleanCache(); cleanJournalCache.cleanCache();
return journalService.add(addModel); return journalService.add(addModel);
} }
private void cleanCache() {
try {
cacheChannel.evict("default", "journal_filter");
cacheChannel.clear(Constants.J2CACHE_REGION_JOURNAL_QUERY_PAGE);
cacheChannel.clear(Constants.J2CACHE_REGION_JOURNAL_QUERY_COUNT);
}catch(Exception e) {
e.printStackTrace();
}
}
@ApiOperation(value = "查询期刊详情", notes = "查询期刊详情") @ApiOperation(value = "查询期刊详情", notes = "查询期刊详情")
@RequestMapping(value="/{id}",method= RequestMethod.GET) @RequestMapping(value="/{id}",method= RequestMethod.GET)
public Result<JournalRespDto> findOne(@ApiParam(value = "期刊ID", required = true) @PathVariable String id){ public Result<JournalRespDto> findOne(@ApiParam(value = "期刊ID", required = true) @PathVariable String id){
@ -74,7 +64,7 @@ public class CMSJournalController {
@RequestMapping(value = "/{id}", method = RequestMethod.PUT) @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public Result update(@ApiParam(value = "期刊ID", required = true) @PathVariable String id, public Result update(@ApiParam(value = "期刊ID", required = true) @PathVariable String id,
@ApiParam(value = "期刊信息", required = true) @RequestBody JournalAddModel updateModel){ @ApiParam(value = "期刊信息", required = true) @RequestBody JournalAddModel updateModel){
cleanCache(id); cleanJournalCache.cleanCache(id);
return journalService.update(id, updateModel); return journalService.update(id, updateModel);
} }
@ -82,36 +72,22 @@ public class CMSJournalController {
@RequestMapping(value="/publish/{id}",method= RequestMethod.PUT) @RequestMapping(value="/publish/{id}",method= RequestMethod.PUT)
public Result publish(@ApiParam(value = "期刊ID", required = true) @PathVariable String id, public Result publish(@ApiParam(value = "期刊ID", required = true) @PathVariable String id,
@ApiParam(value = "期刊发布请求对象", required = true) @RequestBody JournalPublishReq queryModel){ @ApiParam(value = "期刊发布请求对象", required = true) @RequestBody JournalPublishReq queryModel){
cleanCache(id); cleanJournalCache.cleanCache(id);
return journalService.publish(id, queryModel); return journalService.publish(id, queryModel);
} }
private void cleanCache(String id) {
try {
cacheChannel.evict("default", "journal_filter");
cacheChannel.clear(Constants.J2CACHE_REGION_JOURNAL_QUERY_PAGE);
cacheChannel.clear(Constants.J2CACHE_REGION_JOURNAL_QUERY_COUNT);
cacheChannel.evict(constants.Constants.J2CACHE_REGION_JOURNAL_ID, id);
String journalNo=journalService.findJournalNoById(id);
cacheChannel.evict(constants.Constants.J2CACHE_REGION_JOURNAL_SONG_LIST, journalNo);
cacheChannel.evict(constants.Constants.J2CACHE_REGION_JOURNAL_NO,journalNo);
}catch(Exception e) {
e.printStackTrace();
}
}
@ApiOperation(value = "更新期刊启停状态", notes = "更新期刊启停状态") @ApiOperation(value = "更新期刊启停状态", notes = "更新期刊启停状态")
@RequestMapping(value="/update/state/{id}",method= RequestMethod.PUT) @RequestMapping(value="/update/state/{id}",method= RequestMethod.PUT)
public Result updateColumnState(@ApiParam(value = "期刊ID", required = true) @PathVariable String id, public Result updateColumnState(@ApiParam(value = "期刊ID", required = true) @PathVariable String id,
@ApiParam(value = "期刊启停状态0:停用1:启用", required = true) @RequestBody String state){ @ApiParam(value = "期刊启停状态0:停用1:启用", required = true) @RequestBody String state){
cleanCache(id); cleanJournalCache.cleanCache(id);
return journalService.updateJournalState(id, state); return journalService.updateJournalState(id, state);
} }
@ApiOperation(value = "删除单条期刊", notes = "物理删除") @ApiOperation(value = "删除单条期刊", notes = "物理删除")
@RequestMapping(value="/{id}", method= RequestMethod.DELETE) @RequestMapping(value="/{id}", method= RequestMethod.DELETE)
public Result delete(@ApiParam(value = "期刊ID", required = true) @PathVariable String id){ public Result delete(@ApiParam(value = "期刊ID", required = true) @PathVariable String id){
cleanCache(id); cleanJournalCache.cleanCache(id);
return journalService.deleteById(id); return journalService.deleteById(id);
} }

@ -70,6 +70,9 @@ public class JournalController {
UserLoginDto user = jwtUtil.getUserLoginDto(authorization); UserLoginDto user = jwtUtil.getUserLoginDto(authorization);
updateQuery(deviceType,user,queryReq); updateQuery(deviceType,user,queryReq);
Long count = journalService.countJournal(queryReq); Long count = journalService.countJournal(queryReq);
if(0==count) {
return Result.success(new PageResult<JournalRespDTO>(count, Collections.emptyList()));
}
List<JournalRespDTO> pageList=journalService.queryJournalByPage(queryReq); List<JournalRespDTO> pageList=journalService.queryJournalByPage(queryReq);
Set<String> journalCollectSet = getJournalCollectSet(user); Set<String> journalCollectSet = getJournalCollectSet(user);
updateCollectStatus(pageList,journalCollectSet); updateCollectStatus(pageList,journalCollectSet);
@ -115,6 +118,9 @@ public class JournalController {
return Result.success(new PageResult<JournalRespDTO>(0L, Collections.emptyList())); return Result.success(new PageResult<JournalRespDTO>(0L, Collections.emptyList()));
} }
Long count = Long.valueOf(getJournalCollectSet(queryReq.getUserId()).size()); Long count = Long.valueOf(getJournalCollectSet(queryReq.getUserId()).size());
if(0==count) {
return Result.success(new PageResult<JournalRespDTO>(count, Collections.emptyList()));
}
List<Journal> pageList = journalService.orderByField(objectIds); List<Journal> pageList = journalService.orderByField(objectIds);
UserLoginDto user = jwtUtil.getUserLoginDto(authorization); UserLoginDto user = jwtUtil.getUserLoginDto(authorization);
Set<String> journalCollectSet = getMyCollectSet(user.getUserId(),queryReq.getUserId(),objectIds); Set<String> journalCollectSet = getMyCollectSet(user.getUserId(),queryReq.getUserId(),objectIds);

@ -109,6 +109,9 @@ public class SongController {
return Result.success(new PageResult<SongRespDTO>(0L, Collections.emptyList())); return Result.success(new PageResult<SongRespDTO>(0L, Collections.emptyList()));
} }
Long count = (long) getSongCollectSet(queryUserId).size(); Long count = (long) getSongCollectSet(queryUserId).size();
if(0==count) {
return Result.success(new PageResult<SongRespDTO>(count, Collections.emptyList()));
}
List<JournalSong> songs = journalSongService.orderByField(objectIds); List<JournalSong> songs = journalSongService.orderByField(objectIds);
Set<String> songCollectSet = getMyCollectSet(loginUserId,queryUserId,objectIds,isJouranlSource); Set<String> songCollectSet = getMyCollectSet(loginUserId,queryUserId,objectIds,isJouranlSource);
List<SongRespDTO> results = songs.stream().map(s -> SongMapper.getSongRespDTO(s, songCollectSet)) List<SongRespDTO> results = songs.stream().map(s -> SongMapper.getSongRespDTO(s, songCollectSet))

@ -3,6 +3,7 @@ package com.luoo.music.listener;
import constants.Constants; import constants.Constants;
import net.oschina.j2cache.CacheChannel; import net.oschina.j2cache.CacheChannel;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.luoo.music.dao.JournalDao; import com.luoo.music.dao.JournalDao;
@ -21,6 +22,36 @@ public class CleanJournalCache {
@Autowired @Autowired
private JournalDao journalDao; private JournalDao journalDao;
@Async
public void cleanCache() {
try {
cacheChannel.evict("default", "journal_filter");
cacheChannel.clear(Constants.J2CACHE_REGION_JOURNAL_QUERY_PAGE);
cacheChannel.clear(Constants.J2CACHE_REGION_JOURNAL_QUERY_COUNT);
}catch(Exception e) {
e.printStackTrace();
}
}
@Async
public void cleanCache(String id) {
try {
cacheChannel.evict("default", "journal_filter");
cacheChannel.clear(Constants.J2CACHE_REGION_JOURNAL_QUERY_PAGE);
cacheChannel.clear(Constants.J2CACHE_REGION_JOURNAL_QUERY_COUNT);
cacheChannel.evict(constants.Constants.J2CACHE_REGION_JOURNAL_ID, id);
Optional<Journal> optional = journalDao.findById(id);
if (!optional.isPresent()) {
return;
}
String journalNo=optional.get().getJournalNo();
cacheChannel.evict(constants.Constants.J2CACHE_REGION_JOURNAL_SONG_LIST, journalNo);
cacheChannel.evict(constants.Constants.J2CACHE_REGION_JOURNAL_NO,journalNo);
}catch(Exception e) {
e.printStackTrace();
}
}
public void clean(String journalId) { public void clean(String journalId) {
Optional<Journal> optional = journalDao.findById(journalId); Optional<Journal> optional = journalDao.findById(journalId);
if (!optional.isPresent()) { if (!optional.isPresent()) {

@ -23,6 +23,8 @@ import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import util.StringTools; import util.StringTools;
import com.luoo.music.dao.CommentDao; import com.luoo.music.dao.CommentDao;
@ -297,7 +299,11 @@ public class JournalService {
if(keyword.length()==1) { if(keyword.length()==1) {
return searchByLike(keyword,pageRequest); return searchByLike(keyword,pageRequest);
} }
return journalDao.fuzzySearch("+\""+keyword+"\"", pageRequest.getPageNumber()*pageRequest.getPageSize(), pageRequest.getPageSize()); List<Journal> fullTextFuzzySearchResults = journalDao.fuzzySearch("+\""+keyword+"\"", pageRequest.getPageNumber()*pageRequest.getPageSize(), pageRequest.getPageSize());
if(CollectionUtils.isEmpty(fullTextFuzzySearchResults)) {
return searchByLike(keyword, pageRequest);
}
return fullTextFuzzySearchResults;
} }
public static boolean isNumeric(String str){ public static boolean isNumeric(String str){
@ -351,9 +357,9 @@ public class JournalService {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<JournalRespDTO> queryJournalByPage(JournalQueryReq queryReq) { public List<JournalRespDTO> queryJournalByPage(JournalQueryReq queryReq) {
if(StringTools.isEmpty(queryReq.getCategoryId())&&StringTools.isEmpty(queryReq.getJournalNoRange())) { if(StringTools.isEmpty(queryReq.getCategoryId())&&StringTools.isEmpty(queryReq.getJournalNoRange())) {
return (List<JournalRespDTO>) this.cacheChannel.get(Constants.J2CACHE_REGION_JOURNAL_QUERY_PAGE, queryReq.toString(), key -> getJournalRespDTOWithComment(queryReq) , true).getValue() ; return (List<JournalRespDTO>) this.cacheChannel.get(Constants.J2CACHE_REGION_JOURNAL_QUERY_PAGE, queryReq.toString(), key -> getJournalRespDTOWithComment(queryReq) , false).getValue() ;
} }
List<JournalRespDTO> list= (List<JournalRespDTO>) this.cacheChannel.get(Constants.J2CACHE_REGION_JOURNAL_QUERY_PAGE, queryReq.toString(), key -> getJournalRespDTO(queryReq) , true).getValue() ; List<JournalRespDTO> list= (List<JournalRespDTO>) this.cacheChannel.get(Constants.J2CACHE_REGION_JOURNAL_QUERY_PAGE, queryReq.toString(), key -> getJournalRespDTO(queryReq) , false).getValue() ;
list.parallelStream().forEach(j->{ list.parallelStream().forEach(j->{
updateComment(j); updateComment(j);
}); });

@ -12,6 +12,8 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
@ -144,7 +146,11 @@ public class JournalSongService {
if(keyword.length()==1) { if(keyword.length()==1) {
return searchByLike(keyword,pageRequest); return searchByLike(keyword,pageRequest);
} }
return journalSongDao.fuzzySearch("+\""+keyword+"\"", pageRequest.getPageNumber()*pageRequest.getPageSize(), pageRequest.getPageSize()); List<JournalSong> fullTextFuzzySearchResults = journalSongDao.fuzzySearch("+\""+keyword+"\"", pageRequest.getPageNumber()*pageRequest.getPageSize(), pageRequest.getPageSize());
if(CollectionUtils.isEmpty(fullTextFuzzySearchResults)) {
return searchByLike(keyword, pageRequest);
}
return fullTextFuzzySearchResults;
} }
private List<JournalSong> searchByLike(String keyword, PageRequest pageRequest) { private List<JournalSong> searchByLike(String keyword, PageRequest pageRequest) {

@ -10,10 +10,11 @@ spring:
multipart: multipart:
max-file-size: 20MB max-file-size: 20MB
max-request-size: 200MB max-request-size: 200MB
redis: lettuce:
# 地址, 多个地址使用‘,’逗号分割 # 地址, 多个地址使用‘,’逗号分割
hosts: ${spring.redis.host}:${spring.redis.port} hosts: ${spring.redis.host}:${spring.redis.port}
password: ${spring.redis.password} password: ${spring.redis.password}
timeout: 180000
j2cache: j2cache:
openSpringCache: true openSpringCache: true
# 缓存中不存在时,运行缓存空对象 # 缓存中不存在时,运行缓存空对象
@ -28,7 +29,7 @@ j2cache:
L2: L2:
#使用springRedis替换二级缓存 #使用springRedis替换二级缓存
provider_class: net.oschina.j2cache.cache.support.redis.SpringRedisProvider provider_class: net.oschina.j2cache.cache.support.redis.SpringRedisProvider
config_section: redis config_section: lettuce
#使用springRedis进行广播通知缓失效 #使用springRedis进行广播通知缓失效
broadcast: net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy broadcast: net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy

Loading…
Cancel
Save