Commit 8103d6cb by Future

群禁言,设置管理员等接口

parent c579f9c6
package com.wecloud.im.controller;
import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
......@@ -20,6 +21,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -116,7 +118,7 @@ public class ImConversationController extends BaseController {
*/
@PostMapping("/setAdmins")
@ApiOperation(value = "设置群管理员", notes = "权限:目前只有群主有权限操作")
public ApiResult<Boolean> setAdmins(@RequestBody SetAdminsParam param) {
public ApiResult<Boolean> setAdmins(@RequestBody @Validated SetAdminsParam param) {
if (CollectionUtils.isEmpty(param.getClientIds())) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
......@@ -124,6 +126,17 @@ public class ImConversationController extends BaseController {
return ApiResult.ok(result);
}
/**
* 群禁言
*/
@PostMapping("/mutedGroup")
@ApiOperation(value = "群禁言", notes = "权限:群主和管理员有权限操作")
public ApiResult<Boolean> mutedGroup(@RequestBody @Validated MutedGroupParam param) {
Boolean result = imConversationService.mutedGroup(param);
return ApiResult.ok(result);
}
/**
* 查询用户加入的所有会话 与每个会话的未读条数 成员
......
......@@ -58,7 +58,6 @@ public class ImConversationMembersController extends BaseController {
* 会话中成员表列表
*/
@PostMapping("/getList")
// @OperationLog(name = "会话中成员表列表", type = OperationLogType.PAGE)
@ApiOperation(value = "获取会话中成员表列表")
public ApiResult<List<ImConversationMemberListVo>> getImConversationMembersList(@Validated @RequestBody ImConversationMembersListParam imConversationMembersListParam) throws Exception {
// Paging<ImConversationMembersQueryVo> paging = imConversationMembersService.getImConversationMembersPageList(imConversationMembersPageParam);
......@@ -66,60 +65,5 @@ public class ImConversationMembersController extends BaseController {
return ApiResult.ok(imConversationMembersService.getImConversationMembersList(imConversationMembersListParam));
}
// /**
// * 添加会话成员表
// */
// @PostMapping("/add")
// @OperationLog(name = "添加会话成员表", type = OperationLogType.ADD)
// @ApiOperation(value = "添加会话成员表")
// public ApiResult<Boolean> addImConversationMembers(@Validated(Add.class) @RequestBody ImConversationMembers imConversationMembers) throws Exception {
// boolean flag = imConversationMembersService.saveImConversationMembers(imConversationMembers);
// return ApiResult.result(flag);
// }
//
// /**
// * 修改会话成员表
// */
// @PostMapping("/update")
// @OperationLog(name = "修改会话成员表", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改会话成员表")
// public ApiResult<Boolean> updateImConversationMembers(@Validated(Update.class) @RequestBody ImConversationMembers imConversationMembers) throws Exception {
// boolean flag = imConversationMembersService.updateImConversationMembers(imConversationMembers);
// return ApiResult.result(flag);
// }
//
// /**
// * 删除会话成员表
// */
// @PostMapping("/delete/{id}")
// @OperationLog(name = "删除会话成员表", type = OperationLogType.DELETE)
// @ApiOperation(value = "删除会话成员表")
// public ApiResult<Boolean> deleteImConversationMembers(@PathVariable("id") Long id) throws Exception {
// boolean flag = imConversationMembersService.deleteImConversationMembers(id);
// return ApiResult.result(flag);
// }
//
// /**
// * 获取会话成员表详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "会话成员表详情", type = OperationLogType.INFO)
// @ApiOperation(value = "会话成员表详情")
// public ApiResult<ImConversationMembersQueryVo> getImConversationMembers(@PathVariable("id") Long id) throws Exception {
// ImConversationMembersQueryVo imConversationMembersQueryVo = imConversationMembersService.getImConversationMembersById(id);
// return ApiResult.ok(imConversationMembersQueryVo);
// }
//
// /**
// * 会话成员表分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "会话成员表分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "会话成员表分页列表")
// public ApiResult<Paging<ImConversationMembersQueryVo>> getImConversationMembersPageList(@Validated @RequestBody ImConversationMembersPageParam imConversationMembersPageParam) throws Exception {
// Paging<ImConversationMembersQueryVo> paging = imConversationMembersService.getImConversationMembersPageList(imConversationMembersPageParam);
// return ApiResult.ok(paging);
// }
}
package com.wecloud.im.controller;
import com.wecloud.im.param.MsgReadStatusUpdateParam;
import com.wecloud.im.param.ImMsgReceivedStatusUpdate;
import com.wecloud.im.param.MsgReadStatusUpdateParam;
import com.wecloud.im.service.ImInboxService;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -45,6 +47,9 @@ public class ImInboxController extends BaseController {
@PostMapping("/msgReadUpdate")
@ApiOperation(value = "消息修改为已读状态")
public ApiResult<Boolean> updateInMsgReadUpdate(@RequestBody MsgReadStatusUpdateParam msgReadStatusUpdateParam) throws Exception {
if (CollectionUtils.isEmpty(msgReadStatusUpdateParam.getMsgIds())) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION);
}
return imInboxService.updateImMsgRead(msgReadStatusUpdateParam);
}
......@@ -54,64 +59,11 @@ public class ImInboxController extends BaseController {
@PostMapping("/updateMsgReadStatusByConversation")
@ApiOperation(value = "整个会话消息修改为已读状态")
public ApiResult<Boolean> updateMsgReadStatusByConversation(@RequestBody MsgReadStatusUpdateParam msgReadStatusUpdateParam) throws Exception {
if (msgReadStatusUpdateParam.getConversationId() == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION);
}
return ApiResult.ok(imInboxService.updateMsgReadStatusByConversation(msgReadStatusUpdateParam));
}
//
// /**
// * 添加消息收件箱表
// */
// @PostMapping("/add")
// @OperationLog(name = "添加消息收件箱表", type = OperationLogType.ADD)
// @ApiOperation(value = "添加消息收件箱表")
// public ApiResult<Boolean> addImInbox(@Validated(Add.class) @RequestBody ImInbox imInbox) throws Exception {
// boolean flag = imInboxService.saveImInbox(imInbox);
// return ApiResult.result(flag);
// }
//
// /**
// * 修改消息收件箱表
// */
// @PostMapping("/update")
// @OperationLog(name = "修改消息收件箱表", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改消息收件箱表")
// public ApiResult<Boolean> updateImInbox(@Validated(Update.class) @RequestBody ImInbox imInbox) throws Exception {
// boolean flag = imInboxService.updateImInbox(imInbox);
// return ApiResult.result(flag);
// }
//
// /**
// * 删除消息收件箱表
// */
// @PostMapping("/delete/{id}")
// @OperationLog(name = "删除消息收件箱表", type = OperationLogType.DELETE)
// @ApiOperation(value = "删除消息收件箱表")
// public ApiResult<Boolean> deleteImInbox(@PathVariable("id") Long id) throws Exception {
// boolean flag = imInboxService.deleteImInbox(id);
// return ApiResult.result(flag);
// }
//
// /**
// * 获取消息收件箱表详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "消息收件箱表详情", type = OperationLogType.INFO)
// @ApiOperation(value = "消息收件箱表详情")
// public ApiResult<ImInboxQueryVo> getImInbox(@PathVariable("id") Long id) throws Exception {
// ImInboxQueryVo imInboxQueryVo = imInboxService.getImInboxById(id);
// return ApiResult.ok(imInboxQueryVo);
// }
//
// /**
// * 消息收件箱表分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "消息收件箱表分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "消息收件箱表分页列表")
// public ApiResult<Paging<ImInboxQueryVo>> getImInboxPageList(@Validated @RequestBody ImInboxPageParam imInboxPageParam) throws Exception {
// Paging<ImInboxQueryVo> paging = imInboxService.getImInboxPageList(imInboxPageParam);
// return ApiResult.ok(paging);
// }
}
......@@ -62,4 +62,11 @@ public class ImConversation extends BaseEntity {
@ApiModelProperty("可选 对话类型标志,是否是系统对话,后面会说明。")
private Boolean systemFlag;
/**
* 禁言开关
* @see com.wecloud.im.enums.MutedEnum
*/
@ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer muted;
}
......@@ -58,7 +58,18 @@ public class ImConversationMembers extends BaseEntity {
@ApiModelProperty("会话中client的备注名")
private String clientRemarkName;
@ApiModelProperty("角色")
/**
* 群内角色
* @see com.wecloud.im.enums.GroupRoleEnum
*/
@ApiModelProperty("群内角色")
private Integer role;
/**
* 禁言开关
* @see com.wecloud.im.enums.MutedEnum
*/
@ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer muted;
}
package com.wecloud.im.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/2/17 11:52
* @Description 禁言选型枚举枚举
*/
public enum MutedEnum implements BaseEnum {
/**
* 1-未禁言
*/
NO(1, "未禁言"),
/**
* 2 - 禁言
*/
YES(2, "禁言");
MutedEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ImConversationMembersListParam;
import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo;
import com.wecloud.im.param.SetAdminsParam;
......@@ -35,7 +36,12 @@ public interface ImConversationMembersMapper extends BaseMapper<ImConversationMe
List<ApiImConversationMembersQueryVo> getRestApiImConversationMembersList(@Param("conversationId") Long conversationId);
List<ImConversationMemberListVo> getImConversationMembersList(@Param("conversationId") Long conversationId);
/**
* 获取群成员列表
* @param param 入参
* @return
*/
List<ImConversationMemberListVo> getImConversationMembersList(@Param("param")ImConversationMembersListParam param);
/**
......@@ -51,8 +57,8 @@ public interface ImConversationMembersMapper extends BaseMapper<ImConversationMe
/**
* 批量设置群成员
* @param param
* @return
* @param conversationId
* @param fkClientIds
*/
void setAdminsForConversation(@Param("param") SetAdminsParam param);
void setAdminsForConversation(@Param("conversationId") Long conversationId, @Param("fkClientIds") List<Long> fkClientIds, @Param("role") Integer role);
}
......@@ -6,6 +6,7 @@ import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
* <pre>
......@@ -23,4 +24,7 @@ public class ImConversationMembersListParam implements Serializable {
@ApiModelProperty(value = "会话表id", required = true)
private Long conversationId;
@ApiModelProperty(value = "角色列表 可多选,不传则查全部", required = true)
private List<Integer> roles;
}
package com.wecloud.im.param;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @Author wenzhida
* @Date 2022/2/17 15:58
* @Description 群禁言入参
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "群禁言入参")
public class MutedGroupParam extends BaseEntity {
private static final long serialVersionUID = -6974569111928946842L;
@NotNull
@ApiModelProperty("会话id")
private Long conversationId;
@ApiModelProperty("禁言指定群成员列表 - 群禁言无需入参")
private List<String> clientIds;
@NotNull
@ApiModelProperty("禁言类型 1-禁言 2-取消禁言")
private Integer mutedType;
}
......@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
......@@ -26,4 +27,8 @@ public class SetAdminsParam extends BaseEntity {
@ApiModelProperty("要设置为群管理员的clientId列表")
private List<String> clientIds;
@NotNull(message = "操作类型")
@ApiModelProperty("操作类型 1-设置管理员 2-删除管理员")
private Integer operateType;
}
......@@ -42,11 +42,11 @@ public interface ImConversationMembersService extends BaseService<ImConversation
/**
* 会话成员表分页列表
*
* @param imConversationMembersListParam
* @param param
* @return
* @throws Exception
*/
List<ImConversationMemberListVo> getImConversationMembersList(ImConversationMembersListParam imConversationMembersListParam) throws Exception;
List<ImConversationMemberListVo> getImConversationMembersList(ImConversationMembersListParam param);
ApiResult<Boolean> saveOrUpdateAttr(ImConversationMemAttrUpdate imConversationMemAttrUpdate);
......@@ -106,8 +106,8 @@ public interface ImConversationMembersService extends BaseService<ImConversation
/**
* 批量设置群成员
* @param param
* @return
* @param fkClientIds
*/
void setAdminsForConversation(SetAdminsParam param);
void setAdminsForConversation(SetAdminsParam param, List<Long> fkClientIds);
}
......@@ -5,6 +5,7 @@ import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.param.ImConversationPageParam;
import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
......@@ -79,13 +80,20 @@ public interface ImConversationService extends BaseService<ImConversation> {
Boolean transferOwner(@RequestBody TransferOwnerParam param);
/**
* 群主转让
* 设置管理员
* @param param
* @return
*/
Boolean setAdmins(@RequestBody SetAdminsParam param);
/**
* 群禁言
* @param param
* @return
*/
Boolean mutedGroup(@RequestBody MutedGroupParam param);
/**
* 添加或修改会话名称
*/
ApiResult<Boolean> saveOrUpdateName(ImConversationNameUpdate imConversationNameUpdate) throws Exception;
......
......@@ -129,10 +129,8 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
}
@Override
public List<ImConversationMemberListVo> getImConversationMembersList(ImConversationMembersListParam imConversationMembersListParam) throws Exception {
return imConversationMembersMapper.getImConversationMembersList(imConversationMembersListParam.getConversationId());
public List<ImConversationMemberListVo> getImConversationMembersList(ImConversationMembersListParam param) {
return imConversationMembersMapper.getImConversationMembersList(param);
}
@Override
......@@ -223,11 +221,12 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
/**
* 批量设置群成员
* @param param
* @return
* @param fkClientIds
*/
@Override
public void setAdminsForConversation(SetAdminsParam param) {
imConversationMembersMapper.setAdminsForConversation(param);
public void setAdminsForConversation(SetAdminsParam param, List<Long> fkClientIds) {
Integer role = param.getOperateType() == 1 ? 2 : 1;
imConversationMembersMapper.setAdminsForConversation(param.getConversationId(), fkClientIds, role);
}
}
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImConversation;
......@@ -14,9 +15,12 @@ import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.enums.ChatTypeEnum;
import com.wecloud.im.enums.GroupRoleEnum;
import com.wecloud.im.mapper.ImConversationMapper;
import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.param.ImConversationMembersListParam;
import com.wecloud.im.param.ImConversationPageParam;
import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
......@@ -32,6 +36,7 @@ import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.vo.ImConversationMemberListVo;
import com.wecloud.im.vo.OfflineMsgDto;
import com.wecloud.im.ws.enums.MsgTypeEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum;
......@@ -62,6 +67,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 会话表 服务实现类
......@@ -634,30 +640,62 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
/**
* 群主转让
* 设置管理员
* @param param
* @return
*/
@Override
public Boolean setAdmins(SetAdminsParam param) {
// shiro线程中获取当前token
JwtToken curentJwtToken = JwtUtil.getCurentJwtToken();
// 根据appKey查询application
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey());
ImClient imClientSender = imClientService.getCurentClient();
ImClient currentClient = imClientService.getCurentClient();
// 判断操作人是否为群主
ImConversationMembers currentMember = imConversationMembersService.getOne(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, param.getConversationId())
.eq(ImConversationMembers::getFkClientId, imClientSender.getId())
.eq(ImConversationMembers::getFkClientId, currentClient.getId())
);
if (currentMember == null || !GroupRoleEnum.OWNER.getCode().equals(currentMember.getRole())) {
throw new BusinessException("非群主无权操作");
}
imConversationMembersService.setAdminsForConversation(param);
List<ImClientSimpleDto> simpleClients = imClientService.getSimpleClients(currentClient.getFkAppid(), param.getClientIds());
if (CollectionUtils.isEmpty(simpleClients)) {
throw new BusinessException("未查询得到真实管理员信息");
}
List<Long> fkClientIds = simpleClients.stream()
.filter(s -> !currentMember.getId().equals(s.getId()))
.map(s -> s.getId()).collect(Collectors.toList());
imConversationMembersService.setAdminsForConversation(param, fkClientIds);
return true;
}
/**
* 群禁言
* @param param
* @return
*/
@Override
public Boolean mutedGroup(MutedGroupParam param) {
ImClient currentClient = imClientService.getCurentClient();
// 获取 群主和群成员列表
ImConversationMembersListParam getAdminsParam = new ImConversationMembersListParam();
getAdminsParam.setConversationId(param.getConversationId());
getAdminsParam.setRoles(Lists.newArrayList(GroupRoleEnum.OWNER.getCode(), GroupRoleEnum.ADMIN.getCode()));
List<ImConversationMemberListVo> adminMembers = imConversationMembersService.getImConversationMembersList(getAdminsParam);
if (CollectionUtils.isEmpty(adminMembers)) {
throw new BusinessException("该群未查找到管理员信息");
}
// 判断操作人是否为群主或管理员
List<ImConversationMemberListVo> admins = adminMembers.stream().filter(a -> currentClient.getClientId().equals(a.getClientId())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(admins)) {
throw new BusinessException("操作人既不是群主也不是群管理员,无权限操作");
}
ImConversation muteGroupParam = new ImConversation();
muteGroupParam.setId(param.getConversationId());
muteGroupParam.setMuted(param.getMutedType());
imConversationMapper.updateById(muteGroupParam);
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> saveOrUpdateName(ImConversationNameUpdate imConversationNameUpdate) throws Exception {
......
......@@ -24,4 +24,11 @@ public class ImConversationMemberListVo implements Serializable {
private String clientAttributes;
@ApiModelProperty("会话成员列表的自定义扩展属性")
private String memberAttributes;
/**
* 群内角色
* @see com.wecloud.im.enums.GroupRoleEnum
*/
@ApiModelProperty("群内角色")
private Integer role;
}
......@@ -49,7 +49,7 @@
</select>
<select id="getSimpleClients" resultType="com.wecloud.im.param.ImClientSimpleDto">
select id, fk_appid, client_id from im_client where fk_appi = #{appId} and client_id in
select id, fk_appid, client_id from im_client where fk_appid = #{appId} and client_id in
<foreach collection="clientIds" item="clientId" index="index" open="(" close=")" separator=",">
#{clientId}
</foreach>
......
......@@ -36,10 +36,17 @@
im_client.head_portrait as headPortrait,
im_client.nickname,
im_conversation_members.attributes AS memberAttributes,
im_conversation_members.role AS role,
im_client.attributes AS clientAttributes
FROM im_conversation_members AS im_conversation_members
INNER JOIN im_client AS im_client ON im_client.id = im_conversation_members.fk_client_id
WHERE im_conversation_members.fk_conversation_id = #{conversationId}
WHERE im_conversation_members.fk_conversation_id = #{param.conversationId}
<if test="param.roles != null and param.roles.size() > 0">
and im_conversation_members.role in
<foreach collection="param.roles" item="role" index="index" open="(" close=")" separator=",">
#{role}
</foreach>
</if>
</select>
......@@ -50,10 +57,10 @@
</select>
<update id="setAdminsForConversation">
update im_conversation_members set role = 2, update_time=NOW()
update im_conversation_members set role = #{role}, update_time=NOW()
where fk_conversation_id = #{conversationId} and fk_client_id in
<foreach collection="clientIds" item="clientId" index="index" open="(" close=")" separator=",">
#{clientId}
<foreach collection="fkClientIds" item="fkClientId" index="index" open="(" close=")" separator=",">
#{fkClientId}
</foreach>
</update>
......
......@@ -49,6 +49,7 @@
AND im_inbox.receiver = #{clientId}
AND im_inbox.receiver_msg_status = 0
AND im_message.is_delete = 1
AND im_message.withdraw = 0
</select>
<select id="getHistoryMsgConversationId" resultType="com.wecloud.im.vo.OfflineMsgDto">
SELECT im_message.id AS msgId,
......@@ -70,7 +71,7 @@
AND receiver_msg_status = 0) AS not_receiver_count
FROM `im_message`
INNER JOIN `im_client` ON `im_client`.id = `im_message`.sender
WHERE fk_conversation_id = #{param.conversationId} and im_message.is_delete = 1
WHERE fk_conversation_id = #{param.conversationId} and im_message.is_delete = 1 and im_message.withdraw = 0
<if test="param.msgIdStart != null">
AND im_message.id > #{param.msgIdStart}
</if>
......
-- 在feature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
-- 在feature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
......@@ -64,6 +64,12 @@ CREATE TABLE `im_friend_recommend`
ALTER TABLE `im_message`
ADD COLUMN`msg_type` int(2) NULL DEFAULT NULL COMMENT '消息类型' AFTER`send_status`;
-- by wenzhida 消息删除、群管理、群禁言管理
ALTER TABLE im_message ADD COLUMN is_delete tinyint NOT NULL DEFAULT '1' COMMENT '是否删除 1-未删除 2-删除';
ALTER TABLE im_conversation_members ADD COLUMN role tinyint NOT NULL DEFAULT '1' COMMENT '角色 1-普通群成员 2-管理员 3-群主';
ALTER TABLE im_conversation ADD COLUMN muted tinyint NOT NULL DEFAULT '1' COMMENT '禁言开关 1-未禁言 2-禁言';
ALTER TABLE im_conversation_members ADD COLUMN muted tinyint NOT NULL DEFAULT '1' COMMENT '禁言开关 1-未禁言 2-禁言';
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment