通话逻辑

This commit is contained in:
张良(004796)
2023-12-28 11:42:27 +08:00
parent c5e55374c9
commit f337f57df5
22 changed files with 643 additions and 9 deletions

View File

@@ -1,10 +1,18 @@
package com.ruoyi.cai.chat;
import com.ruoyi.cai.config.CaiProperties;
import com.ruoyi.cai.domain.CaiAnchor;
import com.ruoyi.cai.domain.CaiUser;
import com.ruoyi.cai.dto.app.query.AnchorListQuery;
import com.ruoyi.cai.domain.CaiUserCall;
import com.ruoyi.cai.dto.app.dto.GuardNum;
import com.ruoyi.cai.dto.app.query.CallReq;
import com.ruoyi.cai.dto.app.vo.chat.CallResp;
import com.ruoyi.cai.dto.app.vo.chat.GetRoomResp;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.service.CaiAnchorService;
import com.ruoyi.cai.service.CaiGuardTotalService;
import com.ruoyi.cai.service.CaiUserCallService;
import com.ruoyi.cai.service.CaiUserService;
import com.ruoyi.cai.ws.manager.WebSocketManager;
import com.ruoyi.common.exception.ServiceException;
@@ -13,6 +21,12 @@ import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@Component
public class ChatManager {
@Autowired
@@ -21,27 +35,94 @@ public class ChatManager {
private CaiAnchorService anchorService;
@Autowired
private WebSocketManager webSocketManager;
@Autowired
private CaiUserCallService userCallService;
@Autowired
private SystemConfigManager systemConfigManager;
@Autowired
private CaiProperties properties;
@Autowired
private CaiGuardTotalService guardTotalService;
public void call(CallReq callReq){
public CallResp call(CallReq callReq){
Long userId = LoginHelper.getUserId();
CaiUser formUser = userService.getById(userId);
CaiUser fromUser = userService.getById(userId);
CaiUser toUser = userService.getById(callReq.getToUid());
if(toUser.getIsAnchor() != 1){
throw new ServiceException("对方未通过女神认证,不能接听视频");
}
if(formUser.getGender() == 1 && toUser.getGender() == 1){
if(fromUser.getGender() == 1 && toUser.getGender() == 1){
throw new ServiceException("主播和主播之间,不可以拨打视频哦~");
}
CaiAnchor anchor = anchorService.getByUserId(toUser.getId());
if(anchor == null){
throw new ServiceException("主播技能不存在");
}
String roomId = webSocketManager.checkOnlineRoom(formUser.getId(), toUser.getId());
if (StringUtils.isNotEmpty(roomId)) {
String roomId = webSocketManager.checkOnlineRoom(fromUser.getId(), toUser.getId());
if(StringUtils.isEmpty(roomId)){
CaiUserCall call = userCallService.createCall(fromUser, toUser, anchor);
roomId = webSocketManager.createRoom(call.getId());
}
String weSocketUrl = String.format(properties.getWebSocketUrl(),"token",roomId);
Long guardPrice = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.GUARD_PRICE);
// 获取鉴黄规则 TODO
CallResp callResp = new CallResp();
callResp.setRoomId(roomId);
callResp.setFromUid(fromUser.getId());
callResp.setFromNickname(fromUser.getNickname());
callResp.setFromAvatar(fromUser.getAvatar());
callResp.setToUid(toUser.getId());
callResp.setToNickname(toUser.getNickname());
callResp.setToAvatar(toUser.getAvatar());
callResp.setSocketUrl(weSocketUrl);
callResp.setSkillName(anchor.getSkillName());
callResp.setSkillIcon(anchor.getSkillIcon());
callResp.setPrice(anchor.getPrice());
callResp.setScore(anchor.getGiveScore());
callResp.setServiceCount(anchor.getServiceCount());
callResp.setServiceTime(anchor.getServiceTime());
GuardNum guardNum = guardTotalService.getGuardNum(fromUser.getId(), toUser.getId());
callResp.setGuardDiffNum(guardNum.getDiffNum());
callResp.setGuardPrice(guardPrice);
return callResp;
}
public GetRoomResp getRoom(String roomId){
Long userId = LoginHelper.getUserId();
CaiUserCall userCall = userCallService.getById(roomId);
if(userCall == null){
throw new ServiceException("房间不存在");
}
if(!userCall.getFromUid().equals(userId) && !userCall.getToUid().equals(userId)){
throw new ServiceException("无权限操作房间");
}
String roomIdNew = webSocketManager.checkOnlineRoom(userCall.getFromUid(), userCall.getToUid());
if (StringUtils.isNotEmpty(roomIdNew)) {
throw new ServiceException("'服务繁忙'");
}
// 判断房间号是否还存在 TODO
List<CaiUser> userList = userService.listByIds(Arrays.asList(userCall.getFromUid(), userCall.getToUid()));
Map<Long, CaiUser> userMap = userList.stream().collect(Collectors.toMap(CaiUser::getId, Function.identity()));
CaiUser fromUser = userMap.get(userCall.getFromUid());
CaiUser toUser = userMap.get(userCall.getToUid());
CaiAnchor anchor = anchorService.getByUserId(toUser.getId());
String weSocketUrl = String.format(properties.getWebSocketUrl(),"token",roomId);
GetRoomResp getRoomResp = new GetRoomResp();
getRoomResp.setRoomId(userCall.getId()+"");
getRoomResp.setFromUid(userCall.getFromUid());
getRoomResp.setFromNickname(fromUser.getNickname());
getRoomResp.setFromAvatar(fromUser.getAvatar());
getRoomResp.setToUid(userCall.getToUid());
getRoomResp.setToNickname(toUser.getNickname());
getRoomResp.setToAvatar(toUser.getAvatar());
getRoomResp.setSocketUrl(weSocketUrl);
getRoomResp.setSkillName(anchor.getSkillName());
getRoomResp.setSkillIcon(anchor.getSkillIcon());
getRoomResp.setPrice(anchor.getPrice());
getRoomResp.setScore(anchor.getGiveScore());
getRoomResp.setServiceCount(anchor.getServiceCount());
getRoomResp.setServiceTime(anchor.getServiceTime());
return getRoomResp;
}
}

View File

@@ -0,0 +1,13 @@
package com.ruoyi.cai.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "cai")
public class CaiProperties {
private String webSocketUrl = "ws://localhost:8080?token=%s&room_id=%s";
}

View File

@@ -0,0 +1,6 @@
package com.ruoyi.cai.constant;
public class RedisConstant {
public static final String REDIS_P = "cai-";
public static final String SYSTEM_CONFIG = REDIS_P + "system-config";
}

View File

@@ -0,0 +1,95 @@
package com.ruoyi.cai.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.CaiUserInvite;
import com.ruoyi.cai.service.CaiUserInviteService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.enums.BusinessType;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
/**
* 用户邀请
*
* @author 77
* @date 2023-12-28
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/cai/userInvite")
public class CaiUserInviteController extends BaseController {
private final CaiUserInviteService caiUserInviteService;
/**
* 查询用户邀请列表
*/
@SaCheckPermission("cai:userInvite:list")
@GetMapping("/list")
public TableDataInfo<CaiUserInvite> list(CaiUserInvite bo, PageQuery pageQuery) {
Page<CaiUserInvite> page = caiUserInviteService.page(pageQuery.build(), Wrappers.lambdaQuery(bo));
return TableDataInfo.build(page);
}
/**
* 获取用户邀请详细信息
*
* @param id 主键
*/
@SaCheckPermission("cai:userInvite:query")
@GetMapping("/{id}")
public R<CaiUserInvite> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(caiUserInviteService.getById(id));
}
/**
* 新增用户邀请
*/
@SaCheckPermission("cai:userInvite:add")
@Log(title = "用户邀请", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody CaiUserInvite bo) {
return toAjax(caiUserInviteService.save(bo));
}
/**
* 修改用户邀请
*/
@SaCheckPermission("cai:userInvite:edit")
@Log(title = "用户邀请", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody CaiUserInvite bo) {
return toAjax(caiUserInviteService.updateById(bo));
}
/**
* 删除用户邀请
*
* @param ids 主键串
*/
@SaCheckPermission("cai:userInvite:remove")
@Log(title = "用户邀请", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(caiUserInviteService.removeBatchByIds(Arrays.asList(ids), true));
}
}

