Skip to content

Commit e71d65c

Browse files
author
heavyrian2012
committed
添加会议记录和时间限制
(cherry picked from commit 18ab55f)
1 parent 28fdfe2 commit e71d65c

14 files changed

Lines changed: 871 additions & 5 deletions

config/application.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,6 @@ spring.mail.to_lists=admin1@wildfirechat.cn,admin2@wildfirechat.cn,admin3@wildfi
152152

153153
# 头像背景颜色可选列表,逗号分隔,中间不能有空格
154154
avatar.bg.corlors=#D32F2F,#D81B60,#880E4F,#9C27B0,#6A1B9A,#4A148C,#AA00FF,#C51162,#673AB7,#311B92,#651FFF,#5C6BC0,#283593,#1A237E,#304FFE,#1976D2,#0D47A1,#2962FF,#0D47A1,#0277BD,#01579B
155+
156+
# 会议配额配置:默认会议额度(分钟),当用户没有单独配置配额时使用。0表示不限制
157+
conference.default_quota_minutes=0

src/main/java/cn/wildfirechat/app/RestResult.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public enum RestCode {
2323
ERROR_PASSWORD_INCORRECT(19, "密码错误"),
2424
ERROR_FAILURE_TOO_MUCH_TIMES(20, "密码错误次数太多,请等5分钟再试试"),
2525
ERROR_USER_FORBIDDEN(21, "用户被封禁"),
26-
ERROR_SLIDE_VERIFY_NOT_PASS(22, "滑动验证未通过");
26+
ERROR_SLIDE_VERIFY_NOT_PASS(22, "滑动验证未通过"),
27+
ERROR_CONFERENCE_QUOTA_EXCEEDED(23, "会议额度已用完");
2728
public int code;
2829
public String msg;
2930

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package cn.wildfirechat.app.conference;
2+
3+
import cn.wildfirechat.app.jpa.ConferenceEntity;
4+
import cn.wildfirechat.app.jpa.ConferenceEntityRepository;
5+
import cn.wildfirechat.common.ErrorCode;
6+
import cn.wildfirechat.sdk.ConferenceAdmin;
7+
import cn.wildfirechat.sdk.model.IMResult;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.scheduling.annotation.Scheduled;
12+
import org.springframework.stereotype.Service;
13+
import org.springframework.transaction.annotation.Transactional;
14+
15+
import java.util.List;
16+
17+
@Service
18+
public class ConferenceCleanupService {
19+
private static final Logger LOG = LoggerFactory.getLogger(ConferenceCleanupService.class);
20+
21+
@Autowired
22+
private ConferenceEntityRepository conferenceEntityRepository;
23+
24+
@Autowired
25+
private ConferenceServiceImpl conferenceServiceImpl;
26+
27+
/**
28+
* 每5分钟检查一次过期会议,并调用SDK销毁
29+
*/
30+
@Scheduled(fixedRate = 5 * 60 * 1000)
31+
@Transactional
32+
public void cleanupExpiredConferences() {
33+
long currentTime = System.currentTimeMillis() / 1000; // 转换为秒
34+
LOG.info("开始检查过期会议,当前时间: {} 秒", currentTime);
35+
36+
List<ConferenceEntity> expiredConferences = conferenceEntityRepository.findExpiredConferences(currentTime);
37+
LOG.info("发现 {} 个过期会议", expiredConferences.size());
38+
39+
for (ConferenceEntity conference : expiredConferences) {
40+
try {
41+
LOG.info("正在销毁过期会议: {}, endTime: {}", conference.id, conference.endTime);
42+
43+
// 调用SDK销毁会议
44+
IMResult<Void> result = ConferenceAdmin.destroy(conference.id, conference.advance);
45+
if (result != null && result.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
46+
LOG.info("成功销毁会议: {}", conference.id);
47+
} else {
48+
LOG.warn("销毁会议 {} 返回错误: {}", conference.id,
49+
result != null ? result.getErrorCode().getMsg() : "null result");
50+
}
51+
52+
Thread.sleep(100);
53+
54+
// 记录会议结束并更新使用量(使用计划的endTime作为实际结束时间)
55+
conferenceServiceImpl.endConferenceAndUpdateUsage(conference.id, conference.endTime);
56+
57+
// 从数据库删除会议记录
58+
conferenceEntityRepository.delete(conference);
59+
LOG.info("已从数据库删除会议记录: {}", conference.id);
60+
61+
} catch (Exception e) {
62+
LOG.error("销毁会议 {} 时发生异常", conference.id, e);
63+
}
64+
}
65+
66+
LOG.info("过期会议清理完成,共处理 {} 个会议", expiredConferences.size());
67+
}
68+
}

src/main/java/cn/wildfirechat/app/conference/ConferenceController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,10 @@ public Object isFavConference(@PathVariable("conferenceId") String conferenceId)
8686
public Object getFavConferences() throws IOException {
8787
return mService.getFavConferences();
8888
}
89+
90+
@CrossOrigin
91+
@PostMapping(value = "/conference/quota")
92+
public Object getMyConferenceQuota() throws IOException {
93+
return mService.getMyConferenceQuota();
94+
}
8995
}

src/main/java/cn/wildfirechat/app/conference/ConferenceService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,10 @@ public interface ConferenceService {
2222
RestResult unfavConference(String conferenceId);
2323
RestResult getFavConferences();
2424
RestResult isFavConference(String conferenceId);
25+
26+
/**
27+
* 查询当前用户的会议额度
28+
* @return 额度信息(包含总额度、已使用、剩余额度)
29+
*/
30+
RestResult getMyConferenceQuota();
2531
}

0 commit comments

Comments
 (0)