From 86c149ca09ce5a2b0f2727efaae1d437fc2825d8 Mon Sep 17 00:00:00 2001 From: 777 <123@qwe.com> Date: Sun, 23 Feb 2025 18:18:34 +0800 Subject: [PATCH] 33333333333 --- doc/2024-02-13.sql | 2 + .../java/com/ruoyi/cai/domain/Anchor.java | 5 +++ .../com/ruoyi/cai/domain/PayTrdConfig.java | 1 + .../dto/app/query/index/AnchorListQuery.java | 2 + .../com/ruoyi/cai/manager/HomeManager.java | 4 ++ .../ruoyi/cai/notice/YunxinWsServiceV2.java | 13 ++++++ .../service/impl/PayTrdConfigServiceImpl.java | 40 ++++++++++++++++++- .../handler/message/CancelMessageHandler.java | 8 +++- .../ruoyi/cai/ws/manager/WsAnchorManager.java | 21 ++++++++++ .../resources/mapper/cai/AnchorMapper.xml | 3 ++ 10 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 doc/2024-02-13.sql create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WsAnchorManager.java diff --git a/doc/2024-02-13.sql b/doc/2024-02-13.sql new file mode 100644 index 00000000..4f63ed5b --- /dev/null +++ b/doc/2024-02-13.sql @@ -0,0 +1,2 @@ +ALTER TABLE `cai_anchor` ADD COLUMN `hidden_status` tinyint NOT NULL DEFAULT 0 COMMENT '是否隐藏状态'; +ALTER TABLE `cai_pay_trd_config` ADD COLUMN `for_num` tinyint NOT NULL DEFAULT 1 COMMENT '轮训次数'; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Anchor.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Anchor.java index 24f41832..25642e22 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Anchor.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Anchor.java @@ -90,6 +90,11 @@ public class Anchor implements Serializable{ */ private LocalDateTime topShowRank; + /** + * 隐藏状态 开启后则普通用户无法在首页看到,主播自己不受影响,且该用户无法收到接收到通话邀请 + */ + private Integer hiddenStatus; + /** * 是否允许 发布群发 */ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/PayTrdConfig.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/PayTrdConfig.java index 2d27cc4e..8cb69aa0 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/PayTrdConfig.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/PayTrdConfig.java @@ -49,6 +49,7 @@ public class PayTrdConfig implements Serializable { * 秘钥 */ private String sign; + private Integer forNum; private String aliProductId; private String wxProductId; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/index/AnchorListQuery.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/index/AnchorListQuery.java index 7cc0adee..ad0f3de9 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/index/AnchorListQuery.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/index/AnchorListQuery.java @@ -27,5 +27,7 @@ public class AnchorListQuery { @Schema(hidden = true) private Integer onlineStatus; @Schema(hidden = true) + private boolean hiddenStatusUser = false; + @Schema(hidden = true) private List ignoreUserIds; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/HomeManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/HomeManager.java index dcf6c14b..710f9e39 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/HomeManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/HomeManager.java @@ -123,6 +123,10 @@ public class HomeManager { pageQuery.resetPageSize(); query.setOnlineStatus(1); query.setOpenVideoStatus(1); + Anchor anchor = anchorService.getByUserId(LoginHelper.getUserId()); + if(anchor != null && anchor.getHiddenStatus() == 1){ + query.setHiddenStatusUser(true); + } Page page = anchorService.pageAppV2(pageQuery, query); return page.getRecords(); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinWsServiceV2.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinWsServiceV2.java index ddc1b027..1b1824a3 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinWsServiceV2.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinWsServiceV2.java @@ -1,10 +1,13 @@ package com.ruoyi.cai.notice; import com.alibaba.fastjson.JSON; +import com.ruoyi.cai.domain.Anchor; import com.ruoyi.cai.notice.data.ImVideoAttachR; import com.ruoyi.cai.notice.data.ImVideoR; import com.ruoyi.cai.notice.data.child.ImVideoAttachData; import com.ruoyi.cai.notice.data.child.ImVideoData; +import com.ruoyi.cai.service.AnchorService; +import com.ruoyi.cai.ws.manager.WsAnchorManager; import com.ruoyi.yunxin.YunExecutor; import com.ruoyi.yunxin.Yunxin; import com.ruoyi.cai.notice.enums.CallNoticeEnum; @@ -21,12 +24,22 @@ public class YunxinWsServiceV2 { @Autowired private Yunxin yunxin; + @Autowired + private AnchorService anchorService; + @Autowired + private WsAnchorManager wsAnchorManager; /** * 系统自定义消息通知主播接听电话 */ public void sendCallAsync(Long roomId,Long callId,Long receiverId){ YunExecutor.YUN_EXECUTOR.execute(() -> { + // 检查主播是否被特殊标记 + boolean anchorIsHidden = wsAnchorManager.anchorIsHidden(receiverId); + if(anchorIsHidden){ + log.warn("主播接收到邀请,但是被强制拦截 receiverId={} ", receiverId); + return; + } ImVideoAttachData data = new ImVideoAttachData(); data.setRoomid(roomId); ImVideoAttachR res = ImVideoAttachR.ok(data); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTrdConfigServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTrdConfigServiceImpl.java index 673a8598..c0b1dc05 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTrdConfigServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTrdConfigServiceImpl.java @@ -54,6 +54,7 @@ public class PayTrdConfigServiceImpl extends ServiceImpl ACCOUNT_MAP = new ConcurrentHashMap<>(); private final static List PAY_TRD_CONFIG_LIST = new CopyOnWriteArrayList<>(); + private final static AtomicLong NO_ACCOUNT_FLAG = new AtomicLong(0); @PostConstruct public void init(){ @@ -78,7 +79,7 @@ public class PayTrdConfigServiceImpl extends ServiceImpl list = new ArrayList<>(); + for(PayTrdConfig payTrdConfig : PAY_TRD_CONFIG_LIST){ + if(wx){ + if(payTrdConfig.getEnableWxStatus() == 0){ + continue; + } + }else{ + if(payTrdConfig.getEnableStatus() == 0){ + continue; + } + } + if(payTrdConfig.getForNum() < 1){ + continue; + } + list.add(payTrdConfig); + } + if(list.isEmpty()){ + return null; + } + Integer totalWeight = list.stream().map(PayTrdConfig::getForNum).reduce(0, Integer::sum); + long position = NO_ACCOUNT_FLAG.getAndIncrement(); + long round = position % totalWeight; + for(PayTrdConfig payTrdConfig : list){ + if(round < payTrdConfig.getForNum()){ + return payTrdConfig; + } + round = round - payTrdConfig.getForNum(); + } + return null; + } + private PayTrdConfig getConfig(BigDecimal amount,boolean wx){ List list = new ArrayList<>(); for(PayTrdConfig payTrdConfig : PAY_TRD_CONFIG_LIST){ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java index d80a8925..69c76d62 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java @@ -15,6 +15,7 @@ import com.ruoyi.cai.ws.constant.RoomStatusEnums; import com.ruoyi.cai.ws.dto.WsRMsgGen; import com.ruoyi.cai.ws.handler.AbstractMessageHandle; import com.ruoyi.cai.ws.handler.IMessageHandler; +import com.ruoyi.cai.ws.manager.WsAnchorManager; import com.ruoyi.cai.ws.service.RoomService; import com.ruoyi.cai.notice.enums.CallNoticeEnum; import org.springframework.beans.factory.annotation.Autowired; @@ -35,6 +36,8 @@ public class CancelMessageHandler extends AbstractMessageHandle implements IMess private UserService userService; @Autowired private AnchorService anchorService; + @Autowired + private WsAnchorManager anchorManager; @Override public void processOn(Room room, FdCtxData fdCtxData, JSONObject map) { @@ -56,7 +59,10 @@ public class CancelMessageHandler extends AbstractMessageHandle implements IMess // IM Long receiverId = room.getReceiverId(); Long callerId = room.getCallId(); - yunxinWsService.sendToCallNotify(receiverId,callerId, CallNoticeEnum.CLOSE,0L); + boolean anchorIsHidden = anchorManager.anchorIsHidden(receiverId); + if(!anchorIsHidden){ + yunxinWsService.sendToCallNotify(receiverId,callerId, CallNoticeEnum.CLOSE,0L); + } // 更新房间状态 userCallService.update(Wrappers.lambdaUpdate(UserCall.class) .eq(UserCall::getId,roomId) diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WsAnchorManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WsAnchorManager.java new file mode 100644 index 00000000..5b756dd3 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WsAnchorManager.java @@ -0,0 +1,21 @@ +package com.ruoyi.cai.ws.manager; + +import com.ruoyi.cai.domain.Anchor; +import com.ruoyi.cai.service.AnchorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.stereotype.Component; + +@Component +public class WsAnchorManager { + @Autowired + private AnchorService anchorService; + + public boolean anchorIsHidden(Long userId){ + Anchor anchor = anchorService.getByUserId(userId); + if(anchor != null && anchor.getHiddenStatus() == 1){ + return true; + } + return false; + } +} diff --git a/ruoyi-cai/src/main/resources/mapper/cai/AnchorMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/AnchorMapper.xml index 81702ed0..8e56b87b 100644 --- a/ruoyi-cai/src/main/resources/mapper/cai/AnchorMapper.xml +++ b/ruoyi-cai/src/main/resources/mapper/cai/AnchorMapper.xml @@ -106,6 +106,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and t2.open_video_status = #{query.openVideoStatus} + + and t2.hidden_status = 0 + order by t2.top_show_rank desc