Commit c579f9c6 by Future

群管理相关接口添加

parent b4ad4ff1
package com.wecloud.im.controller;
import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientToConversation;
import com.wecloud.im.param.add.ImConversationAttrUpdate;
......@@ -8,13 +10,15 @@ import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo;
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.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -98,6 +102,30 @@ public class ImConversationController extends BaseController {
}
/**
* 群主转让
*/
@PostMapping("/transferOwner")
@ApiOperation(value = "群主转让", notes = "权限:目前只有群主有权限操作")
public ApiResult<Boolean> transferOwner(@RequestBody TransferOwnerParam param) {
Boolean result = imConversationService.transferOwner(param);
return ApiResult.ok(result);
}
/**
* 设置群管理员
*/
@PostMapping("/setAdmins")
@ApiOperation(value = "设置群管理员", notes = "权限:目前只有群主有权限操作")
public ApiResult<Boolean> setAdmins(@RequestBody SetAdminsParam param) {
if (CollectionUtils.isEmpty(param.getClientIds())) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
Boolean result = imConversationService.setAdmins(param);
return ApiResult.ok(result);
}
/**
* 查询用户加入的所有会话 与每个会话的未读条数 成员
*/
@PostMapping("/getList")
......@@ -128,60 +156,5 @@ public class ImConversationController extends BaseController {
return ApiResult.result(true);
}
// /**
// * 添加会话表
// */
// @PostMapping("/add")
// @OperationLog(name = "添加会话表", type = OperationLogType.ADD)
// @ApiOperation(value = "添加会话表")
// public ApiResult<Boolean> addImConversation(@Validated(Add.class) @RequestBody ImConversation imConversation) throws Exception {
// boolean flag = imConversationService.saveImConversation(imConversation);
// return ApiResult.result(flag);
// }
// /**
// * 修改会话表
// */
// @PostMapping("/update")
// @OperationLog(name = "修改会话表", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改会话表")
// public ApiResult<Boolean> updateImConversation(@Validated(Update.class) @RequestBody ImConversation imConversation) throws Exception {
// boolean flag = imConversationService.updateImConversation(imConversation);
// return ApiResult.result(flag);
// }
//
// /**
// * 删除会话表
// */
// @PostMapping("/delete/{id}")
// @OperationLog(name = "删除会话表", type = OperationLogType.DELETE)
// @ApiOperation(value = "删除会话表")
// public ApiResult<Boolean> deleteImConversation(@PathVariable("id") Long id) throws Exception {
// boolean flag = imConversationService.deleteImConversation(id);
// return ApiResult.result(flag);
// }
//
// /**
// * 获取会话表详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "会话表详情", type = OperationLogType.INFO)
// @ApiOperation(value = "会话表详情")
// public ApiResult<ImConversationQueryVo> getImConversation(@PathVariable("id") Long id) throws Exception {
// ImConversationQueryVo imConversationQueryVo = imConversationService.getImConversationById(id);
// return ApiResult.ok(imConversationQueryVo);
// }
//
// /**
// * 会话表分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "会话表分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "会话表分页列表")
// public ApiResult<Paging<ImConversationQueryVo>> getImConversationPageList(@Validated @RequestBody ImConversationPageParam imConversationPageParam) throws Exception {
// Paging<ImConversationQueryVo> paging = imConversationService.getImConversationPageList(imConversationPageParam);
// return ApiResult.ok(paging);
// }
}
......@@ -48,8 +48,8 @@ public class ImMessageController extends BaseController {
*/
@PostMapping("/withdraw")
@ApiOperation(value = "消息撤回", notes = "只能撤回客户端自己发送的消息")
public ApiResult<Boolean> updateMsgWithdrawById(@RequestBody ImMsgRecall imMsgRecall) throws Exception {
return imMessageService.updateMsgWithdrawById(imMsgRecall);
public ApiResult<Boolean> withdrawMsg(@RequestBody ImMsgRecall imMsgRecall) throws Exception {
return imMessageService.withdrawMsg(imMsgRecall);
}
/**
......
......@@ -57,4 +57,8 @@ public class ImConversationMembers extends BaseEntity {
@ApiModelProperty("会话中client的备注名")
private String clientRemarkName;
@ApiModelProperty("角色")
private Integer role;
}
package com.wecloud.im.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/2/16 15:27
* @Description 人员在群内角色枚举
*/
public enum GroupRoleEnum implements BaseEnum {
/**
* 1-普通群成员
*/
NORMAL(1, "普通群成员"),
/**
* 2 - 管理员
*/
ADMIN(2, "管理员"),
/**
* 3 - 群主
*/
OWNER(3, "群主");
GroupRoleEnum(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;
}
}
......@@ -7,6 +7,7 @@ import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.vo.ImConversationMemberListVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
......@@ -47,4 +48,11 @@ public interface ImConversationMembersMapper extends BaseMapper<ImConversationMe
IPage<ImConversationMembersQueryVo> getImConversationMembersPageList(@Param("page") Page page, @Param("param") ImConversationMembersPageParam imConversationMembersPageParam);
List<Long> findThousandGroupsByClientId(@Param("clientId") Long clientId);
/**
* 批量设置群成员
* @param param
* @return
*/
void setAdminsForConversation(@Param("param") SetAdminsParam param);
}
......@@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
/**
* @Author wenzhida
* @Date 2022/2/15 20:45
......@@ -18,9 +20,11 @@ public class GetReadersParam extends BaseEntity {
private static final long serialVersionUID = -2415497107453497807L;
@NotNull(message = "会话id不能为空")
@ApiModelProperty("会话id")
private Long conversationId;
@NotNull(message = "消息id不能为空")
@ApiModelProperty("消息id")
private Long msgId;
......
package com.wecloud.im.param;
import com.wecloud.im.ws.model.request.PushVO;
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 lombok.experimental.Accessors;
import java.util.List;
......@@ -25,7 +23,4 @@ public class MsgDeleteParam extends BaseEntity {
@ApiModelProperty("消息id列表")
private List<Long> msgIds;
@ApiModelProperty("自定义推送字段")
private PushVO push;
}
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 java.util.List;
/**
* @Author wenzhida
* @Date 2022/2/16 17:32
* @Description 设置群管理员入参
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "设置群管理员入参")
public class SetAdminsParam extends BaseEntity {
private static final long serialVersionUID = -5998535761252546365L;
@ApiModelProperty("会话表id")
private Long conversationId;
@ApiModelProperty("要设置为群管理员的clientId列表")
private List<String> clientIds;
}
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 lombok.experimental.Accessors;
import java.util.List;
/**
* @Author wenzhida
* @Date 2022/2/16 17:32
* @Description 群主转让入参
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "群主转让入参")
public class TransferOwnerParam extends BaseEntity {
private static final long serialVersionUID = -1002684137058458479L;
@ApiModelProperty("会话表id")
private Long conversationId;
@ApiModelProperty("即将成为群主的clientId")
private String clientId;
}
......@@ -8,6 +8,7 @@ import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ImConversationMembersListParam;
import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.vo.ImConversationMemberListVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
......@@ -101,4 +102,12 @@ public interface ImConversationMembersService extends BaseService<ImConversation
* @return
*/
List<Long> findThousandGroupsByClientId(Long clientId);
/**
* 批量设置群成员
* @param param
* @return
*/
void setAdminsForConversation(SetAdminsParam param);
}
......@@ -5,6 +5,8 @@ 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.SetAdminsParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientToConversation;
import com.wecloud.im.param.add.ImConversationAttrUpdate;
......@@ -16,6 +18,7 @@ import com.wecloud.im.vo.ConversationVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
......@@ -69,6 +72,20 @@ public interface ImConversationService extends BaseService<ImConversation> {
ApiResult<Boolean> leaveConversation(ImClientLeaveConversation imClientToConversation) throws Exception;
/**
* 群主转让
* @param param
* @return
*/
Boolean transferOwner(@RequestBody TransferOwnerParam param);
/**
* 群主转让
* @param param
* @return
*/
Boolean setAdmins(@RequestBody SetAdminsParam param);
/**
* 添加或修改会话名称
*/
ApiResult<Boolean> saveOrUpdateName(ImConversationNameUpdate imConversationNameUpdate) throws Exception;
......
......@@ -52,7 +52,7 @@ public interface ImMessageService extends BaseService<ImMessage> {
*
* @return
*/
ApiResult<Boolean> updateMsgWithdrawById(ImMsgRecall imMsgRecall);
ApiResult<Boolean> withdrawMsg(ImMsgRecall imMsgRecall);
/**
* 删除消息
......
......@@ -15,6 +15,7 @@ import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ImConversationMembersListParam;
import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
......@@ -219,4 +220,14 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
return imConversationMembersMapper.findThousandGroupsByClientId(clientId);
}
/**
* 批量设置群成员
* @param param
* @return
*/
@Override
public void setAdminsForConversation(SetAdminsParam param) {
imConversationMembersMapper.setAdminsForConversation(param);
}
}
......@@ -12,10 +12,13 @@ import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImMessage;
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.ImConversationPageParam;
import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientToConversation;
import com.wecloud.im.param.add.ImConversationAttrUpdate;
......@@ -27,8 +30,8 @@ import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.vo.OfflineMsgDto;
import com.wecloud.im.ws.enums.MsgTypeEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum;
......@@ -39,6 +42,7 @@ import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
......@@ -100,27 +104,23 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<ImConversationCreateVo> createImConversation(ImConversationCreate imConversationCreate) {
ImClient createClient = imClientService.getCurentClient();
if (imConversationCreate.getClientIds().size() == 0) {
log.info("没有成员");
return ApiResult.result(ApiCode.CLIENT_NOT_FOUNT, null);
if (CollectionUtils.isEmpty(imConversationCreate.getClientIds())) {
log.info("未找到群成员信息");
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
if (BaseEnum.valueOf(ChatTypeEnum.class, imConversationCreate.getChatType()) == null) {
log.info("会话类型不存在");
return ApiResult.result(ApiCode.PARAMETER_EXCEPTION, null);
}
// 成员不存在,不能创建会话
for (String id : imConversationCreate.getClientIds()) {
for (String clientId : imConversationCreate.getClientIds()) {
ImClient imClient = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.select(ImClient::getId)
.eq(ImClient::getFkAppid, createClient.getFkAppid())
.eq(ImClient::getClientId, id));
.eq(ImClient::getClientId, clientId));
if (imClient == null) {
log.info("成员不存在,不能创建会话 client2 == null");
log.info("成员不存在,不能创建会话 clientId:{}", clientId);
return ApiResult.result(ApiCode.CLIENT_NOT_FOUNT, null);
}
}
......@@ -150,7 +150,6 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
}
} else {
//创建重复一对一会话时对比扩展字段 1是
if (imApplication.getContrastExtendedFieldStatus() == 1) {
......@@ -207,6 +206,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMembers.setFkAppid(createClient.getFkAppid());
imConversationMembers.setFkConversationId(imConversationId);
imConversationMembers.setFkClientId(creator);
imConversationMembers.setRole(GroupRoleEnum.OWNER.getCode());
imConversationMembersService.save(imConversationMembers);
// 将他人添加到会话
......@@ -221,6 +221,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMembers2.setFkAppid(createClient.getFkAppid());
imConversationMembers2.setFkConversationId(imConversationId);
imConversationMembers2.setFkClientId(client2.getId());
imConversationMembers2.setRole(GroupRoleEnum.NORMAL.getCode());
imConversationMembersService.save(imConversationMembers2);
}
......@@ -283,6 +284,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMembers2.setFkAppid(imApplication.getId());
imConversationMembers2.setFkConversationId(imClientToConversation.getConversationId());
imConversationMembers2.setFkClientId(clientToConversation.getId());
imConversationMembers2.setRole(GroupRoleEnum.NORMAL.getCode());
imConversationMembersService.save(imConversationMembers2);
needAddCount++;
......@@ -375,16 +377,18 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImClient imClientSender = imClientService.getCurentClient();
// 判断是否为群主
ImConversation imConversationById = imConversationService.getById(imClientToConversation.getConversationId());
if (imConversationById == null || !imConversationById.getCreator().equals(imClientSender.getId())) {
ImConversationMembers conversationMember = imConversationMembersService.getOne(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, imClientToConversation.getConversationId())
.eq(ImConversationMembers::getFkClientId, imClientSender.getId())
);
if (conversationMember == null || !GroupRoleEnum.OWNER.getCode().equals(conversationMember.getRole())) {
return ApiResult.result(false);
}
// 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkAppid, imApplication.getId())
.eq(ImConversationMembers::getFkConversationId, imClientToConversation.getConversationId())
.notIn(ImConversationMembers::getId, imClientSender.getId())
);
......@@ -396,11 +400,10 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
int needAddCount = 0;
// 将client从会话移除
for (String id : imClientToConversation.getClientIds()) {
for (String clientId : imClientToConversation.getClientIds()) {
ImClient client2 = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, imApplication.getId())
.eq(ImClient::getClientId, id));
.eq(ImClient::getClientId, clientId));
// 判断用户是否已经在该会话
ImConversationMembers members = imConversationMembersService.getOne(new QueryWrapper<ImConversationMembers>().lambda()
......@@ -493,7 +496,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImConversation imConversationById = imConversationService.getById(imClientToConversation.getConversationId());
if (imConversationById == null) {
throw new Exception("imConversationById == null");
throw new BusinessException("查无应用消息");
}
// 查询该会话所有成员
......@@ -506,7 +509,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
if (membersList.isEmpty()) {
log.info("membersList为空,toConversationId:" + imClientToConversation.getConversationId());
throw new Exception("deleteImConversationMembers");
throw new BusinessException("会话中查无群人员");
}
// 判断用户是否在该会话
......@@ -580,20 +583,79 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
channelSender.sendMsg(responseModel, imClientReceiver.getId());
}
// 群主退出 是否需要转移给下一个人
if (imConversationById.getCreator().equals(imClientSender.getId()) && imClientToConversation.getTransfer()) {
// 群主退出 转移给下一个人
if (GroupRoleEnum.OWNER.getCode().equals(members.getRole())) {
ImConversationMembers conversationMember = membersList.get(0);
imConversationById.setCreator(conversationMember.getFkClientId());
conversationMember.setRole(GroupRoleEnum.OWNER.getCode());
// 群主转移给下一个人
imConversationMembersService.updateById(conversationMember);
}
return ApiResult.ok();
}
// 创建者权限转移给下一个人
imConversationService.updateById(imConversationById);
}
/**
* 群主转让
*
* @param param
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean transferOwner(TransferOwnerParam param) {
// shiro线程中获取当前token
JwtToken curentJwtToken = JwtUtil.getCurentJwtToken();
// 根据appKey查询application
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey());
ImClient imClientSender = imClientService.getCurentClient();
// 判断操作人是否为群主
ImConversationMembers currentMember = imConversationMembersService.getOne(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, param.getConversationId())
.eq(ImConversationMembers::getFkClientId, imClientSender.getId())
);
if (currentMember == null || !GroupRoleEnum.OWNER.getCode().equals(currentMember.getRole())) {
throw new BusinessException("非群主无权操作");
}
// 将自己设置为普通群成员
currentMember.setRole(GroupRoleEnum.NORMAL.getCode());
imConversationMembersService.updateById(currentMember);
// 将入参成员设置为群主
ImClient transferClient = imClientService.getCacheImClient(imApplication.getId(), param.getClientId());
ImConversationMembers transferMember = imConversationMembersService.getOne(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, param.getConversationId())
.eq(ImConversationMembers::getFkClientId, transferClient.getId())
);
transferMember.setRole(GroupRoleEnum.OWNER.getCode());
imConversationMembersService.updateById(transferMember);
return true;
}
return ApiResult.ok();
/**
* 群主转让
* @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();
// 判断操作人是否为群主
ImConversationMembers currentMember = imConversationMembersService.getOne(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, param.getConversationId())
.eq(ImConversationMembers::getFkClientId, imClientSender.getId())
);
if (currentMember == null || !GroupRoleEnum.OWNER.getCode().equals(currentMember.getRole())) {
throw new BusinessException("非群主无权操作");
}
imConversationMembersService.setAdminsForConversation(param);
return true;
}
@Override
......
......@@ -5,6 +5,7 @@ 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.google.common.collect.Maps;
import com.wecloud.im.entity.ImApiMessageOnlineSend;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
......@@ -56,7 +57,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 消息存储表 服务实现类
......@@ -197,7 +200,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> updateMsgWithdrawById(ImMsgRecall imMsgRecall) {
public ApiResult<Boolean> withdrawMsg(ImMsgRecall imMsgRecall) {
ImClient currentClient = imClientService.getCurentClient();
// 查询imApplication
ImApplication imApplication = imApplicationService.getCacheById(currentClient.getFkAppid());
......@@ -214,13 +217,16 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
if (messageById.getWithdraw()) {
return ApiResult.ok();
}
// 修改消息体
messageById.setWithdraw(Boolean.TRUE);
messageById.setWithdrawTime(new Date());
// 清空消息
messageById.setContent("{}");
boolean saveOk = this.updateById(messageById);
ImClient msgOwner = imClientService.getCacheImClient(messageById.getSender());
if (msgOwner == null) {
return ApiResult.fail("未查找到消息发送者");
}
if (saveOk) {
// 查询该会话所有成员
......@@ -262,7 +268,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessageOnlineSend.setType(MsgTypeEnum.MSG_WITHDRAW.getUriCode());
imMessageOnlineSend.setMsgId(messageById.getId());
imMessageOnlineSend.setSender(currentClient.getClientId());
imMessageOnlineSend.setContent(null);
Map<String, Object> contentMap = Maps.newHashMap();
contentMap.put("msgOwner", msgOwner.getClientId());
imMessageOnlineSend.setContent(contentMap);
imMessageOnlineSend.setConversationId(conversationMembers.getFkConversationId());
imMessageOnlineSend.setWithdraw(Boolean.TRUE);
imMessageOnlineSend.setEvent(Boolean.TRUE);
......@@ -317,6 +325,11 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
message.setIsDelete(2);
message.setUpdateDate(new Date());
boolean saveOk = this.updateById(message);
ImClient msgOwner = imClientService.getCacheImClient(message.getSender());
if (msgOwner == null) {
return ApiResult.fail("未查找到消息发送者");
}
if (saveOk) {
// 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list(
......@@ -356,7 +369,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessageOnlineSend.setType(MsgTypeEnum.MSG_DELETE.getUriCode());
imMessageOnlineSend.setMsgId(message.getId());
imMessageOnlineSend.setSender(currentClient.getClientId());
imMessageOnlineSend.setContent(null);
Map<String, Object> contentMap = Maps.newHashMap();
contentMap.put("msgOwner", msgOwner.getClientId());
imMessageOnlineSend.setContent(contentMap);
imMessageOnlineSend.setConversationId(conversationMembers.getFkConversationId());
imMessageOnlineSend.setEvent(Boolean.TRUE);
......@@ -369,12 +384,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
channelSender.sendMsg(responseModel, imClientReceiver.getId());
// 获取自定义推送字段
PushVO pushVO = param.getPush();
// 异步推送系统通知消息
asyncPush.push(pushVO, imClientReceiver, imApplication);
}
return ApiResult.ok();
} else {
......
......@@ -49,4 +49,12 @@
where b.fk_client_id = #{clientId} and a.chat_type = 3
</select>
<update id="setAdminsForConversation">
update im_conversation_members set role = 2, 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>
</update>
</mapper>
-- 在feature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
-- 在feature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
......@@ -65,3 +65,5 @@ ALTER TABLE `im_message`
ADD COLUMN`msg_type` int(2) NULL DEFAULT NULL COMMENT '消息类型' AFTER`send_status`;
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-群主';
\ No newline at end of file
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