From 4d24793cdb277d2f07dfccdf0082a6e1b98f5afd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Tue, 9 Jan 2024 20:50:55 +0800 Subject: [PATCH] 123 --- .../controller/UserChatFilterController.java | 95 ++++++++++++++++ .../controller/UserChatRecordController.java | 95 ++++++++++++++++ .../com/ruoyi/cai/domain/UserChatFilter.java | 42 +++++++ .../com/ruoyi/cai/domain/UserChatRecord.java | 51 +++++++++ .../ruoyi/cai/enums/AccountChangeEnum.java | 3 +- .../ruoyi/cai/enums/UserMemberTypeEnum.java | 17 +++ .../java/com/ruoyi/cai/manager/ImService.java | 107 ++++++++++++++++-- .../cai/mapper/UserChatFilterMapper.java | 14 +++ .../cai/mapper/UserChatRecordMapper.java | 14 +++ .../com/ruoyi/cai/service/AccountService.java | 3 + .../cai/service/UserBlacklistService.java | 2 + .../cai/service/UserChatFilterService.java | 14 +++ .../cai/service/UserChatRecordService.java | 17 +++ .../ruoyi/cai/service/UserMemberService.java | 2 + .../cai/service/impl/AccountServiceImpl.java | 56 +++++++++ .../impl/UserBlacklistServiceImpl.java | 8 ++ .../impl/UserChatFilterServiceImpl.java | 17 +++ .../impl/UserChatRecordServiceImpl.java | 35 ++++++ .../service/impl/UserMemberServiceImpl.java | 7 ++ .../mapper/cai/UserChatFilterMapper.xml | 16 +++ .../mapper/cai/UserChatRecordMapper.xml | 18 +++ 21 files changed, 620 insertions(+), 13 deletions(-) create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserChatFilterController.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserChatRecordController.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserChatFilter.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserChatRecord.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/enums/UserMemberTypeEnum.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserChatFilterMapper.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserChatRecordMapper.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserChatFilterService.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserChatRecordService.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserChatFilterServiceImpl.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserChatRecordServiceImpl.java create mode 100644 ruoyi-cai/src/main/resources/mapper/cai/UserChatFilterMapper.xml create mode 100644 ruoyi-cai/src/main/resources/mapper/cai/UserChatRecordMapper.xml diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserChatFilterController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserChatFilterController.java new file mode 100644 index 00000000..268a1dea --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserChatFilterController.java @@ -0,0 +1,95 @@ +package com.ruoyi.cai.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.cai.domain.UserChatFilter; +import com.ruoyi.cai.service.UserChatFilterService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Arrays; + +/** + * 聊天过滤 + * + * @author 77 + * @date 2024-01-09 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/cai/userChatFilter") +public class UserChatFilterController extends BaseController { + + private final UserChatFilterService userChatFilterService; + + /** + * 查询聊天过滤列表 + */ + @SaCheckPermission("cai:userChatFilter:list") + @GetMapping("/list") + public TableDataInfo list(UserChatFilter bo, PageQuery pageQuery) { + Page page = userChatFilterService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + return TableDataInfo.build(page); + } + + /** + * 获取聊天过滤详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("cai:userChatFilter:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(userChatFilterService.getById(id)); + } + + /** + * 新增聊天过滤 + */ + @SaCheckPermission("cai:userChatFilter:add") + @Log(title = "聊天过滤", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody UserChatFilter bo) { + return toAjax(userChatFilterService.save(bo)); + } + + /** + * 修改聊天过滤 + */ + @SaCheckPermission("cai:userChatFilter:edit") + @Log(title = "聊天过滤", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody UserChatFilter bo) { + return toAjax(userChatFilterService.updateById(bo)); + } + + /** + * 删除聊天过滤 + * + * @param ids 主键串 + */ + @SaCheckPermission("cai:userChatFilter:remove") + @Log(title = "聊天过滤", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(userChatFilterService.removeBatchByIds(Arrays.asList(ids))); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserChatRecordController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserChatRecordController.java new file mode 100644 index 00000000..6e9a3ef3 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserChatRecordController.java @@ -0,0 +1,95 @@ +package com.ruoyi.cai.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.cai.domain.UserChatRecord; +import com.ruoyi.cai.service.UserChatRecordService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Arrays; + +/** + * 聊天记录 + * + * @author 77 + * @date 2024-01-09 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/cai/userChatRecord") +public class UserChatRecordController extends BaseController { + + private final UserChatRecordService userChatRecordService; + + /** + * 查询聊天记录列表 + */ + @SaCheckPermission("cai:userChatRecord:list") + @GetMapping("/list") + public TableDataInfo list(UserChatRecord bo, PageQuery pageQuery) { + Page page = userChatRecordService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + return TableDataInfo.build(page); + } + + /** + * 获取聊天记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("cai:userChatRecord:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(userChatRecordService.getById(id)); + } + + /** + * 新增聊天记录 + */ + @SaCheckPermission("cai:userChatRecord:add") + @Log(title = "聊天记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody UserChatRecord bo) { + return toAjax(userChatRecordService.save(bo)); + } + + /** + * 修改聊天记录 + */ + @SaCheckPermission("cai:userChatRecord:edit") + @Log(title = "聊天记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody UserChatRecord bo) { + return toAjax(userChatRecordService.updateById(bo)); + } + + /** + * 删除聊天记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("cai:userChatRecord:remove") + @Log(title = "聊天记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(userChatRecordService.removeBatchByIds(Arrays.asList(ids))); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserChatFilter.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserChatFilter.java new file mode 100644 index 00000000..4fc3679a --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserChatFilter.java @@ -0,0 +1,42 @@ +package com.ruoyi.cai.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 聊天过滤对象 cai_user_chat_filter + * + * @author 77 + * @date 2024-01-09 + */ +@Data +@TableName("cai_user_chat_filter") +public class UserChatFilter implements Serializable { + + private static final long serialVersionUID=1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + /** + * + */ + private Long fromUid; + /** + * + */ + private Long toUid; + /** + * + */ + private String content; + + private LocalDateTime createTime; + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserChatRecord.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserChatRecord.java new file mode 100644 index 00000000..f5688ea9 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserChatRecord.java @@ -0,0 +1,51 @@ +package com.ruoyi.cai.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 聊天记录对象 cai_user_chat_record + * + * @author 77 + * @date 2024-01-09 + */ +@Data +@TableName("cai_user_chat_record") +public class UserChatRecord implements Serializable { + + private static final long serialVersionUID=1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + private Long traceId; + /** + * + */ + private Long fromUid; + /** + * + */ + private Long toUid; + /** + * + */ + private String content; + /** + * 消息类型:0=文本消息,1=图片消息,2=语音消息,3=视频消息,4=发送地理位置消息,6=发送文件消息,10=发送提示消息,100=发送第三方自定义消息 + */ + private Integer type; + /** + * 图片下载状态:0=未更新,1=已更新,2=已下载,3=下载失败 + */ + private Integer imgStatus; + + private LocalDateTime createTime; + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/AccountChangeEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/AccountChangeEnum.java index 2002125e..85c74105 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/AccountChangeEnum.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/AccountChangeEnum.java @@ -12,13 +12,14 @@ public enum AccountChangeEnum { USER_GIFT(104,"送出礼物","送出礼物","GIFT",""), USER_GUARD(105,"送出守护","送出守护","GUARD",""), USER_VIDEO(106,"视频支出","视频支出","VIDEO",""), - A7(107,"聊天支出","聊天支出","",""), + USER_IM(107,"聊天支出","聊天支出","IM",""), WITHDRAW(108,"提现","提现","","WITHDRAW"), // 主播端 ANCHOR_GIFT(201,"收到礼物","收到礼物","GIFT",""), ANCHOR_GUARD(202,"收到守护","收到守护","GUARD",""), ANCHOR_VIDEO(203,"视频收入","视频收入","VIDEO",""), + ANCHOR_IM(204,"聊天收入","视频收入","IM",""), // 分销 ONE_RECHARGE(301,"充值分成","邀请奖励","RECHARGE",""), diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/UserMemberTypeEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/UserMemberTypeEnum.java new file mode 100644 index 00000000..43e50086 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/UserMemberTypeEnum.java @@ -0,0 +1,17 @@ +package com.ruoyi.cai.enums; + +import lombok.Getter; + +@Getter +public enum UserMemberTypeEnum { + NORMAL_VIP(0,"普通会员"), + SUPER_VIP(1,"超级会员"), + ; + private final Integer code; + private final String name; + + UserMemberTypeEnum(Integer code, String name) { + this.code = code; + this.name = name; + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java index 6bb3d01d..9b72b60c 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java @@ -2,21 +2,21 @@ package com.ruoyi.cai.manager; import com.ruoyi.cai.domain.Account; import com.ruoyi.cai.domain.User; -import com.ruoyi.cai.domain.UserVisitor; +import com.ruoyi.cai.domain.UserChatRecord; +import com.ruoyi.cai.domain.UserMember; import com.ruoyi.cai.dto.app.dto.ImMessageDTO; import com.ruoyi.cai.dto.app.vo.ImResp; -import com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList; +import com.ruoyi.cai.enums.GenderEnum; import com.ruoyi.cai.enums.ImTypeEnum; import com.ruoyi.cai.enums.SystemConfigEnum; -import com.ruoyi.cai.service.AccountService; -import com.ruoyi.cai.service.UserFollowService; -import com.ruoyi.cai.service.UserService; -import com.ruoyi.cai.service.UserVisitorService; +import com.ruoyi.cai.enums.UserMemberTypeEnum; +import com.ruoyi.cai.mapper.AccountMapper; +import com.ruoyi.cai.service.*; import com.ruoyi.common.exception.ServiceException; +import org.apache.xmlbeans.impl.xb.xsdschema.UnionDocument; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.List; import java.util.Set; @Component @@ -30,6 +30,10 @@ public class ImService { private AccountService accountService; @Autowired private UserFollowService userFollowService; + @Autowired + private UserMemberService userMemberService; + @Autowired + private UserChatRecordService userChatRecordService; public ImResp sendMessage(Long fromUserId, ImMessageDTO message) { ImTypeEnum typeEnum = ImTypeEnum.getByType(message.getType()); @@ -37,9 +41,20 @@ public class ImService { throw new ServiceException("参数异常"); } // 检测用户是否被封号 - User user = userService.getById(fromUserId); - if(user.getStatus() == 1){ - throw new ServiceException("该账户已被封禁,无法发送消息"); + User fromUser = userService.getById(fromUserId); + if(fromUser == null){ + throw new ServiceException("发送人不存在!"); + } + if(fromUser.getStatus() == 1){ + throw new ServiceException("发送人账号不可用!"); + } + Long toUserId = message.getToUserId(); + User toUser = userService.getById(toUserId); + if(toUser == null){ + throw new ServiceException("接收人不存在!"); + } + if(toUser.getStatus() == 1){ + throw new ServiceException("接收人账号不可用!"); } // 自定义消息跳过所有流程 if(typeEnum == ImTypeEnum.CUSTOM){ @@ -48,8 +63,14 @@ public class ImService { resp.setCoin(account.getCoin()+ account.getIncomeCoin()); return resp; } - Long toUserId = message.getToUserId(); Set systemCustomerService = systemConfigManager.getSystemConfigOfLongSet(SystemConfigEnum.SYSTEM_CUSTOMER_SERVICE); + // 有内部用户参与的 跳过所有校验 + if(systemCustomerService.contains(fromUserId) || systemCustomerService.contains(toUserId)){ + Account account = accountService.getByUserId(fromUserId); + ImResp resp = new ImResp(); + resp.setCoin(account.getCoin()+ account.getIncomeCoin()); + return resp; + } boolean fileType = typeEnum.isFileType(); if(fileType){ if(!systemCustomerService.contains(fromUserId) && !systemCustomerService.contains(toUserId)){ @@ -63,7 +84,69 @@ public class ImService { if(typeEnum == ImTypeEnum.MESSAGE && !systemCustomerService.contains(fromUserId) && !systemCustomerService.contains(toUserId)){ } - + if(fromUserId.equals(toUserId)){ + throw new ServiceException("不能给自己发送哦!"); + } + // 更新活跃时间 + // 检查拉黑 + boolean isBlack = userBlacklistService.existsBlack(fromUserId, toUserId); + if(isBlack){ + throw new ServiceException("您已经将对方拉黑!"); + } + isBlack = userBlacklistService.existsBlack(toUserId, fromUserId); + if(isBlack){ + throw new ServiceException("对方已经将您拉黑!"); + } + if (fromUser.getGender().equals(GenderEnum.WOMEN.getCode()) && toUser.getGender().equals(GenderEnum.WOMEN.getCode())) { + throw new ServiceException("女生之间暂不支持私信!"); + } + if (fromUser.getGender().equals(GenderEnum.MAN.getCode()) && toUser.getGender().equals(GenderEnum.MAN.getCode())) { + throw new ServiceException("男生之间暂不支持私信!"); + } + if (fromUser.getGender().equals(GenderEnum.MAN.getCode()) && toUser.getIsAnchor().equals(0)) { + throw new ServiceException("只能给女神私信!"); + } + if (fromUser.getGender().equals(GenderEnum.WOMEN.getCode()) && toUser.getIsAnchor().equals(0)) { + throw new ServiceException("成为女神才能私信!"); + } + if (fromUser.getIsAnchor().equals(1) && toUser.getIsAnchor().equals(1)) { + throw new ServiceException("女神之间暂不支持私信!"); + } + if (fromUser.getIsAnchor().equals(0) && toUser.getIsAnchor().equals(0)) { + throw new ServiceException("目前只能和女神私信!"); + } + if(){ + Account account = accountService.getByUserId(fromUserId); + ImResp resp = new ImResp(); + resp.setCoin(account.getCoin()+ account.getIncomeCoin()); + return resp; + } + // 判断VIP获取价格 + Long imPrice = getByImPrice(fromUserId); + Long traceId = null; + if(imPrice > 0){ + // 扣费 + traceId = accountService.imDesc(fromUser, toUser, imPrice); + } + // 存储聊天记录 + userChatRecordService.saveRecord(fromUser,toUser,traceId,message); return null; } + + @Autowired + private UserBlacklistService userBlacklistService; + + private Long getByImPrice(Long userId){ + UserMember userMember = userMemberService.getNormalMember(userId); + if(userMember == null){ + return 10L; + } + if(userMember.getMemberType().equals(UserMemberTypeEnum.NORMAL_VIP.getCode())){ + return 5L; + } + if(userMember.getMemberType().equals(UserMemberTypeEnum.SUPER_VIP.getCode())){ + return 0L; + } + return 10L; + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserChatFilterMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserChatFilterMapper.java new file mode 100644 index 00000000..737a502d --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserChatFilterMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.cai.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cai.domain.UserChatFilter; + +/** + * 聊天过滤Mapper接口 + * + * @author 77 + * @date 2024-01-09 + */ +public interface UserChatFilterMapper extends BaseMapper { + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserChatRecordMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserChatRecordMapper.java new file mode 100644 index 00000000..4cadffbe --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserChatRecordMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.cai.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cai.domain.UserChatRecord; + +/** + * 聊天记录Mapper接口 + * + * @author 77 + * @date 2024-01-09 + */ +public interface UserChatRecordMapper extends BaseMapper { + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AccountService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AccountService.java index 9bb48dc5..bdba48b7 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AccountService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/AccountService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.cai.domain.Account; import com.ruoyi.cai.domain.ConsumeLog; +import com.ruoyi.cai.domain.User; import com.ruoyi.cai.dto.admin.vo.AccountAdminVo; import com.ruoyi.cai.enums.AccountBusinessEnum; import com.ruoyi.cai.enums.AccountChangeEnum; @@ -22,6 +23,8 @@ public interface AccountService extends IService { ConsumeLog decr(ConsumeLog log, AccountBusinessEnum businessEnum); + Long imDesc(User fromUser, User toUser, Long price); + void withdraw(Long userId, Long incomeCoin, Long traceId); void recharge(ConsumeLog consumeLog); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserBlacklistService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserBlacklistService.java index 7a77f84f..cc86c491 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserBlacklistService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserBlacklistService.java @@ -14,6 +14,8 @@ import com.ruoyi.common.core.domain.PageQuery; */ public interface UserBlacklistService extends IService { + boolean existsBlack(Long userId, Long blackUserId); + /** * * @param actionType 1-拉黑 2-取消拉黑 diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserChatFilterService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserChatFilterService.java new file mode 100644 index 00000000..cd7db59a --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserChatFilterService.java @@ -0,0 +1,14 @@ +package com.ruoyi.cai.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cai.domain.UserChatFilter; + +/** + * 聊天过滤Service接口 + * + * @author 77 + * @date 2024-01-09 + */ +public interface UserChatFilterService extends IService { + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserChatRecordService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserChatRecordService.java new file mode 100644 index 00000000..b13a2099 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserChatRecordService.java @@ -0,0 +1,17 @@ +package com.ruoyi.cai.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cai.domain.User; +import com.ruoyi.cai.domain.UserChatRecord; +import com.ruoyi.cai.dto.app.dto.ImMessageDTO; + +/** + * 聊天记录Service接口 + * + * @author 77 + * @date 2024-01-09 + */ +public interface UserChatRecordService extends IService { + + void saveRecord(User fromUser, User toUser,Long traceId, ImMessageDTO message); +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserMemberService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserMemberService.java index 883db787..b9abdd82 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserMemberService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserMemberService.java @@ -18,5 +18,7 @@ public interface UserMemberService extends IService { UserMember getByUserId(Long userId); + UserMember getNormalMember(Long userId); + void relieveMember(Long id); } 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 5c5b2abc..6c70756d 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 @@ -8,6 +8,9 @@ import com.ruoyi.cai.domain.*; import com.ruoyi.cai.dto.admin.vo.AccountAdminVo; import com.ruoyi.cai.enums.AccountBusinessEnum; import com.ruoyi.cai.enums.AccountChangeEnum; +import com.ruoyi.cai.enums.SystemConfigEnum; +import com.ruoyi.cai.manager.IdManager; +import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.mapper.AccountMapper; import com.ruoyi.cai.pay.RechargeTypeEnum; import com.ruoyi.cai.service.*; @@ -20,6 +23,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.xml.transform.Source; +import java.math.BigDecimal; + /** * 用户账户Service业务层处理 * @@ -36,6 +42,8 @@ public class AccountServiceImpl extends ServiceImpl impl private UserService userService; @Autowired private AccountChangeLogService accountChangeLogService; + @Autowired + private SystemConfigManager systemConfigManager; @Override @@ -99,6 +107,54 @@ public class AccountServiceImpl extends ServiceImpl impl return consumeLog; } + @Override + @Transactional(rollbackFor = Exception.class) + public Long imDesc(User fromUser, User toUser, Long price) { + Long fromUserId = fromUser.getId(); + Account account = this.getByUserId(fromUserId); + long totalCoin = account.getIncomeCoin() + account.getCoin(); + if(totalCoin < price){ + throw new ServiceException("余额不足"); + } + boolean flag = false; + long coin = -price; // 消费余额 + long incomeCoin = 0; // 消费收益 + long diff = account.getCoin() - price; + // 充值币够用 + if(diff > 0){ + flag = baseMapper.decrCoin(fromUserId, -coin); + } else { // 充值币不够用 + coin = -account.getCoin(); + incomeCoin = diff; + boolean decrCoin = baseMapper.decrCoin(fromUserId, -coin); + boolean decrIncomeCoin = baseMapper.decrIncomeCoin(fromUserId, -diff); + if(decrCoin && decrIncomeCoin){ + flag = true; + } + } + // 扣费不成功 + if(!flag){ + throw new ServiceException("扣费失败,请重新购买"); + } + // 开始处理 接收方的费用 + BigDecimal imRate = systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.DAY_MAX_DYNAMIC); + Long anchorAmount = NumCaUtil.coin(price,imRate); + baseMapper.incsIncomeCoin(toUser.getId(),anchorAmount); + Long tractId = IdManager.nextId(); + // 记录消费方的流水 + if(coin != 0){ + accountChangeLogService.saveLogNoAdmin(fromUserId,fromUser.getUsercode(), RechargeTypeEnum.COIN, AccountChangeEnum.USER_IM, coin, tractId); + } + if(incomeCoin != 0){ + accountChangeLogService.saveLogNoAdmin(fromUserId,fromUser.getUsercode(), RechargeTypeEnum.COIN_INCOME,AccountChangeEnum.USER_IM,incomeCoin,tractId); + } + // 记录接收方的流水 + if(anchorAmount != 0){ + accountChangeLogService.saveLogNoAdmin(toUser.getId(),toUser.getUsercode(), RechargeTypeEnum.COIN_INCOME,AccountChangeEnum.ANCHOR_IM,anchorAmount,tractId); + } + return tractId; + } + @Override @Transactional(rollbackFor = Exception.class) public void withdraw(Long userId, Long incomeCoin,Long traceId){ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserBlacklistServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserBlacklistServiceImpl.java index c54a4981..b036aa7b 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserBlacklistServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserBlacklistServiceImpl.java @@ -18,6 +18,14 @@ import org.springframework.stereotype.Service; */ @Service public class UserBlacklistServiceImpl extends ServiceImpl implements UserBlacklistService { + + @Override + public boolean existsBlack(Long userId,Long blackUserId){ + return this.exists(Wrappers.lambdaQuery(UserBlacklist.class) + .eq(UserBlacklist::getUserId,userId) + .eq(UserBlacklist::getBlackUid,blackUserId)); + } + @Override public boolean black(Long userId, Long blackUserId,Integer actionType) { if(userId.equals(blackUserId)){ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserChatFilterServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserChatFilterServiceImpl.java new file mode 100644 index 00000000..caaea2eb --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserChatFilterServiceImpl.java @@ -0,0 +1,17 @@ +package com.ruoyi.cai.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cai.domain.UserChatFilter; +import com.ruoyi.cai.mapper.UserChatFilterMapper; +import com.ruoyi.cai.service.UserChatFilterService; +import org.springframework.stereotype.Service; + +/** + * 聊天过滤Service业务层处理 + * + * @author 77 + * @date 2024-01-09 + */ +@Service +public class UserChatFilterServiceImpl extends ServiceImpl implements UserChatFilterService { +} 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 new file mode 100644 index 00000000..88043b49 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserChatRecordServiceImpl.java @@ -0,0 +1,35 @@ +package com.ruoyi.cai.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cai.domain.User; +import com.ruoyi.cai.domain.UserChatRecord; +import com.ruoyi.cai.dto.app.dto.ImMessageDTO; +import com.ruoyi.cai.mapper.UserChatRecordMapper; +import com.ruoyi.cai.service.UserChatRecordService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; + +/** + * 聊天记录Service业务层处理 + * + * @author 77 + * @date 2024-01-09 + */ +@RequiredArgsConstructor +@Service +public class UserChatRecordServiceImpl extends ServiceImpl implements UserChatRecordService { + + @Override + public void saveRecord(User fromUser, User toUser,Long traceId, ImMessageDTO message) { + UserChatRecord userChatRecord = new UserChatRecord(); + userChatRecord.setFromUid(fromUser.getId()); + userChatRecord.setToUid(toUser.getId()); + userChatRecord.setContent(message.getMessage()); + userChatRecord.setType(message.getType()); + userChatRecord.setCreateTime(LocalDateTime.now()); + userChatRecord.setTraceId(traceId); + this.save(userChatRecord); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserMemberServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserMemberServiceImpl.java index b630d369..730230b6 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserMemberServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserMemberServiceImpl.java @@ -30,6 +30,13 @@ public class UserMemberServiceImpl extends ServiceImpl + + + + + + + + + + + + + diff --git a/ruoyi-cai/src/main/resources/mapper/cai/UserChatRecordMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/UserChatRecordMapper.xml new file mode 100644 index 00000000..b821579a --- /dev/null +++ b/ruoyi-cai/src/main/resources/mapper/cai/UserChatRecordMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + +