diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/IndexController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/IndexController.java index 57b10101..2c59500a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/IndexController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/IndexController.java @@ -29,7 +29,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.management.ObjectName; import java.util.List; @@ -58,10 +57,8 @@ public class IndexController { @Log(title = "获取APP系统核心参数", businessType = BusinessType.OTHER, isSaveDb = false) @SaIgnore public R config(){ - AppHomeConfig config = new AppHomeConfig(); - config.setOssDomain(systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN)); - config.setOpenWithdraw(systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_WITHDRAW)); - return R.ok(config); + AppHomeConfig appHomeConfig = homeManager.config(); + return R.ok(appHomeConfig); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/UserAppController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/UserAppController.java index f01a9cd0..36220e92 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/UserAppController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/UserAppController.java @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.cai.app; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.cai.domain.UserAlbum; import com.ruoyi.cai.dto.app.query.album.AlbumAddReq; import com.ruoyi.cai.dto.app.query.IdRes; @@ -8,15 +9,18 @@ import com.ruoyi.cai.dto.app.query.user.UserUpdateReq; import com.ruoyi.cai.dto.app.query.member.UpdateNoGreet; import com.ruoyi.cai.dto.app.query.member.UpdateRankHideReq; import com.ruoyi.cai.dto.app.vo.CurrentUserInfoVo; +import com.ruoyi.cai.dto.app.vo.UserCallAppVo; import com.ruoyi.cai.dto.app.vo.user.CurrentUserUpdateInfoVo; import com.ruoyi.cai.dto.app.vo.user.MemberInfoVo; import com.ruoyi.cai.dto.app.vo.user.UserAlbumAuditVo; import com.ruoyi.cai.dto.app.vo.user.UserAvatarMinVo; import com.ruoyi.cai.manager.CurrentUserManager; import com.ruoyi.cai.service.UserAlbumService; +import com.ruoyi.cai.service.UserCallService; import com.ruoyi.cai.service.UserMemberService; import com.ruoyi.cai.service.UserOnlineService; import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.helper.LoginHelper; @@ -28,6 +32,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping("/api/user") @Tag(name = "用户相关接口") @@ -144,6 +150,17 @@ public class UserAppController { return R.ok(vo); } + @Autowired + private UserCallService userCallService; + + @GetMapping("/callLog/page") + @Operation(summary = "通话记录查询-分页") + @Log(title = "通话记录查询", businessType = BusinessType.OTHER, isSaveDb = true) + public R> callLog(PageQuery pageQuery, + @Parameter(description = "当前用户在通话中的类型 0=全部 1=主叫方 2=接收方") Integer type){ + IPage page = userCallService.pageApp(pageQuery, type, LoginHelper.getUserId()); + return R.ok(page.getRecords()); + } /*@PostMapping("/album/reset") @Operation(summary = "重排序相册",hidden = true) @Log(title = "重排序相册", businessType = BusinessType.OTHER, isSaveDb = false) diff --git a/ruoyi-admin/src/test/java/com/ruoyi/test/business/NoticeTest.java b/ruoyi-admin/src/test/java/com/ruoyi/test/business/NoticeTest.java index f0bf2a3e..b3244816 100644 --- a/ruoyi-admin/src/test/java/com/ruoyi/test/business/NoticeTest.java +++ b/ruoyi-admin/src/test/java/com/ruoyi/test/business/NoticeTest.java @@ -2,7 +2,7 @@ package com.ruoyi.test.business; import com.ruoyi.cai.domain.Gift; import com.ruoyi.cai.domain.User; -import com.ruoyi.cai.mq.handle.dto.WindowRechargeDTO; +import com.ruoyi.cai.mq.handle.dto.WindowRechargeNotifyDTO; import com.ruoyi.cai.notice.YunxinHttpService; import com.ruoyi.cai.notice.data.child.SendGiftWindowsAmountNoticeData; import com.ruoyi.cai.service.GiftService; @@ -169,7 +169,7 @@ public class NoticeTest { @Test public void sendRechargeWindowsAmount(){ User followUser = userService.getById(10166L); - WindowRechargeDTO dto = new WindowRechargeDTO(); + WindowRechargeNotifyDTO dto = new WindowRechargeNotifyDTO(); dto.setId(10166L); dto.setNickname(followUser.getNickname()); dto.setAvatar(followUser.getAvatar()); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/UserCallAppVo.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/UserCallAppVo.java new file mode 100644 index 00000000..d287eef2 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/UserCallAppVo.java @@ -0,0 +1,39 @@ +package com.ruoyi.cai.dto.app.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class UserCallAppVo { + + @Schema(description = "通话ID") + private Long id; + @Schema(description = "通话类型,标识当前用户是哪一方 1=主叫方 2=接收方") + private Integer type; + @Schema(description = "通话对方的用户类型(好像没撒用,这里返回的0=普通用户 1=内部用户)") + private Integer otherType; + @Schema(description = "通话状态 1=取消 2=拒绝 3=超时 4=已接通") + private Integer status; + @Schema(description = "通话状态文字") + private String statusText; + @Schema(description = "通话对方的用户ID") + private Long userId; + @Schema(description = "通话对方的用户蜜瓜号") + private String usercode; + @Schema(description = "通话对方的用户昵称") + private String nickname; + @Schema(description = "通话对方的用户头像") + private String avatar; + @Schema(description = "通话对方的用户性别") + private Integer gender; + @Schema(description = "通话对方的用户年龄") + private Long age; + @Schema(description = "通话对方的所在城市") + private String city; + @Schema(description = "通话对方的所属城市ID") + private Integer cityId; + @Schema(description = "开始通话时间") + private LocalDateTime createTime; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/setting/AppHomeConfig.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/setting/AppHomeConfig.java index 4ea42596..a3de4582 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/setting/AppHomeConfig.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/setting/AppHomeConfig.java @@ -9,4 +9,8 @@ public class AppHomeConfig { private String ossDomain; @Schema(description = "是否开启提现") private boolean openWithdraw = true; + @Schema(description = "系统通知IM ID") + private String sysId = "2"; + @Schema(description = "客服IM ID") + private String servId = "4"; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java index c6477a0a..d282a3c6 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java @@ -12,8 +12,8 @@ import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp; import com.ruoyi.cai.dto.video.VideoSettleResp; import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.mq.AmqpProducer; -import com.ruoyi.cai.mq.handle.dto.WindowGiftDTO; -import com.ruoyi.cai.mq.handle.dto.WindowRechargeDTO; +import com.ruoyi.cai.mq.handle.dto.WindowGiftNotifyDTO; +import com.ruoyi.cai.mq.handle.dto.WindowRechargeNotifyDTO; import com.ruoyi.cai.notice.YunxinHttpService; import com.ruoyi.cai.pay.PayTypeEnum; import com.ruoyi.cai.rank.RankManager; @@ -97,7 +97,7 @@ public class ConsumerManager { User fromUser = userService.getById(resp.getFromUid()); Integer rankHide = fromUser.getRankHide(); if(rankHide == 0){ - WindowGiftDTO windowGift = new WindowGiftDTO(); + WindowGiftNotifyDTO windowGift = new WindowGiftNotifyDTO(); windowGift.setFromId(resp.getFromUid()); windowGift.setToId(resp.getToUid()); windowGift.setGift(resp.getGift()); @@ -146,7 +146,7 @@ public class ConsumerManager { if(resp.getRechargeCoin() > minPrice){ Integer rankHide = resp.getUser().getRankHide(); if(rankHide == 0){ - WindowRechargeDTO windowRecharge = new WindowRechargeDTO(); + WindowRechargeNotifyDTO windowRecharge = new WindowRechargeNotifyDTO(); windowRecharge.setId(resp.getUserId()); windowRecharge.setNickname(resp.getUser().getNickname()); windowRecharge.setAvatar(resp.getUser().getAvatar()); 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 081df3b0..f07d9d60 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 @@ -4,9 +4,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.cai.constant.RedisHttpConstant; import com.ruoyi.cai.dto.app.query.index.AnchorListQuery; import com.ruoyi.cai.dto.app.vo.AnchorListVo; +import com.ruoyi.cai.dto.app.vo.setting.AppHomeConfig; +import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.enums.home.AnchorListQueryTypeEnum; +import com.ruoyi.cai.mq.AmqpProducer; +import com.ruoyi.cai.mq.handle.dto.LoginNotifyDTO; import com.ruoyi.cai.service.AnchorService; import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.helper.LoginHelper; import org.redisson.api.RBucket; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; @@ -98,4 +103,22 @@ public class HomeManager { int endIndex = Math.min(limit, vos.size()); return vos.subList(0, endIndex); } + + @Autowired + private SystemConfigManager systemConfigManager; + @Autowired + private AmqpProducer amqpProducer; + + public AppHomeConfig config() { + AppHomeConfig config = new AppHomeConfig(); + config.setOssDomain(systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN)); + config.setOpenWithdraw(systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_WITHDRAW)); + Long userId = LoginHelper.getUserId(); + if(userId != null){ + LoginNotifyDTO loginUserDTO = new LoginNotifyDTO(); + loginUserDTO.setUserId(userId); + amqpProducer.sendCommonMq(loginUserDTO); + } + return config; + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonConsumerEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonConsumerEnum.java index 53cbd091..8fd02425 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonConsumerEnum.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonConsumerEnum.java @@ -1,6 +1,6 @@ package com.ruoyi.cai.mq.dto; public enum CommonConsumerEnum { - RANK,WINDOW_GIFT,WINDOW_RECHARGE, - SYS_PUSH + WINDOW_GIFT,WINDOW_RECHARGE, + SYS_PUSH,RANK,LOGIN } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java new file mode 100644 index 00000000..90feecf1 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java @@ -0,0 +1,34 @@ +package com.ruoyi.cai.mq.handle; + +import com.alibaba.fastjson2.JSON; +import com.ruoyi.cai.mq.dto.CommonConsumerEnum; +import com.ruoyi.cai.mq.handle.dto.LoginNotifyDTO; +import com.ruoyi.cai.mq.handle.dto.RankNotifyDTO; +import com.ruoyi.cai.rank.RankManager; +import com.ruoyi.framework.OnlineUserTodayCache; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class LoginNotifyHandle implements IHandle { + + @Autowired + private OnlineUserTodayCache onlineUserTodayCache; + + @Override + public void run(String message) { + LoginNotifyDTO loginNotify = JSON.parseObject(message, LoginNotifyDTO.class); + boolean todayFirstLogin = onlineUserTodayCache.addOnlineUserId(loginNotify.getUserId()); + // 上线通知 + + + + } + + @Override + public CommonConsumerEnum getType() { + return CommonConsumerEnum.LOGIN; + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/RankHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/RankNotifyHandle.java similarity index 76% rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/RankHandle.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/RankNotifyHandle.java index 4a8c1ba4..8ef0d162 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/RankHandle.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/RankNotifyHandle.java @@ -2,7 +2,7 @@ package com.ruoyi.cai.mq.handle; import com.alibaba.fastjson2.JSON; import com.ruoyi.cai.mq.dto.CommonConsumerEnum; -import com.ruoyi.cai.mq.handle.dto.RankDTO; +import com.ruoyi.cai.mq.handle.dto.RankNotifyDTO; import com.ruoyi.cai.rank.RankManager; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -10,13 +10,13 @@ import org.springframework.stereotype.Component; @Component @Slf4j -public class RankHandle implements IHandle { +public class RankNotifyHandle implements IHandle { @Autowired private RankManager rankManager; @Override public void run(String message) { - RankDTO rank = JSON.parseObject(message, RankDTO.class); + RankNotifyDTO rank = JSON.parseObject(message, RankNotifyDTO.class); rankManager.addRank(rank); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/SysPushHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/SysPushNotifyHandle.java similarity index 78% rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/SysPushHandle.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/SysPushNotifyHandle.java index a120e16c..4cc242cf 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/SysPushHandle.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/SysPushNotifyHandle.java @@ -2,7 +2,7 @@ package com.ruoyi.cai.mq.handle; import com.alibaba.fastjson2.JSON; import com.ruoyi.cai.mq.dto.CommonConsumerEnum; -import com.ruoyi.cai.mq.handle.dto.SysPushDTO; +import com.ruoyi.cai.mq.handle.dto.SysPushNotifyDTO; import com.ruoyi.cai.service.SysPushService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -10,14 +10,14 @@ import org.springframework.stereotype.Component; @Component @Slf4j -public class SysPushHandle implements IHandle{ +public class SysPushNotifyHandle implements IHandle{ @Autowired private SysPushService sysPushService; @Override public void run(String message) { try { - SysPushDTO sysPush = JSON.parseObject(message, SysPushDTO.class); + SysPushNotifyDTO sysPush = JSON.parseObject(message, SysPushNotifyDTO.class); sysPushService.doRun(sysPush.getSysPushId()); }catch (Exception e){ log.error("处理推送消息失败!",e); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowGiftHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowGiftNotifyHandle.java similarity index 83% rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowGiftHandle.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowGiftNotifyHandle.java index e773b7eb..7e065801 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowGiftHandle.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowGiftNotifyHandle.java @@ -5,12 +5,11 @@ import com.google.common.collect.Lists; import com.ruoyi.cai.domain.Gift; import com.ruoyi.cai.domain.User; import com.ruoyi.cai.mq.dto.CommonConsumerEnum; -import com.ruoyi.cai.mq.handle.dto.WindowGiftDTO; +import com.ruoyi.cai.mq.handle.dto.WindowGiftNotifyDTO; import com.ruoyi.cai.notice.YunxinHttpService; import com.ruoyi.cai.notice.data.child.SendGiftWindowsAmountNoticeData; import com.ruoyi.cai.service.UserService; -import com.ruoyi.cai.util.CaiDateUtil; -import com.ruoyi.framework.OnlineTodayCache; +import com.ruoyi.framework.OnlineUserTodayCache; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -19,22 +18,22 @@ import java.util.List; import java.util.Set; @Component -public class WindowGiftHandle implements IHandle{ +public class WindowGiftNotifyHandle implements IHandle{ @Autowired private YunxinHttpService yunxinHttpService; @Autowired - private OnlineTodayCache onlineTodayCache; + private OnlineUserTodayCache onlineUserTodayCache; @Autowired private UserService userService; @Override public void run(String message) { - WindowGiftDTO windowGift = JSON.parseObject(message, WindowGiftDTO.class); + WindowGiftNotifyDTO windowGift = JSON.parseObject(message, WindowGiftNotifyDTO.class); User fromUser = userService.getById(windowGift.getFromId()); User toUser = userService.getById(windowGift.getToId()); Gift gift = windowGift.getGift(); - Set userIds = onlineTodayCache.getAllOnlineToday(); + Set userIds = onlineUserTodayCache.getAllOnlineToday(); List userIdList = new ArrayList<>(userIds); List> lists = Lists.partition(userIdList, 300); for (List list : lists) { diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowRechargeHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowRechargeNotifyHandle.java similarity index 69% rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowRechargeHandle.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowRechargeNotifyHandle.java index e198ef5d..d168a422 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowRechargeHandle.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowRechargeNotifyHandle.java @@ -3,9 +3,9 @@ package com.ruoyi.cai.mq.handle; import com.alibaba.fastjson2.JSON; import com.google.common.collect.Lists; import com.ruoyi.cai.mq.dto.CommonConsumerEnum; -import com.ruoyi.cai.mq.handle.dto.WindowRechargeDTO; +import com.ruoyi.cai.mq.handle.dto.WindowRechargeNotifyDTO; import com.ruoyi.cai.notice.YunxinHttpService; -import com.ruoyi.framework.OnlineTodayCache; +import com.ruoyi.framework.OnlineUserTodayCache; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -14,17 +14,17 @@ import java.util.List; import java.util.Set; @Component -public class WindowRechargeHandle implements IHandle{ +public class WindowRechargeNotifyHandle implements IHandle{ @Autowired private YunxinHttpService yunxinHttpService; @Autowired - private OnlineTodayCache onlineTodayCache; + private OnlineUserTodayCache onlineUserTodayCache; @Override public void run(String message) { - WindowRechargeDTO windowRecharge = JSON.parseObject(message, WindowRechargeDTO.class); - Set userIds = onlineTodayCache.getAllOnlineToday(); + WindowRechargeNotifyDTO windowRecharge = JSON.parseObject(message, WindowRechargeNotifyDTO.class); + Set userIds = onlineUserTodayCache.getAllOnlineToday(); List userIdList = new ArrayList<>(userIds); List> lists = Lists.partition(userIdList, 300); for (List list : lists) { diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java new file mode 100644 index 00000000..97f3d770 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java @@ -0,0 +1,19 @@ +package com.ruoyi.cai.mq.handle.dto; + +import com.ruoyi.cai.mq.dto.CommonConsumerEnum; +import com.ruoyi.cai.mq.dto.CommonDTO; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class LoginNotifyDTO extends CommonDTO { + private Long userId; + + private LocalDateTime happenTime; + + public LoginNotifyDTO() { + this.setType(CommonConsumerEnum.LOGIN); + this.happenTime = LocalDateTime.now(); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/RankDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/RankNotifyDTO.java similarity index 86% rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/RankDTO.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/RankNotifyDTO.java index 683b80ad..14a26934 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/RankDTO.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/RankNotifyDTO.java @@ -7,7 +7,7 @@ import lombok.Data; import java.time.LocalDateTime; @Data -public class RankDTO extends CommonDTO { +public class RankNotifyDTO extends CommonDTO { /** * 1-魅力榜 @@ -20,7 +20,7 @@ public class RankDTO extends CommonDTO { private LocalDateTime happenTime; private Long traceId; - public RankDTO() { + public RankNotifyDTO() { this.setType(CommonConsumerEnum.RANK); this.happenTime = LocalDateTime.now(); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/SysPushDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/SysPushNotifyDTO.java similarity index 74% rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/SysPushDTO.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/SysPushNotifyDTO.java index ef5d03fe..3398c308 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/SysPushDTO.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/SysPushNotifyDTO.java @@ -5,10 +5,10 @@ import com.ruoyi.cai.mq.dto.CommonDTO; import lombok.Data; @Data -public class SysPushDTO extends CommonDTO { +public class SysPushNotifyDTO extends CommonDTO { private Long sysPushId; - public SysPushDTO() { + public SysPushNotifyDTO() { this.setType(CommonConsumerEnum.SYS_PUSH); } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowGiftDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowGiftNotifyDTO.java similarity index 83% rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowGiftDTO.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowGiftNotifyDTO.java index df87cd55..4e295cd9 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowGiftDTO.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowGiftNotifyDTO.java @@ -8,14 +8,14 @@ import lombok.Data; import java.time.LocalDateTime; @Data -public class WindowGiftDTO extends CommonDTO { +public class WindowGiftNotifyDTO extends CommonDTO { private Long fromId; private Long toId; private Gift gift; private Long giftNum; private LocalDateTime time; - public WindowGiftDTO() { + public WindowGiftNotifyDTO() { this.setType(CommonConsumerEnum.WINDOW_GIFT); this.time = LocalDateTime.now(); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowRechargeDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowRechargeNotifyDTO.java similarity index 78% rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowRechargeDTO.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowRechargeNotifyDTO.java index e2e5583f..07b51344 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowRechargeDTO.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowRechargeNotifyDTO.java @@ -4,17 +4,16 @@ import com.ruoyi.cai.mq.dto.CommonConsumerEnum; import com.ruoyi.cai.mq.dto.CommonDTO; import lombok.Data; -import java.math.BigDecimal; import java.time.LocalDateTime; @Data -public class WindowRechargeDTO extends CommonDTO { +public class WindowRechargeNotifyDTO extends CommonDTO { private Long id; private String nickname; private String avatar; private Long amount; private LocalDateTime time; - public WindowRechargeDTO() { + public WindowRechargeNotifyDTO() { this.setType(CommonConsumerEnum.WINDOW_RECHARGE); this.time = LocalDateTime.now(); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinHttpService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinHttpService.java index 623a6156..0931acc7 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinHttpService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinHttpService.java @@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSON; import com.ruoyi.cai.config.CaiProperties; import com.ruoyi.cai.domain.Gift; import com.ruoyi.cai.domain.User; -import com.ruoyi.cai.mq.handle.dto.WindowRechargeDTO; +import com.ruoyi.cai.mq.handle.dto.WindowRechargeNotifyDTO; import com.ruoyi.cai.notice.data.NoticeR; import com.ruoyi.cai.notice.data.WindowNoticeR; import com.ruoyi.cai.notice.data.child.*; @@ -14,7 +14,6 @@ import com.ruoyi.cai.service.AccountService; import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.util.CaiDateUtil; import com.ruoyi.cai.util.CaiNumUtil; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.yunxin.YunExecutor; import com.ruoyi.yunxin.Yunxin; import com.ruoyi.yunxin.resp.SendMsgResp; @@ -456,7 +455,7 @@ public class YunxinHttpService { /** * 发送充值飘窗提醒 */ - public void sendRechargeWindowsAmount(List toIds, WindowRechargeDTO windowRecharge){ + public void sendRechargeWindowsAmount(List toIds, WindowRechargeNotifyDTO windowRecharge){ SendRechargeWindowsAmountNoticeData data = new SendRechargeWindowsAmountNoticeData(); data.setId(windowRecharge.getId()); data.setNickname(windowRecharge.getNickname()); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/rank/RankManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/rank/RankManager.java index 0bae4e58..1ba0bcf2 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/rank/RankManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/rank/RankManager.java @@ -2,7 +2,7 @@ package com.ruoyi.cai.rank; import com.ruoyi.cai.constant.RedisHttpConstant; import com.ruoyi.cai.mq.AmqpProducer; -import com.ruoyi.cai.mq.handle.dto.RankDTO; +import com.ruoyi.cai.mq.handle.dto.RankNotifyDTO; import lombok.extern.slf4j.Slf4j; import org.redisson.api.RScoredSortedSet; import org.redisson.api.RedissonClient; @@ -81,7 +81,7 @@ public class RankManager { return String.format(LOVE_KEY_FORMAT,TOTAL,TOTAL); } - public void addRank(RankDTO dto){ + public void addRank(RankNotifyDTO dto){ if(dto.getRankType() == null){ return; } @@ -251,7 +251,7 @@ public class RankManager { public void sendLoveRankMq(Long userId,Long value,Long traceId){ try { - RankDTO rank = new RankDTO(); + RankNotifyDTO rank = new RankNotifyDTO(); rank.setUserId(userId); rank.setPrice(value); rank.setTraceId(traceId); @@ -264,7 +264,7 @@ public class RankManager { public void sendInviteRankMq(Long userId,Long value,Long traceId){ try { - RankDTO rank = new RankDTO(); + RankNotifyDTO rank = new RankNotifyDTO(); rank.setUserId(userId); rank.setPrice(value); rank.setTraceId(traceId); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserCallService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserCallService.java index 81690723..bd40c321 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserCallService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserCallService.java @@ -1,11 +1,13 @@ package com.ruoyi.cai.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.cai.domain.Anchor; import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.UserCall; import com.ruoyi.cai.dto.admin.vo.UserCallAdminVo; +import com.ruoyi.cai.dto.app.vo.UserCallAppVo; import com.ruoyi.common.core.domain.PageQuery; /** @@ -20,4 +22,5 @@ public interface UserCallService extends IService { Page pageAdmin(PageQuery pageQuery, UserCallAdminVo bo); + IPage pageApp(PageQuery pageQuery, Integer type, Long userId); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/SysPushServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/SysPushServiceImpl.java index e34f08d3..e9d61fe8 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/SysPushServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/SysPushServiceImpl.java @@ -22,7 +22,7 @@ import com.ruoyi.cai.mapper.SysPushMapper; import com.ruoyi.cai.mq.AmqpProducer; import com.ruoyi.cai.mq.CommonDelayTypeEnum; import com.ruoyi.cai.mq.dto.CommonDelayDto; -import com.ruoyi.cai.mq.handle.dto.SysPushDTO; +import com.ruoyi.cai.mq.handle.dto.SysPushNotifyDTO; import com.ruoyi.cai.notice.data.NoticeMsgR; import com.ruoyi.cai.notice.data.NoticeOnlyImageR; import com.ruoyi.cai.notice.data.NoticeR; @@ -46,7 +46,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -211,7 +210,7 @@ public class SysPushServiceImpl extends ServiceImpl impl if(!update){ throw new ServiceException("正在执行中,请稍等"); } - SysPushDTO sysPush = new SysPushDTO(); + SysPushNotifyDTO sysPush = new SysPushNotifyDTO(); sysPush.setSysPushId(id); amqpProducer.sendCommonMq(sysPush); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserCallServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserCallServiceImpl.java index ea3a59b2..230caaf8 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserCallServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserCallServiceImpl.java @@ -1,20 +1,28 @@ package com.ruoyi.cai.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.cai.domain.*; import com.ruoyi.cai.dto.admin.vo.UserCallAdminVo; +import com.ruoyi.cai.dto.app.vo.UserCallAppVo; import com.ruoyi.cai.mapper.UserCallMapper; -import com.ruoyi.cai.service.AccountService; -import com.ruoyi.cai.service.UnionUserService; -import com.ruoyi.cai.service.UserCallService; -import com.ruoyi.cai.service.UserInviteService; +import com.ruoyi.cai.service.*; +import com.ruoyi.cai.util.IPageUtil; +import com.ruoyi.cai.ws.constant.RoomStatusEnums; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.exception.ServiceException; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + /** * 通话记录Service业务层处理 * @@ -62,8 +70,85 @@ public class UserCallServiceImpl extends ServiceImpl i return userCall; } + /** + * 类型 0 全部 1 主打者 2 被打者 + */ @Override public Page pageAdmin(PageQuery pageQuery, UserCallAdminVo bo) { return baseMapper.pageAdmin(pageQuery.build(),bo); } + + @Autowired + private UserService userService; + + @Override + public IPage pageApp(PageQuery pageQuery, Integer type,Long userId) { + if(type == null){ + type = 0; + } + LambdaQueryWrapper query = Wrappers.lambdaQuery(UserCall.class); + if(type == 1){ + query.eq(UserCall::getFromUid,userId); + }else if(type == 2){ + query.eq(UserCall::getToUid,userId); + }else { + query.and(i -> i.eq(UserCall::getFromUid,userId).or().eq(UserCall::getToUid,userId)); + } + query.eq(UserCall::getDeleteFlag, 0); + query.orderByDesc(UserCall::getId); + Page page = this.page(pageQuery.build(), query); + List records = page.getRecords(); + if(records.isEmpty()){ + return IPageUtil.transIPageEmpty(page); + } + Set userIds = records.stream().flatMap(c -> Stream.of(c.getToUid(),c.getFromUid())).collect(Collectors.toSet()); + List users = userService.listByIds(userIds); + Map userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity())); + List result = new ArrayList<>(); + for (UserCall record : records) { + UserCallAppVo vo = new UserCallAppVo(); + vo.setId(record.getId()); + Long toUid; + if(userId.equals(record.getFromUid())){ // 拨打方 + vo.setType(1); + toUid = record.getToUid(); + }else{ + vo.setType(2); + toUid = record.getFromUid(); + } + User user = userMap.get(toUid); + if(user != null){ + vo.setOtherType(user.getType()); + vo.setUserId(user.getId()); + vo.setUsercode(user.getUsercode()); + vo.setNickname(user.getNickname()); + vo.setAvatar(user.getAvatar()); + vo.setGender(user.getGender()); + vo.setAge(user.getAge()); + vo.setCity(user.getCity()); + vo.setCityId(user.getCityId()); + } + Integer status = record.getStatus(); + if(status <= RoomStatusEnums.STATUS_CONNECT_CANCEL.getCode()){ // 4 + vo.setStatus(1); + vo.setStatusText("取消"); + }else if(status.equals(RoomStatusEnums.STATUS_REFUSE.getCode())){ // 6 + vo.setStatus(2); + vo.setStatusText("拒绝"); + }else if(status.equals(RoomStatusEnums.STATUS_TIMEOUT_CANCEL.getCode())){ // 5 + vo.setStatus(3); + vo.setStatusText("超时"); + }if(status > RoomStatusEnums.STATUS_REFUSE.getCode()){ // 6 + vo.setStatus(4); + vo.setStatusText("已接通"); + } + if(record.getBeginTime() != null){ + vo.setCreateTime(record.getBeginTime()); + }else{ + vo.setCreateTime(record.getCreateTime()); + } + result.add(vo); + } + return IPageUtil.transIPage(page,result); + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/util/IPageUtil.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/util/IPageUtil.java new file mode 100644 index 00000000..d8d96ef1 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/util/IPageUtil.java @@ -0,0 +1,29 @@ +package com.ruoyi.cai.util; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import java.util.Collections; +import java.util.List; + +public class IPageUtil { + public static IPage transIPage(IPage page, List records){ + IPage res = new Page<>(); + res.setPages(page.getPages()); + res.setRecords(records); + res.setTotal(page.getTotal()); + res.setSize(page.getSize()); + res.setCurrent(page.getCurrent()); + return res; + } + + public static IPage transIPageEmpty(IPage page){ + IPage res = new Page<>(); + res.setPages(page.getPages()); + res.setRecords(Collections.emptyList()); + res.setTotal(page.getTotal()); + res.setSize(page.getSize()); + res.setCurrent(page.getCurrent()); + return res; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/OnlineTodayCache.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/OnlineUserTodayCache.java similarity index 86% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/OnlineTodayCache.java rename to ruoyi-framework/src/main/java/com/ruoyi/framework/OnlineUserTodayCache.java index b3a927d2..09aa5fde 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/OnlineTodayCache.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/OnlineUserTodayCache.java @@ -9,11 +9,10 @@ import org.springframework.stereotype.Component; import java.time.Duration; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import java.util.List; import java.util.Set; @Component -public class OnlineTodayCache { +public class OnlineUserTodayCache { @Autowired private RedissonClient redissonClient; @@ -23,10 +22,11 @@ public class OnlineTodayCache { return String.format(CacheConstants.ONLINE_TODAY_TOKEN_KEY,today); } - public void addOnlineUserId(Long userId){ + public boolean addOnlineUserId(Long userId){ RSet set = redissonClient.getSet(getKey()); - set.add(userId); + boolean res = set.add(userId); set.expire(Duration.ofDays(1)); + return res; } public Set getAllOnlineToday(){ diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java index 66399800..1ca6d3e7 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java @@ -13,7 +13,7 @@ import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.common.utils.redis.RedisUtils; -import com.ruoyi.framework.OnlineTodayCache; +import com.ruoyi.framework.OnlineUserTodayCache; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -31,7 +31,7 @@ import java.time.Duration; public class UserActionListener implements SaTokenListener { private final SaTokenConfig tokenConfig; - private final OnlineTodayCache onlineTodayCache; + private final OnlineUserTodayCache onlineUserTodayCache; /** * 每次登录时触发 @@ -78,7 +78,6 @@ public class UserActionListener implements SaTokenListener { } else { RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, dto, Duration.ofSeconds(tokenConfig.getTimeout())); } - onlineTodayCache.addOnlineUserId(user.getUserId()); } }