View File

@@ -33,6 +33,8 @@ public class CaiAnchor implements Serializable{
* 技能ID
*/
private Integer skillId;
private String skillName;
private String skillIcon;
/**
* 价格默认50彩币
*/

View File

@@ -0,0 +1,55 @@
package com.ruoyi.cai.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 用户邀请对象 cai_user_invite
*
* @author 77
* @date 2023-12-28
*/
@Data
@TableName("cai_user_invite")
public class CaiUserInvite implements Serializable {
private static final long serialVersionUID=1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 用户(被邀请人)
*/
private Long userId;
/**
* 邀请人
*/
private Long inviteId;
/**
* 奖励好友收入的比率
*/
private BigDecimal rewardIncomeRate;
/**
* 奖励好友充值的比率
*/
private BigDecimal rewardRechargeRate;
/**
* 邀请奖励汇总
*/
private BigDecimal rewardMoneyTotal;
/**
* 是否有效 0=无效 1=有效
*/
private Integer isValid;
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,13 @@
package com.ruoyi.cai.dto.app.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class GuardNum implements Serializable {
private Long myGuardNum;
private Long upGuardNum;
private Long diffNum;
}

View File

@@ -0,0 +1,45 @@
package com.ruoyi.cai.dto.app.vo.chat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Schema(description = "拨打视频返回模型")
public class CallResp {
@Schema(description = "房间号")
private String roomId;
@Schema(description = "拨打者-用户ID")
private Long fromUid;
@Schema(description = "拨打者-昵称")
private String fromNickname;
@Schema(description = "拨打者-头像")
private String fromAvatar;
@Schema(description = "接收者-用户ID")
private Long toUid;
@Schema(description = "接收者-昵称")
private String toNickname;
@Schema(description = "接收者-头像")
private String toAvatar;
@Schema(description = "wsUrl")
private String socketUrl;
@Schema(description = "技能名称")
private String skillName;
@Schema(description = "技能头像")
private String skillIcon;
@Schema(description = "价格")
private Long price;
@Schema(description = "评分")
private BigDecimal score;
@Schema(description = "服务次数")
private Long serviceCount;
@Schema(description = "服务时间")
private Long serviceTime;
@Schema(description = "距离上一个守护数量")
private Long guardDiffNum;
@Schema(description = "守护价格")
private Long guardPrice;
}

View File

@@ -0,0 +1,39 @@
package com.ruoyi.cai.dto.app.vo.chat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class GetRoomResp {
@Schema(description = "房间号")
private String roomId;
@Schema(description = "拨打者-用户ID")
private Long fromUid;
@Schema(description = "拨打者-昵称")
private String fromNickname;
@Schema(description = "拨打者-头像")
private String fromAvatar;
@Schema(description = "接收者-用户ID")
private Long toUid;
@Schema(description = "接收者-昵称")
private String toNickname;
@Schema(description = "接收者-头像")
private String toAvatar;
@Schema(description = "wsUrl")
private String socketUrl;
@Schema(description = "技能名称")
private String skillName;
@Schema(description = "技能头像")
private String skillIcon;
@Schema(description = "价格")
private Long price;
@Schema(description = "评分")
private BigDecimal score;
@Schema(description = "服务次数")
private Long serviceCount;
@Schema(description = "服务时间")
private Long serviceTime;
}

View File

@@ -0,0 +1,31 @@
package com.ruoyi.cai.enums;
import lombok.Getter;
/**
* 系统动态配置枚举
* <p>created on 2022/8/18 17:15</p>
*
* @author ZL
*/
public enum SystemConfigEnum {
GUARD_PRICE("1314", "守护价格"),
;
@Getter
private final String defaultValue;
@Getter
private final String desc;
SystemConfigEnum(String defaultValue, String desc) {
this.defaultValue = defaultValue;
this.desc = desc;
}
public String getKey() {
return this.name();
}
}

View File

@@ -0,0 +1,95 @@
package com.ruoyi.cai.manager;
import com.ruoyi.cai.constant.RedisConstant;
import com.ruoyi.cai.enums.SystemConfigEnum;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 主要用于动态配置管理
* <p>created on 2022/8/18 17:21</p>
* @author ZL
*/
@Service
public class SystemConfigManager {
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 获取配置信息返回boolean
* @param systemConfig
* @return
*/
public boolean getSystemConfigOfBool(SystemConfigEnum systemConfig){
String value = getSystemConfig(systemConfig);
return "1".equals(value);
}
/**
* 获取配置信息返回Integer
* @param systemConfig
* @return
*/
public Integer getSystemConfigOfInt(SystemConfigEnum systemConfig){
String value = getSystemConfig(systemConfig);
return Integer.valueOf(value);
}
/**
* 获取配置信息返回Integer
* @param systemConfig
* @return
*/
public Long getSystemConfigOfLong(SystemConfigEnum systemConfig){
String value = getSystemConfig(systemConfig);
return Long.valueOf(value);
}
/**
* 获取配置信息
* @param systemConfig
* @return
*/
public String getSystemConfig(SystemConfigEnum systemConfig){
String value = (String) redisTemplate.opsForHash().get(RedisConstant.SYSTEM_CONFIG, systemConfig.name());
if(StringUtils.isBlank(value)){
return systemConfig.getDefaultValue();
}
return value;
}
public List<String> getSystemConfigOfList(SystemConfigEnum systemConfig){
String value = getSystemConfig(systemConfig);
if(StringUtils.isBlank(value)){
value = systemConfig.getDefaultValue();
}
return Stream.of(value.split(",")).collect(Collectors.toList());
}
/**
* 获取所有配置
* @return
*/
public Map<String,String> getAllSystemConfig(){
HashOperations<String, String, String> stringObjectObjectHashOperations = redisTemplate.opsForHash();
return stringObjectObjectHashOperations.entries(RedisConstant.SYSTEM_CONFIG);
}
public void setSystemConfig(SystemConfigEnum systemConfig,String value){
redisTemplate.opsForHash().put(RedisConstant.SYSTEM_CONFIG, systemConfig.name(),value);
}
}

View File

@@ -0,0 +1,14 @@
package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cai.domain.CaiUserInvite;
/**
* 用户邀请Mapper接口
*
* @author 77
* @date 2023-12-28
*/
public interface CaiUserInviteMapper extends BaseMapper<CaiUserInvite> {
}

View File

@@ -2,6 +2,7 @@ package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.CaiGuardTotal;
import com.ruoyi.cai.dto.app.dto.GuardNum;
import com.ruoyi.cai.dto.app.query.GiveGuardReq;
import com.ruoyi.cai.dto.app.vo.GuardTotalVo;
@@ -18,4 +19,6 @@ public interface CaiGuardTotalService extends IService<CaiGuardTotal> {
List<GuardTotalVo> selectGuardTotalLimit(Long fromUserId,Integer limit);
boolean giveGuard(GiveGuardReq query);
GuardNum getGuardNum(Long fromUserId, Long toUserId);
}

View File

@@ -11,4 +11,5 @@ import com.ruoyi.cai.domain.CaiUnionUser;
*/
public interface CaiUnionUserService extends IService<CaiUnionUser> {
CaiUnionUser getByUserId(Long userId);
}

View File

@@ -1,6 +1,8 @@
package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.CaiAnchor;
import com.ruoyi.cai.domain.CaiUser;
import com.ruoyi.cai.domain.CaiUserCall;
/**
@@ -11,4 +13,5 @@ import com.ruoyi.cai.domain.CaiUserCall;
*/
public interface CaiUserCallService extends IService<CaiUserCall> {
CaiUserCall createCall(CaiUser fromUser, CaiUser toUser, CaiAnchor anchor);
}

View File

@@ -0,0 +1,15 @@
package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.CaiUserInvite;
/**
* 用户邀请Service接口
*
* @author 77
* @date 2023-12-28
*/
public interface CaiUserInviteService extends IService<CaiUserInvite> {
CaiUserInvite getByUserId(Long id);
}

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.CaiGuardTotal;
import com.ruoyi.cai.domain.CaiUser;
import com.ruoyi.cai.dto.app.dto.GuardNum;
import com.ruoyi.cai.dto.app.query.GiveGuardReq;
import com.ruoyi.cai.dto.app.vo.GuardTotalVo;
import com.ruoyi.cai.mapper.CaiGuardTotalMapper;
@@ -67,4 +68,25 @@ public class CaiGuardTotalServiceImpl extends ServiceImpl<CaiGuardTotalMapper,Ca
baseMapper.incs(fromUserId,query.getToUserId(),query.getGuardNum(),guardValue);
return true;
}
@Override
public GuardNum getGuardNum(Long fromUserId, Long toUserId){
GuardNum num = new GuardNum();
CaiGuardTotal one = this.getOne(Wrappers.lambdaQuery(CaiGuardTotal.class)
.select(CaiGuardTotal::getGuardNum)
.eq(CaiGuardTotal::getFromUserId, fromUserId)
.eq(CaiGuardTotal::getToUserId, toUserId)
.last("limit 1"));
Long myGuardNum = one == null ? 0 : one.getGuardNum();
CaiGuardTotal up = this.getOne(Wrappers.lambdaQuery(CaiGuardTotal.class)
.eq(CaiGuardTotal::getToUserId, toUserId)
.ge(CaiGuardTotal::getGuardNum, myGuardNum)
.orderByAsc(CaiGuardTotal::getGuardNum)
.last("limit 1"));
Long upGuardNum = up == null ? 0L : up.getGuardNum();
num.setMyGuardNum(myGuardNum);
num.setUpGuardNum(upGuardNum);
num.setDiffNum((upGuardNum - myGuardNum) < 0 ? 0 : (upGuardNum - myGuardNum));
return num;
}
}

