Skip to content

Commit d1bc754

Browse files
committed
中场休息
1 parent 0f13799 commit d1bc754

6 files changed

Lines changed: 161 additions & 136 deletions

File tree

download/src/main/java/github/nooblong/download/controller/SubscribeController.java

Lines changed: 56 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package github.nooblong.download.controller;
22

33
import cn.hutool.core.util.StrUtil;
4+
import com.baomidou.mybatisplus.core.metadata.IPage;
45
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
6+
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
57
import com.baomidou.mybatisplus.extension.toolkit.Db;
68
import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
79
import com.fasterxml.jackson.databind.JsonNode;
@@ -10,6 +12,7 @@
1012
import github.nooblong.common.util.CommonUtil;
1113
import github.nooblong.common.util.JwtUtil;
1214
import github.nooblong.download.bilibili.BilibiliClient;
15+
import github.nooblong.download.entity.IdName;
1316
import github.nooblong.download.entity.Subscribe;
1417
import github.nooblong.download.entity.UserVoicelist;
1518
import github.nooblong.download.job.UploadJob;
@@ -52,12 +55,44 @@ public SubscribeController(BilibiliClient bilibiliClient,
5255
this.uploadJob = uploadJob;
5356
}
5457

55-
@CacheEvict(value = {"subscribe/list", "subscribe/test"}, allEntries = true)
56-
@PostMapping("/edit")
58+
@GetMapping
59+
public Result<IPage<Subscribe>> list(@RequestParam(name = "username", required = false) String username,
60+
@RequestParam(name = "status", required = false) Integer status,
61+
@RequestParam(name = "voiceListId", required = false) Long voiceListId,
62+
HttpServletResponse response) {
63+
Long selectUserId = null;
64+
if (StrUtil.isNotBlank(username)) {
65+
List<SysUser> selectUser = Db.list(Wrappers.lambdaQuery(SysUser.class).eq(SysUser::getUsername, username));
66+
if (selectUser.isEmpty()) {
67+
return Result.ok("ok", new Page<>(1L, 1000L));
68+
}
69+
selectUserId = selectUser.get(0).getId();
70+
}
71+
IPage<Subscribe> list = Db.page(new Page<>(1, Integer.MAX_VALUE),
72+
Wrappers.lambdaQuery(Subscribe.class)
73+
.eq(selectUserId != null, Subscribe::getUserId, selectUserId)
74+
.eq(voiceListId != null, Subscribe::getVoiceListId, voiceListId)
75+
.eq(status != null, Subscribe::getEnable, status)
76+
.orderByDesc(Subscribe::getUpdateTime));
77+
if (list.getRecords().isEmpty()) {
78+
return Result.ok("ok", list);
79+
}
80+
List<SysUser> users = Db.list(SysUser.class);
81+
Map<Long, SysUser> longSysUserMap = SimpleQuery.list2Map(users, SysUser::getId, i -> i);
82+
list.getRecords().forEach(subscribe -> {
83+
subscribe.setTypeDesc(subscribe.getType().getDesc());
84+
subscribe.setUserName(longSysUserMap.get(subscribe.getUserId()).getUsername());
85+
subscribe.setLog(subscribe.getLog());
86+
});
87+
response.addHeader("Content-Range", String.valueOf(Db.count(Subscribe.class)));
88+
return Result.ok("ok", list);
89+
}
90+
91+
@PutMapping
5792
public Result<Subscribe> edit(@RequestBody Subscribe subscribe) {
5893
SysUser user = JwtUtil.verifierFromContext();
5994
Subscribe byId = Db.getById(subscribe.getId(), Subscribe.class);
60-
if (subscribe.getCrack() > 0) {
95+
if (subscribe.getCrack() != null && subscribe.getCrack() > 0) {
6196
if (user.getIsAdmin() != 1) {
6297
return Result.fail("fail: crack");
6398
}
@@ -67,8 +102,7 @@ public Result<Subscribe> edit(@RequestBody Subscribe subscribe) {
67102
return Result.ok("ok", subscribe);
68103
}
69104

70-
@CacheEvict(value = {"subscribe/list"}, allEntries = true)
71-
@PostMapping("/add")
105+
@PostMapping
72106
public Result<Subscribe> add(@RequestBody Subscribe subscribe) {
73107
SysUser user = JwtUtil.verifierFromContext();
74108
Long voiceListId = subscribe.getVoiceListId();
@@ -78,65 +112,42 @@ public Result<Subscribe> add(@RequestBody Subscribe subscribe) {
78112
.eq(UserVoicelist::getVoicelistId, voiceListId).list();
79113
Assert.isTrue(!list.isEmpty(), "fail: not owner");
80114
subscribe.setUserId(user.getId());
81-
if (subscribe.getCrack() > 0) {
115+
if (subscribe.getCrack() != null && subscribe.getCrack() > 0) {
82116
if (user.getIsAdmin() != 1) {
83117
return Result.fail("fail: crack");
84118
}
85119
}
86-
subscribe.setChannelIds(CommonUtil.toCommaSeparatedString(subscribe.getChannelIdsList()));
120+
List<IdName> channelIdsList = subscribe.getChannelIdsList();
121+
if (channelIdsList != null && !channelIdsList.isEmpty()) {
122+
ArrayList<String> sList = new ArrayList<>();
123+
channelIdsList.forEach(channelId -> sList.add(channelId.getId()));
124+
subscribe.setChannelIds(CommonUtil.toCommaSeparatedString(sList));
125+
}
87126
JsonNode userInfo = bilibiliClient.getUserInfo(subscribe.getUpId(),
88127
bilibiliClient.getAndSetBiliCookie());
89128
subscribe.setUpImage(userInfo.get("data").get("face").asText());
90129
subscribe.setUpName(userInfo.get("data").get("name").asText());
130+
if (channelIdsList != null && !channelIdsList.isEmpty()) {
131+
ArrayList<String> sList = new ArrayList<>();
132+
channelIdsList.forEach(channelId -> sList.add(channelId.getName()));
133+
String commaSeparatedString = CommonUtil.toCommaSeparatedString(sList);
134+
subscribe.setUpName(subscribe.getUpName() + "(" + commaSeparatedString + ")");
135+
}
91136
Db.save(subscribe);
92137
return Result.ok("ok", subscribe);
93138
}
94139

95-
@CacheEvict(value = {"subscribe/list"}, allEntries = true)
96-
@GetMapping("/delete")
97-
public Result<Subscribe> delete(@RequestParam(name = "id") Long id) {
140+
@DeleteMapping("{id}")
141+
public Result<Subscribe> delete(@PathVariable(name = "id") Long id) {
98142
SysUser user = JwtUtil.verifierFromContext();
99143
Subscribe byId = Db.getById(id, Subscribe.class);
100144
Assert.isTrue(byId.getUserId().equals(user.getId()), "fail: not owner");
101145
Db.removeById(byId);
102146
return Result.ok("ok", byId);
103147
}
104148

105-
@Cacheable(value = "subscribe/list", key = "#username + ':' + #status + ':' + #voiceListId")
106-
@GetMapping("/list")
107-
public Result<List<Subscribe>> subscribeList(@RequestParam(name = "username", required = false) String username,
108-
@RequestParam(name = "status", required = false) Integer status,
109-
@RequestParam(name = "voiceListId", required = false) Long voiceListId,
110-
HttpServletResponse response) {
111-
Long selectUserId = null;
112-
if (StrUtil.isNotBlank(username)) {
113-
List<SysUser> selectUser = Db.list(Wrappers.lambdaQuery(SysUser.class).eq(SysUser::getUsername, username));
114-
if (selectUser.isEmpty()) {
115-
return Result.ok("ok", new ArrayList<>());
116-
}
117-
selectUserId = selectUser.get(0).getId();
118-
}
119-
List<Subscribe> list = Db.list(
120-
Wrappers.lambdaQuery(Subscribe.class)
121-
.eq(selectUserId != null, Subscribe::getUserId, selectUserId)
122-
.eq(voiceListId != null, Subscribe::getVoiceListId, voiceListId)
123-
.eq(status != null, Subscribe::getEnable, status));
124-
if (list.isEmpty()) {
125-
return Result.ok("ok", list);
126-
}
127-
List<SysUser> users = Db.list(SysUser.class);
128-
Map<Long, SysUser> longSysUserMap = SimpleQuery.list2Map(users, SysUser::getId, i -> i);
129-
list.forEach(subscribe -> {
130-
subscribe.setTypeDesc(subscribe.getType().getDesc());
131-
subscribe.setUserName(longSysUserMap.get(subscribe.getUserId()).getUsername());
132-
subscribe.setLog(subscribe.getLog());
133-
});
134-
response.addHeader("Content-Range", String.valueOf(Db.count(Subscribe.class)));
135-
return Result.ok("ok", list);
136-
}
137-
138-
@GetMapping("/detail")
139-
public Result<Subscribe> subscribeList(@RequestParam(name = "id") Long id) {
149+
@GetMapping("/{id}")
150+
public Result<Subscribe> subscribeList(@PathVariable(name = "id") Long id) {
140151
Subscribe byId = Db.getById(id, Subscribe.class);
141152
return Result.ok("ok", byId);
142153
}

download/src/main/java/github/nooblong/download/controller/UploadDetailController.java

Lines changed: 81 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import github.nooblong.download.api.AddQueueRequest;
1515
import github.nooblong.download.bilibili.BilibiliClient;
1616
import github.nooblong.download.bilibili.SimpleVideoInfo;
17+
import github.nooblong.download.entity.CidName;
1718
import github.nooblong.download.entity.Subscribe;
1819
import github.nooblong.download.entity.UploadDetail;
1920
import github.nooblong.download.entity.UserVoicelist;
@@ -34,7 +35,7 @@
3435
import java.util.stream.Collectors;
3536

3637
@RestController
37-
@RequestMapping("/uploadDetail")
38+
@RequestMapping("/upload")
3839
public class UploadDetailController {
3940

4041
final UploadDetailService uploadDetailService;
@@ -59,51 +60,7 @@ public UploadDetailController(UploadDetailService uploadDetailService,
5960
this.redisTemplate = redisTemplate;
6061
}
6162

62-
@Cacheable(value = "uploadDetail/listVoicelist")
63-
@GetMapping("/listVoicelist")
64-
public Result<List<UserVoicelist>> listVoicelist(@RequestParam(name = "username", required = false) String username) {
65-
List<SysUser> userList = Db.list(Wrappers.lambdaQuery(SysUser.class)
66-
.eq(username != null, SysUser::getUsername, username));
67-
if (userList.isEmpty()) {
68-
return Result.ok("ok", new ArrayList<>());
69-
}
70-
List<UserVoicelist> list = Db.list(Wrappers.lambdaQuery(UserVoicelist.class)
71-
.in(UserVoicelist::getUserId, userList.stream().map(SysUser::getId).collect(Collectors.toList())));
72-
for (UserVoicelist userVoicelist : list) {
73-
String voiceNumKey = userVoicelist.getVoicelistId() + ":voiceNum";
74-
String subscribeNumKey = userVoicelist.getVoicelistId() + ":subscribeNum";
75-
if (Boolean.TRUE.equals(redisTemplate.hasKey(voiceNumKey))) {
76-
String s = redisTemplate.opsForValue().get(voiceNumKey);
77-
userVoicelist.setUploadCount(s == null ? 0 : Integer.parseInt(s));
78-
} else {
79-
long count = Db.count(Wrappers.lambdaQuery(UploadDetail.class)
80-
.eq(UploadDetail::getVoiceListId, userVoicelist.getVoicelistId()));
81-
userVoicelist.setUploadCount((int) count);
82-
redisTemplate.opsForValue().set(voiceNumKey, String.valueOf(count), 1, TimeUnit.MINUTES);
83-
}
84-
if (Boolean.TRUE.equals(redisTemplate.hasKey(subscribeNumKey))) {
85-
String s = redisTemplate.opsForValue().get(subscribeNumKey);
86-
userVoicelist.setSubscribeNum(s == null ? 0 : Integer.parseInt(s));
87-
} else {
88-
long count = Db.count(Wrappers.lambdaQuery(Subscribe.class)
89-
.eq(Subscribe::getVoiceListId, userVoicelist.getVoicelistId()));
90-
userVoicelist.setSubscribeNum((int) count);
91-
redisTemplate.opsForValue().set(subscribeNumKey, String.valueOf(count), 1, TimeUnit.MINUTES);
92-
}
93-
}
94-
return Result.ok("ok", list);
95-
}
96-
97-
@CacheEvict(value = "uploadDetail/listVoicelist", allEntries = true)
98-
@GetMapping("/refreshVoiceList")
99-
public Result<String> refreshVoiceList() {
100-
SysUser sysUser = JwtUtil.verifierFromContext();
101-
userVoicelistService.syncUserVoicelist(sysUser.getId());
102-
return Result.ok("ok");
103-
}
104-
105-
@Cacheable(value = "uploadDetail/list")
106-
@GetMapping("/list")
63+
@GetMapping
10764
public Result<IPage<UploadDetail>> list(@RequestParam(name = "pageNo") int pageNo,
10865
@RequestParam(name = "pageSize") int pageSize,
10966
@RequestParam(name = "column", required = false) String column,
@@ -169,13 +126,49 @@ public Result<IPage<UploadDetail>> list(@RequestParam(name = "pageNo") int pageN
169126
return Result.ok("查询成功", page);
170127
}
171128

172-
@GetMapping("/getById")
173-
public Result<UploadDetail> get(@RequestParam(name = "id") Long id) {
174-
return Result.ok("ok", Db.getById(id, UploadDetail.class));
129+
@PostMapping
130+
public Result<String> addQueue(@RequestBody UploadDetail req) {
131+
Long userId = JwtUtil.verifierFromContext().getId();
132+
List<SysUser> userList = SimpleQuery.list(Wrappers.lambdaQuery(SysUser.class)
133+
.eq(SysUser::getId, userId), i -> i);
134+
boolean isAdmin = !userList.isEmpty() && userList.get(0).getIsAdmin() == 1;
135+
List<UserVoicelist> userVoicelistList = userVoicelistService.lambdaQuery()
136+
.eq(UserVoicelist::getUserId, userId)
137+
.list();
138+
Map<Long, UserVoicelist> userVoicelistMap =
139+
SimpleQuery.list2Map(userVoicelistList, UserVoicelist::getVoicelistId, i -> i);
140+
if (req.getCidNames() != null && !req.getCidNames().isEmpty()) {
141+
for (CidName cidName : req.getCidNames()) {
142+
Assert.isTrue(StrUtil.isNotBlank(req.getBvid()), "bvid为空");
143+
Assert.isTrue(req.getVoiceListId() != null && req.getVoiceListId() != 0, "voiceListId为空");
144+
Assert.notNull(userVoicelistMap.get(req.getVoiceListId()), "不是你的voiceListId");
145+
SimpleVideoInfo simpleVideoInfo = bilibiliClient.getSimpleVideoInfoByBvidOrUrl(req.getBvid());
146+
UploadDetail uploadDetail = new UploadDetail();
147+
uploadDetail.setBvid(simpleVideoInfo.getBvid());
148+
uploadDetail.setCid(cidName.getCid());
149+
uploadDetail.setVoiceListId(req.getVoiceListId());
150+
uploadDetail.setUseVideoCover(req.getUseVideoCover());
151+
uploadDetail.setBeginSec(req.getBeginSec());
152+
uploadDetail.setEndSec(req.getEndSec());
153+
uploadDetail.setOffset(req.getOffset());
154+
uploadDetail.setUploadName(cidName.getName());
155+
uploadDetail.setPrivacy(req.getPrivacy());
156+
uploadDetail.setPriority(isAdmin ? 999L : 10L);
157+
uploadDetail.setBitrate(req.getBitrate());
158+
uploadDetail.setUserId(userId);
159+
uploadDetail.setCrack(req.getCrack() == null ? 0L : 1L);
160+
if (req.getCrack() != null && req.getCrack() == 1) {
161+
Assert.isTrue(isAdmin, "unsupported");
162+
}
163+
Db.save(uploadDetail);
164+
}
165+
} else {
166+
throw new RuntimeException("没有分p信息");
167+
}
168+
return Result.ok("添加队列成功");
175169
}
176170

177-
@CacheEvict(value = "uploadDetail/list", allEntries = true)
178-
@PostMapping("/edit")
171+
@PutMapping
179172
public Result<UploadDetail> update(@RequestBody UploadDetail uploadDetail) {
180173
Long userId = JwtUtil.verifierFromContext().getId();
181174
UploadDetail byId = uploadDetailService.getById(uploadDetail.getId());
@@ -184,6 +177,43 @@ public Result<UploadDetail> update(@RequestBody UploadDetail uploadDetail) {
184177
return Result.ok("ok", byId);
185178
}
186179

180+
@GetMapping("/listVoicelist")
181+
public Result<IPage<UserVoicelist>> listVoicelist(@RequestParam(name = "username", required = false) String username,
182+
@RequestParam(name = "pageNo", defaultValue = "1", required = false) Integer pageNo,
183+
@RequestParam(name = "pageSize", defaultValue = "10", required = false) Integer pageSize) {
184+
List<SysUser> userList = Db.list(Wrappers.lambdaQuery(SysUser.class)
185+
.eq(username != null, SysUser::getUsername, username));
186+
if (userList.isEmpty()) {
187+
return Result.ok("ok", new Page<>());
188+
}
189+
IPage<UserVoicelist> page = Db.page(new Page<>(pageNo, pageSize),
190+
Wrappers.lambdaQuery(UserVoicelist.class)
191+
.in(UserVoicelist::getUserId, userList.stream().map(SysUser::getId).collect(Collectors.toList()))
192+
.orderByDesc(UserVoicelist::getVoicelistId));
193+
for (UserVoicelist userVoicelist : page.getRecords()) {
194+
long count = Db.count(Wrappers.lambdaQuery(UploadDetail.class)
195+
.eq(UploadDetail::getVoiceListId, userVoicelist.getVoicelistId()));
196+
userVoicelist.setUploadCount((int) count);
197+
long count2 = Db.count(Wrappers.lambdaQuery(Subscribe.class)
198+
.eq(Subscribe::getVoiceListId, userVoicelist.getVoicelistId()));
199+
userVoicelist.setSubscribeNum((int) count2);
200+
}
201+
return Result.ok("ok", page);
202+
}
203+
204+
@CacheEvict(value = "uploadDetail/listVoicelist", allEntries = true)
205+
@GetMapping("/refreshVoiceList")
206+
public Result<String> refreshVoiceList() {
207+
SysUser sysUser = JwtUtil.verifierFromContext();
208+
userVoicelistService.syncUserVoicelist(sysUser.getId());
209+
return Result.ok("ok");
210+
}
211+
212+
@GetMapping("/getById")
213+
public Result<UploadDetail> get(@RequestParam(name = "id") Long id) {
214+
return Result.ok("ok", Db.getById(id, UploadDetail.class));
215+
}
216+
187217
@CacheEvict(value = "uploadDetail/list", allEntries = true)
188218
@GetMapping("/delete")
189219
public Result<Boolean> delete(@RequestParam(name = "id") Long id) {
@@ -194,45 +224,6 @@ public Result<Boolean> delete(@RequestParam(name = "id") Long id) {
194224
return Result.ok("ok");
195225
}
196226

197-
@CacheEvict(value = "uploadDetail/list", allEntries = true)
198-
@PostMapping("/add")
199-
public Result<String> addQueue(@RequestBody AddQueueRequest reqs) {
200-
Long userId = JwtUtil.verifierFromContext().getId();
201-
List<SysUser> userList = SimpleQuery.list(Wrappers.lambdaQuery(SysUser.class)
202-
.eq(SysUser::getId, userId), i -> i);
203-
boolean isAdmin = !userList.isEmpty() && userList.get(0).getIsAdmin() == 1;
204-
List<UserVoicelist> userVoicelistList = userVoicelistService.lambdaQuery()
205-
.eq(UserVoicelist::getUserId, userId)
206-
.list();
207-
Map<Long, UserVoicelist> userVoicelistMap =
208-
SimpleQuery.list2Map(userVoicelistList, UserVoicelist::getVoicelistId, i -> i);
209-
for (UploadDetail req : reqs.getUploadDetails()) {
210-
Assert.isTrue(StrUtil.isNotBlank(req.getBvid()), "bvid empty");
211-
Assert.isTrue(req.getVoiceListId() != null, "voiceListId empty");
212-
Assert.notNull(userVoicelistMap.get(req.getVoiceListId()), "not owner");
213-
SimpleVideoInfo simpleVideoInfo = bilibiliClient.getSimpleVideoInfoByBvidOrUrl(req.getBvid());
214-
UploadDetail uploadDetail = new UploadDetail();
215-
uploadDetail.setBvid(simpleVideoInfo.getBvid());
216-
uploadDetail.setCid(req.getCid());
217-
uploadDetail.setVoiceListId(req.getVoiceListId());
218-
uploadDetail.setUseVideoCover(req.getUseVideoCover());
219-
uploadDetail.setBeginSec(req.getBeginSec());
220-
uploadDetail.setEndSec(req.getEndSec());
221-
uploadDetail.setOffset(req.getOffset());
222-
uploadDetail.setUploadName(req.getUploadName());
223-
uploadDetail.setPrivacy(req.getPrivacy());
224-
uploadDetail.setPriority(isAdmin ? 999L : 10L);
225-
uploadDetail.setBitrate(req.getBitrate());
226-
uploadDetail.setUserId(userId);
227-
uploadDetail.setCrack(req.getCrack());
228-
if (req.getCrack() == 1) {
229-
Assert.isTrue(isAdmin, "crack error");
230-
}
231-
Db.save(uploadDetail);
232-
}
233-
return Result.ok("添加队列成功");
234-
}
235-
236227
@CacheEvict(value = "uploadDetail/list", allEntries = true)
237228
@GetMapping("/restartJob")
238229
public Result<String> restartJob(@RequestParam(name = "id") Long id) {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package github.nooblong.download.entity;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class CidName {
7+
private String cid;
8+
private String name;
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package github.nooblong.download.entity;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class IdName {
7+
private String id;
8+
private String name;
9+
}

0 commit comments

Comments
 (0)