This commit is contained in:
dute7liang
2024-01-27 19:46:21 +08:00
parent 63b2d1f238
commit d0a53c31a5
15 changed files with 290 additions and 22 deletions

View File

@@ -0,0 +1,201 @@
package com.ruoyi.test.business;
import com.ruoyi.cai.domain.Gift;
import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.mq.handle.dto.WindowRechargeDTO;
import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.cai.notice.data.child.SendGiftWindowsAmountNoticeData;
import com.ruoyi.cai.service.GiftService;
import com.ruoyi.cai.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Collections;
@SpringBootTest
@Slf4j
public class NoticeTest {
@Autowired
private YunxinHttpService yunxinHttpService;
/**
* 注册赠送消息
*/
@Test
public void registerRewardCoin(){
yunxinHttpService.registerRewardCoin(33497L,88L,88L);
}
/**
* 充值云贝成功消息
*/
@Test
public void rechargeCoinSendMessage(){
yunxinHttpService.rechargeCoinSendMessage(33497L,188L,1000L);
}
@Autowired
private GiftService giftService;
/**
* 收到礼物发送消息
*/
@Test
public void getGiftSendMessage(){
Gift gift = giftService.getById(1);
yunxinHttpService.getGiftSendMessage(33497L,gift,50L,100L);
}
/**
* 用户充值,邀请人返现
*/
@Test
public void inviteCashbackSendMessage(){
BigDecimal rate = new BigDecimal("0.30");
yunxinHttpService.inviteCashbackSendMessage(33497L,10166L,rate,1000L,30L);
}
/**
* 提现审核转账发送消息【提现审核成功】
*/
@Test
public void cashSuccessSendMessage(){
LocalDateTime cashTime = LocalDateTime.now().plusDays(-1);
BigDecimal cashMoney = new BigDecimal("78.00");
LocalDateTime verifyTime = LocalDateTime.now();
yunxinHttpService.cashSuccessSendMessage(33497L,
cashTime,cashMoney,cashMoney,"张总",verifyTime);
}
/**
* 提现审核转账发送消息【提现审核失败】
*/
@Test
public void cashFailSendMessage(){
LocalDateTime cashTime = LocalDateTime.now().plusDays(-1);
BigDecimal cashMoney = new BigDecimal("78.00");
yunxinHttpService.cashFailSendMessage(33497L,
cashTime,cashMoney,"账户有问题,打不了款");
}
/**
* 举报发送消息
*/
@Test
public void reportSendMessage(){
yunxinHttpService.reportSendMessage(33497L);
}
@Autowired
private UserService userService;
/**
* 关注发送消息
*/
@Test
public void followedSendMessage(){
User followUser = userService.getById(10166L);
yunxinHttpService.followedSendMessage(33497L,followUser,LocalDateTime.now());
}
/**
* 通过女神认证发送消息
*/
@Test
public void passAnchorSendMessage(){
yunxinHttpService.passAnchorSendMessage(33497L);
}
/**
* 发送礼物自定义消息 (发送方和接收方的消息)
*/
@Test
public void sendGiftMessage(){
Gift gift = giftService.getById(1);
yunxinHttpService.sendGiftMessage(10166L,33497L,gift,20);
}
/**
* 收到守护符通知
*/
@Test
public void getGuardMessage(){
yunxinHttpService.getGuardMessage(33497L,1L,1314L,520L,1233L);
}
/**
* 发送上线了批量自定义消息
*/
@Test
public void sendOnlineAttentionNotice(){
User loginUser = userService.getById(10166L);
yunxinHttpService.sendOnlineAttentionNotice(Collections.singletonList(33497L),loginUser);
}
/**
* 取消女神通知
*/
@Test
public void cancelAnchorMessage(){
yunxinHttpService.cancelAnchorMessage(33497L);
}
/**
* 动态审核通知
*/
@Test
public void dynamicAuditMessage(){
yunxinHttpService.dynamicAuditMessage(33497L);
}
/**
* 昵称重置审核通知
*/
@Test
public void nickAuditMessage(){
yunxinHttpService.nickAuditMessage(33497L);
}
/**
* 发送充值飘窗提醒
*/
@Test
public void sendRechargeWindowsAmount(){
User followUser = userService.getById(10166L);
WindowRechargeDTO dto = new WindowRechargeDTO();
dto.setId(10166L);
dto.setNickname(followUser.getNickname());
dto.setAvatar(followUser.getAvatar());
dto.setAmount(882L);
yunxinHttpService.sendRechargeWindowsAmount(Collections.singletonList(33497L),dto);
}
/**
* 发送充值礼物提醒
*/
@Test
public void sendGiftWindowsAmount(){
User fromUser = userService.getById(33497L);
User toUser = userService.getById(10166L);
Gift gift = giftService.getById(1);
SendGiftWindowsAmountNoticeData data = new SendGiftWindowsAmountNoticeData();
data.setId(fromUser.getId());
data.setNickname(fromUser.getNickname());
data.setAvatar(fromUser.getAvatar());
data.setToid(toUser.getId());
data.setTonickname(toUser.getNickname());
data.setToavatar(toUser.getAvatar());
data.setAmount(gift.getPrice());
data.setGiftname(gift.getName());
data.setGiftimg(gift.getImg());
data.setGifttotal(2L);
yunxinHttpService.sendGiftWindowsAmount(Collections.singletonList(33497L),data);
}
}

