|
|
@@ -3,6 +3,8 @@ package com.artist.controller;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.artist.domain.dto.MusicianApplicationDTO;
|
|
|
+import com.artist.domain.dto.SingerInfoDTO;
|
|
|
+import com.artist.domain.dto.fetchSingerDto;
|
|
|
import com.artist.domain.po.Artist;
|
|
|
import com.artist.domain.po.ArtistAuditRecord;
|
|
|
import com.artist.domain.po.WyUser;
|
|
|
@@ -11,6 +13,7 @@ import com.artist.service.IArtistService;
|
|
|
import com.base.exception.WyMusicException;
|
|
|
import com.base.utils.Result;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.security.access.prepost.PreAuthorize;
|
|
|
import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
@@ -18,6 +21,8 @@ import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
|
@@ -36,6 +41,8 @@ public class ArtistController {
|
|
|
private IArtistAuditRecordService iArtistAuditRecordService;
|
|
|
@Autowired
|
|
|
private IArtistService artistService;
|
|
|
+ @Autowired
|
|
|
+ private StringRedisTemplate stringRedisTemplate;
|
|
|
@PostMapping("/apply")
|
|
|
@PreAuthorize("hasRole('ROLE_USER')")
|
|
|
public Result apply(@RequestBody MusicianApplicationDTO musicianApplicationDTO) {
|
|
|
@@ -49,6 +56,7 @@ public class ArtistController {
|
|
|
@GetMapping("/status")
|
|
|
@PreAuthorize("hasRole('ROLE_USER')")
|
|
|
public Result applyStatus(@RequestParam(required = false) Integer id) {
|
|
|
+ // 处理用户ID逻辑
|
|
|
if (id == null) {
|
|
|
Object principalObj = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
|
|
if (principalObj instanceof String) {
|
|
|
@@ -57,10 +65,27 @@ public class ArtistController {
|
|
|
id = user.getId();
|
|
|
}
|
|
|
}
|
|
|
- Artist i = iArtistApplyService.applyStatus(id);
|
|
|
- return Result.success(i);
|
|
|
+
|
|
|
+ // 构建Redis key
|
|
|
+ String redisKey = "artist:status:user:" + id;
|
|
|
+
|
|
|
+ // 尝试从Redis获取数据
|
|
|
+ String cachedData = stringRedisTemplate.opsForValue().get(redisKey);
|
|
|
+ if (cachedData != null && !cachedData.isEmpty()) {
|
|
|
+ Artist artist = JSON.parseObject(cachedData, Artist.class);
|
|
|
+ return Result.success(artist);
|
|
|
+ }
|
|
|
+ // Redis中没有数据,从数据库查询
|
|
|
+ Artist artist = iArtistApplyService.applyStatus(id);
|
|
|
+
|
|
|
+ // 将数据存入Redis,设置较长过期时间(例如2小时)
|
|
|
+ String jsonString = JSON.toJSONString(artist);
|
|
|
+ stringRedisTemplate.opsForValue().set(redisKey, jsonString, 2, TimeUnit.HOURS);
|
|
|
+
|
|
|
+ return Result.success(artist);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
@GetMapping("/allApply")
|
|
|
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
|
|
public Result allApply() {
|
|
|
@@ -70,7 +95,12 @@ public class ArtistController {
|
|
|
@GetMapping("/updateArtistStatus")
|
|
|
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
|
|
public Result updateArtistStatus(@RequestParam Integer id, @RequestParam Integer status, @RequestParam(required = false, defaultValue = "") String reason) {
|
|
|
- iArtistApplyService.updateArtistApply(id, status,reason);
|
|
|
+ iArtistApplyService.updateArtistApply(id, status, reason);
|
|
|
+
|
|
|
+ // 清除该用户的艺人状态缓存
|
|
|
+ String redisKey = "artist:status:user:" + id;
|
|
|
+ stringRedisTemplate.delete(redisKey);
|
|
|
+
|
|
|
return Result.success("更新成功");
|
|
|
}
|
|
|
@GetMapping("/application-info")
|
|
|
@@ -78,4 +108,28 @@ public class ArtistController {
|
|
|
MusicianApplicationDTO musicianApplicationInfo = artistService.getMusicianApplicationInfo(userId);
|
|
|
return Result.success(musicianApplicationInfo);
|
|
|
}
|
|
|
+ @PostMapping("querySinger")
|
|
|
+ @PreAuthorize("hasRole('ROLE_USER')")
|
|
|
+ public Result querySinger(@RequestBody fetchSingerDto dto) {
|
|
|
+ List<SingerInfoDTO> list = artistService.lambdaQuery()
|
|
|
+ .select(Artist::getId, Artist::getArtistName, Artist::getAvatar)
|
|
|
+ .eq(Artist::getGender, dto.getGender())
|
|
|
+ .eq(Artist::getRegion, dto.getRegion())
|
|
|
+ .list()
|
|
|
+ .stream()
|
|
|
+ .map(artist -> new SingerInfoDTO(artist.getId(), artist.getArtistName(), artist.getAvatar()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ return Result.success(list);
|
|
|
+ }
|
|
|
+ @GetMapping("querySingerById")
|
|
|
+ @PreAuthorize("hasRole('ROLE_USER')")
|
|
|
+ public Result querySingerById(@RequestParam Integer id) {
|
|
|
+ String s = stringRedisTemplate.opsForValue().get("artist:querySingerById:" + id);
|
|
|
+ if (s != null) {
|
|
|
+ return Result.success(JSON.parseObject(s, Artist.class));
|
|
|
+ }
|
|
|
+ Artist artist = artistService.getById(id);
|
|
|
+ stringRedisTemplate.opsForValue().set("artist:querySingerById:" + id, JSON.toJSONString(artist), 24, TimeUnit.HOURS);
|
|
|
+ return Result.success(artist);
|
|
|
+ }
|
|
|
}
|