From 88c2b7a07a1e3da63074c8668d356f4e95d0c6b3 Mon Sep 17 00:00:00 2001 From: jack ning Date: Sun, 8 Jun 2025 22:06:57 +0800 Subject: [PATCH] update plugins/freeswitch: add 3 mod 1 del 3 files --- .../callcenter/CallEventListener.java | 16 +-- .../freeswitch/callcenter/CallService.java | 17 ++- .../cdr/FreeSwitchCdrEntityListener.java | 22 ++++ .../cdr/FreeSwitchCdrEventListener.java | 52 ++++++++ .../cdr/event/FreeSwitchCdrCreateEvent.java | 28 +++++ .../cdr/event/FreeSwitchCdrUpdateEvent.java | 28 +++++ .../FreeSwitchConferenceEntity.java | 12 +- .../FreeSwitchConferenceEntityListener.java | 14 +++ .../FreeSwitchConferenceEventListener.java | 52 ++++++++ .../FreeSwitchConferenceCreateEvent.java | 28 +++++ .../FreeSwitchConferenceUpdateEvent.java | 28 +++++ .../config/FreeSwitchEventListener.java | 20 ++- .../config/FreeSwitchEventPublisher.java | 76 +++++++++++ .../gateway/FreeSwitchGatewayEntity.java | 15 +-- .../FreeSwitchGatewayEntityListener.java | 14 +++ .../FreeSwitchGatewayEventListener.java | 52 ++++++++ .../event/FreeSwitchGatewayCreateEvent.java | 28 +++++ .../event/FreeSwitchGatewayUpdateEvent.java | 28 +++++ .../FreeSwitchNumberController.java} | 118 +++++++++--------- .../FreeSwitchNumberEntity.java} | 23 ++-- .../FreeSwitchNumberEntityListener.java | 54 ++++++++ .../number/FreeSwitchNumberEventListener.java | 55 ++++++++ .../FreeSwitchNumberExcel.java} | 4 +- .../FreeSwitchNumberRepository.java} | 42 +++---- .../FreeSwitchNumberRequest.java} | 4 +- .../FreeSwitchNumberResponse.java} | 8 +- .../FreeSwitchNumberRestController.java} | 38 +++--- .../FreeSwitchNumberRestService.java} | 80 ++++++------ .../FreeSwitchNumberService.java} | 76 +++++------ .../FreeSwitchNumberSpecification.java} | 6 +- .../event/FreeSwitchNumberCreateEvent.java | 28 +++++ .../event/FreeSwitchNumberUpdateEvent.java | 28 +++++ .../{user => number}/package-info.java | 2 +- .../user/FreeSwitchUserEntityListener.java | 40 ------ 34 files changed, 841 insertions(+), 295 deletions(-) create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/FreeSwitchCdrEventListener.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/event/FreeSwitchCdrCreateEvent.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/event/FreeSwitchCdrUpdateEvent.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEventListener.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/event/FreeSwitchConferenceCreateEvent.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/event/FreeSwitchConferenceUpdateEvent.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/config/FreeSwitchEventPublisher.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEventListener.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/event/FreeSwitchGatewayCreateEvent.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/event/FreeSwitchGatewayUpdateEvent.java rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user/FreeSwitchUserController.java => number/FreeSwitchNumberController.java} (66%) rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user/FreeSwitchUserEntity.java => number/FreeSwitchNumberEntity.java} (80%) create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEntityListener.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEventListener.java rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user/FreeSwitchUserExcel.java => number/FreeSwitchNumberExcel.java} (96%) rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user/FreeSwitchUserRepository.java => number/FreeSwitchNumberRepository.java} (60%) rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user/FreeSwitchUserRequest.java => number/FreeSwitchNumberRequest.java} (96%) rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user/FreeSwitchUserResponse.java => number/FreeSwitchNumberResponse.java} (92%) rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user/FreeSwitchUserRestController.java => number/FreeSwitchNumberRestController.java} (66%) rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user/FreeSwitchUserRestService.java => number/FreeSwitchNumberRestService.java} (59%) rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user/FreeSwitchUserService.java => number/FreeSwitchNumberService.java} (70%) rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user/FreeSwitchUserSpecification.java => number/FreeSwitchNumberSpecification.java} (92%) create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/event/FreeSwitchNumberCreateEvent.java create mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/event/FreeSwitchNumberUpdateEvent.java rename plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/{user => number}/package-info.java (59%) delete mode 100644 plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserEntityListener.java diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/callcenter/CallEventListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/callcenter/CallEventListener.java index 74895250f6..d8130c6a60 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/callcenter/CallEventListener.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/callcenter/CallEventListener.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-06-08 12:45:23 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-06-08 12:46:04 + * @LastEditTime: 2025-06-08 21:34:36 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -13,8 +13,6 @@ */ package com.bytedesk.freeswitch.callcenter; -import java.time.LocalDateTime; - import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; @@ -23,8 +21,6 @@ import com.bytedesk.freeswitch.callcenter.event.CallAnsweredEvent; import com.bytedesk.freeswitch.callcenter.event.CallHangupEvent; import com.bytedesk.freeswitch.callcenter.event.CallStartEvent; import com.bytedesk.freeswitch.callcenter.event.DtmfEvent; -import com.bytedesk.freeswitch.user.FreeSwitchUserService; - import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -40,7 +36,7 @@ public class CallEventListener { private final CallService callService; // private final FreeSwitchCdrService cdrService; // 暂时未使用,保留以备后续扩展 - private final FreeSwitchUserService userService; + // private final FreeSwitchNumberService userService; /** * 监听通话开始事件 @@ -119,10 +115,10 @@ public class CallEventListener { */ private void updateUserActivity(String username) { try { - if (userService.findByUsername(username).isPresent()) { - userService.updateLastRegistration(username, LocalDateTime.now()); - log.debug("已更新用户活动时间: {}", username); - } + // if (userService.findByUsername(username).isPresent()) { + // userService.updateLastRegistration(username, LocalDateTime.now()); + // log.debug("已更新用户活动时间: {}", username); + // } } catch (Exception e) { log.error("更新用户活动时间失败: {} - {}", username, e.getMessage(), e); } diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/callcenter/CallService.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/callcenter/CallService.java index ba6ca316f1..b0e796bbc1 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/callcenter/CallService.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/callcenter/CallService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-05-24 10:31:49 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-06-08 21:03:38 + * @LastEditTime: 2025-06-08 21:34:27 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -24,11 +24,8 @@ import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Service; import com.bytedesk.freeswitch.cdr.FreeSwitchCdrEntity; -import com.bytedesk.freeswitch.user.FreeSwitchUserEntity; import com.bytedesk.freeswitch.cdr.FreeSwitchCdrService; import com.bytedesk.freeswitch.config.FreeSwitchService; -import com.bytedesk.freeswitch.user.FreeSwitchUserService; - import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -46,7 +43,7 @@ public class CallService { private final FreeSwitchService freeSwitchService; private final SimpMessagingTemplate messagingTemplate; private final FreeSwitchCdrService cdrService; - private final FreeSwitchUserService userService; + // private final FreeSwitchNumberService userService; // 存储活动呼叫信息 private final Map activeCallMap = new ConcurrentHashMap<>(); @@ -469,11 +466,11 @@ public class CallService { */ private void updateUserLastRegistration(String username) { try { - Optional userOptional = userService.findByUsername(username); - if (userOptional.isPresent()) { - userService.updateLastRegistration(username, LocalDateTime.now()); - log.debug("已更新用户最后注册时间: {}", username); - } + // Optional userOptional = userService.findByUsername(username); + // if (userOptional.isPresent()) { + // userService.updateLastRegistration(username, LocalDateTime.now()); + // log.debug("已更新用户最后注册时间: {}", username); + // } } catch (Exception e) { log.error("更新用户最后注册时间失败: {} - {}", username, e.getMessage(), e); } diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/FreeSwitchCdrEntityListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/FreeSwitchCdrEntityListener.java index 8430cdd7de..2755e5d6a8 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/FreeSwitchCdrEntityListener.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/FreeSwitchCdrEntityListener.java @@ -14,8 +14,15 @@ package com.bytedesk.freeswitch.cdr; import org.springframework.stereotype.Component; +import org.springframework.util.SerializationUtils; + +import com.bytedesk.core.utils.ApplicationContextHolder; +import com.bytedesk.freeswitch.cdr.event.FreeSwitchCdrCreateEvent; +import com.bytedesk.freeswitch.cdr.event.FreeSwitchCdrUpdateEvent; +import com.bytedesk.freeswitch.config.FreeSwitchEventPublisher; import jakarta.persistence.PostPersist; +import jakarta.persistence.PostUpdate; import lombok.extern.slf4j.Slf4j; /** @@ -30,5 +37,20 @@ public class FreeSwitchCdrEntityListener { log.info("FreeSwitch CDR记录创建: uuid={}, caller={}, destination={}, duration={}", entity.getUid(), entity.getCallerIdNumber(), entity.getDestinationNumber(), entity.getDuration()); + + FreeSwitchCdrEntity cloneEntity = SerializationUtils.clone(entity); + FreeSwitchEventPublisher freeSwitchEventPublisher = ApplicationContextHolder.getBean(FreeSwitchEventPublisher.class); + freeSwitchEventPublisher.publishEvent(new FreeSwitchCdrCreateEvent(cloneEntity)); + } + + @PostUpdate + public void onPostUpdate(FreeSwitchCdrEntity entity) { + log.info("FreeSwitch CDR记录更新: uuid={}, caller={}, destination={}, duration={}", + entity.getUid(), entity.getCallerIdNumber(), + entity.getDestinationNumber(), entity.getDuration()); + + FreeSwitchCdrEntity cloneEntity = SerializationUtils.clone(entity); + FreeSwitchEventPublisher freeSwitchEventPublisher = ApplicationContextHolder.getBean(FreeSwitchEventPublisher.class); + freeSwitchEventPublisher.publishEvent(new FreeSwitchCdrUpdateEvent(cloneEntity)); } } diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/FreeSwitchCdrEventListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/FreeSwitchCdrEventListener.java new file mode 100644 index 0000000000..14e12d4ad4 --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/FreeSwitchCdrEventListener.java @@ -0,0 +1,52 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 21:39:10 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.cdr; + +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import com.bytedesk.freeswitch.cdr.event.FreeSwitchCdrCreateEvent; +import com.bytedesk.freeswitch.cdr.event.FreeSwitchCdrUpdateEvent; +import lombok.extern.slf4j.Slf4j; + +/** + * FreeSwitch事件监听器 + */ +@Slf4j +@Component +public class FreeSwitchCdrEventListener { + + @EventListener + public void onFreeSwitchCdrCreateEvent(FreeSwitchCdrCreateEvent event) { + FreeSwitchCdrEntity cdr = event.getCdr(); + log.info("收到FreeSwitch CDR创建事件: uuid={}, caller={}, destination={}", + cdr.getUid(), cdr.getCallerIdNumber(), cdr.getDestinationNumber()); + + // 这里可以添加额外的处理逻辑,比如: + // 1. 通知系统管理员有新的通话记录 + // 2. 更新相关统计信息 + // 3. 触发其他业务流程 + } + + @EventListener + public void onFreeSwitchCdrUpdateEvent(FreeSwitchCdrUpdateEvent event) { + FreeSwitchCdrEntity cdr = event.getCdr(); + log.info("收到FreeSwitch CDR更新事件: uuid={}, duration={}", + cdr.getUid(), cdr.getDuration()); + + // 这里可以添加额外的处理逻辑 + } + + +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/event/FreeSwitchCdrCreateEvent.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/event/FreeSwitchCdrCreateEvent.java new file mode 100644 index 0000000000..aaa9a2d6ad --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/event/FreeSwitchCdrCreateEvent.java @@ -0,0 +1,28 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 21:50:00 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.cdr.event; + +import com.bytedesk.freeswitch.cdr.FreeSwitchCdrEntity; + +import lombok.Getter; + +@Getter +public class FreeSwitchCdrCreateEvent { + + private final FreeSwitchCdrEntity cdr; + + public FreeSwitchCdrCreateEvent(FreeSwitchCdrEntity cdr) { + this.cdr = cdr; + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/event/FreeSwitchCdrUpdateEvent.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/event/FreeSwitchCdrUpdateEvent.java new file mode 100644 index 0000000000..acd599a079 --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/cdr/event/FreeSwitchCdrUpdateEvent.java @@ -0,0 +1,28 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 21:50:00 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.cdr.event; + +import com.bytedesk.freeswitch.cdr.FreeSwitchCdrEntity; + +import lombok.Getter; + +@Getter +public class FreeSwitchCdrUpdateEvent { + + private final FreeSwitchCdrEntity cdr; + + public FreeSwitchCdrUpdateEvent(FreeSwitchCdrEntity cdr) { + this.cdr = cdr; + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEntity.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEntity.java index 63bd9be7d5..5874299093 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEntity.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEntity.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-06-09 10:00:00 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-06-08 19:50:34 + * @LastEditTime: 2025-06-08 21:19:21 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -14,6 +14,7 @@ package com.bytedesk.freeswitch.conference; import com.bytedesk.core.base.BaseEntity; +import com.bytedesk.core.constant.TypeConsts; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -67,38 +68,35 @@ public class FreeSwitchConferenceEntity extends BaseEntity { * 是否启用 */ @Builder.Default - @Column(nullable = false) + @Column(name = "is_enabled") private Boolean enabled = true; /** * 是否录音 */ @Builder.Default - @Column(nullable = false) + @Column(name = "is_record_enabled") private Boolean recordEnabled = false; /** * 录音文件路径 */ - @Column(length = 500) private String recordPath; /** * 创建者 */ - @Column(length = 100) private String creator; /** * 会议室配置参数(JSON格式) */ - @Column(columnDefinition = "TEXT") + @Column(columnDefinition = TypeConsts.COLUMN_TYPE_TEXT) private String configJson; /** * 备注 */ - @Column(length = 500) private String remarks; /** diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEntityListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEntityListener.java index 7cb006c374..df63cb3c88 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEntityListener.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEntityListener.java @@ -14,6 +14,12 @@ package com.bytedesk.freeswitch.conference; import org.springframework.stereotype.Component; +import org.springframework.util.SerializationUtils; + +import com.bytedesk.core.utils.ApplicationContextHolder; +import com.bytedesk.freeswitch.config.FreeSwitchEventPublisher; +import com.bytedesk.freeswitch.conference.event.FreeSwitchConferenceCreateEvent; +import com.bytedesk.freeswitch.conference.event.FreeSwitchConferenceUpdateEvent; import jakarta.persistence.PostPersist; import jakarta.persistence.PostUpdate; @@ -30,11 +36,19 @@ public class FreeSwitchConferenceEntityListener { public void postPersist(FreeSwitchConferenceEntity entity) { log.info("FreeSwitch会议室创建: name={}, maxMembers={}", entity.getConferenceName(), entity.getMaxMembers()); + + FreeSwitchConferenceEntity cloneEntity = SerializationUtils.clone(entity); + FreeSwitchEventPublisher freeSwitchEventPublisher = ApplicationContextHolder.getBean(FreeSwitchEventPublisher.class); + freeSwitchEventPublisher.publishEvent(new FreeSwitchConferenceCreateEvent(cloneEntity)); } @PostUpdate public void postUpdate(FreeSwitchConferenceEntity entity) { log.info("FreeSwitch会议室更新: name={}, enabled={}", entity.getConferenceName(), entity.getEnabled()); + + FreeSwitchConferenceEntity cloneEntity = SerializationUtils.clone(entity); + FreeSwitchEventPublisher freeSwitchEventPublisher = ApplicationContextHolder.getBean(FreeSwitchEventPublisher.class); + freeSwitchEventPublisher.publishEvent(new FreeSwitchConferenceUpdateEvent(cloneEntity)); } } diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEventListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEventListener.java new file mode 100644 index 0000000000..dbe0c63db7 --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/FreeSwitchConferenceEventListener.java @@ -0,0 +1,52 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 21:38:55 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.conference; + +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import com.bytedesk.freeswitch.conference.event.FreeSwitchConferenceCreateEvent; +import com.bytedesk.freeswitch.conference.event.FreeSwitchConferenceUpdateEvent; +import lombok.extern.slf4j.Slf4j; + +/** + * FreeSwitch事件监听器 + */ +@Slf4j +@Component +public class FreeSwitchConferenceEventListener { + + + @EventListener + public void onFreeSwitchConferenceCreateEvent(FreeSwitchConferenceCreateEvent event) { + FreeSwitchConferenceEntity conference = event.getConference(); + log.info("收到FreeSwitch会议室创建事件: name={}, maxMembers={}", + conference.getConferenceName(), conference.getMaxMembers()); + + // 这里可以添加额外的处理逻辑,比如: + // 1. 通知相关用户新的会议室已创建 + // 2. 预分配会议资源 + } + + @EventListener + public void onFreeSwitchConferenceUpdateEvent(FreeSwitchConferenceUpdateEvent event) { + FreeSwitchConferenceEntity conference = event.getConference(); + log.info("收到FreeSwitch会议室更新事件: name={}, enabled={}", + conference.getConferenceName(), conference.getEnabled()); + + // 这里可以添加额外的处理逻辑 + } + + +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/event/FreeSwitchConferenceCreateEvent.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/event/FreeSwitchConferenceCreateEvent.java new file mode 100644 index 0000000000..f425f5a943 --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/event/FreeSwitchConferenceCreateEvent.java @@ -0,0 +1,28 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 22:00:00 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.conference.event; + +import com.bytedesk.freeswitch.conference.FreeSwitchConferenceEntity; + +import lombok.Getter; + +@Getter +public class FreeSwitchConferenceCreateEvent { + + private final FreeSwitchConferenceEntity conference; + + public FreeSwitchConferenceCreateEvent(FreeSwitchConferenceEntity conference) { + this.conference = conference; + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/event/FreeSwitchConferenceUpdateEvent.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/event/FreeSwitchConferenceUpdateEvent.java new file mode 100644 index 0000000000..314fadce35 --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/conference/event/FreeSwitchConferenceUpdateEvent.java @@ -0,0 +1,28 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 22:00:00 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.conference.event; + +import com.bytedesk.freeswitch.conference.FreeSwitchConferenceEntity; + +import lombok.Getter; + +@Getter +public class FreeSwitchConferenceUpdateEvent { + + private final FreeSwitchConferenceEntity conference; + + public FreeSwitchConferenceUpdateEvent(FreeSwitchConferenceEntity conference) { + this.conference = conference; + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/config/FreeSwitchEventListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/config/FreeSwitchEventListener.java index a3a153e744..1c151a1023 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/config/FreeSwitchEventListener.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/config/FreeSwitchEventListener.java @@ -1,7 +1,6 @@ package com.bytedesk.freeswitch.config; import java.time.LocalDateTime; -import java.util.Optional; import org.freeswitch.esl.client.IEslEventListener; import org.freeswitch.esl.client.transport.event.EslEvent; @@ -14,9 +13,8 @@ import com.bytedesk.freeswitch.callcenter.event.CallHangupEvent; import com.bytedesk.freeswitch.callcenter.event.CallStartEvent; import com.bytedesk.freeswitch.callcenter.event.DtmfEvent; import com.bytedesk.freeswitch.cdr.FreeSwitchCdrEntity; -import com.bytedesk.freeswitch.user.FreeSwitchUserEntity; import com.bytedesk.freeswitch.cdr.FreeSwitchCdrService; -import com.bytedesk.freeswitch.user.FreeSwitchUserService; +// import com.bytedesk.freeswitch.number.FreeSwitchNumberService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -32,7 +30,7 @@ public class FreeSwitchEventListener implements IEslEventListener { private final ApplicationEventPublisher eventPublisher; private final FreeSwitchCdrService cdrService; - private final FreeSwitchUserService userService; + // private final FreeSwitchNumberService userService; /** * 处理FreeSwitch事件 @@ -184,13 +182,13 @@ public class FreeSwitchEventListener implements IEslEventListener { */ private void updateUserOnlineStatus(String username, boolean online) { try { - Optional userOptional = userService.findByUsername(username); - if (userOptional.isPresent()) { - if (online) { - userService.updateLastRegistration(username, LocalDateTime.now()); - } - log.debug("已更新用户在线状态: {} -> {}", username, online); - } + // Optional userOptional = userService.findByUsername(username); + // if (userOptional.isPresent()) { + // if (online) { + // userService.updateLastRegistration(username, LocalDateTime.now()); + // } + // log.debug("已更新用户在线状态: {} -> {}", username, online); + // } } catch (Exception e) { log.error("更新用户在线状态失败: {} - {}", username, e.getMessage(), e); } diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/config/FreeSwitchEventPublisher.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/config/FreeSwitchEventPublisher.java new file mode 100644 index 0000000000..661b9b7b4d --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/config/FreeSwitchEventPublisher.java @@ -0,0 +1,76 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 21:55:00 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.config; + +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import com.bytedesk.freeswitch.cdr.event.FreeSwitchCdrCreateEvent; +import com.bytedesk.freeswitch.cdr.event.FreeSwitchCdrUpdateEvent; +import com.bytedesk.freeswitch.conference.event.FreeSwitchConferenceCreateEvent; +import com.bytedesk.freeswitch.conference.event.FreeSwitchConferenceUpdateEvent; +import com.bytedesk.freeswitch.gateway.event.FreeSwitchGatewayCreateEvent; +import com.bytedesk.freeswitch.gateway.event.FreeSwitchGatewayUpdateEvent; +import com.bytedesk.freeswitch.number.event.FreeSwitchNumberCreateEvent; +import com.bytedesk.freeswitch.number.event.FreeSwitchNumberUpdateEvent; + +import lombok.AllArgsConstructor; + +/** + * FreeSwitch事件发布器 + */ +@Async +@Component +@AllArgsConstructor +public class FreeSwitchEventPublisher { + + private final ApplicationEventPublisher applicationEventPublisher; + + // CDR事件 + public void publishEvent(FreeSwitchCdrCreateEvent event) { + applicationEventPublisher.publishEvent(event); + } + + public void publishEvent(FreeSwitchCdrUpdateEvent event) { + applicationEventPublisher.publishEvent(event); + } + + // Conference事件 + public void publishEvent(FreeSwitchConferenceCreateEvent event) { + applicationEventPublisher.publishEvent(event); + } + + public void publishEvent(FreeSwitchConferenceUpdateEvent event) { + applicationEventPublisher.publishEvent(event); + } + + // Gateway事件 + public void publishEvent(FreeSwitchGatewayCreateEvent event) { + applicationEventPublisher.publishEvent(event); + } + + public void publishEvent(FreeSwitchGatewayUpdateEvent event) { + applicationEventPublisher.publishEvent(event); + } + + // User事件 + public void publishEvent(FreeSwitchNumberCreateEvent event) { + applicationEventPublisher.publishEvent(event); + } + + public void publishEvent(FreeSwitchNumberUpdateEvent event) { + applicationEventPublisher.publishEvent(event); + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEntity.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEntity.java index 8c5187feb4..b76eb5b8e1 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEntity.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEntity.java @@ -45,71 +45,63 @@ public class FreeSwitchGatewayEntity extends BaseEntity { /** * 网关名称 */ - @Column(nullable = false, unique = true, length = 100) + @Column(unique = true) private String gatewayName; /** * 网关描述 */ - @Column(length = 255) private String description; /** * SIP服务器地址 */ - @Column(nullable = false, length = 255) private String proxy; /** * 用户名 */ - @Column(nullable = false, length = 100) private String username; /** * 密码 */ - @Column(nullable = false, length = 255) private String password; /** * 从号码 */ - @Column(length = 100) private String fromUser; /** * 从域名 */ - @Column(length = 100) private String fromDomain; /** * 注册 */ @Builder.Default - @Column(nullable = false) + @Column(name = "is_register") private Boolean register = true; /** * 注册传输协议 */ @Builder.Default - @Column(length = 20) private String registerTransport = "udp"; /** * 网关状态 */ @Builder.Default - @Column(length = 20) private String status = "DOWN"; /** * 是否启用 */ @Builder.Default - @Column(nullable = false) + @Column(name = "is_enabled") private Boolean enabled = true; /** @@ -121,7 +113,6 @@ public class FreeSwitchGatewayEntity extends BaseEntity { /** * 备注 */ - @Column(length = 500) private String remarks; /** diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEntityListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEntityListener.java index c5a28d121e..a5e5057abb 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEntityListener.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEntityListener.java @@ -14,6 +14,12 @@ package com.bytedesk.freeswitch.gateway; import org.springframework.stereotype.Component; +import org.springframework.util.SerializationUtils; + +import com.bytedesk.core.utils.ApplicationContextHolder; +import com.bytedesk.freeswitch.config.FreeSwitchEventPublisher; +import com.bytedesk.freeswitch.gateway.event.FreeSwitchGatewayCreateEvent; +import com.bytedesk.freeswitch.gateway.event.FreeSwitchGatewayUpdateEvent; import jakarta.persistence.PostPersist; import jakarta.persistence.PostUpdate; @@ -30,11 +36,19 @@ public class FreeSwitchGatewayEntityListener { public void postPersist(FreeSwitchGatewayEntity entity) { log.info("FreeSwitch网关创建: name={}, proxy={}", entity.getGatewayName(), entity.getProxy()); + + FreeSwitchGatewayEntity cloneEntity = SerializationUtils.clone(entity); + FreeSwitchEventPublisher freeSwitchEventPublisher = ApplicationContextHolder.getBean(FreeSwitchEventPublisher.class); + freeSwitchEventPublisher.publishEvent(new FreeSwitchGatewayCreateEvent(cloneEntity)); } @PostUpdate public void postUpdate(FreeSwitchGatewayEntity entity) { log.info("FreeSwitch网关更新: name={}, status={}, enabled={}", entity.getGatewayName(), entity.getStatus(), entity.getEnabled()); + + FreeSwitchGatewayEntity cloneEntity = SerializationUtils.clone(entity); + FreeSwitchEventPublisher freeSwitchEventPublisher = ApplicationContextHolder.getBean(FreeSwitchEventPublisher.class); + freeSwitchEventPublisher.publishEvent(new FreeSwitchGatewayUpdateEvent(cloneEntity)); } } diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEventListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEventListener.java new file mode 100644 index 0000000000..581b620106 --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/FreeSwitchGatewayEventListener.java @@ -0,0 +1,52 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 21:37:30 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.gateway; + +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import com.bytedesk.freeswitch.gateway.event.FreeSwitchGatewayCreateEvent; +import com.bytedesk.freeswitch.gateway.event.FreeSwitchGatewayUpdateEvent; +import lombok.extern.slf4j.Slf4j; + +/** + * FreeSwitch事件监听器 + */ +@Slf4j +@Component +public class FreeSwitchGatewayEventListener { + + + @EventListener + public void onFreeSwitchGatewayCreateEvent(FreeSwitchGatewayCreateEvent event) { + FreeSwitchGatewayEntity gateway = event.getGateway(); + log.info("收到FreeSwitch网关创建事件: name={}, proxy={}", + gateway.getGatewayName(), gateway.getProxy()); + + // 这里可以添加额外的处理逻辑,比如: + // 1. 自动注册网关到FreeSwitch服务器 + // 2. 更新网关状态监控信息 + } + + @EventListener + public void onFreeSwitchGatewayUpdateEvent(FreeSwitchGatewayUpdateEvent event) { + FreeSwitchGatewayEntity gateway = event.getGateway(); + log.info("收到FreeSwitch网关更新事件: name={}, status={}", + gateway.getGatewayName(), gateway.getStatus()); + + // 这里可以添加额外的处理逻辑 + } + + +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/event/FreeSwitchGatewayCreateEvent.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/event/FreeSwitchGatewayCreateEvent.java new file mode 100644 index 0000000000..0f75588359 --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/event/FreeSwitchGatewayCreateEvent.java @@ -0,0 +1,28 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 22:05:00 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.gateway.event; + +import com.bytedesk.freeswitch.gateway.FreeSwitchGatewayEntity; + +import lombok.Getter; + +@Getter +public class FreeSwitchGatewayCreateEvent { + + private final FreeSwitchGatewayEntity gateway; + + public FreeSwitchGatewayCreateEvent(FreeSwitchGatewayEntity gateway) { + this.gateway = gateway; + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/event/FreeSwitchGatewayUpdateEvent.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/event/FreeSwitchGatewayUpdateEvent.java new file mode 100644 index 0000000000..c3923b010d --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/gateway/event/FreeSwitchGatewayUpdateEvent.java @@ -0,0 +1,28 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 22:05:00 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.gateway.event; + +import com.bytedesk.freeswitch.gateway.FreeSwitchGatewayEntity; + +import lombok.Getter; + +@Getter +public class FreeSwitchGatewayUpdateEvent { + + private final FreeSwitchGatewayEntity gateway; + + public FreeSwitchGatewayUpdateEvent(FreeSwitchGatewayEntity gateway) { + this.gateway = gateway; + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserController.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberController.java similarity index 66% rename from plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserController.java rename to plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberController.java index dd2607cdd1..2e1daa2c1a 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserController.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberController.java @@ -11,7 +11,7 @@ * * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. */ -package com.bytedesk.freeswitch.user; +package com.bytedesk.freeswitch.number; import com.bytedesk.core.utils.JsonResult; import lombok.AllArgsConstructor; @@ -37,17 +37,17 @@ import java.util.stream.Collectors; @RequestMapping("/freeswitch/api/v1/users") @AllArgsConstructor @ConditionalOnProperty(name = "bytedesk.freeswitch.enabled", havingValue = "true") -public class FreeSwitchUserController { +public class FreeSwitchNumberController { - private final FreeSwitchUserService userService; + private final FreeSwitchNumberService userService; /** * 创建用户 */ @PostMapping - public ResponseEntity> createUser(@Valid @RequestBody FreeSwitchUserRequest request) { + public ResponseEntity> createNumber(@Valid @RequestBody FreeSwitchNumberRequest request) { try { - FreeSwitchUserEntity user = userService.createUser( + FreeSwitchNumberEntity user = userService.createNumber( request.getUsername(), request.getDomain(), request.getPassword(), @@ -56,7 +56,7 @@ public class FreeSwitchUserController { request.getAccountcode() ); - FreeSwitchUserResponse response = FreeSwitchUserResponse.fromEntitySafe(user); + FreeSwitchNumberResponse response = FreeSwitchNumberResponse.fromEntitySafe(user); return ResponseEntity.ok(JsonResult.success("用户创建成功", response)); } catch (Exception e) { log.error("创建用户失败", e); @@ -68,10 +68,10 @@ public class FreeSwitchUserController { * 获取用户详情 */ @GetMapping("/{id}") - public ResponseEntity> getUser(@PathVariable Long id) { - Optional user = userService.findById(id); + public ResponseEntity> getNumber(@PathVariable Long id) { + Optional user = userService.findById(id); if (user.isPresent()) { - FreeSwitchUserResponse response = FreeSwitchUserResponse.fromEntitySafe(user.get()); + FreeSwitchNumberResponse response = FreeSwitchNumberResponse.fromEntitySafe(user.get()); return ResponseEntity.ok(JsonResult.success("获取用户详情成功", response)); } else { return ResponseEntity.notFound().build(); @@ -82,10 +82,10 @@ public class FreeSwitchUserController { * 根据用户名获取用户 */ @GetMapping("/username/{username}") - public ResponseEntity> getUserByUsername(@PathVariable String username) { - Optional user = userService.findByUsername(username); + public ResponseEntity> getNumberByNumbername(@PathVariable String username) { + Optional user = userService.findByNumbername(username); if (user.isPresent()) { - FreeSwitchUserResponse response = FreeSwitchUserResponse.fromEntitySafe(user.get()); + FreeSwitchNumberResponse response = FreeSwitchNumberResponse.fromEntitySafe(user.get()); return ResponseEntity.ok(JsonResult.success("获取用户详情成功", response)); } else { return ResponseEntity.notFound().build(); @@ -96,11 +96,11 @@ public class FreeSwitchUserController { * 根据用户名和域名获取用户 */ @GetMapping("/username/{username}/domain/{domain}") - public ResponseEntity> getUserByUsernameAndDomain( + public ResponseEntity> getNumberByNumbernameAndDomain( @PathVariable String username, @PathVariable String domain) { - Optional user = userService.findByUsernameAndDomain(username, domain); + Optional user = userService.findByNumbernameAndDomain(username, domain); if (user.isPresent()) { - FreeSwitchUserResponse response = FreeSwitchUserResponse.fromEntitySafe(user.get()); + FreeSwitchNumberResponse response = FreeSwitchNumberResponse.fromEntitySafe(user.get()); return ResponseEntity.ok(JsonResult.success("获取用户详情成功", response)); } else { return ResponseEntity.notFound().build(); @@ -111,7 +111,7 @@ public class FreeSwitchUserController { * 获取用户列表(分页) */ @GetMapping - public ResponseEntity> getUsers( + public ResponseEntity> getNumbers( @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "20") int size, @RequestParam(defaultValue = "id") String sortBy, @@ -121,8 +121,8 @@ public class FreeSwitchUserController { Sort.by(sortBy).descending() : Sort.by(sortBy).ascending(); Pageable pageable = PageRequest.of(page, size, sort); - Page userPage = userService.findAll(pageable); - Page responsePage = userPage.map(FreeSwitchUserResponse::fromEntitySafe); + Page userPage = userService.findAll(pageable); + Page responsePage = userPage.map(FreeSwitchNumberResponse::fromEntitySafe); return ResponseEntity.ok(JsonResult.success("获取用户列表成功", responsePage)); } @@ -131,10 +131,10 @@ public class FreeSwitchUserController { * 根据域名获取用户列表 */ @GetMapping("/domain/{domain}") - public ResponseEntity> getUsersByDomain(@PathVariable String domain) { - List users = userService.findByDomain(domain); - List responses = users.stream() - .map(FreeSwitchUserResponse::fromEntitySafe) + public ResponseEntity> getNumbersByDomain(@PathVariable String domain) { + List users = userService.findByDomain(domain); + List responses = users.stream() + .map(FreeSwitchNumberResponse::fromEntitySafe) .collect(Collectors.toList()); return ResponseEntity.ok(JsonResult.success("获取域名用户列表成功", responses)); @@ -144,10 +144,10 @@ public class FreeSwitchUserController { * 获取启用的用户列表 */ @GetMapping("/enabled") - public ResponseEntity> getEnabledUsers() { - List users = userService.findEnabledUsers(); - List responses = users.stream() - .map(FreeSwitchUserResponse::fromEntitySafe) + public ResponseEntity> getEnabledNumbers() { + List users = userService.findEnabledNumbers(); + List responses = users.stream() + .map(FreeSwitchNumberResponse::fromEntitySafe) .collect(Collectors.toList()); return ResponseEntity.ok(JsonResult.success("获取启用用户列表成功", responses)); @@ -157,10 +157,10 @@ public class FreeSwitchUserController { * 获取在线的用户列表 */ @GetMapping("/online") - public ResponseEntity> getOnlineUsers() { - List users = userService.findOnlineUsers(); - List responses = users.stream() - .map(FreeSwitchUserResponse::fromEntitySafe) + public ResponseEntity> getOnlineNumbers() { + List users = userService.findOnlineNumbers(); + List responses = users.stream() + .map(FreeSwitchNumberResponse::fromEntitySafe) .collect(Collectors.toList()); return ResponseEntity.ok(JsonResult.success("获取在线用户列表成功", responses)); @@ -170,10 +170,10 @@ public class FreeSwitchUserController { * 根据邮箱获取用户列表 */ @GetMapping("/email/{email}") - public ResponseEntity> getUsersByEmail(@PathVariable String email) { - List users = userService.findByEmail(email); - List responses = users.stream() - .map(FreeSwitchUserResponse::fromEntitySafe) + public ResponseEntity> getNumbersByEmail(@PathVariable String email) { + List users = userService.findByEmail(email); + List responses = users.stream() + .map(FreeSwitchNumberResponse::fromEntitySafe) .collect(Collectors.toList()); return ResponseEntity.ok(JsonResult.success("获取用户列表成功", responses)); @@ -183,10 +183,10 @@ public class FreeSwitchUserController { * 根据账户代码获取用户列表 */ @GetMapping("/accountcode/{accountcode}") - public ResponseEntity> getUsersByAccountcode(@PathVariable String accountcode) { - List users = userService.findByAccountcode(accountcode); - List responses = users.stream() - .map(FreeSwitchUserResponse::fromEntitySafe) + public ResponseEntity> getNumbersByAccountcode(@PathVariable String accountcode) { + List users = userService.findByAccountcode(accountcode); + List responses = users.stream() + .map(FreeSwitchNumberResponse::fromEntitySafe) .collect(Collectors.toList()); return ResponseEntity.ok(JsonResult.success("获取用户列表成功", responses)); @@ -196,11 +196,11 @@ public class FreeSwitchUserController { * 更新用户 */ @PutMapping("/{id}") - public ResponseEntity> updateUser( + public ResponseEntity> updateNumber( @PathVariable Long id, - @Valid @RequestBody FreeSwitchUserRequest request) { + @Valid @RequestBody FreeSwitchNumberRequest request) { try { - FreeSwitchUserEntity user = userService.updateUser( + FreeSwitchNumberEntity user = userService.updateNumber( id, request.getPassword(), request.getDisplayName(), @@ -208,7 +208,7 @@ public class FreeSwitchUserController { request.getAccountcode() ); - FreeSwitchUserResponse response = FreeSwitchUserResponse.fromEntitySafe(user); + FreeSwitchNumberResponse response = FreeSwitchNumberResponse.fromEntitySafe(user); return ResponseEntity.ok(JsonResult.success("用户更新成功", response)); } catch (Exception e) { log.error("更新用户失败", e); @@ -220,9 +220,9 @@ public class FreeSwitchUserController { * 启用用户 */ @PutMapping("/{id}/enable") - public ResponseEntity> enableUser(@PathVariable Long id) { + public ResponseEntity> enableNumber(@PathVariable Long id) { try { - userService.enableUser(id); + userService.enableNumber(id); return ResponseEntity.ok(JsonResult.success("用户启用成功")); } catch (Exception e) { log.error("启用用户失败", e); @@ -234,9 +234,9 @@ public class FreeSwitchUserController { * 禁用用户 */ @PutMapping("/{id}/disable") - public ResponseEntity> disableUser(@PathVariable Long id) { + public ResponseEntity> disableNumber(@PathVariable Long id) { try { - userService.disableUser(id); + userService.disableNumber(id); return ResponseEntity.ok(JsonResult.success("用户禁用成功")); } catch (Exception e) { log.error("禁用用户失败", e); @@ -248,13 +248,13 @@ public class FreeSwitchUserController { * 更新用户注册信息 */ @PutMapping("/registration") - public ResponseEntity> updateUserRegistration( + public ResponseEntity> updateNumberRegistration( @RequestParam String username, @RequestParam String domain, @RequestParam String registerIp, @RequestParam(required = false) String userAgent) { try { - userService.updateUserRegistration(username, domain, registerIp, userAgent); + userService.updateNumberRegistration(username, domain, registerIp, userAgent); return ResponseEntity.ok(JsonResult.success("用户注册信息更新成功")); } catch (Exception e) { log.error("更新用户注册信息失败", e); @@ -266,9 +266,9 @@ public class FreeSwitchUserController { * 删除用户 */ @DeleteMapping("/{id}") - public ResponseEntity> deleteUser(@PathVariable Long id) { + public ResponseEntity> deleteNumber(@PathVariable Long id) { try { - userService.deleteUser(id); + userService.deleteNumber(id); return ResponseEntity.ok(JsonResult.success("用户删除成功")); } catch (Exception e) { log.error("删除用户失败", e); @@ -280,11 +280,11 @@ public class FreeSwitchUserController { * 验证用户密码 */ @PostMapping("/validate") - public ResponseEntity> validateUserPassword( + public ResponseEntity> validateNumberPassword( @RequestParam String username, @RequestParam String domain, @RequestParam String password) { - boolean valid = userService.validateUserPassword(username, domain, password); + boolean valid = userService.validateNumberPassword(username, domain, password); return ResponseEntity.ok(JsonResult.success("密码验证完成", valid)); } @@ -292,12 +292,12 @@ public class FreeSwitchUserController { * 获取用户统计信息 */ @GetMapping("/stats") - public ResponseEntity> getUserStats() { + public ResponseEntity> getNumberStats() { long totalCount = userService.countTotal(); long enabledCount = userService.countEnabled(); long onlineCount = userService.countOnline(); - UserStats stats = new UserStats(totalCount, enabledCount, onlineCount); + NumberStats stats = new NumberStats(totalCount, enabledCount, onlineCount); return ResponseEntity.ok(JsonResult.success("获取用户统计成功", stats)); } @@ -305,7 +305,7 @@ public class FreeSwitchUserController { * 根据域名获取用户统计信息 */ @GetMapping("/stats/domain/{domain}") - public ResponseEntity> getUserStatsByDomain(@PathVariable String domain) { + public ResponseEntity> getNumberStatsByDomain(@PathVariable String domain) { long domainCount = userService.countByDomain(domain); return ResponseEntity.ok(JsonResult.success("获取域名用户统计成功", domainCount)); } @@ -314,22 +314,22 @@ public class FreeSwitchUserController { * 检查用户名和域名组合是否存在 */ @GetMapping("/exists") - public ResponseEntity> checkUserExists( + public ResponseEntity> checkNumberExists( @RequestParam String username, @RequestParam String domain) { - boolean exists = userService.existsByUsernameAndDomain(username, domain); + boolean exists = userService.existsByNumbernameAndDomain(username, domain); return ResponseEntity.ok(JsonResult.success("检查用户名成功", exists)); } /** * 用户统计信息内部类 */ - public static class UserStats { + public static class NumberStats { private final long totalCount; private final long enabledCount; private final long onlineCount; - public UserStats(long totalCount, long enabledCount, long onlineCount) { + public NumberStats(long totalCount, long enabledCount, long onlineCount) { this.totalCount = totalCount; this.enabledCount = enabledCount; this.onlineCount = onlineCount; diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserEntity.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEntity.java similarity index 80% rename from plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserEntity.java rename to plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEntity.java index 310e7c1b87..ef0932ee25 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserEntity.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEntity.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-06-09 10:00:00 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-06-08 19:50:07 + * @LastEditTime: 2025-06-08 21:29:40 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -11,7 +11,7 @@ * * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. */ -package com.bytedesk.freeswitch.user; +package com.bytedesk.freeswitch.number; import java.time.LocalDateTime; @@ -40,75 +40,66 @@ import lombok.experimental.SuperBuilder; @EqualsAndHashCode(callSuper = true) @AllArgsConstructor @NoArgsConstructor -@EntityListeners({FreeSwitchUserEntityListener.class}) -@Table(name = "bytedesk_freeswitch_user") -public class FreeSwitchUserEntity extends BaseEntity { +@EntityListeners({FreeSwitchNumberEntityListener.class}) +@Table(name = "bytedesk_freeswitch_number") +public class FreeSwitchNumberEntity extends BaseEntity { /** * 用户名(SIP用户名) */ - @Column(nullable = false, unique = true, length = 50) + @Column(unique = true) private String username; /** * SIP域名 */ - @Column(nullable = false, length = 100) private String domain; /** * 密码 */ - @Column(nullable = false, length = 255) private String password; /** * 显示名称 */ - @Column(length = 100) private String displayName; /** * 邮箱 */ - @Column(length = 100) private String email; /** * 账户代码 */ - @Column(length = 50) private String accountcode; /** * 是否启用 */ @Builder.Default - @Column(nullable = false) + @Column(name = "is_enabled") private Boolean enabled = true; /** * 最后注册时间 */ - @Column private LocalDateTime lastRegister; /** * 注册IP地址 */ - @Column(length = 45) private String registerIp; /** * 用户代理 */ - @Column(length = 255) private String userAgent; /** * 备注 */ - @Column(length = 500) private String remarks; /** diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEntityListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEntityListener.java new file mode 100644 index 0000000000..0ec58892d7 --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEntityListener.java @@ -0,0 +1,54 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 21:30:46 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.number; + +import org.springframework.stereotype.Component; +import org.springframework.util.SerializationUtils; + +import com.bytedesk.core.utils.ApplicationContextHolder; +import com.bytedesk.freeswitch.config.FreeSwitchEventPublisher; +import com.bytedesk.freeswitch.number.event.FreeSwitchNumberCreateEvent; +import com.bytedesk.freeswitch.number.event.FreeSwitchNumberUpdateEvent; + +import jakarta.persistence.PostPersist; +import jakarta.persistence.PostUpdate; +import lombok.extern.slf4j.Slf4j; + +/** + * FreeSwitch用户实体监听器 + */ +@Slf4j +@Component +public class FreeSwitchNumberEntityListener { + + @PostPersist + public void postPersist(FreeSwitchNumberEntity entity) { + log.info("FreeSwitch用户创建: username={}, domain={}", + entity.getUsername(), entity.getDomain()); + + FreeSwitchNumberEntity cloneEntity = SerializationUtils.clone(entity); + FreeSwitchEventPublisher freeSwitchEventPublisher = ApplicationContextHolder.getBean(FreeSwitchEventPublisher.class); + freeSwitchEventPublisher.publishEvent(new FreeSwitchNumberCreateEvent(cloneEntity)); + } + + @PostUpdate + public void postUpdate(FreeSwitchNumberEntity entity) { + log.info("FreeSwitch用户更新: username={}, enabled={}", + entity.getUsername(), entity.getEnabled()); + + FreeSwitchNumberEntity cloneEntity = SerializationUtils.clone(entity); + FreeSwitchEventPublisher freeSwitchEventPublisher = ApplicationContextHolder.getBean(FreeSwitchEventPublisher.class); + freeSwitchEventPublisher.publishEvent(new FreeSwitchNumberUpdateEvent(cloneEntity)); + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEventListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEventListener.java new file mode 100644 index 0000000000..7ce6fa215b --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberEventListener.java @@ -0,0 +1,55 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 21:38:22 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.number; + +import org.springframework.context.event.EventListener; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import com.bytedesk.freeswitch.number.event.FreeSwitchNumberCreateEvent; +import com.bytedesk.freeswitch.number.event.FreeSwitchNumberUpdateEvent; + +import lombok.extern.slf4j.Slf4j; + +/** + * FreeSwitch事件监听器 + */ +@Slf4j +@Component +public class FreeSwitchNumberEventListener { + + @Order(1) + @EventListener + public void onFreeSwitchNumberCreateEvent(FreeSwitchNumberCreateEvent event) { + FreeSwitchNumberEntity user = event.getUser(); + log.info("收到FreeSwitch用户创建事件: username={}, domain={}", + user.getUsername(), user.getDomain()); + + // 这里可以添加额外的处理逻辑,比如: + // 1. 发送欢迎消息给新用户 + // 2. 添加用户到默认组或会议室 + } + + @Order(1) + @EventListener + public void onFreeSwitchNumberUpdateEvent(FreeSwitchNumberUpdateEvent event) { + FreeSwitchNumberEntity user = event.getUser(); + log.info("收到FreeSwitch用户更新事件: username={}, enabled={}", + user.getUsername(), user.getEnabled()); + + // 这里可以添加额外的处理逻辑,比如: + // 1. 如果用户被禁用,断开其当前连接 + // 2. 更新用户权限 + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserExcel.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberExcel.java similarity index 96% rename from plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserExcel.java rename to plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberExcel.java index 475cfbd57b..b1dcb2339b 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserExcel.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberExcel.java @@ -11,7 +11,7 @@ * * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. */ -package com.bytedesk.freeswitch.user; +package com.bytedesk.freeswitch.number; import java.time.LocalDateTime; @@ -26,7 +26,7 @@ import lombok.Data; * https://github.com/alibaba/easyexcel */ @Data -public class FreeSwitchUserExcel { +public class FreeSwitchNumberExcel { @ExcelProperty(index = 0, value = "用户名") @ColumnWidth(20) diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserRepository.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberRepository.java similarity index 60% rename from plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserRepository.java rename to plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberRepository.java index 6274ee32f0..50abbd29dd 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserRepository.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberRepository.java @@ -11,7 +11,7 @@ * * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. */ -package com.bytedesk.freeswitch.user; +package com.bytedesk.freeswitch.number; import java.time.LocalDateTime; import java.util.List; @@ -29,63 +29,63 @@ import org.springframework.stereotype.Repository; * FreeSwitch用户仓库接口 */ @Repository -public interface FreeSwitchUserRepository extends JpaRepository, - JpaSpecificationExecutor { +public interface FreeSwitchNumberRepository extends JpaRepository, + JpaSpecificationExecutor { /** * 根据UID查找用户 */ - Optional findByUid(String uid); + Optional findByUid(String uid); /** * 根据用户名查找用户 */ - Optional findByUsername(String username); + Optional findByNumbername(String username); /** * 根据用户名和域名查找用户 */ - Optional findByUsernameAndDomain(String username, String domain); + Optional findByNumbernameAndDomain(String username, String domain); /** * 根据邮箱查找用户 */ - List findByEmail(String email); + List findByEmail(String email); /** * 查找启用的用户 */ - List findByEnabledTrue(); + List findByEnabledTrue(); /** * 根据域名查找用户 */ - List findByDomain(String domain); + List findByDomain(String domain); /** * 根据域名查找用户(分页) */ - Page findByDomain(String domain, Pageable pageable); + Page findByDomain(String domain, Pageable pageable); /** * 根据账户代码查找用户 */ - List findByAccountcode(String accountcode); + List findByAccountcode(String accountcode); /** * 检查用户名是否存在 */ - boolean existsByUsername(String username); + boolean existsByNumbername(String username); /** * 检查用户名和域名组合是否存在 */ - boolean existsByUsernameAndDomain(String username, String domain); + boolean existsByNumbernameAndDomain(String username, String domain); /** * 查找在线用户(最近指定时间内有注册记录) */ - List findByEnabledTrueAndLastRegisterAfter(LocalDateTime cutoffTime); + List findByEnabledTrueAndLastRegisterAfter(LocalDateTime cutoffTime); /** * 统计域名下的用户数量 @@ -100,18 +100,18 @@ public interface FreeSwitchUserRepository extends JpaRepository :cutoffTime") - List findOnlineUsers(@Param("cutoffTime") LocalDateTime cutoffTime); + @Query("SELECT u FROM FreeSwitchNumberEntity u WHERE u.enabled = true AND u.lastRegister > :cutoffTime") + List findOnlineNumbers(@Param("cutoffTime") LocalDateTime cutoffTime); /** * 根据用户名模糊搜索 */ - Page findByUsernameContainingIgnoreCase(String username, Pageable pageable); + Page findByNumbernameContainingIgnoreCase(String username, Pageable pageable); /** * 根据显示名称模糊搜索 */ - Page findByDisplayNameContainingIgnoreCase(String displayName, Pageable pageable); + Page findByDisplayNameContainingIgnoreCase(String displayName, Pageable pageable); /** * 统计启用的用户数量 @@ -121,13 +121,13 @@ public interface FreeSwitchUserRepository extends JpaRepository :cutoffTime") - long countOnlineUsers(@Param("cutoffTime") LocalDateTime cutoffTime); + @Query("SELECT COUNT(u) FROM FreeSwitchNumberEntity u WHERE u.enabled = true AND u.lastRegister > :cutoffTime") + long countOnlineNumbers(@Param("cutoffTime") LocalDateTime cutoffTime); /** * 更新用户最后注册时间和IP */ - @Query("UPDATE FreeSwitchUserEntity u SET u.lastRegister = :registerTime, u.registerIp = :registerIp WHERE u.username = :username AND u.domain = :domain") + @Query("UPDATE FreeSwitchNumberEntity u SET u.lastRegister = :registerTime, u.registerIp = :registerIp WHERE u.username = :username AND u.domain = :domain") int updateLastRegister(@Param("username") String username, @Param("domain") String domain, @Param("registerTime") LocalDateTime registerTime, diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserRequest.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberRequest.java similarity index 96% rename from plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserRequest.java rename to plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberRequest.java index daad7e6c8e..da50d3e603 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserRequest.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberRequest.java @@ -11,7 +11,7 @@ * * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. */ -package com.bytedesk.freeswitch.user; +package com.bytedesk.freeswitch.number; import com.bytedesk.core.base.BaseRequest; @@ -34,7 +34,7 @@ import lombok.experimental.SuperBuilder; @EqualsAndHashCode(callSuper = true) @NoArgsConstructor @AllArgsConstructor -public class FreeSwitchUserRequest extends BaseRequest { +public class FreeSwitchNumberRequest extends BaseRequest { /** * 用户名(SIP用户名) diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserResponse.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberResponse.java similarity index 92% rename from plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserResponse.java rename to plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberResponse.java index 523a27d1c8..836039dde2 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserResponse.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberResponse.java @@ -11,7 +11,7 @@ * * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. */ -package com.bytedesk.freeswitch.user; +package com.bytedesk.freeswitch.number; import com.bytedesk.core.base.BaseResponse; import lombok.AllArgsConstructor; @@ -32,7 +32,7 @@ import java.time.LocalDateTime; @EqualsAndHashCode(callSuper = true) @AllArgsConstructor @NoArgsConstructor -public class FreeSwitchUserResponse extends BaseResponse { +public class FreeSwitchNumberResponse extends BaseResponse { /** * 用户名(SIP用户名) @@ -97,12 +97,12 @@ public class FreeSwitchUserResponse extends BaseResponse { /** * 从实体安全转换为响应对象 */ - public static FreeSwitchUserResponse fromEntitySafe(FreeSwitchUserEntity entity) { + public static FreeSwitchNumberResponse fromEntitySafe(FreeSwitchNumberEntity entity) { if (entity == null) { return null; } - return FreeSwitchUserResponse.builder() + return FreeSwitchNumberResponse.builder() .uid(entity.getUid()) .username(entity.getUsername()) .domain(entity.getDomain()) diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserRestController.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberRestController.java similarity index 66% rename from plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserRestController.java rename to plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberRestController.java index 1957144876..e1d30b20c6 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserRestController.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberRestController.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-06-08 10:00:00 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-06-08 10:00:00 + * @LastEditTime: 2025-06-08 21:31:25 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -11,7 +11,7 @@ * * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. */ -package com.bytedesk.freeswitch.user; +package com.bytedesk.freeswitch.number; import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; @@ -29,60 +29,60 @@ import lombok.AllArgsConstructor; @RestController @RequestMapping("/api/v1/freeswitch/user") @AllArgsConstructor -public class FreeSwitchUserRestController extends BaseRestController { +public class FreeSwitchNumberRestController extends BaseRestController { - private final FreeSwitchUserRestService freeSwitchUserRestService; + private final FreeSwitchNumberRestService freeSwitchNumberRestService; @ActionAnnotation(title = "FreeSwitch用户", action = "组织查询", description = "query freeswitch user by org") @Override - public ResponseEntity queryByOrg(FreeSwitchUserRequest request) { + public ResponseEntity queryByOrg(FreeSwitchNumberRequest request) { - Page users = freeSwitchUserRestService.queryByOrg(request); + Page users = freeSwitchNumberRestService.queryByOrg(request); return ResponseEntity.ok(JsonResult.success(users)); } @ActionAnnotation(title = "FreeSwitch用户", action = "用户查询", description = "query freeswitch user by user") @Override - public ResponseEntity queryByUser(FreeSwitchUserRequest request) { + public ResponseEntity queryByUser(FreeSwitchNumberRequest request) { - Page users = freeSwitchUserRestService.queryByUser(request); + Page users = freeSwitchNumberRestService.queryByUser(request); return ResponseEntity.ok(JsonResult.success(users)); } @ActionAnnotation(title = "FreeSwitch用户", action = "查询", description = "query freeswitch user by uid") @Override - public ResponseEntity queryByUid(FreeSwitchUserRequest request) { + public ResponseEntity queryByUid(FreeSwitchNumberRequest request) { - FreeSwitchUserResponse user = freeSwitchUserRestService.queryByUid(request); + FreeSwitchNumberResponse user = freeSwitchNumberRestService.queryByUid(request); return ResponseEntity.ok(JsonResult.success(user)); } @ActionAnnotation(title = "FreeSwitch用户", action = "创建", description = "create freeswitch user") @Override - public ResponseEntity create(FreeSwitchUserRequest request) { + public ResponseEntity create(FreeSwitchNumberRequest request) { - FreeSwitchUserResponse user = freeSwitchUserRestService.create(request); + FreeSwitchNumberResponse user = freeSwitchNumberRestService.create(request); return ResponseEntity.ok(JsonResult.success(user)); } @ActionAnnotation(title = "FreeSwitch用户", action = "更新", description = "update freeswitch user") @Override - public ResponseEntity update(FreeSwitchUserRequest request) { + public ResponseEntity update(FreeSwitchNumberRequest request) { - FreeSwitchUserResponse user = freeSwitchUserRestService.update(request); + FreeSwitchNumberResponse user = freeSwitchNumberRestService.update(request); return ResponseEntity.ok(JsonResult.success(user)); } @ActionAnnotation(title = "FreeSwitch用户", action = "删除", description = "delete freeswitch user") @Override - public ResponseEntity delete(FreeSwitchUserRequest request) { + public ResponseEntity delete(FreeSwitchNumberRequest request) { - freeSwitchUserRestService.deleteByUid(request.getUid()); + freeSwitchNumberRestService.deleteByUid(request.getUid()); return ResponseEntity.ok(JsonResult.success("删除成功", request.getUid())); } @@ -90,12 +90,12 @@ public class FreeSwitchUserRestController extends BaseRestController { +public class FreeSwitchNumberRestService extends BaseRestServiceWithExcel { - private final FreeSwitchUserRepository freeSwitchUserRepository; + private final FreeSwitchNumberRepository freeSwitchNumberRepository; private final ModelMapper modelMapper; @@ -35,51 +35,51 @@ public class FreeSwitchUserRestService extends BaseRestServiceWithExcel queryByOrgEntity(FreeSwitchUserRequest request) { + public Page queryByOrgEntity(FreeSwitchNumberRequest request) { Pageable pageable = request.getPageable(); - Specification specification = FreeSwitchUserSpecification.search(request); - return freeSwitchUserRepository.findAll(specification, pageable); + Specification specification = FreeSwitchNumberSpecification.search(request); + return freeSwitchNumberRepository.findAll(specification, pageable); } @Override - public Page queryByOrg(FreeSwitchUserRequest request) { - Page entities = queryByOrgEntity(request); + public Page queryByOrg(FreeSwitchNumberRequest request) { + Page entities = queryByOrgEntity(request); return entities.map(this::convertToResponse); } - public Page queryByUserEntity(FreeSwitchUserRequest request) { - UserEntity user = authService.getUser(); - request.setOrgUid(user.getOrgUid()); + public Page queryByNumberEntity(FreeSwitchNumberRequest request) { + // NumberEntity user = authService.getUser(); + // request.setOrgUid(user.getOrgUid()); return queryByOrgEntity(request); } @Override - public Page queryByUser(FreeSwitchUserRequest request) { - Page entities = queryByUserEntity(request); + public Page queryByUser(FreeSwitchNumberRequest request) { + Page entities = queryByNumberEntity(request); return entities.map(this::convertToResponse); } @Override - public Optional findByUid(String uid) { - return freeSwitchUserRepository.findByUid(uid); + public Optional findByUid(String uid) { + return freeSwitchNumberRepository.findByUid(uid); } @Override - public FreeSwitchUserResponse convertToResponse(FreeSwitchUserEntity entity) { - return modelMapper.map(entity, FreeSwitchUserResponse.class); + public FreeSwitchNumberResponse convertToResponse(FreeSwitchNumberEntity entity) { + return modelMapper.map(entity, FreeSwitchNumberResponse.class); } - public FreeSwitchUserEntity convertToEntity(FreeSwitchUserRequest request) { - return modelMapper.map(request, FreeSwitchUserEntity.class); + public FreeSwitchNumberEntity convertToEntity(FreeSwitchNumberRequest request) { + return modelMapper.map(request, FreeSwitchNumberEntity.class); } @Override - public FreeSwitchUserExcel convertToExcel(FreeSwitchUserEntity entity) { - return modelMapper.map(entity, FreeSwitchUserExcel.class); + public FreeSwitchNumberExcel convertToExcel(FreeSwitchNumberEntity entity) { + return modelMapper.map(entity, FreeSwitchNumberExcel.class); } @Override - public FreeSwitchUserResponse create(FreeSwitchUserRequest request) { + public FreeSwitchNumberResponse create(FreeSwitchNumberRequest request) { UserEntity user = authService.getUser(); if (!StringUtils.hasText(request.getOrgUid())) { request.setOrgUid(user.getOrgUid()); @@ -90,15 +90,15 @@ public class FreeSwitchUserRestService extends BaseRestServiceWithExcel optional = findByUid(request.getUid()); + public FreeSwitchNumberResponse update(FreeSwitchNumberRequest request) { + Optional optional = findByUid(request.getUid()); if (!optional.isPresent()) { throw new RuntimeException("FreeSwitch用户不存在"); } - FreeSwitchUserEntity entity = optional.get(); + FreeSwitchNumberEntity entity = optional.get(); // 更新字段 if (StringUtils.hasText(request.getDisplayName())) { @@ -132,7 +132,7 @@ public class FreeSwitchUserRestService extends BaseRestServiceWithExcel optional = findByUid(uid); + Optional optional = findByUid(uid); optional.ifPresent(entity -> { entity.setDeleted(true); save(entity); @@ -164,14 +164,14 @@ public class FreeSwitchUserRestService extends BaseRestServiceWithExcel optional = findByUid(request.getUid()); + public FreeSwitchNumberResponse queryByUid(FreeSwitchNumberRequest request) { + Optional optional = findByUid(request.getUid()); if (optional.isPresent()) { return convertToResponse(optional.get()); } @@ -179,13 +179,13 @@ public class FreeSwitchUserRestService extends BaseRestServiceWithExcel latest = findByUid(entity.getUid()); + Optional latest = findByUid(entity.getUid()); if (latest.isPresent()) { - FreeSwitchUserEntity latestEntity = latest.get(); + FreeSwitchNumberEntity latestEntity = latest.get(); // 将当前修改应用到最新版本 latestEntity.setPassword(entity.getPassword()); latestEntity.setEnabled(entity.getEnabled()); diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserService.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberService.java similarity index 70% rename from plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserService.java rename to plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberService.java index ce475f77b7..553faf5988 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserService.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-06-09 10:00:00 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-06-08 18:47:56 + * @LastEditTime: 2025-06-08 21:32:17 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -11,7 +11,7 @@ * * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. */ -package com.bytedesk.freeswitch.user; +package com.bytedesk.freeswitch.number; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -33,17 +33,17 @@ import java.util.Optional; @Service @AllArgsConstructor @ConditionalOnProperty(name = "bytedesk.freeswitch.enabled", havingValue = "true") -public class FreeSwitchUserService { +public class FreeSwitchNumberService { - private final FreeSwitchUserRepository userRepository; + private final FreeSwitchNumberRepository userRepository; /** * 创建新用户 */ @Transactional - public FreeSwitchUserEntity createUser(String username, String domain, String password, + public FreeSwitchNumberEntity createNumber(String username, String domain, String password, String displayName, String email, String accountcode) { - FreeSwitchUserEntity user = FreeSwitchUserEntity.builder() + FreeSwitchNumberEntity user = FreeSwitchNumberEntity.builder() .username(username) .domain(domain) .password(password) @@ -53,7 +53,7 @@ public class FreeSwitchUserService { .enabled(true) .build(); - FreeSwitchUserEntity saved = userRepository.save(user); + FreeSwitchNumberEntity saved = userRepository.save(user); log.info("创建用户: {} (ID: {}) -> {}@{}", username, saved.getId(), username, domain); return saved; } @@ -61,49 +61,49 @@ public class FreeSwitchUserService { /** * 根据ID查找用户 */ - public Optional findById(Long id) { + public Optional findById(Long id) { return userRepository.findById(id); } /** * 根据用户名查找用户 */ - public Optional findByUsername(String username) { - return userRepository.findByUsername(username); + public Optional findByNumbername(String username) { + return userRepository.findByNumbername(username); } /** * 根据用户名和域名查找用户 */ - public Optional findByUsernameAndDomain(String username, String domain) { - return userRepository.findByUsernameAndDomain(username, domain); + public Optional findByNumbernameAndDomain(String username, String domain) { + return userRepository.findByNumbernameAndDomain(username, domain); } /** * 获取指定域名的用户列表 */ - public List findByDomain(String domain) { + public List findByDomain(String domain) { return userRepository.findByDomain(domain); } /** * 获取所有启用的用户 */ - public List findEnabledUsers() { + public List findEnabledNumbers() { return userRepository.findByEnabledTrue(); } /** * 获取所有用户(分页) */ - public Page findAll(Pageable pageable) { + public Page findAll(Pageable pageable) { return userRepository.findAll(pageable); } /** * 根据域名查找用户(分页) */ - public Page findByDomain(String domain, Pageable pageable) { + public Page findByDomain(String domain, Pageable pageable) { return userRepository.findByDomain(domain, pageable); } @@ -111,9 +111,9 @@ public class FreeSwitchUserService { * 更新用户信息 */ @Transactional - public FreeSwitchUserEntity updateUser(Long id, String password, String displayName, + public FreeSwitchNumberEntity updateNumber(Long id, String password, String displayName, String email, String accountcode) { - FreeSwitchUserEntity user = userRepository.findById(id) + FreeSwitchNumberEntity user = userRepository.findById(id) .orElseThrow(() -> new RuntimeException("用户不存在: " + id)); if (password != null) user.setPassword(password); @@ -121,7 +121,7 @@ public class FreeSwitchUserService { if (email != null) user.setEmail(email); if (accountcode != null) user.setAccountcode(accountcode); - FreeSwitchUserEntity saved = userRepository.save(user); + FreeSwitchNumberEntity saved = userRepository.save(user); log.info("更新用户: {} (ID: {})", user.getUsername(), id); return saved; } @@ -130,8 +130,8 @@ public class FreeSwitchUserService { * 启用用户 */ @Transactional - public void enableUser(Long id) { - FreeSwitchUserEntity user = userRepository.findById(id) + public void enableNumber(Long id) { + FreeSwitchNumberEntity user = userRepository.findById(id) .orElseThrow(() -> new RuntimeException("用户不存在: " + id)); user.setEnabled(true); @@ -143,8 +143,8 @@ public class FreeSwitchUserService { * 禁用用户 */ @Transactional - public void disableUser(Long id) { - FreeSwitchUserEntity user = userRepository.findById(id) + public void disableNumber(Long id) { + FreeSwitchNumberEntity user = userRepository.findById(id) .orElseThrow(() -> new RuntimeException("用户不存在: " + id)); user.setEnabled(false); @@ -156,10 +156,10 @@ public class FreeSwitchUserService { * 更新用户注册信息 */ @Transactional - public void updateUserRegistration(String username, String domain, String registerIp, String userAgent) { - Optional userOpt = userRepository.findByUsernameAndDomain(username, domain); + public void updateNumberRegistration(String username, String domain, String registerIp, String userAgent) { + Optional userOpt = userRepository.findByNumbernameAndDomain(username, domain); if (userOpt.isPresent()) { - FreeSwitchUserEntity user = userOpt.get(); + FreeSwitchNumberEntity user = userOpt.get(); user.setLastRegister(LocalDateTime.now()); user.setRegisterIp(registerIp); user.setUserAgent(userAgent); @@ -174,8 +174,8 @@ public class FreeSwitchUserService { * 删除用户 */ @Transactional - public void deleteUser(Long id) { - FreeSwitchUserEntity user = userRepository.findById(id) + public void deleteNumber(Long id) { + FreeSwitchNumberEntity user = userRepository.findById(id) .orElseThrow(() -> new RuntimeException("用户不存在: " + id)); userRepository.delete(user); @@ -185,7 +185,7 @@ public class FreeSwitchUserService { /** * 获取在线用户列表 */ - public List findOnlineUsers() { + public List findOnlineNumbers() { LocalDateTime cutoffTime = LocalDateTime.now().minusMinutes(5); return userRepository.findByEnabledTrueAndLastRegisterAfter(cutoffTime); } @@ -193,14 +193,14 @@ public class FreeSwitchUserService { /** * 根据邮箱查找用户 */ - public List findByEmail(String email) { + public List findByEmail(String email) { return userRepository.findByEmail(email); } /** * 根据账户代码查找用户 */ - public List findByAccountcode(String accountcode) { + public List findByAccountcode(String accountcode) { return userRepository.findByAccountcode(accountcode); } @@ -236,17 +236,17 @@ public class FreeSwitchUserService { /** * 检查用户名和域名组合是否存在 */ - public boolean existsByUsernameAndDomain(String username, String domain) { - return userRepository.existsByUsernameAndDomain(username, domain); + public boolean existsByNumbernameAndDomain(String username, String domain) { + return userRepository.existsByNumbernameAndDomain(username, domain); } /** * 验证用户密码 */ - public boolean validateUserPassword(String username, String domain, String password) { - Optional userOpt = userRepository.findByUsernameAndDomain(username, domain); + public boolean validateNumberPassword(String username, String domain, String password) { + Optional userOpt = userRepository.findByNumbernameAndDomain(username, domain); if (userOpt.isPresent()) { - FreeSwitchUserEntity user = userOpt.get(); + FreeSwitchNumberEntity user = userOpt.get(); return user.getEnabled() && user.getPassword().equals(password); } return false; @@ -257,9 +257,9 @@ public class FreeSwitchUserService { */ @Transactional public void updateLastRegistration(String username, LocalDateTime lastRegistration) { - Optional userOpt = userRepository.findByUsername(username); + Optional userOpt = userRepository.findByNumbername(username); if (userOpt.isPresent()) { - FreeSwitchUserEntity user = userOpt.get(); + FreeSwitchNumberEntity user = userOpt.get(); user.setLastRegister(lastRegistration); userRepository.save(user); log.debug("更新用户 {} 最后注册时间: {}", username, lastRegistration); diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserSpecification.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberSpecification.java similarity index 92% rename from plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserSpecification.java rename to plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberSpecification.java index 4dcefe5c36..065e7dd426 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserSpecification.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/FreeSwitchNumberSpecification.java @@ -11,7 +11,7 @@ * * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. */ -package com.bytedesk.freeswitch.user; +package com.bytedesk.freeswitch.number; import java.util.ArrayList; import java.util.List; @@ -25,9 +25,9 @@ import jakarta.persistence.criteria.Predicate; import lombok.extern.slf4j.Slf4j; @Slf4j -public class FreeSwitchUserSpecification extends BaseSpecification { +public class FreeSwitchNumberSpecification extends BaseSpecification { - public static Specification search(FreeSwitchUserRequest request) { + public static Specification search(FreeSwitchNumberRequest request) { log.info("request: {}", request); return (root, query, criteriaBuilder) -> { List predicates = new ArrayList<>(); diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/event/FreeSwitchNumberCreateEvent.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/event/FreeSwitchNumberCreateEvent.java new file mode 100644 index 0000000000..2ba22627c0 --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/event/FreeSwitchNumberCreateEvent.java @@ -0,0 +1,28 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 22:10:00 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.number.event; + +import com.bytedesk.freeswitch.number.FreeSwitchNumberEntity; + +import lombok.Getter; + +@Getter +public class FreeSwitchNumberCreateEvent { + + private final FreeSwitchNumberEntity user; + + public FreeSwitchNumberCreateEvent(FreeSwitchNumberEntity user) { + this.user = user; + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/event/FreeSwitchNumberUpdateEvent.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/event/FreeSwitchNumberUpdateEvent.java new file mode 100644 index 0000000000..2e888bd6a1 --- /dev/null +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/event/FreeSwitchNumberUpdateEvent.java @@ -0,0 +1,28 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-06-09 10:00:00 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-06-08 22:10:00 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.freeswitch.number.event; + +import com.bytedesk.freeswitch.number.FreeSwitchNumberEntity; + +import lombok.Getter; + +@Getter +public class FreeSwitchNumberUpdateEvent { + + private final FreeSwitchNumberEntity user; + + public FreeSwitchNumberUpdateEvent(FreeSwitchNumberEntity user) { + this.user = user; + } +} diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/package-info.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/package-info.java similarity index 59% rename from plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/package-info.java rename to plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/package-info.java index 6f849509ec..55f9182939 100644 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/package-info.java +++ b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/number/package-info.java @@ -1,5 +1,5 @@ @NonNullApi -package com.bytedesk.freeswitch.user; +package com.bytedesk.freeswitch.number; import org.springframework.lang.NonNullApi; diff --git a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserEntityListener.java b/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserEntityListener.java deleted file mode 100644 index baf11cdfc0..0000000000 --- a/plugins/freeswitch/src/main/java/com/bytedesk/freeswitch/user/FreeSwitchUserEntityListener.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @Author: jackning 270580156@qq.com - * @Date: 2025-06-09 10:00:00 - * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-06-09 10:00:00 - * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk - * Please be aware of the BSL license restrictions before installing Bytedesk IM – - * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. - * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE - * contact: 270580156@qq.com - * - * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. - */ -package com.bytedesk.freeswitch.user; - -import org.springframework.stereotype.Component; - -import jakarta.persistence.PostPersist; -import jakarta.persistence.PostUpdate; -import lombok.extern.slf4j.Slf4j; - -/** - * FreeSwitch用户实体监听器 - */ -@Slf4j -@Component -public class FreeSwitchUserEntityListener { - - @PostPersist - public void postPersist(FreeSwitchUserEntity entity) { - log.info("FreeSwitch用户创建: username={}, domain={}", - entity.getUsername(), entity.getDomain()); - } - - @PostUpdate - public void postUpdate(FreeSwitchUserEntity entity) { - log.info("FreeSwitch用户更新: username={}, enabled={}", - entity.getUsername(), entity.getEnabled()); - } -}