This commit is contained in:
张良(004796)
2024-02-04 14:35:18 +08:00
parent ac6b009dfd
commit 405660082d
26 changed files with 307 additions and 62 deletions

View File

@@ -29,7 +29,6 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.management.ObjectName;
import java.util.List; import java.util.List;
@@ -58,10 +57,8 @@ public class IndexController {
@Log(title = "获取APP系统核心参数", businessType = BusinessType.OTHER, isSaveDb = false) @Log(title = "获取APP系统核心参数", businessType = BusinessType.OTHER, isSaveDb = false)
@SaIgnore @SaIgnore
public R<AppHomeConfig> config(){ public R<AppHomeConfig> config(){
AppHomeConfig config = new AppHomeConfig(); AppHomeConfig appHomeConfig = homeManager.config();
config.setOssDomain(systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN)); return R.ok(appHomeConfig);
config.setOpenWithdraw(systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_WITHDRAW));
return R.ok(config);
} }

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.cai.app; package com.ruoyi.web.controller.cai.app;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.cai.domain.UserAlbum; import com.ruoyi.cai.domain.UserAlbum;
import com.ruoyi.cai.dto.app.query.album.AlbumAddReq; import com.ruoyi.cai.dto.app.query.album.AlbumAddReq;
import com.ruoyi.cai.dto.app.query.IdRes; 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.UpdateNoGreet;
import com.ruoyi.cai.dto.app.query.member.UpdateRankHideReq; import com.ruoyi.cai.dto.app.query.member.UpdateRankHideReq;
import com.ruoyi.cai.dto.app.vo.CurrentUserInfoVo; 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.CurrentUserUpdateInfoVo;
import com.ruoyi.cai.dto.app.vo.user.MemberInfoVo; 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.UserAlbumAuditVo;
import com.ruoyi.cai.dto.app.vo.user.UserAvatarMinVo; import com.ruoyi.cai.dto.app.vo.user.UserAvatarMinVo;
import com.ruoyi.cai.manager.CurrentUserManager; import com.ruoyi.cai.manager.CurrentUserManager;
import com.ruoyi.cai.service.UserAlbumService; import com.ruoyi.cai.service.UserAlbumService;
import com.ruoyi.cai.service.UserCallService;
import com.ruoyi.cai.service.UserMemberService; import com.ruoyi.cai.service.UserMemberService;
import com.ruoyi.cai.service.UserOnlineService; import com.ruoyi.cai.service.UserOnlineService;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.helper.LoginHelper; 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.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController @RestController
@RequestMapping("/api/user") @RequestMapping("/api/user")
@Tag(name = "用户相关接口") @Tag(name = "用户相关接口")
@@ -144,6 +150,17 @@ public class UserAppController {
return R.ok(vo); return R.ok(vo);
} }
@Autowired
private UserCallService userCallService;
@GetMapping("/callLog/page")
@Operation(summary = "通话记录查询-分页")
@Log(title = "通话记录查询", businessType = BusinessType.OTHER, isSaveDb = true)
public R<List<UserCallAppVo>> callLog(PageQuery pageQuery,
@Parameter(description = "当前用户在通话中的类型 0=全部 1=主叫方 2=接收方") Integer type){
IPage<UserCallAppVo> page = userCallService.pageApp(pageQuery, type, LoginHelper.getUserId());
return R.ok(page.getRecords());
}
/*@PostMapping("/album/reset") /*@PostMapping("/album/reset")
@Operation(summary = "重排序相册",hidden = true) @Operation(summary = "重排序相册",hidden = true)
@Log(title = "重排序相册", businessType = BusinessType.OTHER, isSaveDb = false) @Log(title = "重排序相册", businessType = BusinessType.OTHER, isSaveDb = false)

View File

@@ -2,7 +2,7 @@ package com.ruoyi.test.business;
import com.ruoyi.cai.domain.Gift; import com.ruoyi.cai.domain.Gift;
import com.ruoyi.cai.domain.User; 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.YunxinHttpService;
import com.ruoyi.cai.notice.data.child.SendGiftWindowsAmountNoticeData; import com.ruoyi.cai.notice.data.child.SendGiftWindowsAmountNoticeData;
import com.ruoyi.cai.service.GiftService; import com.ruoyi.cai.service.GiftService;
@@ -169,7 +169,7 @@ public class NoticeTest {
@Test @Test
public void sendRechargeWindowsAmount(){ public void sendRechargeWindowsAmount(){
User followUser = userService.getById(10166L); User followUser = userService.getById(10166L);
WindowRechargeDTO dto = new WindowRechargeDTO(); WindowRechargeNotifyDTO dto = new WindowRechargeNotifyDTO();
dto.setId(10166L); dto.setId(10166L);
dto.setNickname(followUser.getNickname()); dto.setNickname(followUser.getNickname());
dto.setAvatar(followUser.getAvatar()); dto.setAvatar(followUser.getAvatar());

View File

@@ -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;
}

View File

@@ -9,4 +9,8 @@ public class AppHomeConfig {
private String ossDomain; private String ossDomain;
@Schema(description = "是否开启提现") @Schema(description = "是否开启提现")
private boolean openWithdraw = true; private boolean openWithdraw = true;
@Schema(description = "系统通知IM ID")
private String sysId = "2";
@Schema(description = "客服IM ID")
private String servId = "4";
} }

View File

@@ -12,8 +12,8 @@ import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp;
import com.ruoyi.cai.dto.video.VideoSettleResp; import com.ruoyi.cai.dto.video.VideoSettleResp;
import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.mq.AmqpProducer; import com.ruoyi.cai.mq.AmqpProducer;
import com.ruoyi.cai.mq.handle.dto.WindowGiftDTO; import com.ruoyi.cai.mq.handle.dto.WindowGiftNotifyDTO;
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.YunxinHttpService;
import com.ruoyi.cai.pay.PayTypeEnum; import com.ruoyi.cai.pay.PayTypeEnum;
import com.ruoyi.cai.rank.RankManager; import com.ruoyi.cai.rank.RankManager;
@@ -97,7 +97,7 @@ public class ConsumerManager {
User fromUser = userService.getById(resp.getFromUid()); User fromUser = userService.getById(resp.getFromUid());
Integer rankHide = fromUser.getRankHide(); Integer rankHide = fromUser.getRankHide();
if(rankHide == 0){ if(rankHide == 0){
WindowGiftDTO windowGift = new WindowGiftDTO(); WindowGiftNotifyDTO windowGift = new WindowGiftNotifyDTO();
windowGift.setFromId(resp.getFromUid()); windowGift.setFromId(resp.getFromUid());
windowGift.setToId(resp.getToUid()); windowGift.setToId(resp.getToUid());
windowGift.setGift(resp.getGift()); windowGift.setGift(resp.getGift());
@@ -146,7 +146,7 @@ public class ConsumerManager {
if(resp.getRechargeCoin() > minPrice){ if(resp.getRechargeCoin() > minPrice){
Integer rankHide = resp.getUser().getRankHide(); Integer rankHide = resp.getUser().getRankHide();
if(rankHide == 0){ if(rankHide == 0){
WindowRechargeDTO windowRecharge = new WindowRechargeDTO(); WindowRechargeNotifyDTO windowRecharge = new WindowRechargeNotifyDTO();
windowRecharge.setId(resp.getUserId()); windowRecharge.setId(resp.getUserId());
windowRecharge.setNickname(resp.getUser().getNickname()); windowRecharge.setNickname(resp.getUser().getNickname());
windowRecharge.setAvatar(resp.getUser().getAvatar()); windowRecharge.setAvatar(resp.getUser().getAvatar());

View File

@@ -4,9 +4,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.constant.RedisHttpConstant; import com.ruoyi.cai.constant.RedisHttpConstant;
import com.ruoyi.cai.dto.app.query.index.AnchorListQuery; import com.ruoyi.cai.dto.app.query.index.AnchorListQuery;
import com.ruoyi.cai.dto.app.vo.AnchorListVo; 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.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.cai.service.AnchorService;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.helper.LoginHelper;
import org.redisson.api.RBucket; import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -98,4 +103,22 @@ public class HomeManager {
int endIndex = Math.min(limit, vos.size()); int endIndex = Math.min(limit, vos.size());
return vos.subList(0, endIndex); 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;
}
} }

View File

@@ -1,6 +1,6 @@
package com.ruoyi.cai.mq.dto; package com.ruoyi.cai.mq.dto;
public enum CommonConsumerEnum { public enum CommonConsumerEnum {
RANK,WINDOW_GIFT,WINDOW_RECHARGE, WINDOW_GIFT,WINDOW_RECHARGE,
SYS_PUSH SYS_PUSH,RANK,LOGIN
} }

View File

@@ -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;
}
}

View File

@@ -2,7 +2,7 @@ package com.ruoyi.cai.mq.handle;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.ruoyi.cai.mq.dto.CommonConsumerEnum; 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 com.ruoyi.cai.rank.RankManager;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -10,13 +10,13 @@ import org.springframework.stereotype.Component;
@Component @Component
@Slf4j @Slf4j
public class RankHandle implements IHandle { public class RankNotifyHandle implements IHandle {
@Autowired @Autowired
private RankManager rankManager; private RankManager rankManager;
@Override @Override
public void run(String message) { public void run(String message) {
RankDTO rank = JSON.parseObject(message, RankDTO.class); RankNotifyDTO rank = JSON.parseObject(message, RankNotifyDTO.class);
rankManager.addRank(rank); rankManager.addRank(rank);
} }

View File

@@ -2,7 +2,7 @@ package com.ruoyi.cai.mq.handle;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.ruoyi.cai.mq.dto.CommonConsumerEnum; 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 com.ruoyi.cai.service.SysPushService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -10,14 +10,14 @@ import org.springframework.stereotype.Component;
@Component @Component
@Slf4j @Slf4j
public class SysPushHandle implements IHandle{ public class SysPushNotifyHandle implements IHandle{
@Autowired @Autowired
private SysPushService sysPushService; private SysPushService sysPushService;
@Override @Override
public void run(String message) { public void run(String message) {
try { try {
SysPushDTO sysPush = JSON.parseObject(message, SysPushDTO.class); SysPushNotifyDTO sysPush = JSON.parseObject(message, SysPushNotifyDTO.class);
sysPushService.doRun(sysPush.getSysPushId()); sysPushService.doRun(sysPush.getSysPushId());
}catch (Exception e){ }catch (Exception e){
log.error("处理推送消息失败!",e); log.error("处理推送消息失败!",e);

View File

@@ -5,12 +5,11 @@ import com.google.common.collect.Lists;
import com.ruoyi.cai.domain.Gift; import com.ruoyi.cai.domain.Gift;
import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.mq.dto.CommonConsumerEnum; 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.YunxinHttpService;
import com.ruoyi.cai.notice.data.child.SendGiftWindowsAmountNoticeData; import com.ruoyi.cai.notice.data.child.SendGiftWindowsAmountNoticeData;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
import com.ruoyi.cai.util.CaiDateUtil; import com.ruoyi.framework.OnlineUserTodayCache;
import com.ruoyi.framework.OnlineTodayCache;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -19,22 +18,22 @@ import java.util.List;
import java.util.Set; import java.util.Set;
@Component @Component
public class WindowGiftHandle implements IHandle{ public class WindowGiftNotifyHandle implements IHandle{
@Autowired @Autowired
private YunxinHttpService yunxinHttpService; private YunxinHttpService yunxinHttpService;
@Autowired @Autowired
private OnlineTodayCache onlineTodayCache; private OnlineUserTodayCache onlineUserTodayCache;
@Autowired @Autowired
private UserService userService; private UserService userService;
@Override @Override
public void run(String message) { 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 fromUser = userService.getById(windowGift.getFromId());
User toUser = userService.getById(windowGift.getToId()); User toUser = userService.getById(windowGift.getToId());
Gift gift = windowGift.getGift(); Gift gift = windowGift.getGift();
Set<Long> userIds = onlineTodayCache.getAllOnlineToday(); Set<Long> userIds = onlineUserTodayCache.getAllOnlineToday();
List<Long> userIdList = new ArrayList<>(userIds); List<Long> userIdList = new ArrayList<>(userIds);
List<List<Long>> lists = Lists.partition(userIdList, 300); List<List<Long>> lists = Lists.partition(userIdList, 300);
for (List<Long> list : lists) { for (List<Long> list : lists) {

View File

@@ -3,9 +3,9 @@ package com.ruoyi.cai.mq.handle;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.ruoyi.cai.mq.dto.CommonConsumerEnum; 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.cai.notice.YunxinHttpService;
import com.ruoyi.framework.OnlineTodayCache; import com.ruoyi.framework.OnlineUserTodayCache;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -14,17 +14,17 @@ import java.util.List;
import java.util.Set; import java.util.Set;
@Component @Component
public class WindowRechargeHandle implements IHandle{ public class WindowRechargeNotifyHandle implements IHandle{
@Autowired @Autowired
private YunxinHttpService yunxinHttpService; private YunxinHttpService yunxinHttpService;
@Autowired @Autowired
private OnlineTodayCache onlineTodayCache; private OnlineUserTodayCache onlineUserTodayCache;
@Override @Override
public void run(String message) { public void run(String message) {
WindowRechargeDTO windowRecharge = JSON.parseObject(message, WindowRechargeDTO.class); WindowRechargeNotifyDTO windowRecharge = JSON.parseObject(message, WindowRechargeNotifyDTO.class);
Set<Long> userIds = onlineTodayCache.getAllOnlineToday(); Set<Long> userIds = onlineUserTodayCache.getAllOnlineToday();
List<Long> userIdList = new ArrayList<>(userIds); List<Long> userIdList = new ArrayList<>(userIds);
List<List<Long>> lists = Lists.partition(userIdList, 300); List<List<Long>> lists = Lists.partition(userIdList, 300);
for (List<Long> list : lists) { for (List<Long> list : lists) {

View File

@@ -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();
}
}

View File

@@ -7,7 +7,7 @@ import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Data @Data
public class RankDTO extends CommonDTO { public class RankNotifyDTO extends CommonDTO {
/** /**
* 1-魅力榜 * 1-魅力榜
@@ -20,7 +20,7 @@ public class RankDTO extends CommonDTO {
private LocalDateTime happenTime; private LocalDateTime happenTime;
private Long traceId; private Long traceId;
public RankDTO() { public RankNotifyDTO() {
this.setType(CommonConsumerEnum.RANK); this.setType(CommonConsumerEnum.RANK);
this.happenTime = LocalDateTime.now(); this.happenTime = LocalDateTime.now();
} }

View File

@@ -5,10 +5,10 @@ import com.ruoyi.cai.mq.dto.CommonDTO;
import lombok.Data; import lombok.Data;
@Data @Data
public class SysPushDTO extends CommonDTO { public class SysPushNotifyDTO extends CommonDTO {
private Long sysPushId; private Long sysPushId;
public SysPushDTO() { public SysPushNotifyDTO() {
this.setType(CommonConsumerEnum.SYS_PUSH); this.setType(CommonConsumerEnum.SYS_PUSH);
} }
} }

View File

@@ -8,14 +8,14 @@ import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Data @Data
public class WindowGiftDTO extends CommonDTO { public class WindowGiftNotifyDTO extends CommonDTO {
private Long fromId; private Long fromId;
private Long toId; private Long toId;
private Gift gift; private Gift gift;
private Long giftNum; private Long giftNum;
private LocalDateTime time; private LocalDateTime time;
public WindowGiftDTO() { public WindowGiftNotifyDTO() {
this.setType(CommonConsumerEnum.WINDOW_GIFT); this.setType(CommonConsumerEnum.WINDOW_GIFT);
this.time = LocalDateTime.now(); this.time = LocalDateTime.now();
} }

View File

@@ -4,17 +4,16 @@ import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
import com.ruoyi.cai.mq.dto.CommonDTO; import com.ruoyi.cai.mq.dto.CommonDTO;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Data @Data
public class WindowRechargeDTO extends CommonDTO { public class WindowRechargeNotifyDTO extends CommonDTO {
private Long id; private Long id;
private String nickname; private String nickname;
private String avatar; private String avatar;
private Long amount; private Long amount;
private LocalDateTime time; private LocalDateTime time;
public WindowRechargeDTO() { public WindowRechargeNotifyDTO() {
this.setType(CommonConsumerEnum.WINDOW_RECHARGE); this.setType(CommonConsumerEnum.WINDOW_RECHARGE);
this.time = LocalDateTime.now(); this.time = LocalDateTime.now();
} }

View File

@@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.ruoyi.cai.config.CaiProperties; import com.ruoyi.cai.config.CaiProperties;
import com.ruoyi.cai.domain.Gift; import com.ruoyi.cai.domain.Gift;
import com.ruoyi.cai.domain.User; 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.NoticeR;
import com.ruoyi.cai.notice.data.WindowNoticeR; import com.ruoyi.cai.notice.data.WindowNoticeR;
import com.ruoyi.cai.notice.data.child.*; 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.service.UserService;
import com.ruoyi.cai.util.CaiDateUtil; import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.cai.util.CaiNumUtil; import com.ruoyi.cai.util.CaiNumUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.yunxin.YunExecutor; import com.ruoyi.yunxin.YunExecutor;
import com.ruoyi.yunxin.Yunxin; import com.ruoyi.yunxin.Yunxin;
import com.ruoyi.yunxin.resp.SendMsgResp; import com.ruoyi.yunxin.resp.SendMsgResp;
@@ -456,7 +455,7 @@ public class YunxinHttpService {
/** /**
* 发送充值飘窗提醒 * 发送充值飘窗提醒
*/ */
public void sendRechargeWindowsAmount(List<Long> toIds, WindowRechargeDTO windowRecharge){ public void sendRechargeWindowsAmount(List<Long> toIds, WindowRechargeNotifyDTO windowRecharge){
SendRechargeWindowsAmountNoticeData data = new SendRechargeWindowsAmountNoticeData(); SendRechargeWindowsAmountNoticeData data = new SendRechargeWindowsAmountNoticeData();
data.setId(windowRecharge.getId()); data.setId(windowRecharge.getId());
data.setNickname(windowRecharge.getNickname()); data.setNickname(windowRecharge.getNickname());

View File

@@ -2,7 +2,7 @@ package com.ruoyi.cai.rank;
import com.ruoyi.cai.constant.RedisHttpConstant; import com.ruoyi.cai.constant.RedisHttpConstant;
import com.ruoyi.cai.mq.AmqpProducer; 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 lombok.extern.slf4j.Slf4j;
import org.redisson.api.RScoredSortedSet; import org.redisson.api.RScoredSortedSet;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
@@ -81,7 +81,7 @@ public class RankManager {
return String.format(LOVE_KEY_FORMAT,TOTAL,TOTAL); return String.format(LOVE_KEY_FORMAT,TOTAL,TOTAL);
} }
public void addRank(RankDTO dto){ public void addRank(RankNotifyDTO dto){
if(dto.getRankType() == null){ if(dto.getRankType() == null){
return; return;
} }
@@ -251,7 +251,7 @@ public class RankManager {
public void sendLoveRankMq(Long userId,Long value,Long traceId){ public void sendLoveRankMq(Long userId,Long value,Long traceId){
try { try {
RankDTO rank = new RankDTO(); RankNotifyDTO rank = new RankNotifyDTO();
rank.setUserId(userId); rank.setUserId(userId);
rank.setPrice(value); rank.setPrice(value);
rank.setTraceId(traceId); rank.setTraceId(traceId);
@@ -264,7 +264,7 @@ public class RankManager {
public void sendInviteRankMq(Long userId,Long value,Long traceId){ public void sendInviteRankMq(Long userId,Long value,Long traceId){
try { try {
RankDTO rank = new RankDTO(); RankNotifyDTO rank = new RankNotifyDTO();
rank.setUserId(userId); rank.setUserId(userId);
rank.setPrice(value); rank.setPrice(value);
rank.setTraceId(traceId); rank.setTraceId(traceId);

View File

@@ -1,11 +1,13 @@
package com.ruoyi.cai.service; 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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.Anchor; import com.ruoyi.cai.domain.Anchor;
import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.domain.UserCall; import com.ruoyi.cai.domain.UserCall;
import com.ruoyi.cai.dto.admin.vo.UserCallAdminVo; import com.ruoyi.cai.dto.admin.vo.UserCallAdminVo;
import com.ruoyi.cai.dto.app.vo.UserCallAppVo;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
/** /**
@@ -20,4 +22,5 @@ public interface UserCallService extends IService<UserCall> {
Page<UserCallAdminVo> pageAdmin(PageQuery pageQuery, UserCallAdminVo bo); Page<UserCallAdminVo> pageAdmin(PageQuery pageQuery, UserCallAdminVo bo);
IPage<UserCallAppVo> pageApp(PageQuery pageQuery, Integer type, Long userId);
} }

View File

@@ -22,7 +22,7 @@ import com.ruoyi.cai.mapper.SysPushMapper;
import com.ruoyi.cai.mq.AmqpProducer; import com.ruoyi.cai.mq.AmqpProducer;
import com.ruoyi.cai.mq.CommonDelayTypeEnum; import com.ruoyi.cai.mq.CommonDelayTypeEnum;
import com.ruoyi.cai.mq.dto.CommonDelayDto; 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.NoticeMsgR;
import com.ruoyi.cai.notice.data.NoticeOnlyImageR; import com.ruoyi.cai.notice.data.NoticeOnlyImageR;
import com.ruoyi.cai.notice.data.NoticeR; import com.ruoyi.cai.notice.data.NoticeR;
@@ -46,7 +46,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@@ -211,7 +210,7 @@ public class SysPushServiceImpl extends ServiceImpl<SysPushMapper, SysPush> impl
if(!update){ if(!update){
throw new ServiceException("正在执行中,请稍等"); throw new ServiceException("正在执行中,请稍等");
} }
SysPushDTO sysPush = new SysPushDTO(); SysPushNotifyDTO sysPush = new SysPushNotifyDTO();
sysPush.setSysPushId(id); sysPush.setSysPushId(id);
amqpProducer.sendCommonMq(sysPush); amqpProducer.sendCommonMq(sysPush);
} }

View File

@@ -1,20 +1,28 @@
package com.ruoyi.cai.service.impl; 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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.*; import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.dto.admin.vo.UserCallAdminVo; 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.mapper.UserCallMapper;
import com.ruoyi.cai.service.AccountService; import com.ruoyi.cai.service.*;
import com.ruoyi.cai.service.UnionUserService; import com.ruoyi.cai.util.IPageUtil;
import com.ruoyi.cai.service.UserCallService; import com.ruoyi.cai.ws.constant.RoomStatusEnums;
import com.ruoyi.cai.service.UserInviteService;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* 通话记录Service业务层处理 * 通话记录Service业务层处理
* *
@@ -62,8 +70,85 @@ public class UserCallServiceImpl extends ServiceImpl<UserCallMapper, UserCall> i
return userCall; return userCall;
} }
/**
* 类型 0 全部 1 主打者 2 被打者
*/
@Override @Override
public Page<UserCallAdminVo> pageAdmin(PageQuery pageQuery, UserCallAdminVo bo) { public Page<UserCallAdminVo> pageAdmin(PageQuery pageQuery, UserCallAdminVo bo) {
return baseMapper.pageAdmin(pageQuery.build(),bo); return baseMapper.pageAdmin(pageQuery.build(),bo);
} }
@Autowired
private UserService userService;
@Override
public IPage<UserCallAppVo> pageApp(PageQuery pageQuery, Integer type,Long userId) {
if(type == null){
type = 0;
}
LambdaQueryWrapper<UserCall> 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<UserCall> page = this.page(pageQuery.build(), query);
List<UserCall> records = page.getRecords();
if(records.isEmpty()){
return IPageUtil.transIPageEmpty(page);
}
Set<Long> userIds = records.stream().flatMap(c -> Stream.of(c.getToUid(),c.getFromUid())).collect(Collectors.toSet());
List<User> users = userService.listByIds(userIds);
Map<Long, User> userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity()));
List<UserCallAppVo> 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);
}
} }

View File

@@ -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 <T,V> IPage<V> transIPage(IPage<T> page, List<V> records){
IPage<V> 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 <T,V> IPage<V> transIPageEmpty(IPage<T> page){
IPage<V> 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;
}
}

View File

@@ -9,11 +9,10 @@ import org.springframework.stereotype.Component;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Set; import java.util.Set;
@Component @Component
public class OnlineTodayCache { public class OnlineUserTodayCache {
@Autowired @Autowired
private RedissonClient redissonClient; private RedissonClient redissonClient;
@@ -23,10 +22,11 @@ public class OnlineTodayCache {
return String.format(CacheConstants.ONLINE_TODAY_TOKEN_KEY,today); return String.format(CacheConstants.ONLINE_TODAY_TOKEN_KEY,today);
} }
public void addOnlineUserId(Long userId){ public boolean addOnlineUserId(Long userId){
RSet<Long> set = redissonClient.getSet(getKey()); RSet<Long> set = redissonClient.getSet(getKey());
set.add(userId); boolean res = set.add(userId);
set.expire(Duration.ofDays(1)); set.expire(Duration.ofDays(1));
return res;
} }
public Set<Long> getAllOnlineToday(){ public Set<Long> getAllOnlineToday(){

View File

@@ -13,7 +13,7 @@ import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.common.utils.ip.AddressUtils;
import com.ruoyi.common.utils.redis.RedisUtils; import com.ruoyi.common.utils.redis.RedisUtils;
import com.ruoyi.framework.OnlineTodayCache; import com.ruoyi.framework.OnlineUserTodayCache;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -31,7 +31,7 @@ import java.time.Duration;
public class UserActionListener implements SaTokenListener { public class UserActionListener implements SaTokenListener {
private final SaTokenConfig tokenConfig; private final SaTokenConfig tokenConfig;
private final OnlineTodayCache onlineTodayCache; private final OnlineUserTodayCache onlineUserTodayCache;
/** /**
* 每次登录时触发 * 每次登录时触发
@@ -78,7 +78,6 @@ public class UserActionListener implements SaTokenListener {
} else { } else {
RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, dto, Duration.ofSeconds(tokenConfig.getTimeout())); RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, dto, Duration.ofSeconds(tokenConfig.getTimeout()));
} }
onlineTodayCache.addOnlineUserId(user.getUserId());
} }
} }