通话逻辑
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -33,6 +33,8 @@ public class CaiAnchor implements Serializable{
|
||||
* 技能ID
|
||||
*/
|
||||
private Integer skillId;
|
||||
private String skillName;
|
||||
private String skillIcon;
|
||||
/**
|
||||
* 价格,默认50彩币
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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> {
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -11,4 +11,5 @@ import com.ruoyi.cai.domain.CaiUnionUser;
|
||||
*/
|
||||
public interface CaiUnionUserService extends IService<CaiUnionUser> {
|
||||
|
||||
CaiUnionUser getByUserId(Long userId);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
}
|
||||
@@ -7,4 +7,8 @@ public class WebSocketManager {
|
||||
public String checkOnlineRoom(Long formUserId,Long toUserId){
|
||||
return "name";
|
||||
}
|
||||
|
||||
public String createRoom(Long id) {
|
||||
return "123";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user