From 97ba46f6e429b82c42400c5125b10ad9f0308364 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Fri, 26 Jan 2024 18:41:28 +0800 Subject: [PATCH] 123 --- .../cai/controller/app/AuthAppController.java | 9 ++ .../cai/controller/app/ConsumeController.java | 3 +- .../dto/commom/consumer/GiftConsumerResp.java | 4 +- .../commom/consumer/GuardConsumerResp.java | 15 ++++ .../ruoyi/cai/manager/ConsumerManager.java | 22 ++++- .../ruoyi/cai/manager/LoginAfterManager.java | 25 ++++++ .../ruoyi/cai/notice/YunxinHttpService.java | 90 ++++++++++--------- .../data/child/SendFollowNoticeData.java | 2 +- .../data/child/SendGiftMessageNoticeData.java | 2 +- .../ruoyi/cai/service/GuardTotalService.java | 3 +- .../service/impl/AnchorApplyServiceImpl.java | 8 ++ .../service/impl/GuardTotalServiceImpl.java | 8 +- .../service/impl/UserFollowServiceImpl.java | 13 +++ .../cai/service/impl/UserGiftServiceImpl.java | 2 + .../main/java/com/ruoyi/yunxin/Yunxin.java | 38 ++++++-- .../ruoyi/yunxin/service/YunxinWsService.java | 2 +- 16 files changed, 187 insertions(+), 59 deletions(-) create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/consumer/GuardConsumerResp.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/manager/LoginAfterManager.java 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 bddb8d20..8349ee36 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 @@ -7,12 +7,16 @@ import com.ruoyi.cai.domain.User; import com.ruoyi.cai.dto.app.vo.LoginVo; import com.ruoyi.cai.enums.CodeEnum; import com.ruoyi.cai.manager.CurrentUserManager; +import com.ruoyi.cai.manager.LoginAfterManager; +import com.ruoyi.cai.notice.YunxinHttpService; import com.ruoyi.cai.service.SmsVerifyService; import com.ruoyi.cai.service.UserService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.yunxin.Yunxin; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; @@ -80,6 +84,9 @@ public class AuthAppController { return R.ok("发送成功"); } + @Autowired + private LoginAfterManager loginAfterManager; + @PostMapping("/login") @Operation(summary = "登陆") @Log(title = "登陆", businessType = BusinessType.OTHER, isSaveDb = false) @@ -88,6 +95,8 @@ public class AuthAppController { String token = caiLoginManager.login(loginBody.getUsername(), loginBody.getPassword()); vo.setToken(token); vo.setUserInfo(currentUserManager.currentInfo()); + // 异步调用通知 + loginAfterManager.loginAfter(LoginHelper.getUserId()); return R.ok(vo); } 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 5ada3c0c..abec4f2d 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 @@ -9,6 +9,7 @@ import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto; import com.ruoyi.cai.dto.app.query.order.AddVipOrderDto; import com.ruoyi.cai.dto.app.vo.order.OrderCreateVo; import com.ruoyi.cai.dto.commom.consumer.GiftConsumerResp; +import com.ruoyi.cai.dto.commom.consumer.GuardConsumerResp; import com.ruoyi.cai.manager.ConsumerManager; import com.ruoyi.cai.service.RechargeOrderService; import com.ruoyi.cai.service.VipOrderService; @@ -39,7 +40,7 @@ public class ConsumeController { @Operation(summary = "赠送主播守护") @Log(title = "赠送主播守护", businessType = BusinessType.OTHER, isSaveDb = true) public R giveGuard(@RequestBody GiveGuardReq query){ - ConsumeResp resp = consumerManager.sendGuard(query); + GuardConsumerResp resp = consumerManager.sendGuard(query); return R.ok(resp.isSuccess()); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/consumer/GiftConsumerResp.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/consumer/GiftConsumerResp.java index 2eae86ec..9f9cdc43 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/consumer/GiftConsumerResp.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/consumer/GiftConsumerResp.java @@ -13,8 +13,8 @@ public class GiftConsumerResp { * 主播收益 */ private Long anchorIncomeCoin; - private Long userId; + private Long fromUid; + private Long toUid; private Long consumeLogId; - private Long traceId; private boolean success; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/consumer/GuardConsumerResp.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/consumer/GuardConsumerResp.java new file mode 100644 index 00000000..efe4fccf --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/consumer/GuardConsumerResp.java @@ -0,0 +1,15 @@ +package com.ruoyi.cai.dto.commom.consumer; + +import lombok.Data; + +@Data +public class GuardConsumerResp { + /** + * 主播收益 + */ + private Long anchorIncomeCoin; + private Long fromUid; + private Long toUid; + private Long consumeLogId; + private boolean success; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java index e3da43ef..5859f0d4 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java @@ -6,6 +6,7 @@ import com.ruoyi.cai.dto.ConsumeResp; import com.ruoyi.cai.dto.app.query.GiveGiftReq; import com.ruoyi.cai.dto.app.query.GiveGuardReq; import com.ruoyi.cai.dto.commom.consumer.GiftConsumerResp; +import com.ruoyi.cai.dto.commom.consumer.GuardConsumerResp; import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp; import com.ruoyi.cai.dto.video.VideoSettleResp; import com.ruoyi.cai.mq.AmqpProducer; @@ -38,14 +39,24 @@ public class ConsumerManager { @Autowired private YunxinHttpService yunxinHttpService; - public ConsumeResp sendGuard(GiveGuardReq query){ - ConsumeResp resp = guardTotalService.giveGuard(query); + public GuardConsumerResp sendGuard(GiveGuardReq query){ + GuardConsumerResp resp = guardTotalService.giveGuard(query); if(resp.isSuccess()){ try { amqpProducer.sendCalculateSales(resp.getConsumeLogId()+""); }catch (Exception e){ log.error("RabbitMq 发送失败, 守护分销流程流转失败!",e); } + try { + Account account = accountService.getByUserId(resp.getToUid()); + if(account != null){ + Long totalCoin = account.getCoin() + account.getIncomeCoin(); + // 主播的系统收益通知 + yunxinHttpService.getGuardMessage(resp.getToUid(), query.getGuardNum(), query.getGuardPrice(), resp.getAnchorIncomeCoin(), totalCoin); + } + }catch (Exception e){ + log.error("礼物赠送成功通知失败!",e); + } } return resp; } @@ -59,11 +70,14 @@ public class ConsumerManager { log.error("RabbitMq 发送失败, 礼物分销流程流转失败!",e); } try { - Account account = accountService.getByUserId(resp.getUserId()); + Account account = accountService.getByUserId(resp.getToUid()); if(account != null){ Long totalCoin = account.getCoin() + account.getIncomeCoin(); - yunxinHttpService.getGiftSendMessage(resp.getUserId(), resp.getGift(), resp.getAnchorIncomeCoin(), totalCoin); + // 主播的系统收益通知 + yunxinHttpService.getGiftSendMessage(resp.getToUid(), resp.getGift(), resp.getAnchorIncomeCoin(), totalCoin); } + // 发送方给接收方的消息 + yunxinHttpService.sendGiftMessage(resp.getFromUid(),resp.getToUid(),resp.getGift(),query.getGiftCount()); }catch (Exception e){ log.error("礼物赠送成功通知失败!",e); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/LoginAfterManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/LoginAfterManager.java new file mode 100644 index 00000000..a11e73da --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/LoginAfterManager.java @@ -0,0 +1,25 @@ +package com.ruoyi.cai.manager; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.cai.domain.UserFollow; +import com.ruoyi.cai.notice.YunxinHttpService; +import com.ruoyi.cai.service.UserFollowService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class LoginAfterManager { + @Autowired + private YunxinHttpService yunxinHttpService; + @Autowired + private UserFollowService userFollowService; + + public void loginAfter(Long userId){ + Page page = new Page<>(); +// page.setSize() + + + } + + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinHttpService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinHttpService.java index 729d8b0f..0ee32e14 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinHttpService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/YunxinHttpService.java @@ -1,7 +1,6 @@ package com.ruoyi.cai.notice; import com.alibaba.fastjson.JSON; -import com.ruoyi.cai.domain.Account; import com.ruoyi.cai.domain.Gift; import com.ruoyi.cai.domain.User; import com.ruoyi.cai.notice.data.NoticeR; @@ -15,6 +14,7 @@ import com.ruoyi.cai.util.CaiNumUtil; import com.ruoyi.yunxin.YunExecutor; import com.ruoyi.yunxin.Yunxin; import com.ruoyi.yunxin.resp.SendMsgResp; +import com.ruoyi.yunxin.resp.YxCommonR; import com.ruoyi.yunxin.resp.YxDataR; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -28,7 +28,6 @@ import java.util.List; @Slf4j public class YunxinHttpService { - private final static Long SYS_NOTICE_ID = 2L; /** * 网易云信的 "动态通知" id */ @@ -53,7 +52,7 @@ public class YunxinHttpService { data.addFields("注册奖励",rewardCoin+"云贝"); data.addFields("注册奖励",totalCoin+"云贝"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -72,7 +71,7 @@ public class YunxinHttpService { data.addFields("购买云贝",rewardCoin+"云贝"); data.addFields("总云贝",totalCoin+"云贝"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -97,7 +96,7 @@ public class YunxinHttpService { data.addFields("收入云贝",incomeCoin+"云贝"); data.addFields("总云贝",totalCoin+"云贝"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -124,7 +123,7 @@ public class YunxinHttpService { data.addFields("用户蜜瓜号",sourceUsercode); data.addFields(str,incomeCoin+"云贝"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -150,7 +149,7 @@ public class YunxinHttpService { data.addFields("充值金额",payCoin+"云贝"); data.addFields("充值分成",incomeCoin+"云贝"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -174,7 +173,7 @@ public class YunxinHttpService { data.addFields("到账账户","支付宝("+cardAccount+")"); data.addFields("审核时间",CaiDateUtil.localDateTimeToString(verifyTime)); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -195,7 +194,7 @@ public class YunxinHttpService { data.addFields("到账账户","支付宝("+dto.getCardAccount()+")"); data.addFields("审核时间",CaiDateUtil.localDateTimeToString(dto.getVerifyTime())); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(dto.getToUid(), SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(dto.getToUid(), notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -218,7 +217,7 @@ public class YunxinHttpService { data.addFields("提现方式","支付宝"); data.setTxt2(remark); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -236,7 +235,7 @@ public class YunxinHttpService { data.setTxt1("感谢您提交的举报信息,拒绝不良风气,良好的氛围需要大家共同维护。"); data.setCurrentDate(); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -248,24 +247,19 @@ public class YunxinHttpService { * @param toUid */ public void followedSendMessage(Long toUid, - Long followUserId, - String followNickname, - String followAvatar, - Integer followAge, - String followCity, - LocalDateTime followTime, - Integer gender){ + User followUser, + LocalDateTime followTime){ YunExecutor.YUN_EXECUTOR.execute(() -> { SendFollowNoticeData data = new SendFollowNoticeData(); - data.setUserid(followUserId); - data.setNickname(followNickname); - data.setAvatar(followAvatar); - data.setAge(followAge); - data.setCity(followCity); + data.setUserid(followUser.getId()); + data.setNickname(followUser.getNickname()); + data.setAvatar(followUser.getAvatar()); + data.setAge(followUser.getAge()); + data.setCity(followUser.getCity()); data.setTime(CaiDateUtil.localDateTimeToString(followTime)); - data.setSex(gender); + data.setSex(followUser.getGender()); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.SEND_FOLLOW, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -287,7 +281,7 @@ public class YunxinHttpService { data.addFields("赚钱小秘密二","照片越好看,男生越喜欢"); data.addFields("赚钱小秘密三","勤发动态,让他感受到你的美"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -298,6 +292,7 @@ public class YunxinHttpService { /** * 更改女神邀请比例 */ + @Deprecated public void changeInviteConfigSendMessage(Long toUid){ YunExecutor.YUN_EXECUTOR.execute(() -> { ExtNoticeData data = new ExtNoticeData(); @@ -305,7 +300,7 @@ public class YunxinHttpService { data.setTitle("恭喜成为邀请女神"); data.setCurrentDate(); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -313,13 +308,19 @@ public class YunxinHttpService { } /** - * 发送礼物自定义消息 + * 发送礼物自定义消息 (发送方和接收方的消息) */ - public void sendGiftMessage(Long toUid){ + public void sendGiftMessage(Long fromUid,Long toUid,Gift gift,Integer giftCount){ YunExecutor.YUN_EXECUTOR.execute(() -> { SendGiftMessageNoticeData data = new SendGiftMessageNoticeData(); + data.setGift_id(gift.getId()); + data.setGift_name(gift.getName()); + data.setGift_url(gift.getImg()); + data.setGift_count(giftCount); + data.setFrom_uid(fromUid); + data.setTo_uid(toUid); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.SEND_GIFT_MESSAGE, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToUserNotice(toUid, fromUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -330,7 +331,7 @@ public class YunxinHttpService { /** * 收到守护符通知 */ - public void getGuardMessage(Long toUid,Integer num,Long price,BigDecimal incomeCoin,BigDecimal totalCoin){ + public void getGuardMessage(Long toUid,Long num,Long price,Long incomeCoin,Long totalCoin){ YunExecutor.YUN_EXECUTOR.execute(() -> { ExtNoticeData data = new ExtNoticeData(); data.setAction(1); @@ -341,7 +342,7 @@ public class YunxinHttpService { data.addFields("收入云贝",incomeCoin+"云贝"); data.addFields("总云贝",totalCoin+"云贝"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -352,11 +353,18 @@ public class YunxinHttpService { /** * 发送上线了批量自定义消息 */ - public void sendOnlineAttentionNotice(Long toUid){ + public void sendOnlineAttentionNotice(List toUid,User loginUser){ YunExecutor.YUN_EXECUTOR.execute(() -> { SendOnlineAttentionNoticeData data = new SendOnlineAttentionNoticeData(); + data.setUserid(loginUser.getId()); + data.setNickname(loginUser.getNickname()); + data.setAvatar(loginUser.getAvatar()); + data.setAge(loginUser.getAge()); + data.setCity(loginUser.getCity()); + data.setTime(CaiDateUtil.getCurrentTimeStr()); + data.setSex(loginUser.getGender()); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.SEND_ONLINE_ATTENTION, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.batchSendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -374,7 +382,7 @@ public class YunxinHttpService { data.setCurrentDate(); data.setTxt1("因多次违规或被投诉,已被取消女神资格!"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -393,7 +401,7 @@ public class YunxinHttpService { data.setCurrentDate(); data.setTxt1("您的动态因不符合规范,已被删除,多次违规会被取消大咖资格或封号处理"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -414,7 +422,7 @@ public class YunxinHttpService { data.setLink_type(1); data.setLink_url("/index/about/album_rule.html"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -433,7 +441,7 @@ public class YunxinHttpService { data.setCurrentDate(); data.setTxt1("您的昵称不合格,已被重置,多次违规会被封号!"); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -448,7 +456,7 @@ public class YunxinHttpService { YunExecutor.YUN_EXECUTOR.execute(() -> { SendRechargeWindowsAmountNoticeData data = new SendRechargeWindowsAmountNoticeData(); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.RECHARGE_WINDOWS_AMOUNT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -463,7 +471,7 @@ public class YunxinHttpService { YunExecutor.YUN_EXECUTOR.execute(() -> { SendGiftWindowsAmountNoticeData data = new SendGiftWindowsAmountNoticeData(); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.SEND_GIFT_WINDOWS_AMOUNT, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } @@ -486,7 +494,7 @@ public class YunxinHttpService { data.setImage(image); data.setTitle(content); NoticeR notice = NoticeR.ok(MessageBaseTypeEnum.SEND_FOLLOW_DYNAMIC, data); - YxDataR r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice); + YxDataR r = yunxin.sendToNotice(toUid, notice); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/data/child/SendFollowNoticeData.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/data/child/SendFollowNoticeData.java index 80be005e..1333a6fe 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/data/child/SendFollowNoticeData.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/data/child/SendFollowNoticeData.java @@ -7,7 +7,7 @@ public class SendFollowNoticeData { private Long userid; private String nickname; private String avatar; - private Integer age; + private Long age; private String city; private String time; private Integer sex; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/data/child/SendGiftMessageNoticeData.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/data/child/SendGiftMessageNoticeData.java index 5cb5402b..8f0059e8 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/data/child/SendGiftMessageNoticeData.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/notice/data/child/SendGiftMessageNoticeData.java @@ -7,7 +7,7 @@ public class SendGiftMessageNoticeData { private Long gift_id; private String gift_name; private String gift_url; - private Long gift_count; + private Integer gift_count; private Long from_uid; private Long to_uid; private Integer link_type = 0; 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 19c65db6..7e262596 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 @@ -8,6 +8,7 @@ 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; import com.ruoyi.cai.dto.app.vo.index.GuardListPageVo; +import com.ruoyi.cai.dto.commom.consumer.GuardConsumerResp; import com.ruoyi.common.core.domain.PageQuery; /** @@ -20,7 +21,7 @@ public interface GuardTotalService extends IService { GuardIndexVo guardInfoVo(Long fromUserId,Long toUserId, Integer limit); - ConsumeResp giveGuard(GiveGuardReq query); + GuardConsumerResp giveGuard(GiveGuardReq query); GuardNum getGuardNum(Long fromUserId, Long toUserId); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorApplyServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorApplyServiceImpl.java index 4f433f08..c7ad628b 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorApplyServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorApplyServiceImpl.java @@ -13,6 +13,7 @@ import com.ruoyi.cai.enums.GenderEnum; import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.mapper.AnchorApplyMapper; +import com.ruoyi.cai.notice.YunxinHttpService; import com.ruoyi.cai.service.AnchorApplyService; import com.ruoyi.cai.service.AnchorService; import com.ruoyi.cai.service.UserService; @@ -39,6 +40,8 @@ public class AnchorApplyServiceImpl extends ServiceImpl i consumeLog = accountService.giftDecr(consumeLog, ConsumeLogType.GIFT, gift); resp.setAnchorIncomeCoin(consumeLog.getAnchorAmount()); resp.setConsumeLogId(consumeLog.getId()); + resp.setFromUid(fromUserId); + resp.setToUid(query.getToUserId()); UserGift userGift = new UserGift(); userGift.setType(query.getType()); userGift.setFromUid(fromUserId); diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java index 508281b9..47d11f05 100644 --- a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java +++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java @@ -2,7 +2,6 @@ package com.ruoyi.yunxin; import com.alibaba.fastjson2.JSON; import com.ruoyi.yunxin.client.ImMessageClient; -import com.ruoyi.yunxin.config.YunxinExecutorConstant; import com.ruoyi.yunxin.config.YunxinProperties; import com.ruoyi.yunxin.req.Option; import com.ruoyi.yunxin.req.SendAttachMsgReq; @@ -22,21 +21,22 @@ import java.util.stream.Collectors; @Component public class Yunxin { + private final static String SYS_NOTICE_ID = "2"; + @Autowired private YunxinProperties yunxinProperties; @Resource private ImMessageClient messageClient; /** - * + * 发送系统消息 * @param toUid 接收者ID - * @param fromUid 发送者ID * @param data 数据 * @return */ - public YxDataR sendTo(Long toUid,Long fromUid,Object data){ + public YxDataR sendToNotice(Long toUid, Object data){ SendMsgReq req = new SendMsgReq(); - req.setFrom(fromUid == null ? yunxinProperties.getDefaultFromUid() : fromUid+""); + req.setFrom(SYS_NOTICE_ID); req.setTo(toUid+""); req.setBody(JSON.toJSONString(data)); req.setOption(JSON.toJSONString(new Option())); @@ -44,6 +44,34 @@ public class Yunxin { return messageClient.sendMsg(req); } + /** + * 批量发送 系统消息 + * @param toUid + * @return + */ + public YxDataR batchSendToNotice(List toUid, Object data){ + SendBatchMsgReq req = new SendBatchMsgReq(); + req.setFromAccid(SYS_NOTICE_ID); + req.setToAccids(toUid.stream().map(i -> String.valueOf(toUid)).collect(Collectors.toList())); + req.setBody(JSON.toJSONString(data)); + req.setOption(JSON.toJSONString(new Option())); + req.setType(100); + return messageClient.sendBatchMsg(req); + } + + /** + * 指定用户的自定义消息 + */ + public YxDataR sendToUserNotice(Long toUid, Long fromUid, Object data){ + SendMsgReq req = new SendMsgReq(); + req.setFrom(fromUid+""); + req.setTo(toUid+""); + req.setBody(JSON.toJSONString(data)); + req.setOption(JSON.toJSONString(new Option())); + return messageClient.sendMsg(req); + } + + public YxDataR batchSendToTextMessage(Long fromUid, List toUid, String data){ SendBatchMsgReq req = new SendBatchMsgReq(); diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/service/YunxinWsService.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/service/YunxinWsService.java index 2268d9ee..4e011fc7 100644 --- a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/service/YunxinWsService.java +++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/service/YunxinWsService.java @@ -43,7 +43,7 @@ public class YunxinWsService { public void sendToCallNotifyAsync(Long toUid, Long fromUid, CallNoticeEnum status, Long calltime){ YunExecutor.YUN_EXECUTOR.execute(() -> { ImDataRes imDataRes = ImMsgGen.callNotice(status, fromUid, toUid, calltime); - YxDataR r = yunxin.sendTo(toUid, fromUid, imDataRes); + YxDataR r = yunxin.sendToNotice(toUid, fromUid, imDataRes); if(r == null || !r.isSuccess()){ log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); }