This commit is contained in:
张良(004796)
2024-01-26 18:41:28 +08:00
parent 36eee916b1
commit 97ba46f6e4
16 changed files with 187 additions and 59 deletions

View File

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

View File

@@ -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<Boolean> giveGuard(@RequestBody GiveGuardReq query){
ConsumeResp resp = consumerManager.sendGuard(query);
GuardConsumerResp resp = consumerManager.sendGuard(query);
return R.ok(resp.isSuccess());
}

View File

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

View File

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

View File

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

View File

@@ -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<UserFollow> page = new Page<>();
// page.setSize()
}
}

View File

@@ -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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(dto.getToUid(), SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<SendFollowNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.SEND_FOLLOW, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<SendGiftMessageNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.SEND_GIFT_MESSAGE, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<Long> 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<SendOnlineAttentionNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.SEND_ONLINE_ATTENTION, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<YxCommonR> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<SendRechargeWindowsAmountNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.RECHARGE_WINDOWS_AMOUNT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<SendGiftWindowsAmountNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.SEND_GIFT_WINDOWS_AMOUNT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> 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<SendFollowDynamicNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.SEND_FOLLOW_DYNAMIC, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
YxDataR<SendMsgResp> r = yunxin.sendToNotice(toUid, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}

View File

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

View File

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

View File

@@ -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<GuardTotal> {
GuardIndexVo guardInfoVo(Long fromUserId,Long toUserId, Integer limit);
ConsumeResp giveGuard(GiveGuardReq query);
GuardConsumerResp giveGuard(GiveGuardReq query);
GuardNum getGuardNum(Long fromUserId, Long toUserId);

View File

@@ -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<AnchorApplyMapper, Ancho
private AnchorService anchorService;
@Autowired
private SystemConfigManager systemConfigManager;
@Autowired
private YunxinHttpService yunxinHttpService;
@Override
public AnchorApply getByUserId(Long userId){
@@ -135,11 +138,16 @@ public class AnchorApplyServiceImpl extends ServiceImpl<AnchorApplyMapper, Ancho
save.setGuardRate(systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.DEFAULT_ANCHOR_GUARD_PRICE));
save.setGiftRate(systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.DEFAULT_ANCHOR_GIFT_PRICE));
anchorService.save(save);
yunxinHttpService.passAnchorSendMessage(userId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void auditAnchorFail(Long id) {
AnchorApply anchorApply = this.getById(id);
if(anchorApply == null){
return;
}
this.update(Wrappers.lambdaUpdate(AnchorApply.class)
.eq(AnchorApply::getId,id)
.set(AnchorApply::getAuditTime,LocalDateTime.now())

View File

@@ -10,6 +10,7 @@ import com.ruoyi.cai.dto.app.dto.GuardTotalDTO;
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.cai.enums.ConsumeLogType;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.manager.IdManager;
@@ -81,7 +82,7 @@ public class GuardTotalServiceImpl extends ServiceImpl<GuardTotalMapper, GuardTo
@Override
@Transactional(rollbackFor = Exception.class)
public ConsumeResp giveGuard(GiveGuardReq query) {
public GuardConsumerResp giveGuard(GiveGuardReq query) {
Long fromUserId = LoginHelper.getUserId();
User fromUser = userService.getById(fromUserId);
User toUser = userService.getById(query.getToUserId());
@@ -104,7 +105,7 @@ public class GuardTotalServiceImpl extends ServiceImpl<GuardTotalMapper, GuardTo
if(lock.isLocked()){
throw new ServiceException("您点击太快了");
}
ConsumeResp resp = new ConsumeResp();
GuardConsumerResp resp = new GuardConsumerResp();
try {
lock.lock(3, TimeUnit.SECONDS);
Long guardValue = query.getGuardNum() * guardPrice;
@@ -117,6 +118,9 @@ public class GuardTotalServiceImpl extends ServiceImpl<GuardTotalMapper, GuardTo
consumeLog.setTargetRate(anchor.getGuardRate());
consumeLog = accountService.guardDecr(consumeLog, ConsumeLogType.GUARD);
resp.setConsumeLogId(consumeLog.getId());
resp.setFromUid(fromUserId);
resp.setToUid(query.getToUserId());
resp.setAnchorIncomeCoin(consumeLog.getAnchorAmount());
GuardLog guardLog = new GuardLog();
guardLog.setFromUserId(fromUserId);
guardLog.setFromUsercode(fromUser.getUsercode());

View File

@@ -3,6 +3,7 @@ package com.ruoyi.cai.service.impl;
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.User;
import com.ruoyi.cai.domain.UserCount;
import com.ruoyi.cai.domain.UserFollow;
import com.ruoyi.cai.dto.app.query.StarQuery;
@@ -10,9 +11,11 @@ import com.ruoyi.cai.dto.app.query.StarOrVisitorReq;
import com.ruoyi.cai.dto.app.vo.user.UserBaseVo;
import com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList;
import com.ruoyi.cai.mapper.UserFollowMapper;
import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.cai.service.UserCountService;
import com.ruoyi.cai.service.UserFollowService;
import com.ruoyi.cai.service.UserMemberService;
import com.ruoyi.cai.service.UserService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
@@ -22,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -40,6 +44,10 @@ public class UserFollowServiceImpl extends ServiceImpl<UserFollowMapper, UserFol
private UserCountService userCountService;
@Autowired
private UserMemberService userMemberService;
@Autowired
private YunxinHttpService yunxinHttpService;
@Autowired
private UserService userService;
@Override
public Long getFansNumByUserId(Long userId){
@@ -58,6 +66,10 @@ public class UserFollowServiceImpl extends ServiceImpl<UserFollowMapper, UserFol
@Transactional(rollbackFor = Exception.class)
public boolean star(StarOrVisitorReq starOrVisitorReq) {
Long fromUserId = LoginHelper.getUserId();
User user = userService.getById(fromUserId);
if(user == null){
throw new ServiceException("您的账号已被注销");
}
if(starOrVisitorReq.getToUserId().equals(fromUserId)){
throw new ServiceException("不能关注自己哦");
}
@@ -69,6 +81,7 @@ public class UserFollowServiceImpl extends ServiceImpl<UserFollowMapper, UserFol
userFollow.setFollowUser(starOrVisitorReq.getToUserId());
this.save(userFollow);
userCountService.star(fromUserId, starOrVisitorReq.getToUserId());
yunxinHttpService.followedSendMessage(starOrVisitorReq.getToUserId(), user, LocalDateTime.now());
return true;
}

View File

@@ -85,6 +85,8 @@ public class UserGiftServiceImpl extends ServiceImpl<UserGiftMapper, UserGift> 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);

View File

@@ -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<SendMsgResp> sendTo(Long toUid,Long fromUid,Object data){
public YxDataR<SendMsgResp> 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<YxCommonR> batchSendToNotice(List<Long> 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<SendMsgResp> 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<YxCommonR> batchSendToTextMessage(Long fromUid, List<Long> toUid, String data){
SendBatchMsgReq req = new SendBatchMsgReq();

View File

@@ -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<SendMsgResp> r = yunxin.sendTo(toUid, fromUid, imDataRes);
YxDataR<SendMsgResp> r = yunxin.sendToNotice(toUid, fromUid, imDataRes);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}