View File

@@ -16,6 +16,7 @@ import com.ruoyi.cai.service.VipOrderService;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.helper.LoginHelper;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -56,6 +57,7 @@ public class ConsumeController {
@Operation(summary = "创建VIP订单") @Operation(summary = "创建VIP订单")
@Log(title = "创建VIP订单", businessType = BusinessType.OTHER, isSaveDb = true) @Log(title = "创建VIP订单", businessType = BusinessType.OTHER, isSaveDb = true)
public R<OrderCreateVo> vipOrderCreate(@RequestBody AddVipOrderDto dto){ public R<OrderCreateVo> vipOrderCreate(@RequestBody AddVipOrderDto dto){
dto.setUserId(LoginHelper.getUserId());
VipOrder order = vipOrderService.addVipOrder(dto); VipOrder order = vipOrderService.addVipOrder(dto);
OrderCreateVo vo = new OrderCreateVo(); OrderCreateVo vo = new OrderCreateVo();
vo.setPrice(order.getPrice()); vo.setPrice(order.getPrice());
@@ -69,6 +71,7 @@ public class ConsumeController {
@Operation(summary = "创建充值订单") @Operation(summary = "创建充值订单")
@Log(title = "创建充值订单", businessType = BusinessType.OTHER, isSaveDb = true) @Log(title = "创建充值订单", businessType = BusinessType.OTHER, isSaveDb = true)
public R<OrderCreateVo> rechargeOrderCreate(@RequestBody AddRechargeOrderDto dto){ public R<OrderCreateVo> rechargeOrderCreate(@RequestBody AddRechargeOrderDto dto){
dto.setUserId(LoginHelper.getUserId());
RechargeOrder order = rechargeOrderService.addRechargeOrder(dto); RechargeOrder order = rechargeOrderService.addRechargeOrder(dto);
OrderCreateVo vo = new OrderCreateVo(); OrderCreateVo vo = new OrderCreateVo();
vo.setPrice(order.getPrice()); vo.setPrice(order.getPrice());

View File

@@ -4,7 +4,6 @@ import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.domain.ConsumeLog; import com.ruoyi.cai.domain.ConsumeLog;
import com.ruoyi.cai.domain.Gift; import com.ruoyi.cai.domain.Gift;
import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.dto.app.query.GiveGiftReq; import com.ruoyi.cai.dto.app.query.GiveGiftReq;
import com.ruoyi.cai.dto.app.query.GiveGuardReq; import com.ruoyi.cai.dto.app.query.GiveGuardReq;
import com.ruoyi.cai.dto.commom.consumer.GiftConsumerResp; import com.ruoyi.cai.dto.commom.consumer.GiftConsumerResp;
@@ -24,7 +23,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Map; import java.util.Map;
@@ -144,15 +142,15 @@ public class ConsumerManager {
log.error("充值成功通知失败!",e); log.error("充值成功通知失败!",e);
} }
try { try {
BigDecimal decimal = systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.WINDOW_RECHARGE_THRESHOLD); Long minPrice = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.WINDOW_RECHARGE_THRESHOLD);
if(decimal.compareTo(resp.getPrice()) < 0){ if(resp.getRechargeCoin() > minPrice){
Integer rankHide = resp.getUser().getRankHide(); Integer rankHide = resp.getUser().getRankHide();
if(rankHide == 0){ if(rankHide == 0){
WindowRechargeDTO windowRecharge = new WindowRechargeDTO(); WindowRechargeDTO windowRecharge = new WindowRechargeDTO();
windowRecharge.setId(resp.getUserId()); windowRecharge.setId(resp.getUserId());
windowRecharge.setNickname(resp.getUser().getNickname()); windowRecharge.setNickname(resp.getUser().getNickname());
windowRecharge.setAvatar(resp.getUser().getAvatar()); windowRecharge.setAvatar(resp.getUser().getAvatar());
windowRecharge.setAmount(resp.getPrice()); windowRecharge.setAmount(resp.getRechargeCoin());
windowRecharge.setTime(LocalDateTime.now()); windowRecharge.setTime(LocalDateTime.now());
amqpProducer.sendWindowMq(windowRecharge); amqpProducer.sendWindowMq(windowRecharge);
} }

View File

@@ -49,7 +49,7 @@ public class WindowGiftHandle implements IHandle{
data.setGiftname(gift.getName()); data.setGiftname(gift.getName());
data.setGiftimg(gift.getImg()); data.setGiftimg(gift.getImg());
data.setGifttotal(windowGift.getGiftNum()); data.setGifttotal(windowGift.getGiftNum());
data.setTime(CaiDateUtil.getCurrentTimeStr()); data.setTime(System.currentTimeMillis());
yunxinHttpService.sendGiftWindowsAmount(list,data); yunxinHttpService.sendGiftWindowsAmount(list,data);
} }

View File

@@ -12,7 +12,7 @@ public class WindowRechargeDTO extends CommonDTO {
private Long id; private Long id;
private String nickname; private String nickname;
private String avatar; private String avatar;
private BigDecimal amount; private Long amount;
private LocalDateTime time; private LocalDateTime time;
public WindowRechargeDTO() { public WindowRechargeDTO() {
this.setType(CommonConsumerEnum.WINDOW_RECHARGE); this.setType(CommonConsumerEnum.WINDOW_RECHARGE);

View File

@@ -5,6 +5,7 @@ import com.ruoyi.cai.domain.Gift;
import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.mq.handle.dto.WindowRechargeDTO; import com.ruoyi.cai.mq.handle.dto.WindowRechargeDTO;
import com.ruoyi.cai.notice.data.NoticeR; import com.ruoyi.cai.notice.data.NoticeR;
import com.ruoyi.cai.notice.data.WindowNoticeR;
import com.ruoyi.cai.notice.data.child.*; import com.ruoyi.cai.notice.data.child.*;
import com.ruoyi.cai.notice.dto.CashSuccessSendMesDTO; import com.ruoyi.cai.notice.dto.CashSuccessSendMesDTO;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum; import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
@@ -12,6 +13,7 @@ import com.ruoyi.cai.service.AccountService;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
import com.ruoyi.cai.util.CaiDateUtil; import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.cai.util.CaiNumUtil; import com.ruoyi.cai.util.CaiNumUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.yunxin.YunExecutor; import com.ruoyi.yunxin.YunExecutor;
import com.ruoyi.yunxin.Yunxin; import com.ruoyi.yunxin.Yunxin;
import com.ruoyi.yunxin.resp.SendMsgResp; import com.ruoyi.yunxin.resp.SendMsgResp;
@@ -51,7 +53,7 @@ public class YunxinHttpService {
data.setCurrentDate(); data.setCurrentDate();
data.setTxt1("陌生人交友需谨慎,添加陌生人微信,QQ失去平台监管有极大被骗风险凡是诱导加微信QQ引导到其他平台或以色情为由索取礼物的行为请大家及时举报一经查明直接永久封号良好的交友氛围需大家共同维护希望大家提高自我警惕性杜绝被骗"); data.setTxt1("陌生人交友需谨慎,添加陌生人微信,QQ失去平台监管有极大被骗风险凡是诱导加微信QQ引导到其他平台或以色情为由索取礼物的行为请大家及时举报一经查明直接永久封号良好的交友氛围需大家共同维护希望大家提高自我警惕性杜绝被骗");
data.addFields("注册奖励",rewardCoin+"云贝"); data.addFields("注册奖励",rewardCoin+"云贝");
data.addFields("注册奖励",totalCoin+"云贝"); data.addFields("总云贝",totalCoin+"云贝");
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data); NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendToNotice(toUid, notice); YxDataR<SendMsgResp> r = yunxin.sendToNotice(toUid, notice);
if(r == null || !r.isSuccess()){ if(r == null || !r.isSuccess()){
@@ -456,10 +458,10 @@ public class YunxinHttpService {
data.setId(windowRecharge.getId()); data.setId(windowRecharge.getId());
data.setNickname(windowRecharge.getNickname()); data.setNickname(windowRecharge.getNickname());
data.setAvatar(windowRecharge.getAvatar()); data.setAvatar(windowRecharge.getAvatar());
data.setAmount(windowRecharge.getAmount().toString()); data.setAmount(windowRecharge.getAmount());
data.setTime(CaiDateUtil.getCurrentTimeStr()); data.setTime(System.currentTimeMillis());
NoticeR<SendRechargeWindowsAmountNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.RECHARGE_WINDOWS_AMOUNT, data); WindowNoticeR<SendRechargeWindowsAmountNoticeData> notice = WindowNoticeR.ok(MessageBaseTypeEnum.RECHARGE_WINDOWS_AMOUNT, data);
YxDataR<YxCommonR> r = yunxin.batchSendToNotice(toIds, notice); YxDataR<YxCommonR> r = yunxin.sendBatchAttachMsgNotice(toIds, notice);
if(r == null || !r.isSuccess()){ if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
} }
@@ -470,8 +472,9 @@ public class YunxinHttpService {
* 发送礼物飘窗提醒 * 发送礼物飘窗提醒
*/ */
public void sendGiftWindowsAmount(List<Long> toUid, SendGiftWindowsAmountNoticeData data){ public void sendGiftWindowsAmount(List<Long> toUid, SendGiftWindowsAmountNoticeData data){
NoticeR<SendGiftWindowsAmountNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.SEND_GIFT_WINDOWS_AMOUNT, data); WindowNoticeR<SendGiftWindowsAmountNoticeData> notice = WindowNoticeR.ok(MessageBaseTypeEnum.SEND_GIFT_WINDOWS_AMOUNT, data);
YxDataR<YxCommonR> r = yunxin.batchSendToNotice(toUid, notice); data.setTime(System.currentTimeMillis());
YxDataR<YxCommonR> r = yunxin.sendBatchAttachMsgNotice(toUid, notice);
if(r == null || !r.isSuccess()){ if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
} }

View File

@@ -0,0 +1,29 @@
package com.ruoyi.cai.notice.data;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
public class WindowNoticeR<T> implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private T data;
public static <T> WindowNoticeR<T> ok(MessageBaseTypeEnum typeEnum, T data) {
return restResult(typeEnum.getCode(), data);
}
private static <T> WindowNoticeR<T> restResult(Integer type, T data) {
WindowNoticeR<T> r = new WindowNoticeR<>();
r.setId(type);
r.setData(data);
return r;
}
}

View File

@@ -14,7 +14,7 @@ public class SendGiftWindowsAmountNoticeData {
private String giftname; private String giftname;
private String giftimg; private String giftimg;
private Long gifttotal; private Long gifttotal;
private String time; private Long time;
} }

View File

@@ -7,8 +7,8 @@ public class SendRechargeWindowsAmountNoticeData {
private Long id; private Long id;
private String nickname; private String nickname;
private String avatar; private String avatar;
private String amount; private Long amount;
private String time; private Long time;
} }

View File

@@ -23,7 +23,7 @@ public class CaiNumUtil {
public static String rateToStr(BigDecimal rate){ public static String rateToStr(BigDecimal rate){
BigDecimal mul = NumberUtil.mul(rate, 100); BigDecimal mul = NumberUtil.mul(rate, 100);
return mul.intValue()+"%"; return mul.intValue()+"";
} }
public static void main(String[] args) { public static void main(String[] args) {

View File

@@ -3,10 +3,7 @@ package com.ruoyi.yunxin;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.ruoyi.yunxin.client.ImMessageClient; import com.ruoyi.yunxin.client.ImMessageClient;
import com.ruoyi.yunxin.config.YunxinProperties; import com.ruoyi.yunxin.config.YunxinProperties;
import com.ruoyi.yunxin.req.Option; import com.ruoyi.yunxin.req.*;
import com.ruoyi.yunxin.req.SendAttachMsgReq;
import com.ruoyi.yunxin.req.SendBatchMsgReq;
import com.ruoyi.yunxin.req.SendMsgReq;
import com.ruoyi.yunxin.req.type.YxTextData; import com.ruoyi.yunxin.req.type.YxTextData;
import com.ruoyi.yunxin.resp.SendMsgResp; import com.ruoyi.yunxin.resp.SendMsgResp;
import com.ruoyi.yunxin.resp.YxCommonR; import com.ruoyi.yunxin.resp.YxCommonR;
@@ -90,4 +87,22 @@ public class Yunxin {
return messageClient.sendAttachMsg(sendAttachMsgReq); return messageClient.sendAttachMsg(sendAttachMsgReq);
} }
public YxDataR<YxCommonR> sendBatchAttachMsgNotice(List<Long> toUid, Object data){
SendBatchAttachMsgReq req = new SendBatchAttachMsgReq();
req.setFromAccid(SYS_NOTICE_ID);
req.setToAccids(toUid.stream().map(i -> String.valueOf(toUid)).collect(Collectors.toList()));
req.setAttach(JSON.toJSONString(data));
return messageClient.sendBatchAttachMsg(req);
}
public YxDataR<YxCommonR> sendAttachMsgNotice(Long toUid, Object data){
SendAttachMsgReq sendAttachMsgReq = new SendAttachMsgReq();
sendAttachMsgReq.setFrom(SYS_NOTICE_ID);
sendAttachMsgReq.setTo(toUid+"");
sendAttachMsgReq.setAttach(JSON.toJSONString(data));
sendAttachMsgReq.setOption(JSON.toJSONString(new Option()));
return messageClient.sendAttachMsg(sendAttachMsgReq);
}
} }

View File

@@ -5,6 +5,7 @@ import com.dtflys.forest.annotation.Body;
import com.dtflys.forest.annotation.Post; import com.dtflys.forest.annotation.Post;
import com.ruoyi.yunxin.interceptor.GlodonTokenInterceptor; import com.ruoyi.yunxin.interceptor.GlodonTokenInterceptor;
import com.ruoyi.yunxin.req.SendAttachMsgReq; import com.ruoyi.yunxin.req.SendAttachMsgReq;
import com.ruoyi.yunxin.req.SendBatchAttachMsgReq;
import com.ruoyi.yunxin.req.SendBatchMsgReq; import com.ruoyi.yunxin.req.SendBatchMsgReq;
import com.ruoyi.yunxin.req.SendMsgReq; import com.ruoyi.yunxin.req.SendMsgReq;
import com.ruoyi.yunxin.resp.SendMsgResp; import com.ruoyi.yunxin.resp.SendMsgResp;
@@ -33,5 +34,8 @@ public interface ImMessageClient {
@Post(url = "/nimserver/msg/sendAttachMsg.action") @Post(url = "/nimserver/msg/sendAttachMsg.action")
YxDataR<YxCommonR> sendAttachMsg(@Body SendAttachMsgReq req); YxDataR<YxCommonR> sendAttachMsg(@Body SendAttachMsgReq req);
@Post(url = "/nimserver/msg/sendBatchAttachMsg.action")
YxDataR<YxCommonR> sendBatchAttachMsg(@Body SendBatchAttachMsgReq req);
} }

View File

@@ -9,4 +9,5 @@ public class SendAttachMsgReq {
private String to; private String to;
private String attach; private String attach;
private String option; private String option;
private int save = 1;
} }

View File

@@ -0,0 +1,13 @@
package com.ruoyi.yunxin.req;
import lombok.Data;
import java.util.List;
@Data
public class SendBatchAttachMsgReq {
private String fromAccid;
private List<String> toAccids;
private String attach;
private int save = 1;
}

View File

@@ -8,6 +8,7 @@ import java.io.Serializable;
public class YxDataR<T> implements Serializable { public class YxDataR<T> implements Serializable {
private Integer code; private Integer code;
private T data; private T data;
private String desc;
public boolean isSuccess(){ public boolean isSuccess(){
return code != null && code == 200; return code != null && code == 200;