diff --git a/doc/1.1.0.sql b/doc/1.1.0.sql index 8f8f48af..a94a39a0 100644 --- a/doc/1.1.0.sql +++ b/doc/1.1.0.sql @@ -1,2 +1,9 @@ ALTER TABLE `cai_anchor` ADD COLUMN `show_me_rate` int NOT NULL DEFAULT 10 COMMENT '展示自己概率' AFTER `recommend_status`; + +ALTER TABLE `cai_account` +ADD COLUMN `message_income_coin` bigint NOT NULL DEFAULT 0 COMMENT '聊天收入' AFTER `total_buy_coin`, +ADD COLUMN `video_income_coin` bigint NOT NULL DEFAULT 0 COMMENT '视频收入' AFTER `message_income_coin`, +ADD COLUMN `gift_income_coin` bigint NOT NULL DEFAULT 0 COMMENT '礼物收入' AFTER `video_income_coin`, +ADD COLUMN `guard_income_coin` bigint NOT NULL DEFAULT 0 COMMENT '守护收入' AFTER `gift_income_coin`, +ADD COLUMN `union_income_coin` bigint NOT NULL DEFAULT 0 COMMENT '工会收入' AFTER `guard_income_coin`; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Account.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Account.java index bdbae345..fdd07ea5 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Account.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Account.java @@ -44,6 +44,18 @@ public class Account implements Serializable { * 充值彩贝总额 */ private Long totalBuyCoin; + /** + * 聊天收入 + */ + private Long messageIncomeCoin; + /** 视频收入 */ + private Long videoIncomeCoin; + /** 礼物收入 */ + private Long giftIncomeCoin; + /** 守护收入 */ + private Long guardIncomeCoin; + /** 工会收入 */ + private Long unionIncomeCoin; /** * 账户锁定 0 正常 1 锁定 */ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/AccountTotalManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/AccountTotalManager.java new file mode 100644 index 00000000..6cb29d8d --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/AccountTotalManager.java @@ -0,0 +1,41 @@ +package com.ruoyi.cai.manager; + +import com.ruoyi.cai.mapper.AccountMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; + +@Component +@Slf4j +public class AccountTotalManager { + + @Resource + private AccountMapper accountMapper; + + public void incsGuardIncomeCoin(Long userId, Long amount, Long businessLogId){ + log.info("开始收入统计 守护: userId={},amount={}, businessLogId={}", userId, amount, businessLogId); + accountMapper.incsGuardIncomeIcon(userId, amount); + } + + public void incsGiftIncomeCoin(Long userId, Long amount, Long businessLogId){ + log.info("开始收入统计 礼物: userId={},amount={}, businessLogId={}", userId, amount, businessLogId); + accountMapper.incsGiftIncomeIcon(userId, amount); + } + + public void incsMessageIncomeCoin(Long userId, Long amount, Long businessLogId) { + log.info("开始收入统计 聊天: userId={},amount={}, businessLogId={}", userId, amount, businessLogId); + accountMapper.incsMessageIncomeIcon(userId, amount); + } + + public void incsVideoIncomeCoin(Long userId, Long amount, Long businessLogId) { + log.info("开始收入统计 视频: userId={},amount={}, businessLogId={}", userId, amount, businessLogId); + accountMapper.incsVideoIncomeIcon(userId, amount); + } + + public void incsPayIncomeCoin(Long userId, Long rechargeCoin, BigDecimal price, Long consumeLogId) { + log.info("开始收入统计 充值: userId={},price={},rechargeCoin={}, businessLogId={}", userId, price, rechargeCoin,consumeLogId); + accountMapper.incsPayTotal(userId, rechargeCoin, price); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java index 980845c9..9d3db815 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ConsumerManager.java @@ -52,6 +52,8 @@ public class ConsumerManager { private UserService userService; @Autowired private AnchorService anchorService; + @Autowired + private AccountTotalManager accountTotalManager; public GuardConsumerResp sendGuard(GiveGuardReq query){ GuardConsumerResp resp = guardTotalService.giveGuard(query); @@ -61,6 +63,12 @@ public class ConsumerManager { }catch (Exception e){ log.error("RabbitMq 发送失败, 守护分销流程流转失败!",e); } + try { + // 记录主播的消费记录 + accountTotalManager.incsGuardIncomeCoin(resp.getToUid(), resp.getAnchorIncomeCoin(),resp.getConsumeLogId()); + }catch (Exception e){ + log.error("主播消费记录失败-守护",e); + } try { Account account = accountService.getByUserId(resp.getToUid()); if(account != null){ @@ -83,6 +91,12 @@ public class ConsumerManager { }catch (Exception e){ log.error("RabbitMq 发送失败, 礼物分销流程流转失败!",e); } + try { + // 记录主播的消费记录 + accountTotalManager.incsGiftIncomeCoin(resp.getToUid(), resp.getAnchorIncomeCoin(),resp.getConsumeLogId()); + }catch (Exception e){ + log.error("主播消费记录失败-礼物",e); + } try { Account account = accountService.getByUserId(resp.getToUid()); if(account != null){ @@ -125,6 +139,12 @@ public class ConsumerManager { }catch (Exception e){ log.error("RabbitMq 发送失败, 视频分销流程流转失败!",e); } + try { + // 记录主播的消费记录 + accountTotalManager.incsVideoIncomeCoin(consumeLog.getTargetUserId(), consumeLog.getAnchorAmount(),consumeLog.getId()); + }catch (Exception e){ + log.error("主播消费记录失败-视频",e); + } try { anchorService.incsServiceTimeAndCount(room.getRoomId()); }catch (Exception e){ @@ -156,6 +176,12 @@ public class ConsumerManager { }catch (Exception e){ log.error("RabbitMq 发送失败, 充值分销流程流转失败!",e); } + try { + // 记录主播的消费记录 + accountTotalManager.incsPayIncomeCoin(resp.getUserId(), resp.getRechargeCoin(),resp.getPrice(), resp.getConsumeLogId()); + }catch (Exception e){ + log.error("主播消费记录失败-充值",e); + } try { Account account = accountService.getByUserId(resp.getUserId()); if(account != null){ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/AccountMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/AccountMapper.java index 2df7431c..a95b8f17 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/AccountMapper.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/AccountMapper.java @@ -6,6 +6,8 @@ import com.ruoyi.cai.domain.Account; import com.ruoyi.cai.dto.admin.vo.AccountAdminVo; import org.apache.ibatis.annotations.Param; +import java.math.BigDecimal; + /** * 用户账户Mapper接口 * @@ -24,4 +26,14 @@ public interface AccountMapper extends BaseMapper { boolean decrIncomeCoinNotCheck(@Param("userId") Long userId, @Param("incomeCoin") Long incomeCoin); Page pageAdmin(@Param("build") Page build, @Param("bo") AccountAdminVo bo); + + void incsGiftIncomeIcon(@Param("userId") Long userId, @Param("amount") Long amount); + + void incsGuardIncomeIcon(@Param("userId") Long userId, @Param("amount") Long amount); + + void incsMessageIncomeIcon(@Param("userId") Long userId, @Param("amount") Long amount); + + void incsVideoIncomeIcon(@Param("userId") Long userId, @Param("amount") Long amount); + + void incsPayTotal(@Param("userId") Long userId, @Param("rechargeCoin") Long rechargeCoin, @Param("price") BigDecimal price); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountServiceImpl.java index ae885d2a..bca89704 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountServiceImpl.java @@ -13,6 +13,7 @@ import com.ruoyi.cai.enums.ConsumeLogType; import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.enums.account.AccountChangeCodeEnum; import com.ruoyi.cai.enums.account.AccountTypeEnum; +import com.ruoyi.cai.manager.AccountTotalManager; import com.ruoyi.cai.manager.IdManager; import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.mapper.AccountMapper; @@ -53,6 +54,8 @@ public class AccountServiceImpl extends ServiceImpl impl private SystemConfigManager systemConfigManager; @Autowired private CaiProperties caiProperties; + @Autowired + private AccountTotalManager accountTotalManager; @Override @@ -170,6 +173,12 @@ public class AccountServiceImpl extends ServiceImpl impl } // 记录接收方的流水 if(anchorAmount != 0){ + try { + // 记录主播的消费记录 + accountTotalManager.incsMessageIncomeCoin(toUser.getId(), anchorAmount,tractId); + }catch (Exception e){ + log.error("主播消费记录失败",e); + } accountChangeLogService.saveLogNoAdmin(toUser.getId(),toUser.getUsercode(), AccountChangeCodeEnum.IM_INCOME,anchorAmount,tractId,fromUser.getId()); } return tractId; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserChatRecordServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserChatRecordServiceImpl.java index c5affa60..4ee14d14 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserChatRecordServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserChatRecordServiceImpl.java @@ -54,7 +54,7 @@ public class UserChatRecordServiceImpl extends ServiceImpl bucket = redissonClient.getBucket(key); - bucket.set(userChatRecord,10, TimeUnit.MINUTES); + bucket.set(userChatRecord,5, TimeUnit.MINUTES); return userChatRecord; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserServiceImpl.java index b6313587..acd5e14f 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserServiceImpl.java @@ -285,6 +285,9 @@ public class UserServiceImpl extends ServiceImpl implements Us if(!b){ throw new ServiceException("用户不存在"); } + this.update(Wrappers.lambdaUpdate(User.class) + .eq(User::getInviteId, user.getId()) + .set(User::getInviteId, null)); userOnlineService.remove(Wrappers.lambdaQuery(UserOnline.class).eq(UserOnline::getUserId, id)); userInfoService.remove(Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getUserId, id)); userInviteService.remove(Wrappers.lambdaQuery(UserInvite.class).eq(UserInvite::getUserId, id)); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java index 259fe0c6..5ffd838b 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java @@ -58,7 +58,7 @@ public class MessageHandleApplication { Room room = roomService.load(roomId); if(room == null){ WsExceptionUtil.throwException(session, "房间不可用" ,HangUpEnums.OTHER, roomId); - log.info("调试日志:房间不可用 wsToken={}", JSON.toJSONString(wsToken)); + log.info("调试日志:房间不可用 roomId={} wsToken={}", roomId, JSON.toJSONString(wsToken)); return; } CheckConnectionDTO checkConnect = roomService.checkConnect(room); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/RoomWebSocketUtil.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/RoomWebSocketUtil.java index 72b0e119..1f3213e8 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/RoomWebSocketUtil.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/RoomWebSocketUtil.java @@ -33,6 +33,10 @@ public class RoomWebSocketUtil { // WebSocketUtils.sendMessage(sessionKey, JSON.toJSONString(r)); } + public static void sendSendMessageFast(WebSocketSession sessionKey, WsR r){ + WebSocketUtils.sendMessage(sessionKey, JSON.toJSONString(r)); + } + public static void sendSendMessage(List sessionKey, WsR r){ for (String s : sessionKey) { sendMessageStatic.sendMessage(s, JSON.toJSONString(r)); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WsExceptionUtil.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WsExceptionUtil.java index f3480ce2..de1c6981 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WsExceptionUtil.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WsExceptionUtil.java @@ -24,15 +24,20 @@ public class WsExceptionUtil { if(hangUpType == null){ hangUpType = HangUpEnums.OTHER; } - RoomWebSocketUtil.sendSendMessage(sessionKey, WsRMsgGen.hangup(message,roomId,hangUpType.getCode())); - boolean close = WebSocketUtils.close(sessionKey); - if(!close){ - log.warn("ws连接时发现异常:{},sessionKey {} roomid {}", message, sessionKey, roomId); + try { + RoomWebSocketUtil.sendSendMessageFast(sessionKey, WsRMsgGen.hangup(message,roomId,hangUpType.getCode())); + boolean close = WebSocketUtils.close(sessionKey); + if(!close){ + log.error("ws关闭时发现异常:{},sessionKey {} roomid {}", message, sessionKey, roomId); + } + }catch (Exception e){ + log.error("ws关闭时发现异常:{},sessionKey {} roomid {}", message, sessionKey, roomId,e); } + } public static void throwExceptionFast(WebSocketSession session,String message){ - RoomWebSocketUtil.sendSendMessage(session, WsRMsgGen.hangup(message, null, HangUpEnums.OTHER.getCode())); + RoomWebSocketUtil.sendSendMessageFast(session, WsRMsgGen.hangup(message, null, HangUpEnums.OTHER.getCode())); try { session.close(); } catch (IOException e) { diff --git a/ruoyi-cai/src/main/resources/mapper/cai/AccountMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/AccountMapper.xml index 6d50968c..293e0fa5 100644 --- a/ruoyi-cai/src/main/resources/mapper/cai/AccountMapper.xml +++ b/ruoyi-cai/src/main/resources/mapper/cai/AccountMapper.xml @@ -41,6 +41,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" set income_coin = income_coin - #{incomeCoin} where user_id = #{userId} + + update cai_account + set gift_income_coin = gift_income_coin + #{amount} + where user_id = #{userId} + + + update cai_account + set guard_income_coin = guard_income_coin + #{amount} + where user_id = #{userId} + + + update cai_account + set message_income_coin = message_income_coin + #{amount} + where user_id = #{userId} + + + update cai_account + set video_income_coin = video_income_coin + #{amount} + where user_id = #{userId} + + + update cai_account + set total_buy_money = total_buy_money + #{price}, + total_buy_coin = total_buy_coin + #{rechargeCoin} + where user_id = #{userId} +