From fc2b6ef12df92f24a7ae7af64cc7d5f3af986246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Thu, 11 Jan 2024 13:38:35 +0800 Subject: [PATCH] 123 --- .../java/com/ruoyi/cai/chat/ChatManager.java | 23 ++++++++++++++++++- .../cai/controller/app/AuthAppController.java | 14 ++++++++++- .../cai/controller/app/ConsumeController.java | 9 ++++---- .../java/com/ruoyi/cai/domain/UserCall.java | 2 ++ .../java/com/ruoyi/cai/dto/ConsumeResp.java | 9 ++++++++ .../ruoyi/cai/dto/app/vo/chat/CallResp.java | 4 ---- .../cai/dto/app/vo/chat/GetRoomResp.java | 1 - .../com/ruoyi/cai/enums/SystemConfigEnum.java | 1 + .../ruoyi/cai/service/GuardTotalService.java | 3 ++- .../ruoyi/cai/service/UserGiftService.java | 3 ++- .../service/impl/GuardTotalServiceImpl.java | 10 +++++--- .../cai/service/impl/UserCallServiceImpl.java | 4 ++-- .../cai/service/impl/UserGiftServiceImpl.java | 10 +++++--- .../ruoyi/cai/ws/constant/RedisConstant.java | 1 + .../cai/ws/constant/RoomStatusEnums.java | 2 +- .../java/com/ruoyi/cai/ws/dto/WsToken.java | 10 ++++++++ .../cai/ws/manager/WebSocketManager.java | 2 +- 17 files changed, 85 insertions(+), 23 deletions(-) create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/ConsumeResp.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WsToken.java diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java index 66571110..12850294 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java @@ -1,5 +1,6 @@ package com.ruoyi.cai.chat; +import cn.hutool.core.map.MapUtil; import com.ruoyi.cai.config.CaiProperties; import com.ruoyi.cai.domain.Anchor; import com.ruoyi.cai.domain.User; @@ -9,19 +10,24 @@ 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.IdManager; import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.service.AnchorService; import com.ruoyi.cai.service.GuardTotalService; import com.ruoyi.cai.service.UserCallService; import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.ws.bean.Room; +import com.ruoyi.cai.ws.constant.RedisConstant; +import com.ruoyi.cai.ws.dto.WsToken; import com.ruoyi.cai.ws.manager.WebSocketManager; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.helper.LoginHelper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -43,6 +49,19 @@ public class ChatManager { private CaiProperties properties; @Autowired private GuardTotalService guardTotalService; + @Autowired + private StringRedisTemplate redisTemplate; + + private String setWsToken(Long roomId,Long fromUid,Long toUid){ + String token = IdManager.nextIdStr(); + String tokenKey = String.format(RedisConstant.WS_TOKEN, token); + Map map = new HashMap<>(); + map.put("roomId",roomId); + map.put("fromUid",fromUid); + map.put("toUid",toUid); + redisTemplate.opsForHash().putAll(tokenKey,map); + return token; + } public CallResp call(CallReq callReq){ Long userId = LoginHelper.getUserId(); @@ -64,7 +83,9 @@ public class ChatManager { UserCall call = userCallService.createCall(fromUser, toUser, anchor); roomId = webSocketManager.createRoom(call.getId()); } - String weSocketUrl = String.format(properties.getWebSocketUrl(),"token",roomId); + String wsSocketUrlFormat = systemConfigManager.getSystemConfig(SystemConfigEnum.WS_SOCKET_URL); + String token = setWsToken(roomId, fromUser.getId(), toUser.getId()); + String weSocketUrl = String.format(wsSocketUrlFormat,token,roomId); Long guardPrice = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.GUARD_PRICE); // 获取鉴黄规则 TODO CallResp callResp = new CallResp(); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/AuthAppController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/AuthAppController.java index 6edebcd5..4cc7126c 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/AuthAppController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/AuthAppController.java @@ -1,10 +1,10 @@ package com.ruoyi.cai.controller.app; import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.util.PhoneUtil; import com.ruoyi.cai.auth.*; import com.ruoyi.cai.domain.User; import com.ruoyi.cai.enums.CodeEnum; -import com.ruoyi.cai.manager.CodeManager; import com.ruoyi.cai.service.SmsVerifyService; import com.ruoyi.cai.service.UserService; import com.ruoyi.common.core.domain.R; @@ -38,6 +38,10 @@ public class AuthAppController { @PostMapping("/register") @Operation(summary = "注册") public R> register(@Validated @RequestBody CaiRegisterUser caiUser){ + boolean mobile = PhoneUtil.isMobile(caiUser.getUsername()); + if(!mobile){ + return R.fail(600,"请输入正确的手机格式"); + } String token = caiLoginManager.register(caiUser); Map ajax = new HashMap<>(); ajax.put("token",token); @@ -47,6 +51,10 @@ public class AuthAppController { @PostMapping("/register/code") @Operation(summary = "获取注册验证码") public R> registerCode(@Validated @RequestBody RegisterCode code){ + boolean mobile = PhoneUtil.isMobile(code.getMobile()); + if(!mobile){ + return R.fail(600,"请输入正确的手机格式"); + } smsVerifyService.put(CodeEnum.REGISTER,code.getMobile()); return R.ok("发送成功"); } @@ -54,6 +62,10 @@ public class AuthAppController { @PostMapping("/resetPassword/code") @Operation(summary = "获取重置密码验证码") public R> resetPasswordCode(@Validated @RequestBody RegisterCode code){ + boolean mobile = PhoneUtil.isMobile(code.getMobile()); + if(!mobile){ + return R.fail(600,"请输入正确的手机格式"); + } User user = userService.getByUsername(code.getMobile()); if(user == null){ throw new ServiceException("用户不存在"); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/ConsumeController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/ConsumeController.java index a493ea7e..4bbe9f4b 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/ConsumeController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/ConsumeController.java @@ -1,5 +1,6 @@ package com.ruoyi.cai.controller.app; +import com.ruoyi.cai.dto.ConsumeResp; import com.ruoyi.cai.dto.app.query.GiveGiftRes; import com.ruoyi.cai.dto.app.query.GiveGuardReq; import com.ruoyi.cai.service.GuardTotalService; @@ -26,14 +27,14 @@ public class ConsumeController { @PostMapping("/give/guard") @Operation(summary = "赠送主播守护") public R giveGuard(@RequestBody GiveGuardReq query){ - boolean res = guardTotalService.giveGuard(query); - return R.ok(res); + ConsumeResp resp = guardTotalService.giveGuard(query); + return R.ok(resp.isSuccess()); } @PostMapping("/give/gift") @Operation(summary = "赠送主播礼物") public R giveGift(@RequestBody GiveGiftRes query){ - boolean res = userGiftService.giveGift(query); - return R.ok(res); + ConsumeResp resp = userGiftService.giveGift(query); + return R.ok(resp.isSuccess()); } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserCall.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserCall.java index 78853ed9..d9354ef7 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserCall.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserCall.java @@ -30,10 +30,12 @@ public class UserCall implements Serializable { * */ private Long fromUid; + private String fromUsercode; /** * */ private Long toUid; + private String toUsercode; /** * 状态 0 创建通话 1 呼叫方连接上 2呼叫方取消通话 3 接收方连接上 4收到通话取消通话 5.超时未接听 6接听方已拒绝 7 已接听 8通话结束 9已评分 10通话完成 */ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/ConsumeResp.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/ConsumeResp.java new file mode 100644 index 00000000..d0b922e0 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/ConsumeResp.java @@ -0,0 +1,9 @@ +package com.ruoyi.cai.dto; + +import lombok.Data; + +@Data +public class ConsumeResp { + private Long consumeLogId; + private boolean success; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java index c711d364..223fc300 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java @@ -24,10 +24,6 @@ public class CallResp { 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 = "评分") diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/GetRoomResp.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/GetRoomResp.java index 68da580e..d55852d2 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/GetRoomResp.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/GetRoomResp.java @@ -31,7 +31,6 @@ public class GetRoomResp { private Long price; @Schema(description = "评分") private BigDecimal score; - @Schema(description = "服务次数") private Long serviceCount; @Schema(description = "服务时间") diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java index 658e0b3e..b4953918 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java @@ -28,6 +28,7 @@ public enum SystemConfigEnum { SMS_CODE_ADMIN("", "万能验证码",SystemConfigGroupEnum.SYSTEM), PASSWORD_ADMIN("", "公用密码",SystemConfigGroupEnum.SYSTEM), SYSTEM_CUSTOMER_SERVICE("", "系统客服",SystemConfigGroupEnum.SYSTEM), + WS_SOCKET_URL("ws://localhost:8080?token=%s&room_id=%s", "ws通讯地址",SystemConfigGroupEnum.SYSTEM), ; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/GuardTotalService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/GuardTotalService.java index f8155faf..19c65db6 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/GuardTotalService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/GuardTotalService.java @@ -3,6 +3,7 @@ package com.ruoyi.cai.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.cai.domain.GuardTotal; +import com.ruoyi.cai.dto.ConsumeResp; import com.ruoyi.cai.dto.app.dto.GuardNum; import com.ruoyi.cai.dto.app.query.GiveGuardReq; import com.ruoyi.cai.dto.app.vo.index.GuardIndexVo; @@ -19,7 +20,7 @@ public interface GuardTotalService extends IService { GuardIndexVo guardInfoVo(Long fromUserId,Long toUserId, Integer limit); - boolean giveGuard(GiveGuardReq query); + ConsumeResp giveGuard(GiveGuardReq query); GuardNum getGuardNum(Long fromUserId, Long toUserId); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserGiftService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserGiftService.java index 0a5d2282..0eb4336f 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserGiftService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserGiftService.java @@ -2,6 +2,7 @@ package com.ruoyi.cai.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.cai.domain.UserGift; +import com.ruoyi.cai.dto.ConsumeResp; import com.ruoyi.cai.dto.app.query.GiveGiftRes; import com.ruoyi.cai.dto.app.vo.index.UserGiftIndexVo; @@ -17,6 +18,6 @@ public interface UserGiftService extends IService { List selectGiftList(Long userId); - boolean giveGift(GiveGiftRes query); + ConsumeResp giveGift(GiveGiftRes query); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/GuardTotalServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/GuardTotalServiceImpl.java index 4ddc69c8..92ad7080 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/GuardTotalServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/GuardTotalServiceImpl.java @@ -4,6 +4,7 @@ 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.ConsumeResp; import com.ruoyi.cai.dto.app.dto.GuardNum; import com.ruoyi.cai.dto.app.query.GiveGuardReq; import com.ruoyi.cai.dto.app.dto.GuardTotalDTO; @@ -78,7 +79,7 @@ public class GuardTotalServiceImpl extends ServiceImpl i throw new ServiceException("不能给自己拨打哦!"); } if(anchor == null){ - throw new ServiceException("主播技能不存在"); + throw new ServiceException("主播不存在"); } if(anchor.getOpenVideoStatus() == 0){ throw new ServiceException("对方未开启视频接听!"); } Account account = accountService.getByUserId(fromUid); if(account.getIncomeCoin() + account.getCoin() < anchor.getPrice() * 2){ - throw new ServiceException("你的紫贝不足!"); + throw new ServiceException("你的余额不足!"); } UserCall userCall = new UserCall(); userCall.setFromUid(fromUid); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserGiftServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserGiftServiceImpl.java index 4d0abcf6..4dce556c 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserGiftServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserGiftServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.cai.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.cai.domain.*; +import com.ruoyi.cai.dto.ConsumeResp; import com.ruoyi.cai.dto.app.query.GiveGiftRes; import com.ruoyi.cai.dto.app.vo.index.UserGiftIndexVo; import com.ruoyi.cai.enums.AccountBusinessEnum; @@ -51,7 +52,7 @@ public class UserGiftServiceImpl extends ServiceImpl i @Override @Transactional(rollbackFor = Exception.class) - public boolean giveGift(GiveGiftRes query) { + public ConsumeResp giveGift(GiveGiftRes query) { Long fromUserId = LoginHelper.getUserId(); Gift gift = giftService.getById(query.getGiftId()); if(gift == null){ @@ -62,6 +63,7 @@ public class UserGiftServiceImpl extends ServiceImpl i if(lock.isLocked()){ throw new ServiceException("您点击太快了"); } + ConsumeResp resp = new ConsumeResp(); try { lock.lock(3, TimeUnit.SECONDS); User fromUser = userService.getById(fromUserId); @@ -76,7 +78,8 @@ public class UserGiftServiceImpl extends ServiceImpl i consumeLog.setType(ConsumeLogType.GIFT.getCode()); consumeLog.setAmount(giftAmount); consumeLog.setTargetRate(anchor.getGiftRate()); - accountService.decr(consumeLog, AccountBusinessEnum.GIFT); + consumeLog = accountService.decr(consumeLog, AccountBusinessEnum.GIFT); + resp.setConsumeLogId(consumeLog.getId()); UserGift userGift = new UserGift(); userGift.setType(query.getType()); userGift.setFromUid(fromUserId); @@ -96,6 +99,7 @@ public class UserGiftServiceImpl extends ServiceImpl i }finally { lock.unlock(); } - return true; + resp.setSuccess(true); + return resp; } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/RedisConstant.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/RedisConstant.java index 39ea7cc3..b70718a3 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/RedisConstant.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/RedisConstant.java @@ -2,6 +2,7 @@ package com.ruoyi.cai.ws.constant; public class RedisConstant { public static final String REDIS_P = "caiws-"; + public static final String WS_TOKEN = REDIS_P + "wxToken:%s"; public static final String ONLINE_ROOM_DATA = REDIS_P + "onlineRoomData"; public static final String ROOM_DATA = REDIS_P + "roomData:%s"; public static final String FDCTX_DATA = REDIS_P + "fdctx:%s"; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/RoomStatusEnums.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/RoomStatusEnums.java index 87d23300..218ea68c 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/RoomStatusEnums.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/RoomStatusEnums.java @@ -8,7 +8,7 @@ public enum RoomStatusEnums { /** * 刚创建 */ - STATUS_CREATE(0,"刚创建"), + STATUS_CREATE(0,"创建通话"), /** * 呼叫方连接上 */ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WsToken.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WsToken.java new file mode 100644 index 00000000..3fbc60c8 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WsToken.java @@ -0,0 +1,10 @@ +package com.ruoyi.cai.ws.dto; + +import lombok.Data; + +@Data +public class WsToken { + private Long roomId; + private Long fromUid; + private Long toUid; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WebSocketManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WebSocketManager.java index 180ab810..b9cb48b1 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WebSocketManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WebSocketManager.java @@ -59,7 +59,7 @@ public class WebSocketManager { if(userCall == null){ throw new ServiceException("无效房间"); } - Room room = checkOnlineRoom(userCall.getFromUid(), userCall.getToUid()); + Room room = this.checkOnlineRoom(userCall.getFromUid(), userCall.getToUid()); if(room != null && room.isCanCall()){ // 缓存中存在旧房间,直接返回 return room.getRoomId(); }