diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/AnchorController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/AnchorController.java index 96e18ce4..65ffe53a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/AnchorController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/AnchorController.java @@ -8,6 +8,7 @@ import com.ruoyi.cai.domain.UserCameraAudit; import com.ruoyi.cai.domain.UserOnline; import com.ruoyi.cai.dto.admin.vo.AnchorAdminVo; import com.ruoyi.cai.dto.admin.vo.AnchorFullAdminVo; +import com.ruoyi.cai.dto.app.query.IdReq; import com.ruoyi.cai.enums.AuditStatusEnum; import com.ruoyi.cai.notice.YunxinHttpService; import com.ruoyi.cai.service.*; @@ -108,6 +109,15 @@ public class AnchorController extends BaseController { return toAjax(anchorService.updateById(bo)); } + + @SaCheckPermission("cai:anchor:edit") + @Log(title = "女神列表", businessType = BusinessType.DELETE) + @PostMapping("updateVideoStatusOnline") + public R updateVideoStatusOnline(@RequestBody IdReq idReq) { + anchorService.updateVideoStatusOnline(idReq.getId()); + return R.ok(); + } + @Autowired private YunxinHttpService yunxinHttpService; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/executor/ExecutorConstant.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/executor/ExecutorConstant.java index 2163e61d..8da041e4 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/executor/ExecutorConstant.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/executor/ExecutorConstant.java @@ -2,6 +2,7 @@ package com.ruoyi.cai.executor; import com.alibaba.ttl.threadpool.TtlExecutors; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import lombok.extern.slf4j.Slf4j; import java.util.concurrent.*; @@ -10,6 +11,7 @@ import java.util.concurrent.*; *

created on 2023/3/3 11:16

* @author ZL */ +@Slf4j public class ExecutorConstant { // private final static int CPU_NUM = Runtime.getRuntime().availableProcessors(); @@ -18,9 +20,19 @@ public class ExecutorConstant { public static Executor SYNC_EXECUTOR; public static Executor COMMON_EXECUTOR; + public static Executor SMS_EXECUTOR; public static Executor ROOM_EXECUTOR; static { + ThreadPoolExecutor smsExecutor = new ThreadPoolExecutor(CPU_NUM, + CPU_NUM << 2, + 5, + TimeUnit.SECONDS, + new SynchronousQueue<>(), + init("smsExecutor-%d")); + SMS_EXECUTOR = TtlExecutors.getTtlExecutor(smsExecutor); + + ThreadPoolExecutor syncExecutor = initExecutor(CPU_NUM, CPU_NUM << 2, 5, @@ -49,10 +61,6 @@ public class ExecutorConstant { } - public static void main(String[] args) { - System.out.println(6 << 2); - } - private static ThreadFactory init(String nameFormat){ return new ThreadFactoryBuilder().setNameFormat(nameFormat).build(); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/kit/AliSmsKit.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/kit/AliSmsKit.java index eb942380..9a7d129f 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/kit/AliSmsKit.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/kit/AliSmsKit.java @@ -13,6 +13,7 @@ import com.aliyuncs.profile.IClientProfile; import com.google.common.collect.Lists; import com.ruoyi.cai.config.AliSmsProperties; import com.ruoyi.cai.enums.CodeEnum; +import com.ruoyi.cai.executor.ExecutorConstant; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -102,9 +103,9 @@ public class AliSmsKit { public boolean sendMessage(String phone, String messageTemplate, String messageCode, boolean isAsy) { if (isAsy) { - new Thread(() -> { - sendMessage(phone, messageTemplate, messageCode); - }).start(); + ExecutorConstant.SMS_EXECUTOR.execute(() -> { + sendMessage(phone, messageTemplate, messageCode); + }); return true; } else { return sendMessage(phone, messageTemplate, messageCode); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AnchorService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AnchorService.java index b6d92302..478e761c 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AnchorService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AnchorService.java @@ -29,4 +29,6 @@ public interface AnchorService extends IService { void updateVideoStatus(Long userId, int videoStatus); void incsServiceTimeAndCount(Long roomId); + + void updateVideoStatusOnline(Long userId); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorServiceImpl.java index e653ea67..251fe0bb 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorServiceImpl.java @@ -17,6 +17,7 @@ import com.ruoyi.cai.notice.YunxinHttpService; import com.ruoyi.cai.service.AnchorService; import com.ruoyi.cai.service.UserCallService; import com.ruoyi.cai.service.UserService; +import com.ruoyi.cai.ws.constant.RoomStatusEnums; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.exception.ServiceException; import lombok.RequiredArgsConstructor; @@ -24,6 +25,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; + /** * 女神列表Service业务层处理 * @@ -139,4 +142,23 @@ public class AnchorServiceImpl extends ServiceImpl impleme baseMapper.incsServiceTimeAndCount(userCall.getToUid(), userCall.getCallTime(), 1); } } + + @Override + public void updateVideoStatusOnline(Long userId) { + Anchor anchor = this.getByUserId(userId); + if(anchor.getVideoStatus() == 0){ + throw new ServiceException("主播拨打状态已经是空闲中"); + } + UserCall one = userCallService.getOne(Wrappers.lambdaQuery(UserCall.class).eq(UserCall::getToUid, userId).orderByDesc(UserCall::getCreateTime).last("limit 1")); + if(one != null){ + if(one.getCreateTime().plusMinutes(3).isAfter(LocalDateTime.now())){ + throw new ServiceException("主播最近一次通话时间,没超过3分钟,不允许修改状态为空闲"); + } + if(RoomStatusEnums.STATUS_AGREE.getCode().equals(one.getStatus())){ + throw new ServiceException("检测到主播正在通话中,不允许修改为空闲"); + } + } + userService.updateVideoStatus(userId,0); + this.updateVideoStatus(userId,0); + } }