View File

@@ -1,5 +1,6 @@
package com.ruoyi.cai.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.CaiUnionUser;
import com.ruoyi.cai.mapper.CaiUnionUserMapper;
@@ -15,4 +16,10 @@ import org.springframework.stereotype.Service;
@Service
public class CaiUnionUserServiceImpl extends ServiceImpl<CaiUnionUserMapper,CaiUnionUser> implements CaiUnionUserService {
@Override
public CaiUnionUser getByUserId(Long userId){
return this.getOne(Wrappers.lambdaQuery(CaiUnionUser.class)
.eq(CaiUnionUser::getUserId, userId)
.last("limit 1"));
}
}

View File

@@ -1,10 +1,15 @@
package com.ruoyi.cai.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.CaiUserCall;
import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.mapper.CaiUserCallMapper;
import com.ruoyi.cai.service.CaiAccountService;
import com.ruoyi.cai.service.CaiUnionUserService;
import com.ruoyi.cai.service.CaiUserCallService;
import com.ruoyi.cai.service.CaiUserInviteService;
import com.ruoyi.common.exception.ServiceException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +22,48 @@ import org.springframework.stereotype.Service;
@Service
public class CaiUserCallServiceImpl extends ServiceImpl<CaiUserCallMapper,CaiUserCall> implements CaiUserCallService {
@Autowired
private CaiAccountService accountService;
@Autowired
private CaiUserInviteService inviteService;
@Autowired
private CaiUnionUserService unionUserService;
@Override
public CaiUserCall createCall(CaiUser fromUser, CaiUser toUser, CaiAnchor anchor) {
Long fromUid = fromUser.getId();
// 特殊用户不允许拨打电话
if(fromUid.equals(toUser.getId())){
throw new ServiceException("不能给自己拨打哦!");
}
if(anchor == null){
throw new ServiceException("主播技能不存在");
}
if(anchor.getOpenVideoStatus() == 0){
throw new ServiceException("对方未开启视频接听!");
}
CaiAccount account = accountService.getByUserId(fromUid);
if(account.getIncomeCoin() + account.getCoin() < anchor.getPrice() * 2){
throw new ServiceException("你的紫贝不足!");
}
CaiUserCall caiUserCall = new CaiUserCall();
caiUserCall.setFromUid(fromUid);
caiUserCall.setToUid(toUser.getId());
caiUserCall.setCallPrice(anchor.getPrice());
caiUserCall.setReceiverVideoDivide(anchor.getVideoRate());
CaiUnionUser unionUser = unionUserService.getByUserId(toUser.getId());
if(unionUser != null && unionUser.getType() == 1){
caiUserCall.setReceiverUnionUserId(unionUser.getUserId());
caiUserCall.setReceiverUnionVideoDivide(unionUser.getVideoDivide());
}
CaiUserInvite invite = inviteService.getByUserId(toUser.getId());
if(invite != null){
caiUserCall.setReceiverInviteUserId(invite.getInviteId());
caiUserCall.setReceiverIncomeDivide(invite.getRewardIncomeRate());
}
boolean save = this.save(caiUserCall);
if(!save){
throw new ServiceException("添加通话失败!");
}
return caiUserCall;
}
}

View File

@@ -0,0 +1,22 @@
package com.ruoyi.cai.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.CaiUserInvite;
import com.ruoyi.cai.mapper.CaiUserInviteMapper;
import com.ruoyi.cai.service.CaiUserInviteService;
import org.springframework.stereotype.Service;
/**
* 用户邀请Service业务层处理
*
* @author 77
* @date 2023-12-28
*/
@Service
public class CaiUserInviteServiceImpl extends ServiceImpl<CaiUserInviteMapper,CaiUserInvite> implements CaiUserInviteService {
@Override
public CaiUserInvite getByUserId(Long id) {
return this.getOne(Wrappers.lambdaQuery(CaiUserInvite.class).eq(CaiUserInvite::getUserId,id).last("limit 1"));
}
}

View File

@@ -7,4 +7,8 @@ public class WebSocketManager {
public String checkOnlineRoom(Long formUserId,Long toUserId){
return "name";
}
public String createRoom(Long id) {
return "123";
}
}