This commit is contained in:
张良(004796)
2024-01-26 17:10:37 +08:00
parent 747bc38a28
commit 8531cf8c12
40 changed files with 385 additions and 315 deletions

View File

@@ -18,6 +18,7 @@ import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -40,6 +41,7 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
@RestController
@RequestMapping("/cai/accountCash")
@Slf4j
public class AccountCashController extends BaseController {
private final AccountCashService accountCashService;
@@ -73,7 +75,8 @@ public class AccountCashController extends BaseController {
@PostMapping(value = "/importAudit", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<ExportBatchAuditVo> importData(@RequestPart("file") MultipartFile file) throws Exception {
List<AccountCashAdminVo> result = ExcelUtil.importExcel(file.getInputStream(), AccountCashAdminVo.class);
ExportBatchAuditVo audit = accountCashService.batchAudit(result);
List<Long> ids = result.stream().map(AccountCash::getId).collect(Collectors.toList());
ExportBatchAuditVo audit = accountCashService.batchAudit(ids);
return R.ok(audit);
}
@@ -94,12 +97,7 @@ public class AccountCashController extends BaseController {
@RepeatSubmit()
@GetMapping("/success")
public R<Void> success(Long id) {
accountCashService.update(Wrappers.lambdaUpdate(AccountCash.class)
.set(AccountCash::getVerifyTime, LocalDateTime.now())
.set(AccountCash::getOperateIp, ServletUtils.getClientIP())
.set(AccountCash::getStatus, AccountCashStatusEnum.SUCCESS.getCode())
.eq(AccountCash::getStatus, AccountCashStatusEnum.READY.getCode())
.eq(AccountCash::getId,id));
accountCashService.success(id);
return R.ok();
}
@@ -131,15 +129,10 @@ public class AccountCashController extends BaseController {
@Log(title = "用户提现批量通过", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@GetMapping("/batchSuccess")
public R<Void> batchSuccess(String ids) {
List<String> idList = Arrays.stream(ids.split(",")).collect(Collectors.toList());
accountCashService.update(Wrappers.lambdaUpdate(AccountCash.class)
.set(AccountCash::getVerifyTime, LocalDateTime.now())
.set(AccountCash::getOperateIp, ServletUtils.getClientIP())
.set(AccountCash::getStatus, AccountCashStatusEnum.SUCCESS.getCode())
.eq(AccountCash::getStatus, AccountCashStatusEnum.READY.getCode())
.in(AccountCash::getId,idList));
return R.ok();
public R<ExportBatchAuditVo> batchSuccess(String ids) {
List<Long> idList = Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList());
ExportBatchAuditVo audit = accountCashService.batchAudit(idList);
return R.ok(audit);
}
}

View File

@@ -3,11 +3,12 @@ package com.ruoyi.cai.controller.app;
import com.ruoyi.cai.domain.RechargeOrder;
import com.ruoyi.cai.domain.VipOrder;
import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.dto.app.query.GiveGiftRes;
import com.ruoyi.cai.dto.app.query.GiveGiftReq;
import com.ruoyi.cai.dto.app.query.GiveGuardReq;
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.manager.ConsumerManager;
import com.ruoyi.cai.service.RechargeOrderService;
import com.ruoyi.cai.service.VipOrderService;
@@ -45,8 +46,8 @@ public class ConsumeController {
@PostMapping("/give/gift")
@Operation(summary = "赠送主播礼物")
@Log(title = "赠送主播礼物", businessType = BusinessType.OTHER, isSaveDb = true)
public R<Boolean> giveGift(@RequestBody GiveGiftRes query){
ConsumeResp resp = consumerManager.sendGift(query);
public R<Boolean> giveGift(@RequestBody GiveGiftReq query){
GiftConsumerResp resp = consumerManager.sendGift(query);
return R.ok(resp.isSuccess());
}

View File

@@ -2,6 +2,7 @@ package com.ruoyi.cai.controller.app;
import com.ruoyi.cai.dto.app.query.UserReportReq;
import com.ruoyi.cai.dto.app.query.push.PushErrorReq;
import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.cai.service.ReportService;
import com.ruoyi.cai.service.UserErrorLogService;
import com.ruoyi.common.annotation.Log;
@@ -25,6 +26,8 @@ public class OtherController {
private ReportService reportService;
@Autowired
private UserErrorLogService userErrorLogService;
@Autowired
private YunxinHttpService yunxinHttpService;
@PostMapping("/report")
@Operation(summary = "举报")
@@ -33,6 +36,7 @@ public class OtherController {
Long userId = LoginHelper.getUserId();
reportRes.setUserId(userId);
reportService.report(reportRes);
yunxinHttpService.reportSendMessage(userId);
return R.ok();
}

View File

@@ -1,12 +1,17 @@
package com.ruoyi.cai.dto;
import com.ruoyi.cai.domain.Gift;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ConsumeResp {
/**
* 充值金额
*/
private BigDecimal price;
private Long rechargeCoin;
private Long userId;
private Long consumeLogId;
private Long traceId;

View File

@@ -5,7 +5,7 @@ import lombok.Data;
@Data
@Schema(description = "赠送礼物入参")
public class GiveGiftRes {
public class GiveGiftReq {
/**
* 类型 1 个人详情页 2.IM页面 3视频页

View File

@@ -13,4 +13,9 @@ public class InviteHomeVo {
private Long totalReward;
@Schema(description = "累计邀请的人")
private Long totalInvite;
@Schema(description = "分享URL")
private String shareUrl;
@Schema(description = "分享二维码")
private String shareQrCode;
}

View File

@@ -0,0 +1,20 @@
package com.ruoyi.cai.dto.commom.consumer;
import com.ruoyi.cai.domain.Gift;
import lombok.Data;
@Data
public class GiftConsumerResp {
/**
* 礼物
*/
private Gift gift;
/**
* 主播收益
*/
private Long anchorIncomeCoin;
private Long userId;
private Long consumeLogId;
private Long traceId;
private boolean success;
}

View File

@@ -0,0 +1,21 @@
package com.ruoyi.cai.dto.commom.consumer;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class RechargeConsumerResp {
/**
* 充值金额
*/
private BigDecimal price;
/**
* 充值彩贝
*/
private Long rechargeCoin;
private Long userId;
private Long consumeLogId;
private Long traceId;
private boolean success;
}

View File

@@ -9,6 +9,7 @@ import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.enums.account.AccountChangeCodeEnum;
import com.ruoyi.cai.executor.ExecutorConstant;
import com.ruoyi.cai.mapper.AccountMapper;
import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.cai.service.AccountChangeLogService;
import com.ruoyi.cai.service.RankService;
import com.ruoyi.cai.service.UserInfoService;
@@ -40,6 +41,8 @@ public class AwardManager {
private UserInfoService userInfoService;
@Autowired
private RankService rankService;
@Autowired
private YunxinHttpService yunxinHttpService;
public void giveRegisterAsync(Long userId){
AwardManager bean = SpringUtil.getBean(AwardManager.class);
@@ -60,6 +63,7 @@ public class AwardManager {
}
accountMapper.incsIncomeCoin(userId,price);
accountChangeLogService.saveLogNoAdmin(user.getId(),user.getUsercode(), AccountChangeCodeEnum.REGISTER_AWARD,price,null);
yunxinHttpService.registerRewardCoin(userId,price,price);
}
public void giveFastPayAsync(Long userId, Long traceId){

View File

@@ -1,17 +1,18 @@
package com.ruoyi.cai.manager;
import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.domain.ConsumeLog;
import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.dto.app.query.GiveGiftRes;
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.RechargeConsumerResp;
import com.ruoyi.cai.dto.video.VideoSettleResp;
import com.ruoyi.cai.mq.AmqpProducer;
import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.cai.pay.PayTypeEnum;
import com.ruoyi.cai.rank.RankManager;
import com.ruoyi.cai.service.AccountService;
import com.ruoyi.cai.service.GuardTotalService;
import com.ruoyi.cai.service.RechargeOrderService;
import com.ruoyi.cai.service.UserGiftService;
import com.ruoyi.cai.service.*;
import com.ruoyi.cai.ws.bean.Room;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +35,8 @@ public class ConsumerManager {
private AccountService accountService;
@Autowired
private RankManager rankManager;
@Autowired
private YunxinHttpService yunxinHttpService;
public ConsumeResp sendGuard(GiveGuardReq query){
ConsumeResp resp = guardTotalService.giveGuard(query);
@@ -47,14 +50,23 @@ public class ConsumerManager {
return resp;
}
public ConsumeResp sendGift(GiveGiftRes query){
ConsumeResp resp = userGiftService.giveGift(query);
public GiftConsumerResp sendGift(GiveGiftReq query){
GiftConsumerResp resp = userGiftService.giveGift(query);
if(resp.isSuccess()){
try {
amqpProducer.sendCalculateSales(resp.getConsumeLogId()+"");
}catch (Exception e){
log.error("RabbitMq 发送失败, 礼物分销流程流转失败!",e);
}
try {
Account account = accountService.getByUserId(resp.getUserId());
if(account != null){
Long totalCoin = account.getCoin() + account.getIncomeCoin();
yunxinHttpService.getGiftSendMessage(resp.getUserId(), resp.getGift(), resp.getAnchorIncomeCoin(), totalCoin);
}
}catch (Exception e){
log.error("礼物赠送成功通知失败!",e);
}
}
return resp;
}
@@ -71,14 +83,24 @@ public class ConsumerManager {
return resp;
}
public ConsumeResp rechargeOrderSuccess(String tradeNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum){
ConsumeResp resp = rechargeOrderService.orderSuccess(tradeNo,params,appId,payTypeEnum);
public RechargeConsumerResp rechargeOrderSuccess(String tradeNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum){
RechargeConsumerResp resp = rechargeOrderService.orderSuccess(tradeNo,params,appId,payTypeEnum);
if(resp.isSuccess()){
try {
amqpProducer.sendCalculateSales(resp.getConsumeLogId()+"");
}catch (Exception e){
log.error("RabbitMq 发送失败, 充值分销流程流转失败!",e);
}
try {
Account account = accountService.getByUserId(resp.getUserId());
if(account != null){
Long totalCoin = account.getCoin() + account.getIncomeCoin();
yunxinHttpService.rechargeCoinSendMessage(resp.getUserId(), resp.getRechargeCoin(),totalCoin);
}
}catch (Exception e){
log.error("充值成功通知失败!",e);
}
}
return resp;
}

View File

@@ -1,11 +1,17 @@
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.*;
import com.ruoyi.cai.notice.data.NoticeR;
import com.ruoyi.cai.notice.data.child.*;
import com.ruoyi.cai.notice.dto.CashSuccessSendMesDTO;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
import com.ruoyi.cai.service.AccountService;
import com.ruoyi.cai.service.UserService;
import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.cai.util.CaiNumUtil;
import com.ruoyi.yunxin.YunExecutor;
import com.ruoyi.yunxin.Yunxin;
import com.ruoyi.yunxin.resp.SendMsgResp;
@@ -16,30 +22,38 @@ import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Component
@Slf4j
public class YunxinHttpService {
private final static Long SYS_NOTICE_ID = 2L;
/**
* 网易云信的 "动态通知" id
*/
private final static Long FOLLOW_NOTICE_ID = 11L;
@Autowired
private Yunxin yunxin;
@Autowired
private AccountService accountService;
@Autowired
private UserService userService;
/**
* 注册赠送消息
*/
public void registerRewardCoin(Long toUid,Long rewardCoin,Long totalCoin){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("系统奖励");
data.setCurrentDate();
data.setTxt1("陌生人交友需谨慎,添加陌生人微信,QQ失去平台监管有极大被骗风险凡是诱导加微信QQ引导到其他平台或以色情为由索取礼物的行为请大家及时举报一经查明直接永久封号良好的交友氛围需大家共同维护希望大家提高自我警惕性杜绝被骗");
data.addFields("注册奖励",rewardCoin+"云贝");
data.addFields("注册奖励",totalCoin+"云贝");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -51,15 +65,14 @@ public class YunxinHttpService {
*/
public void rechargeCoinSendMessage(Long toUid,Long rewardCoin,Long totalCoin){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("购买成功");
data.setCurrentDate();
data.addFields("购买云贝",rewardCoin+"云贝");
data.addFields("总云贝",totalCoin+"云贝");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -70,19 +83,21 @@ public class YunxinHttpService {
/**
* 收到礼物发送消息
*/
public void getGiftSendMessage(Long toUid,String giftName,Long giftPrice,Long incomeCoin,Long totalCoin){
public void getGiftSendMessage(Long toUid, Gift gift, Long incomeCoin, Long totalCoin){
if(gift == null){
return;
}
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("收到礼物");
data.setCurrentDate();
data.addFields("礼物名称",giftName);
data.addFields("礼物单价",giftPrice+"云贝");
data.addFields("礼物名称",gift.getName());
data.addFields("礼物单价",gift.getPrice()+"云贝");
data.addFields("收入云贝",incomeCoin+"云贝");
data.addFields("总云贝",totalCoin+"云贝");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -92,6 +107,7 @@ public class YunxinHttpService {
/**
* 邀请奖励
*/
@Deprecated
public void inviteRewardSendMessage(Long toUid,String type,String sourceNickname,String sourceUsercode,Long incomeCoin){
YunExecutor.YUN_EXECUTOR.execute(() -> {
String str = "";
@@ -100,16 +116,15 @@ public class YunxinHttpService {
}else if("reward".equals(type)){
str = "奖励分成";
}
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("邀请奖励");
data.setCurrentDate();
data.addFields("用户昵称",sourceNickname);
data.addFields("用户蜜瓜号",sourceUsercode);
data.addFields(str,incomeCoin+"云贝");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -119,20 +134,23 @@ public class YunxinHttpService {
/**
* 用户充值,邀请人返现
*/
public void inviteCashbackSendMessage(Long toUid,String sourceNickname,String sourceUsercode,Long payCoin,Long incomeCoin){
public void inviteCashbackSendMessage(Long toUid,Long sourceId,BigDecimal rate, Long payCoin, Long incomeCoin){
User sourceUser = userService.getById(sourceId);
if(sourceUser == null){
return;
}
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("充值分成");
data.setTxt1("充值分成:每一笔账户充值将给其邀请账户额外赠送{}%的云贝");
data.setTxt1(String.format("充值分成:每一笔账户充值将给其邀请账户额外赠送%s的云贝", CaiNumUtil.rateToStr(rate)));
data.setCurrentDate();
data.addFields("充值用户",sourceNickname);
data.addFields("蜜瓜号",sourceUsercode);
data.addFields("充值用户",sourceUser.getNickname());
data.addFields("蜜瓜号",sourceUser.getUsercode());
data.addFields("充值金额",payCoin+"云贝");
data.addFields("充值分成",incomeCoin+"云贝");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -145,8 +163,7 @@ public class YunxinHttpService {
public void cashSuccessSendMessage(Long toUid, LocalDateTime cashTime, BigDecimal cashMoney, BigDecimal realCashMonty,
String cardAccount,LocalDateTime verifyTime){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("提现成功");
data.setCurrentDate();
@@ -156,22 +173,43 @@ public class YunxinHttpService {
data.addFields("到账金额",realCashMonty.toString()+"");
data.addFields("到账账户","支付宝("+cardAccount+")");
data.addFields("审核时间",CaiDateUtil.localDateTimeToString(verifyTime));
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
});
}
public void batchCashSuccessSendMessage(List<CashSuccessSendMesDTO> dtos){
YunExecutor.YUN_EXECUTOR.execute(() -> {
for (CashSuccessSendMesDTO dto : dtos) {
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("提现成功");
data.setCurrentDate();
data.addFields("提现时间", CaiDateUtil.localDateTimeToString(dto.getCashTime()));
data.addFields("提现金额",dto.getCashMoney().toString()+"");
data.addFields("提现方式","支付宝");
data.addFields("到账金额",dto.getRealCashMonty().toString()+"");
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);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
}
});
}
/**
* 提现审核转账发送消息【提现审核失败】
*/
public void cashFailSendMessage(Long toUid, LocalDateTime cashTime, BigDecimal cashMoney, String remark){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("提现失败");
data.setCurrentDate();
@@ -179,8 +217,8 @@ public class YunxinHttpService {
data.addFields("提现金额",cashMoney.toString()+"");
data.addFields("提现方式","支付宝");
data.setTxt2(remark);
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -192,14 +230,13 @@ public class YunxinHttpService {
*/
public void reportSendMessage(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("已收到你的举报信息");
data.setTxt1("感谢您提交的举报信息,拒绝不良风气,良好的氛围需要大家共同维护。");
data.setCurrentDate();
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -219,8 +256,7 @@ public class YunxinHttpService {
LocalDateTime followTime,
Integer gender){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageSendFollowNew messageExtNew = new MessageSendFollowNew(MessageBaseTypeEnum.SEND_FOLLOW);
MessageSendFollowData data = new MessageSendFollowData();
SendFollowNoticeData data = new SendFollowNoticeData();
data.setUserid(followUserId);
data.setNickname(followNickname);
data.setAvatar(followAvatar);
@@ -228,8 +264,8 @@ public class YunxinHttpService {
data.setCity(followCity);
data.setTime(CaiDateUtil.localDateTimeToString(followTime));
data.setSex(gender);
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<SendFollowNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.SEND_FOLLOW, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -241,8 +277,7 @@ public class YunxinHttpService {
*/
public void passAnchorSendMessage(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("恭喜你通过自拍认证,成为平台女神");
data.setCurrentDate();
@@ -251,8 +286,8 @@ public class YunxinHttpService {
data.addFields("赚钱小秘密一","多给在线男生打招呼");
data.addFields("赚钱小秘密二","照片越好看,男生越喜欢");
data.addFields("赚钱小秘密三","勤发动态,让他感受到你的美");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -265,13 +300,12 @@ public class YunxinHttpService {
*/
public void changeInviteConfigSendMessage(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("恭喜成为邀请女神");
data.setCurrentDate();
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -283,10 +317,9 @@ public class YunxinHttpService {
*/
public void sendGiftMessage(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageSendGiftMessageNew messageExtNew = new MessageSendGiftMessageNew(MessageBaseTypeEnum.SEND_GIFT_MESSAGE);
MessageSendGiftMessageData data = new MessageSendGiftMessageData();
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
SendGiftMessageNoticeData data = new SendGiftMessageNoticeData();
NoticeR<SendGiftMessageNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.SEND_GIFT_MESSAGE, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -299,8 +332,7 @@ public class YunxinHttpService {
*/
public void getGuardMessage(Long toUid,Integer num,Long price,BigDecimal incomeCoin,BigDecimal totalCoin){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("收到守护符");
data.setCurrentDate();
@@ -308,8 +340,8 @@ public class YunxinHttpService {
data.addFields("守护单价",price+"云贝");
data.addFields("收入云贝",incomeCoin+"云贝");
data.addFields("总云贝",totalCoin+"云贝");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -322,10 +354,9 @@ public class YunxinHttpService {
*/
public void sendOnlineAttentionNotice(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageSendOnlineAttentionNew messageExtNew = new MessageSendOnlineAttentionNew(MessageBaseTypeEnum.TXT);
MessageSendOnlineAttentionData data = new MessageSendOnlineAttentionData();
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
SendOnlineAttentionNoticeData data = new SendOnlineAttentionNoticeData();
NoticeR<SendOnlineAttentionNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.SEND_ONLINE_ATTENTION, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -337,14 +368,13 @@ public class YunxinHttpService {
*/
public void cancelAnchorMessage(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("取消女神通知");
data.setCurrentDate();
data.setTxt1("因多次违规或被投诉,已被取消女神资格!");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -357,14 +387,13 @@ public class YunxinHttpService {
*/
public void dynamicAuditMessage(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("动态审核通知");
data.setCurrentDate();
data.setTxt1("您的动态因不符合规范,已被删除,多次违规会被取消大咖资格或封号处理");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -377,16 +406,15 @@ public class YunxinHttpService {
*/
public void albumAuditMessage(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("相册审核通知");
data.setCurrentDate();
data.setTxt1("您上传的照片不符合要求,已被删除,多次违规会被取消大咖资格或封号处理,请按照指引上传符合要求的照片");
data.setLink_type(1);
data.setLink_url("/index/about/album_rule.html");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -399,14 +427,13 @@ public class YunxinHttpService {
*/
public void nickAuditMessage(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageExtNew messageExtNew = new MessageExtNew(MessageBaseTypeEnum.TXT);
MessageExtData data = new MessageExtData();
ExtNoticeData data = new ExtNoticeData();
data.setAction(1);
data.setTitle("重置昵称通知");
data.setCurrentDate();
data.setTxt1("您的昵称不合格,已被重置,多次违规会被封号!");
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<ExtNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -419,10 +446,9 @@ public class YunxinHttpService {
*/
public void sendRechargeWindowsAmount(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageSendRechargeWindowsAmountNew messageExtNew = new MessageSendRechargeWindowsAmountNew(MessageBaseTypeEnum.SEND_GIFTWINDOWS_AMOUNT);
MessageSendRechargeWindowsAmountData data = new MessageSendRechargeWindowsAmountData();
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
SendRechargeWindowsAmountNoticeData data = new SendRechargeWindowsAmountNoticeData();
NoticeR<SendRechargeWindowsAmountNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.RECHARGE_WINDOWS_AMOUNT, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -435,10 +461,9 @@ public class YunxinHttpService {
*/
public void sendGiftWindowsAmount(Long toUid){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageSendGiftWindowsAmountNew messageExtNew = new MessageSendGiftWindowsAmountNew(MessageBaseTypeEnum.SEND_GIFTWINDOWS_AMOUNT);
MessageSendGiftWindowsAmountData data = new MessageSendGiftWindowsAmountData();
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
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);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}
@@ -451,8 +476,7 @@ public class YunxinHttpService {
*/
public void sendFollowDynamicBath(Long toUid, User user,String image,String content){
YunExecutor.YUN_EXECUTOR.execute(() -> {
MessageSendFollowDynamicNew messageExtNew = new MessageSendFollowDynamicNew(MessageBaseTypeEnum.SEND_FOLLOW_DYNAMIC);
MessageSendFollowDynamicData data = new MessageSendFollowDynamicData();
SendFollowDynamicNoticeData data = new SendFollowDynamicNoticeData();
data.setUserid(user.getId());
data.setNickname(user.getNickname());
data.setAvatar(user.getAvatar());
@@ -461,8 +485,8 @@ public class YunxinHttpService {
data.setTime(CaiDateUtil.getCurrentTimeStr());
data.setImage(image);
data.setTitle(content);
messageExtNew.setData(data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, messageExtNew);
NoticeR<SendFollowDynamicNoticeData> notice = NoticeR.ok(MessageBaseTypeEnum.SEND_FOLLOW_DYNAMIC, data);
YxDataR<SendMsgResp> r = yunxin.sendTo(toUid, SYS_NOTICE_ID, notice);
if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
}

View File

@@ -1,8 +0,0 @@
package com.ruoyi.cai.notice.data;
import lombok.Data;
@Data
public class MessageBaseData {
private Integer type;
}

View File

@@ -1,18 +0,0 @@
package com.ruoyi.cai.notice.data;
import com.ruoyi.cai.notice.data.child.MessageExtData;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
import lombok.Data;
@Data
public class MessageExtNew extends MessageBaseData {
private MessageExtData data;
public MessageExtNew(MessageBaseTypeEnum typeEnum) {
this.setType(typeEnum.getCode());
}
public MessageExtNew() {
}
}

View File

@@ -1,20 +0,0 @@
package com.ruoyi.cai.notice.data;
import com.ruoyi.cai.notice.data.child.MessageSendFollowData;
import com.ruoyi.cai.notice.data.child.MessageSendFollowDynamicData;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
import lombok.Data;
@Data
public class MessageSendFollowDynamicNew extends MessageBaseData{
private MessageSendFollowDynamicData data;
public MessageSendFollowDynamicNew(MessageBaseTypeEnum typeEnum) {
this.setType(typeEnum.getCode());
}
public MessageSendFollowDynamicNew() {
}
}

View File

@@ -1,19 +0,0 @@
package com.ruoyi.cai.notice.data;
import com.ruoyi.cai.notice.data.child.MessageSendFollowData;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
import lombok.Data;
@Data
public class MessageSendFollowNew extends MessageBaseData{
private MessageSendFollowData data;
public MessageSendFollowNew(MessageBaseTypeEnum typeEnum) {
this.setType(typeEnum.getCode());
}
public MessageSendFollowNew() {
}
}

View File

@@ -1,20 +0,0 @@
package com.ruoyi.cai.notice.data;
import com.ruoyi.cai.notice.data.child.MessageSendGiftMessageData;
import com.ruoyi.cai.notice.data.child.MessageSendRechargeWindowsAmountData;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
import lombok.Data;
@Data
public class MessageSendGiftMessageNew extends MessageBaseData{
private MessageSendGiftMessageData data;
public MessageSendGiftMessageNew(MessageBaseTypeEnum typeEnum) {
this.setType(typeEnum.getCode());
}
public MessageSendGiftMessageNew() {
}
}

View File

@@ -1,20 +0,0 @@
package com.ruoyi.cai.notice.data;
import com.ruoyi.cai.notice.data.child.MessageSendFollowData;
import com.ruoyi.cai.notice.data.child.MessageSendGiftWindowsAmountData;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
import lombok.Data;
@Data
public class MessageSendGiftWindowsAmountNew extends MessageBaseData{
private MessageSendGiftWindowsAmountData data;
public MessageSendGiftWindowsAmountNew(MessageBaseTypeEnum typeEnum) {
this.setType(typeEnum.getCode());
}
public MessageSendGiftWindowsAmountNew() {
}
}

View File

@@ -1,20 +0,0 @@
package com.ruoyi.cai.notice.data;
import com.ruoyi.cai.notice.data.child.MessageSendOnlineAttentionData;
import com.ruoyi.cai.notice.data.child.MessageSendRechargeWindowsAmountData;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
import lombok.Data;
@Data
public class MessageSendOnlineAttentionNew extends MessageBaseData{
private MessageSendOnlineAttentionData data;
public MessageSendOnlineAttentionNew(MessageBaseTypeEnum typeEnum) {
this.setType(typeEnum.getCode());
}
public MessageSendOnlineAttentionNew() {
}
}

View File

@@ -1,20 +0,0 @@
package com.ruoyi.cai.notice.data;
import com.ruoyi.cai.notice.data.child.MessageSendGiftWindowsAmountData;
import com.ruoyi.cai.notice.data.child.MessageSendRechargeWindowsAmountData;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
import lombok.Data;
@Data
public class MessageSendRechargeWindowsAmountNew extends MessageBaseData{
private MessageSendRechargeWindowsAmountData data;
public MessageSendRechargeWindowsAmountNew(MessageBaseTypeEnum typeEnum) {
this.setType(typeEnum.getCode());
}
public MessageSendRechargeWindowsAmountNew() {
}
}

View File

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

View File

@@ -8,7 +8,7 @@ import java.util.ArrayList;
import java.util.List;
@Data
public class MessageExtData {
public class ExtNoticeData {
private Integer action;
private String title = "";
private String date;

View File

@@ -3,7 +3,7 @@ package com.ruoyi.cai.notice.data.child;
import lombok.Data;
@Data
public class MessageSendFollowDynamicData {
public class SendFollowDynamicNoticeData {
private Long userid;
private String nickname;
private String avatar;

View File

@@ -3,7 +3,7 @@ package com.ruoyi.cai.notice.data.child;
import lombok.Data;
@Data
public class MessageSendFollowData {
public class SendFollowNoticeData {
private Long userid;
private String nickname;
private String avatar;

View File

@@ -3,7 +3,7 @@ package com.ruoyi.cai.notice.data.child;
import lombok.Data;
@Data
public class MessageSendGiftMessageData {
public class SendGiftMessageNoticeData {
private Long gift_id;
private String gift_name;
private String gift_url;

View File

@@ -3,7 +3,7 @@ package com.ruoyi.cai.notice.data.child;
import lombok.Data;
@Data
public class MessageSendGiftWindowsAmountData {
public class SendGiftWindowsAmountNoticeData {
private Long id;
private String nickname;
private String avatar;

View File

@@ -3,7 +3,7 @@ package com.ruoyi.cai.notice.data.child;
import lombok.Data;
@Data
public class MessageSendOnlineAttentionData {
public class SendOnlineAttentionNoticeData {
private Long userid;
private String nickname;
private String avatar;

View File

@@ -3,7 +3,7 @@ package com.ruoyi.cai.notice.data.child;
import lombok.Data;
@Data
public class MessageSendRechargeWindowsAmountData {
public class SendRechargeWindowsAmountNoticeData {
private Long id;
private String nickname;
private String avatar;

View File

@@ -0,0 +1,16 @@
package com.ruoyi.cai.notice.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class CashSuccessSendMesDTO {
private Long toUid;
LocalDateTime cashTime;
BigDecimal cashMoney;
BigDecimal realCashMonty;
String cardAccount;
LocalDateTime verifyTime;
}

View File

@@ -14,11 +14,16 @@ public enum MessageBaseTypeEnum {
* 用户充值,邀请人返现, 群打招呼审核失败
*/
TXT(11,"文本消息"),
@Deprecated
REGISTER_SEND_CLEAN(13,"注册发送IM单图文消息"),
SEND_GIFT_MESSAGE(14,"发送礼物自定义消息"),
SEND_FOLLOW(16,"自定义被关注消息"),
SEND_FOLLOW_DYNAMIC(17,"关注动态"),
SEND_GIFTWINDOWS_AMOUNT(17,"关注动态"),
RECHARGE_WINDOWS_AMOUNT(17,"关注动态"),
SEND_GIFT_MESSAGE(17,"关注动态"),
SEND_ONLINE_ATTENTION(18,"上线了通知"),
RECHARGE_WINDOWS_AMOUNT(12,"发送充值飘窗提醒"),
SEND_GIFT_WINDOWS_AMOUNT(13,"礼物飘窗"),
;
private final Integer code;

View File

@@ -1,6 +1,7 @@
package com.ruoyi.cai.pay;
import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp;
import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.manager.ConsumerManager;
import com.ruoyi.cai.service.PayTotalService;
@@ -44,8 +45,9 @@ public class PayManager {
}
break;
case RECHARGE_ORDER_SUB:
ConsumeResp resp = consumerManager.rechargeOrderSuccess(orderNo,params,appId,payTypeEnum);
RechargeConsumerResp resp = consumerManager.rechargeOrderSuccess(orderNo,params,appId,payTypeEnum);
if(resp.isSuccess()){
// 领取首充奖励
awardManager.giveFastPayAsync(resp.getUserId(), resp.getTraceId());
if(appId != null){
payTotalService.incsPrice(payTypeEnum,appId,resp.getPrice());

View File

@@ -24,6 +24,7 @@ public interface AccountCashService extends IService<AccountCash> {
void fail(Long id);
ExportBatchAuditVo batchAudit(List<AccountCashAdminVo> result);
ExportBatchAuditVo batchAudit(List<Long> result);
void success(Long id);
}

View File

@@ -7,6 +7,7 @@ import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto;
import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo;
import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp;
import com.ruoyi.cai.pay.PayTypeEnum;
import com.ruoyi.common.core.domain.PageQuery;
@@ -26,7 +27,7 @@ public interface RechargeOrderService extends IService<RechargeOrder> {
RechargeOrder addRechargeOrder(AddRechargeOrderDto addRechargeOrderDto);
ConsumeResp orderSuccess(String orderNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum);
RechargeConsumerResp orderSuccess(String orderNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum);
RechargeOrder updateAdminRechargeOrder(AddRechargeOrderAdminDto dto);
}

View File

@@ -3,8 +3,9 @@ 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.query.GiveGiftReq;
import com.ruoyi.cai.dto.app.vo.index.UserGiftIndexVo;
import com.ruoyi.cai.dto.commom.consumer.GiftConsumerResp;
import java.util.List;
@@ -18,6 +19,6 @@ public interface UserGiftService extends IService<UserGift> {
List<UserGiftIndexVo> selectGiftList(Long userId);
ConsumeResp giveGift(GiveGiftRes query);
GiftConsumerResp giveGift(GiveGiftReq query);
}

View File

@@ -13,6 +13,8 @@ import com.ruoyi.cai.enums.AccountCashStatusEnum;
import com.ruoyi.cai.enums.AuditStatusEnum;
import com.ruoyi.cai.manager.IdManager;
import com.ruoyi.cai.mapper.AccountCashMapper;
import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.cai.notice.dto.CashSuccessSendMesDTO;
import com.ruoyi.cai.service.AccountCashService;
import com.ruoyi.cai.service.AccountBankcardService;
import com.ruoyi.cai.service.AccountService;
@@ -20,11 +22,13 @@ import com.ruoyi.cai.service.WithdrawExchangeService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.ServletUtils;
import io.undertow.util.AttachmentList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Service
@@ -35,6 +39,8 @@ public class AccountCashServiceImpl extends ServiceImpl<AccountCashMapper, Accou
private AccountService accountService;
@Autowired
private WithdrawExchangeService withdrawExchangeService;
@Autowired
private YunxinHttpService yunxinHttpService;
@Override
public void withdraw(WithdrawReq res) {
AccountBankcard one = accountBankcardService.getOne(Wrappers.lambdaQuery(AccountBankcard.class)
@@ -84,31 +90,66 @@ public class AccountCashServiceImpl extends ServiceImpl<AccountCashMapper, Accou
return;
}
accountService.withdrawFail(accountCash.getUserId(),accountCash.getWithdrawCoin(),accountCash.getTraceId());
yunxinHttpService.cashFailSendMessage(accountCash.getUserId(),accountCash.getCreateTime(),accountCash.getCashMoney(),
accountCash.getVerifyRemark());
}
@Override
public ExportBatchAuditVo batchAudit(List<AccountCashAdminVo> result) {
public void success(Long id) {
boolean update = this.update(Wrappers.lambdaUpdate(AccountCash.class)
.set(AccountCash::getVerifyTime, LocalDateTime.now())
.set(AccountCash::getOperateIp, ServletUtils.getClientIP())
.set(AccountCash::getStatus, AccountCashStatusEnum.SUCCESS.getCode())
.eq(AccountCash::getStatus, AccountCashStatusEnum.READY.getCode())
.eq(AccountCash::getId, id));
if(!update){
return;
}
AccountCash accountCash = this.getById(id);
if(accountCash == null){
return;
}
// 发送通知
yunxinHttpService.cashSuccessSendMessage(accountCash.getUserId(),
accountCash.getCreateTime(),
accountCash.getCashMoney(),accountCash.getRealCashMoney(),
accountCash.getCardAccount(),accountCash.getVerifyTime());
}
@Override
public ExportBatchAuditVo batchAudit(List<Long> result) {
ExportBatchAuditVo res = new ExportBatchAuditVo();
Integer allNum = result.size();
Integer successNum = 0;
Integer ignoreNum = 0;
Integer failNum = 0;
for (AccountCashAdminVo vo : result) {
List<CashSuccessSendMesDTO> dtoList = new ArrayList<>();
for (Long id : result) {
try {
AccountCash cash = this.getById(vo.getId());
if(!AuditStatusEnum.AUDITING.getCode().equals(cash.getStatus())){
AccountCash cash = this.getById(id);
if(cash == null || !AuditStatusEnum.AUDITING.getCode().equals(cash.getStatus())){
ignoreNum++;
continue;
}
LocalDateTime now = LocalDateTime.now();
boolean update = this.update(Wrappers.lambdaUpdate(AccountCash.class)
.eq(AccountCash::getId, vo.getId())
.eq(AccountCash::getId, id)
.eq(AccountCash::getStatus, AuditStatusEnum.AUDITING.getCode())
.set(AccountCash::getVerifyTime, LocalDateTime.now())
.set(AccountCash::getVerifyTime, now)
.set(AccountCash::getOperateIp, ServletUtils.getClientIP())
.set(AccountCash::getStatus, AccountCashStatusEnum.SUCCESS.getCode()));
if(update){
successNum++;
CashSuccessSendMesDTO dto = new CashSuccessSendMesDTO();
dto.setToUid(cash.getUserId());
dto.setCashTime(cash.getCreateTime());
dto.setCashMoney(cash.getCashMoney());
dto.setRealCashMonty(cash.getRealCashMoney());
dto.setCardAccount(cash.getCardAccount());
dto.setVerifyTime(now);
dtoList.add(dto);
}else{
ignoreNum++;
}
@@ -121,8 +162,12 @@ public class AccountCashServiceImpl extends ServiceImpl<AccountCashMapper, Accou
res.setIgnoreNum(ignoreNum);
res.setAllNum(allNum);
res.setFailNum(failNum);
if(!dtoList.isEmpty()){
yunxinHttpService.batchCashSuccessSendMessage(dtoList);
}
return res;
}
}

View File

@@ -18,7 +18,7 @@ import com.ruoyi.cai.manager.IdManager;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.mapper.AccountMapper;
import com.ruoyi.cai.service.*;
import com.ruoyi.cai.util.NumCaUtil;
import com.ruoyi.cai.util.CaiNumUtil;
import com.ruoyi.cai.ws.bean.Room;
import com.ruoyi.cai.ws.bean.RoomData;
import com.ruoyi.cai.ws.bean.UserData;
@@ -100,7 +100,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
// 开始处理 接收方的费用
Long targetUserId = consumeLog.getTargetUserId();
if(targetUserId != null){
Long anchorAmount = NumCaUtil.coin(amount,consumeLog.getTargetRate());
Long anchorAmount = CaiNumUtil.coin(amount,consumeLog.getTargetRate());
consumeLog.setAnchorAmount(anchorAmount);
baseMapper.incsIncomeCoin(targetUserId,anchorAmount);
}
@@ -158,7 +158,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
}
// 开始处理 接收方的费用
BigDecimal imRate = systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.DAY_MAX_DYNAMIC);
Long anchorAmount = NumCaUtil.coin(price,imRate);
Long anchorAmount = CaiNumUtil.coin(price,imRate);
baseMapper.incsIncomeCoin(toUser.getId(),anchorAmount);
Long tractId = IdManager.nextId();
// 记录消费方的流水
@@ -372,7 +372,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
}
}
Long amountReal = payCoin + payIncome; // 实际支付的金额
Long anchorAmount = NumCaUtil.coin(amountReal,roomData.getVideoDivide());
Long anchorAmount = CaiNumUtil.coin(amountReal,roomData.getVideoDivide());
User fromUser = userService.getById(userCall.getFromUid());
User toUser = userService.getById(userCall.getToUid());

View File

@@ -8,9 +8,10 @@ import com.ruoyi.cai.enums.ConsumeLogStatus;
import com.ruoyi.cai.enums.ConsumeLogType;
import com.ruoyi.cai.enums.account.AccountChangeCodeEnum;
import com.ruoyi.cai.mapper.ConsumeLogMapper;
import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.cai.rank.RankManager;
import com.ruoyi.cai.service.*;
import com.ruoyi.cai.util.NumCaUtil;
import com.ruoyi.cai.util.CaiNumUtil;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
@@ -43,6 +44,8 @@ public class ConsumeLogServiceImpl extends ServiceImpl<ConsumeLogMapper, Consume
private UnionService unionService;
@Autowired
private AccountService accountService;
@Autowired
private YunxinHttpService yunxinHttpService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -108,11 +111,15 @@ public class ConsumeLogServiceImpl extends ServiceImpl<ConsumeLogMapper, Consume
AccountChangeCodeEnum changeCodeEnum = ConsumeLogType.getUnionChange(code);
oneUnionSend = accountService.distribution(consumer, consumer.getUnionUserId(), consumer.getUnionAmount(), changeCodeEnum);
}
if(oneInviteSend){
if(oneInviteSend){ // 一级邀请
rankManager.sendInviteRankMq(consumer.getOneUserId(),consumer.getOneAmount(),consumer.getTraceId());
userInviteService.incsCoinAsync(consumer.getOneUserId(),consumer.getCreateInviteUserId(),consumer.getOneAmount());
if(ConsumeLogType.RECHARGE.getCode().equals(consumer.getType())){ // 充值奖励推送
yunxinHttpService.inviteCashbackSendMessage(consumer.getOneUserId(),consumer.getSourceUserId(),
consumer.getOneRate(),consumer.getAmount(),consumer.getOneAmount());
}
}
if(oneUnionSend){
if(oneUnionSend){ // 工会邀请
rankManager.sendInviteRankMq(consumer.getUnionUserId(),consumer.getUnionAmount(),consumer.getTraceId());
}
}catch (Exception e){
@@ -138,7 +145,7 @@ public class ConsumeLogServiceImpl extends ServiceImpl<ConsumeLogMapper, Consume
consumeLog.setOnePhone(oneUser.getMobile());
consumeLog.setOneJoin(userInvite.getEnableRate());
consumeLog.setOneIsUnion(oneUser.getIsUnion());
consumeLog.setOneAmount(NumCaUtil.coin(consumeLog.getAmount(),consumeLog.getOneRate()));
consumeLog.setOneAmount(CaiNumUtil.coin(consumeLog.getAmount(),consumeLog.getOneRate()));
}
}
consumeLog.setCalculateStatus(true);
@@ -164,7 +171,7 @@ public class ConsumeLogServiceImpl extends ServiceImpl<ConsumeLogMapper, Consume
consumeLog.setOnePhone(oneUser.getMobile());
consumeLog.setOneJoin(userInvite.getEnableRate());
consumeLog.setOneIsUnion(oneUser.getIsUnion());
consumeLog.setOneAmount(NumCaUtil.coin(consumeLog.getAnchorAmount(),consumeLog.getOneRate()));
consumeLog.setOneAmount(CaiNumUtil.coin(consumeLog.getAnchorAmount(),consumeLog.getOneRate()));
}
}
// 工会分销 只有通话和礼物才有
@@ -188,7 +195,7 @@ public class ConsumeLogServiceImpl extends ServiceImpl<ConsumeLogMapper, Consume
}else if(ConsumeLogType.VIDEO.getCode().equals(consumeLog.getType())){
consumeLog.setUnionRate(unionUser.getVideoDivide());
}
consumeLog.setUnionAmount(NumCaUtil.coin(consumeLog.getAnchorAmount(),consumeLog.getUnionRate()));
consumeLog.setUnionAmount(CaiNumUtil.coin(consumeLog.getAnchorAmount(),consumeLog.getUnionRate()));
}
}
}

View File

@@ -10,6 +10,7 @@ import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto;
import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo;
import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp;
import com.ruoyi.cai.enums.ConsumeLogType;
import com.ruoyi.cai.enums.account.AccountChangeCodeEnum;
import com.ruoyi.cai.enums.account.AccountTypeEnum;
@@ -93,7 +94,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
@Override
@Transactional(rollbackFor = Exception.class)
public ConsumeResp orderSuccess(String orderNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum){
public RechargeConsumerResp orderSuccess(String orderNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum){
RechargeOrder rechargeOrder = this.getByOrderNo(orderNo);
if(rechargeOrder == null){
throw new ServiceException("订单不存在");
@@ -124,12 +125,13 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
consumeLog.setType(ConsumeLogType.RECHARGE.getCode());
consumeLog.setAmount(rechargeOrder.getRechargeCoin());
accountService.recharge(consumeLog);
ConsumeResp resp = new ConsumeResp();
RechargeConsumerResp resp = new RechargeConsumerResp();
resp.setSuccess(true);
resp.setConsumeLogId(consumeLog.getId());
resp.setUserId(user.getId());
resp.setTraceId(traceId);
resp.setPrice(rechargeOrder.getPrice());
resp.setRechargeCoin(rechargeOrder.getRechargeCoin());
return resp;
}

View File

@@ -3,15 +3,13 @@ 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.query.GiveGiftReq;
import com.ruoyi.cai.dto.app.vo.index.UserGiftIndexVo;
import com.ruoyi.cai.dto.commom.consumer.GiftConsumerResp;
import com.ruoyi.cai.enums.ConsumeLogType;
import com.ruoyi.cai.manager.IdManager;
import com.ruoyi.cai.manager.LockManager;
import com.ruoyi.cai.mapper.UserGiftMapper;
import com.ruoyi.cai.mq.AmqpProducer;
import com.ruoyi.cai.mq.dto.CommonDTO;
import com.ruoyi.cai.mq.handle.dto.RankDTO;
import com.ruoyi.cai.rank.RankManager;
import com.ruoyi.cai.service.*;
import com.ruoyi.common.exception.ServiceException;
@@ -57,7 +55,7 @@ public class UserGiftServiceImpl extends ServiceImpl<UserGiftMapper, UserGift> i
@Override
@Transactional(rollbackFor = Exception.class)
public ConsumeResp giveGift(GiveGiftRes query) {
public GiftConsumerResp giveGift(GiveGiftReq query) {
Long fromUserId = LoginHelper.getUserId();
Gift gift = giftService.getById(query.getGiftId());
if(gift == null){
@@ -68,7 +66,8 @@ public class UserGiftServiceImpl extends ServiceImpl<UserGiftMapper, UserGift> i
if(lock.isLocked()){
throw new ServiceException("您点击太快了");
}
ConsumeResp resp = new ConsumeResp();
GiftConsumerResp resp = new GiftConsumerResp();
resp.setGift(gift);
try {
lock.lock(3, TimeUnit.SECONDS);
User fromUser = userService.getById(fromUserId);
@@ -84,6 +83,7 @@ public class UserGiftServiceImpl extends ServiceImpl<UserGiftMapper, UserGift> i
consumeLog.setAmount(giftAmount);
consumeLog.setTargetRate(anchor.getGiftRate());
consumeLog = accountService.giftDecr(consumeLog, ConsumeLogType.GIFT, gift);
resp.setAnchorIncomeCoin(consumeLog.getAnchorAmount());
resp.setConsumeLogId(consumeLog.getId());
UserGift userGift = new UserGift();
userGift.setType(query.getType());

View File

@@ -5,7 +5,7 @@ import cn.hutool.core.util.NumberUtil;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class NumCaUtil {
public class CaiNumUtil {
/**
* 向下取整计算金额
@@ -21,7 +21,12 @@ public class NumCaUtil {
return decimal.setScale(0, RoundingMode.DOWN).longValue();
}
public static String rateToStr(BigDecimal rate){
BigDecimal mul = NumberUtil.mul(rate, 100);
return mul.intValue()+"%";
}
public static void main(String[] args) {
System.out.println(coin(5200L,BigDecimal.valueOf(0.07)));
System.out.println(rateToStr(BigDecimal.valueOf(0.07)));
}
}

View File

@@ -4,7 +4,8 @@ import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.domain.Gift;
import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.dto.app.query.GiveGiftRes;
import com.ruoyi.cai.dto.app.query.GiveGiftReq;
import com.ruoyi.cai.dto.commom.consumer.GiftConsumerResp;
import com.ruoyi.cai.manager.ConsumerManager;
import com.ruoyi.cai.service.AccountService;
import com.ruoyi.cai.service.GiftService;
@@ -52,12 +53,12 @@ public class GiftMessageHandler extends AbstractMessageHandle implements IMessag
sendToCurrent(fdCtxData,WsRMsgGen.rechargeNotice("赠送后通话时间不足1分钟点此充值"));
return;
}
GiveGiftRes giveGiftRes = new GiveGiftRes();
giveGiftRes.setType(3);
giveGiftRes.setToUserId(fdCtxData.getTarUserId());
giveGiftRes.setGiftId(giftId);
giveGiftRes.setGiftCount(giftCount);
ConsumeResp consumeResp = consumerManager.sendGift(giveGiftRes);
GiveGiftReq giveGiftReq = new GiveGiftReq();
giveGiftReq.setType(3);
giveGiftReq.setToUserId(fdCtxData.getTarUserId());
giveGiftReq.setGiftId(giftId);
giveGiftReq.setGiftCount(giftCount);
GiftConsumerResp consumeResp = consumerManager.sendGift(giveGiftReq);
if(!consumeResp.isSuccess()){
sendToCurrent(fdCtxData,WsRMsgGen.sysNotice("赠送失败,请重试"));
return;