From 340b83b4e2e92c239c40961e4120466ade8861d7 Mon Sep 17 00:00:00 2001 From: 15004070936 <1097449274@qq.com> Date: Wed, 21 Oct 2026 16:46:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8A=E5=A4=A9=E5=A2=9E=E5=8A=A0=E6=8B=89?= =?UTF-8?q?=E9=BB=91=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/AppreciateController.java | 14 +++- .../basic/ContextAppController.java | 12 +++- .../controller/basic/HealthyController.java | 11 ++- .../controller/basic/InheritController.java | 11 ++- .../basic/PracticeMomentsController.java | 11 ++- .../web/controller/basic/SenseController.java | 11 ++- .../web/controller/basic/StoreController.java | 13 +++- .../controller/im/ImUserBlackController.java | 65 ++++++++++++++++++ .../src/main/resources/application.yml | 2 +- .../ruoyi/common/im/enums/MessageStatus.java | 3 +- .../java/com/ruoyi/basic/domain/YjStore.java | 2 +- .../java/com/ruoyi/im/domain/ImUserBlack.java | 32 +++++++++ .../ruoyi/im/mapper/ImUserBlackMapper.java | 18 +++++ .../ruoyi/im/service/ImUserBlackService.java | 31 +++++++++ .../im/service/impl/FriendServiceImpl.java | 5 ++ .../service/impl/GroupMessageServiceImpl.java | 8 +++ .../im/service/impl/GroupServiceImpl.java | 4 +- .../service/impl/ImUserBlackServiceImpl.java | 68 +++++++++++++++++++ .../impl/PrivateMessageServiceImpl.java | 20 +++++- 19 files changed, 326 insertions(+), 15 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/im/ImUserBlackController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/im/domain/ImUserBlack.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/im/mapper/ImUserBlackMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/im/service/ImUserBlackService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/im/service/impl/ImUserBlackServiceImpl.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/AppreciateController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/AppreciateController.java index f66acee..1dabab6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/AppreciateController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/AppreciateController.java @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.basic; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.ruoyi.RestResponse; @@ -7,6 +8,7 @@ import com.ruoyi.basic.domain.YjAppreciate; import com.ruoyi.basic.service.impl.YjAppreciateServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -27,15 +29,23 @@ public class AppreciateController { @Resource private YjAppreciateServiceImpl service; + @Value("${defaultVisitStore}") + private Long defaultVisitStore; + /** * 瑜伽欣赏 列表 - * @param visitStore + * @param * @return */ @ApiOperation("获取瑜伽欣赏 列表") @PostMapping("/getList") public RestResponse getList(@RequestBody Map map){ - Long visitStore=Long.parseLong(map.get("visitStore").toString()); + Long visitStore; + if (ObjectUtil.isNotEmpty(map.get("visitStore"))){ + visitStore=Long.parseLong(map.get("visitStore").toString()); + }else { + visitStore= defaultVisitStore; + } List list= service.list(new QueryWrapper() .select("id,title,image,read_num,start_time,modify_time") .eq("dept_id",visitStore) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/ContextAppController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/ContextAppController.java index 89ba040..3201987 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/ContextAppController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/ContextAppController.java @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.basic; +import cn.hutool.core.util.ObjectUtil; import com.ruoyi.RestResponse; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.course.domain.req.ReqSearchClaTime; @@ -10,6 +11,7 @@ import com.ruoyi.system.service.SysTeacherService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -29,6 +31,8 @@ public class ContextAppController extends BaseController { @Autowired private SysTeacherService staffService; + @Value("${defaultVisitStore}") + private Long defaultVisitStore; /** * visitStore @@ -38,7 +42,13 @@ public class ContextAppController extends BaseController { @ApiOperation("教练列表") @PostMapping(value = "/getList") public RestResponse findList1(@RequestBody Map params) { - List list = teacherService.getList(Long.parseLong(params.get("visitStore").toString())); + Long visitStore; + if (ObjectUtil.isNotEmpty(params.get("visitStore"))){ + visitStore=Long.parseLong(params.get("visitStore").toString()); + }else { + visitStore= defaultVisitStore; + } + List list = teacherService.getList(visitStore); return new RestResponse().setSuccess(true).setMessage("成功").setData(list); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/HealthyController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/HealthyController.java index add59da..03d8da0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/HealthyController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/HealthyController.java @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.basic; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.ruoyi.RestResponse; @@ -7,6 +8,7 @@ import com.ruoyi.basic.domain.YjHealthy; import com.ruoyi.basic.service.impl.YjHealthyServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -28,6 +30,8 @@ public class HealthyController { @Resource private YjHealthyServiceImpl service; + @Value("${defaultVisitStore}") + private Long defaultVisitStore; /** * 健康饮食 列表 * @param visitStore @@ -36,7 +40,12 @@ public class HealthyController { @ApiOperation(value = "获取健康饮食列表") @PostMapping("/getList") public RestResponse getList(@RequestBody Map map){ - Long visitStore=Long.parseLong(map.get("visitStore").toString()); + Long visitStore; + if (ObjectUtil.isNotEmpty(map.get("visitStore"))){ + visitStore=Long.parseLong(map.get("visitStore").toString()); + }else { + visitStore= defaultVisitStore; + } List list= service.list(new QueryWrapper() .select("id,title,image,read_num,start_time,modify_time") .eq("dept_id",visitStore) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/InheritController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/InheritController.java index 165ed66..2937cd6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/InheritController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/InheritController.java @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.basic; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.ruoyi.RestResponse; @@ -7,6 +8,7 @@ import com.ruoyi.basic.domain.YjInherit; import com.ruoyi.basic.service.impl.YjInheritServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -27,6 +29,8 @@ public class InheritController { @Resource private YjInheritServiceImpl inheritService; + @Value("${defaultVisitStore}") + private Long defaultVisitStore; /** * 瑜伽传承 列表 * @param visitStore @@ -35,7 +39,12 @@ public class InheritController { @ApiOperation(value = "获取瑜伽传承列表") @PostMapping("/getList") public RestResponse getList(@RequestBody Map map){ - Long visitStore=Long.parseLong(map.get("visitStore").toString()); + Long visitStore; + if (ObjectUtil.isNotEmpty(map.get("visitStore"))){ + visitStore=Long.parseLong(map.get("visitStore").toString()); + }else { + visitStore= defaultVisitStore; + } List list= inheritService.list(new QueryWrapper() .select("id,title,image,read_num,start_time,modify_time") .eq("dept_id",visitStore) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/PracticeMomentsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/PracticeMomentsController.java index b45521e..e413dde 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/PracticeMomentsController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/PracticeMomentsController.java @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.basic; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.ruoyi.RestResponse; @@ -8,6 +9,7 @@ import com.ruoyi.basic.domain.YjPracticeMoments; import com.ruoyi.basic.service.impl.YjPracticeMomentsServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -28,6 +30,8 @@ public class PracticeMomentsController { @Resource private YjPracticeMomentsServiceImpl momentsService; + @Value("${defaultVisitStore}") + private Long defaultVisitStore; /** * 练习瞬间列表 * @param visitStore @@ -36,7 +40,12 @@ public class PracticeMomentsController { @ApiOperation(value = "获取练习瞬间列表") @PostMapping("/getList") public RestResponse getList(@RequestBody Map map){ - Long visitStore=Long.parseLong(map.get("visitStore").toString()); + Long visitStore; + if (ObjectUtil.isNotEmpty(map.get("visitStore"))){ + visitStore=Long.parseLong(map.get("visitStore").toString()); + }else { + visitStore= defaultVisitStore; + } List list=momentsService.list(new QueryWrapper() .select("id,title,image,read_num,start_time,modify_time") .eq("dept_id",visitStore) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/SenseController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/SenseController.java index 01b300e..dfdf0fd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/SenseController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/SenseController.java @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.basic; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.ruoyi.RestResponse; @@ -7,6 +8,7 @@ import com.ruoyi.basic.domain.YjSense; import com.ruoyi.basic.service.impl.YjSenseServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -26,6 +28,8 @@ public class SenseController { @Resource private YjSenseServiceImpl service; + @Value("${defaultVisitStore}") + private Long defaultVisitStore; /** * 瑜伽常识 列表 * @param visitStore @@ -34,7 +38,12 @@ public class SenseController { @ApiOperation(value = "获取瑜伽常识列表") @PostMapping("/getList") public RestResponse getList(@RequestBody Map map){ - Long visitStore=Long.parseLong(map.get("visitStore").toString()); + Long visitStore; + if (ObjectUtil.isNotEmpty(map.get("visitStore"))){ + visitStore=Long.parseLong(map.get("visitStore").toString()); + }else { + visitStore= defaultVisitStore; + } List list= service.list(new QueryWrapper() .select("id,title,image,read_num,start_time,modify_time") .eq("dept_id",visitStore) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/StoreController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/StoreController.java index e250ead..001bef6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/StoreController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/basic/StoreController.java @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.basic; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.RestResponse; import com.ruoyi.basic.domain.YjStore; @@ -9,6 +10,7 @@ import com.ruoyi.system.domain.SysTeacher; import com.ruoyi.system.service.SysTeacherService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -33,6 +35,9 @@ public class StoreController { @Resource private SysTeacherService teacherService; + + @Value("${defaultVisitStore}") + private Long defaultVisitStore; /** * 企业简介+门店列表 * @param map @@ -41,8 +46,14 @@ public class StoreController { @ApiOperation(value = "创始人+企业简介+门店列表") @PostMapping("/getList") public RestResponse getList(@RequestBody Map map){ + Long visitStore; + if (ObjectUtil.isNotEmpty(map.get("visitStore"))){ + visitStore=Long.parseLong(map.get("visitStore").toString()); + }else { + visitStore= defaultVisitStore; + } Map map1=new HashMap(); - YjStore store=storeService.getOne(Long.parseLong(map.get("visitStore").toString())); + YjStore store=storeService.getOne(visitStore); String tenantId=store.getTenantId(); List list= storeService.getStoreListByTenantId(tenantId); List list1=new ArrayList<>(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/im/ImUserBlackController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/im/ImUserBlackController.java new file mode 100644 index 0000000..a3deb80 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/im/ImUserBlackController.java @@ -0,0 +1,65 @@ +package com.ruoyi.web.controller.im; + +import com.ruoyi.RestResponse; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.im.service.ImUserBlackService; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api/blacklist") +public class ImUserBlackController { + + @Resource + private ImUserBlackService imUserBlackService; + + /** + * 拉黑用户 + * @param targetUid 被拉黑用户ID + */ + @PostMapping("/add") + public RestResponse black(@RequestParam Long targetUid){ + // getUserId() 若依获取当前登录用户 + Long loginUserId= SecurityUtils.getAppLoginUser().getAppUser().getId(); + boolean ok = imUserBlackService.blackUser(loginUserId, targetUid); + if(ok){ + return RestResponse.success("拉黑成功"); + } + return RestResponse.failure("拉黑失败"); + } + + /** + * 取消拉黑 + */ + @PostMapping("/cancel") + public RestResponse unBlack(@RequestParam Long targetUid){ + Long loginUserId= SecurityUtils.getAppLoginUser().getAppUser().getId(); + boolean ok = imUserBlackService.unBlackUser(loginUserId, targetUid); + if(ok){ + return RestResponse.success("取消拉黑成功"); + } + return RestResponse.failure("取消拉黑失败"); + } + + /** + * 校验:我是否被对方拉黑 / 我是否拉黑对方(前端聊天页查询状态) + */ + @PostMapping("/check") + public RestResponse checkBlack(@RequestParam Long targetUid){ + Long loginUserId= SecurityUtils.getAppLoginUser().getAppUser().getId(); + // 对方是否拉黑我 target -> loginUser + boolean targetBlackMe = imUserBlackService.isBlack(targetUid, loginUserId); + // 我是否拉黑对方 loginUser -> target + boolean meBlackTarget = imUserBlackService.isBlack(loginUserId, targetUid); + Map map=new HashMap<>(); + map.put("meBlackTarget", meBlackTarget); + map.put("targetBlackMe", targetBlackMe); + return RestResponse.success() + .setData(map); + } +} diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 6ab1d8d..b22d9c8 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -146,4 +146,4 @@ xss: wechat: token: runpeng - +defaultVisitStore: 101 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/im/enums/MessageStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/im/enums/MessageStatus.java index f06f56c..ba11e74 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/im/enums/MessageStatus.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/im/enums/MessageStatus.java @@ -25,7 +25,8 @@ public enum MessageStatus { /** * 屏蔽 */ - BLOCKED(4, "屏蔽"); + BLOCKED(4, "屏蔽"), + ISBLACK(5, "消息已被对方拒收。"); private final Integer code; diff --git a/ruoyi-system/src/main/java/com/ruoyi/basic/domain/YjStore.java b/ruoyi-system/src/main/java/com/ruoyi/basic/domain/YjStore.java index dca69b2..6286a29 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/basic/domain/YjStore.java +++ b/ruoyi-system/src/main/java/com/ruoyi/basic/domain/YjStore.java @@ -33,7 +33,7 @@ public class YjStore implements Serializable { @TableField(exist = false) private Long parentId; //租户id - @TableField(exist = false) + private String tenantId; @ApiModelProperty("banner图") diff --git a/ruoyi-system/src/main/java/com/ruoyi/im/domain/ImUserBlack.java b/ruoyi-system/src/main/java/com/ruoyi/im/domain/ImUserBlack.java new file mode 100644 index 0000000..edcd8bc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/im/domain/ImUserBlack.java @@ -0,0 +1,32 @@ +package com.ruoyi.im.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import java.util.Date; + +@Data +@TableName("im_user_black") +public class ImUserBlack { + + @TableId(type = IdType.AUTO) + private Long id; + + /** 拉黑人uid */ + private Long fromUid; + + /** 被拉黑uid */ + private Long toUid; + + @TableField(value = "create_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private Date createTime; + + @TableField(value = "update_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private Date updateTime; + + /** 若依逻辑删除 0正常 1删除 */ + @TableField(value = "del_flag") + private Integer delFlag; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/im/mapper/ImUserBlackMapper.java b/ruoyi-system/src/main/java/com/ruoyi/im/mapper/ImUserBlackMapper.java new file mode 100644 index 0000000..9aee080 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/im/mapper/ImUserBlackMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.im.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.im.domain.ImUserBlack; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +public interface ImUserBlackMapper extends BaseMapper { + + /** + * 判断 receiver 是否拉黑 sender + * @param receiver 接收方A + * @param sender 发送方B + * @return true A拉黑B + */ + @Select("SELECT COUNT(1) FROM im_user_black WHERE from_uid = #{receiver} AND to_uid = #{sender} AND del_flag = 0") + boolean existsBlack(@Param("receiver") Long receiver, @Param("sender") Long sender); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/im/service/ImUserBlackService.java b/ruoyi-system/src/main/java/com/ruoyi/im/service/ImUserBlackService.java new file mode 100644 index 0000000..a02fc6d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/im/service/ImUserBlackService.java @@ -0,0 +1,31 @@ +package com.ruoyi.im.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.im.domain.ImUserBlack; + +public interface ImUserBlackService extends IService { + + /** + * 判断 receiver 是否拉黑 sender + * @param receiver 消息接收人 + * @param sender 消息发送人 + * @return true receiver拉黑sender,消息禁止发送 + */ + boolean isBlack(Long receiver, Long sender); + + /** + * 拉黑用户 + * @param fromUid 操作人(拉黑者) + * @param toUid 被拉黑用户 + * @return true成功 + */ + boolean blackUser(Long fromUid, Long toUid); + + /** + * 取消拉黑 + * @param fromUid 操作人 + * @param toUid 被拉黑用户 + * @return true成功 + */ + boolean unBlackUser(Long fromUid, Long toUid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/FriendServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/FriendServiceImpl.java index 60949e8..a335ca9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/FriendServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/FriendServiceImpl.java @@ -283,4 +283,9 @@ public class FriendServiceImpl extends ServiceImpl impleme }); return vos; } + + //拉黑 = 删除好友 + + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/GroupMessageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/GroupMessageServiceImpl.java index ae2937d..b976019 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/GroupMessageServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/GroupMessageServiceImpl.java @@ -38,6 +38,7 @@ import com.ruoyi.im.mapper.GroupMessageMapper; import com.ruoyi.im.service.GroupMemberService; import com.ruoyi.im.service.GroupMessageService; import com.ruoyi.im.service.GroupService; +import com.ruoyi.im.service.ImUserBlackService; import com.ruoyi.im.util.SensitiveFilterUtil; import com.ruoyi.imclient.IMClient; import lombok.RequiredArgsConstructor; @@ -64,6 +65,8 @@ public class GroupMessageServiceImpl extends ServiceImpl redisTemplate; private final IMClient imClient; private final SensitiveFilterUtil sensitiveFilterUtil; + + private final ImUserBlackService imUserBlackService; private static final ScheduledThreadPoolExecutor EXECUTOR = ThreadPoolExecutorFactory.getThreadPoolExecutor(); @Override @@ -87,6 +90,11 @@ public class GroupMessageServiceImpl extends ServiceImpl !session.getId().equals(id)).collect(Collectors.toList()); + // 过滤:只保留【没有拉黑我的用户】,拉黑我的直接剔除 + userIds = userIds.stream() + .filter(userId -> !imUserBlackService.isBlack(userId, session.getId())) + .collect(Collectors.toList()); + // 保存消息 GroupMessage msg = BeanUtils.copyProperties(dto, GroupMessage.class); msg.setSendId(session.getId()); diff --git a/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/GroupServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/GroupServiceImpl.java index 8f88f85..7ea8aee 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/GroupServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/GroupServiceImpl.java @@ -236,8 +236,10 @@ public class GroupServiceImpl extends ServiceImpl implements List userIds = members.stream().map(GroupMember::getUserId).collect(Collectors.toList()); List onlineUserIds = imClient.getOnlineUser(userIds); return members.stream().map(m -> { + AppUser user=userService.getById(m.getUserId()); GroupMemberVO vo = BeanUtils.copyProperties(m, GroupMemberVO.class); - vo.setShowNickName(m.getShowNickName()); + vo.setShowNickName(user.getNickName()); + vo.setHeadImage(user.getAvatar()); vo.setShowGroupName(StrUtil.blankToDefault(m.getRemarkGroupName(), group.getName())); vo.setOnline(onlineUserIds.contains(m.getUserId())); return vo; diff --git a/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/ImUserBlackServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/ImUserBlackServiceImpl.java new file mode 100644 index 0000000..b2d6bf9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/ImUserBlackServiceImpl.java @@ -0,0 +1,68 @@ +package com.ruoyi.im.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.im.domain.ImUserBlack; +import com.ruoyi.im.mapper.ImUserBlackMapper; +import com.ruoyi.im.service.ImUserBlackService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.util.Date; + +@Service +public class ImUserBlackServiceImpl extends ServiceImpl implements ImUserBlackService { + + @Resource + private ImUserBlackMapper imUserBlackMapper; + + @Override + public boolean isBlack(Long receiver, Long sender) { + if (receiver == null || sender == null) { + return false; + } + // receiver 是否拉黑 sender + return imUserBlackMapper.existsBlack(receiver, sender); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean blackUser(Long fromUid, Long toUid) { + if(fromUid == null || toUid == null || fromUid.equals(toUid)){ + return false; + } + // 先查是否已有拉黑记录(逻辑删除的旧记录) + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ImUserBlack::getFromUid, fromUid); + wrapper.eq(ImUserBlack::getToUid, toUid); + ImUserBlack oldRecord = getOne(wrapper); + + if(oldRecord != null){ + // 存在记录,恢复(取消逻辑删除) + oldRecord.setDelFlag(0); + oldRecord.setUpdateTime(new Date()); + return updateById(oldRecord); + }else{ + ImUserBlack black = new ImUserBlack(); + black.setFromUid(fromUid); + black.setToUid(toUid); + black.setDelFlag(0); + black.setCreateTime(new Date()); + return save(black); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean unBlackUser(Long fromUid, Long toUid) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ImUserBlack::getFromUid, fromUid); + wrapper.eq(ImUserBlack::getToUid, toUid); + ImUserBlack record = getOne(wrapper); + if(record == null){ + return false; + } + // 逻辑删除(若依标准) + return removeById(record.getId()); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/PrivateMessageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/PrivateMessageServiceImpl.java index 8d05d75..8c82efd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/PrivateMessageServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/im/service/impl/PrivateMessageServiceImpl.java @@ -30,6 +30,7 @@ import com.ruoyi.im.domain.result.ResultUtils; import com.ruoyi.im.domain.vo.PrivateMessageVO; import com.ruoyi.im.mapper.PrivateMessageMapper; import com.ruoyi.im.service.FriendService; +import com.ruoyi.im.service.ImUserBlackService; import com.ruoyi.im.service.PrivateMessageService; import com.ruoyi.im.util.SensitiveFilterUtil; import com.ruoyi.imclient.IMClient; @@ -48,6 +49,7 @@ import com.ruoyi.mall.service.impl.OrderItemService; import com.ruoyi.mall.service.impl.OrderService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DeadlockLoserDataAccessException; import org.springframework.data.domain.PageImpl; @@ -69,6 +71,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl sendMessage = new IMPrivateMessage<>(); @@ -102,6 +111,11 @@ public class PrivateMessageServiceImpl extends ServiceImpl result =ResultUtils.error(20007,"消息已被对方拒收。"); + result.setData(msgInfo); + return result; + } imClient.sendPrivateMessage(sendMessage); jpush(appUser.getId(),appUser.getNickName(),msg.getContent(),dto.getRecvId()); log.info("发送私聊消息,发送id:{},接收id:{},内容:{}", appUser.getId(), dto.getRecvId(), dto.getContent());