Commit 01e55a5d by Future

非sdk

parent c4195da7
package com.wecloud.im.action;
import com.alibaba.fastjson.JSON;
import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgUpdate;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.vo.OfflineMsgDto;
import com.wecloud.im.vo.ReaderList;
import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.netty.channel.socket.nio.NioSocketChannel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author wenzhida
* @Date 2022/2/23 17:14
* @Description 长连接方式处理消息
*/
@Slf4j
@Component
@ActionMapping(value = "/imMessage")
public class MessageAction {
@Autowired
private ImMessageService imMessageService;
@Autowired
private ChannelSender channelSender;
/**
* 消息撤回
* @param request
* @param msgRecall
* @param reqId
*/
@ActionMapping("/withdraw")
public void withdraw(ActionRequest request, ImMsgRecall msgRecall, String reqId) {
log.info("撤回消息内容:{}", JSON.toJSONString(msgRecall));
WsResponse<Boolean> wsResponse = new WsResponse<>();
wsResponse.setData(imMessageService.withdrawMsg(request, msgRecall));
channelSender.sendMsgLocal((NioSocketChannel)request.getSenderChannel(), wsResponse);
}
/**
* 删除消息内容
* @param request
* @param msgDeleteParam
* @param reqId
*/
@ActionMapping("/delete")
public void deleteMsg(ActionRequest request, MsgDeleteParam msgDeleteParam, String reqId) {
log.info("删除消息内容:{}", JSON.toJSONString(msgDeleteParam));
WsResponse<Boolean> wsResponse = new WsResponse<>();
wsResponse.setData(imMessageService.deleteMsg(request, msgDeleteParam));
channelSender.sendMsgLocal((NioSocketChannel)request.getSenderChannel(), wsResponse);
}
/**
* 修改消息体
* @param request
* @param imMsgUpdate
* @param reqId
*/
@ActionMapping("/updateMsgById")
public void updateMsgById(ActionRequest request, ImMsgUpdate imMsgUpdate, String reqId) {
log.info("修改消息内容:{}", JSON.toJSONString(imMsgUpdate));
WsResponse<Boolean> wsResponse = new WsResponse<>();
wsResponse.setData(imMessageService.updateMsgById(imMsgUpdate));
channelSender.sendMsgLocal((NioSocketChannel)request.getSenderChannel(), wsResponse);
}
/**
* 查询某个会话历史消息分页列表
* @param request
* @param param
* @param reqId
*/
@ActionMapping("/getHistoryMsg")
public void getHistoryMsg(ActionRequest request, ImHistoryMessagePageParam param, String reqId) {
log.info("查询某个会话历史消息分页列表:{}", JSON.toJSONString(param));
WsResponse<Paging<OfflineMsgDto>> wsResponse = new WsResponse<>();
wsResponse.setData(imMessageService.getHistoryMsgConversationId(param));
channelSender.sendMsgLocal((NioSocketChannel)request.getSenderChannel(), wsResponse);
}
/**
* 查询某个消息已读client列表和未读client
* @param request
* @param param
* @param reqId
*/
@ActionMapping("/getReaders")
public void getReaders(ActionRequest request, GetReadersParam param, String reqId) {
log.info("查询某个消息已读client列表和未读client:{}", JSON.toJSONString(param));
WsResponse<ReaderList> wsResponse = new WsResponse<>();
wsResponse.setData(imMessageService.getReaders(request, param));
channelSender.sendMsgLocal((NioSocketChannel)request.getSenderChannel(), wsResponse);
}
}
...@@ -261,17 +261,17 @@ public class NormalChatAction { ...@@ -261,17 +261,17 @@ public class NormalChatAction {
* @return * @return
*/ */
private boolean black(String reqId, ImClient imClientSender, List<ImConversationMembers> membersList, Channel channel) { private boolean black(String reqId, ImClient imClientSender, List<ImConversationMembers> membersList, Channel channel) {
Long meId = imClientSender.getId(); String meClientId = imClientSender.getClientId();
Long heId = null; String heClientId;
if(membersList.get(0).getFkClientId().equals(meId)) { if(membersList.get(0).getFkClientId().equals(meClientId)) {
heId = membersList.get(1).getFkClientId(); heClientId = membersList.get(1).getClientId();
} else { } else {
heId = membersList.get(0).getFkClientId(); heClientId = membersList.get(0).getClientId();
} }
// 判断是否被拉黑 // 判断是否被拉黑
boolean beBlack = imClientBlacklistService.isBeBlack(heId, meId); boolean beBlack = imClientBlacklistService.isBeBlack(heClientId, meClientId);
if (beBlack) { if (beBlack) {
log.info("被对方拉黑了, meId={},heId={}", meId, heId); log.info("被对方拉黑了, meId={},heClientId={}", meClientId, heClientId);
// 响应发送方 // 响应发送方
WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>(); WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>();
...@@ -287,9 +287,9 @@ public class NormalChatAction { ...@@ -287,9 +287,9 @@ public class NormalChatAction {
} }
// 是否把对方拉黑 // 是否把对方拉黑
boolean black = imClientBlacklistService.isBeBlack(meId, heId); boolean black = imClientBlacklistService.isBeBlack(meClientId, heClientId);
if (black) { if (black) {
log.info("你把对方拉黑了, meId={},heId={}", meId, heId); log.info("你把对方拉黑了, meId={},heClientId={}", meClientId, heClientId);
// 响应发送方 // 响应发送方
WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>(); WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>();
ApiResult<Boolean> result = ApiResult.result(ApiCode.IS_TO_BLACK); ApiResult<Boolean> result = ApiResult.result(ApiCode.IS_TO_BLACK);
......
...@@ -64,37 +64,5 @@ public class ImClientBlacklistController extends BaseController { ...@@ -64,37 +64,5 @@ public class ImClientBlacklistController extends BaseController {
return imClientBlacklistService.getImClientBlacklistPageList(imClientBlacklistPageParam); return imClientBlacklistService.getImClientBlacklistPageList(imClientBlacklistPageParam);
} }
// /**
// * 修改黑名单
// */
// @PostMapping("/update")
// @OperationLog(name = "修改黑名单", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改黑名单")
// public ApiResult<Boolean> updateImClientBlacklist(@Validated(Update.class) @RequestBody ImClientBlacklist imClientBlacklist) throws Exception {
// boolean flag = imClientBlacklistService.updateImClientBlacklist(imClientBlacklist);
// return ApiResult.result(flag);
// }
// /**
// * 获取黑名单详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "黑名单详情", type = OperationLogType.INFO)
// @ApiOperation(value = "黑名单详情")
// public ApiResult<ImClientBlacklistQueryVo> getImClientBlacklist(@PathVariable("id") Long id) throws Exception {
// ImClientBlacklistQueryVo imClientBlacklistQueryVo = imClientBlacklistService.getImClientBlacklistById(id);
// return ApiResult.ok(imClientBlacklistQueryVo);
// }
// /**
// * 黑名单分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "黑名单分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "黑名单分页列表")
// public ApiResult<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(@Validated @RequestBody ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception {
// Paging<ImClientBlacklistQueryVo> paging = imClientBlacklistService.getImClientBlacklistPageList(imClientBlacklistPageParam);
// return ApiResult.ok(paging);
// }
} }
...@@ -160,82 +160,6 @@ public class ImClientController extends BaseController { ...@@ -160,82 +160,6 @@ public class ImClientController extends BaseController {
} }
return ApiResult.ok(imOnlineStatusVos); return ApiResult.ok(imOnlineStatusVos);
} }
//
// /**
// * 获取用户在线状态(批量)
// *
// * @return true:在线, false 不在线
// */
// @PostMapping("/getOnlineStatus")
// @OperationLog(name = "获取用户在线状态", type = OperationLogType.ADD)
// @ApiOperation(value = "获取用户在线状态")
// ApiResult<ImOnlineStatusVo> getOnlinesStatus(String clientId) {
// // shiro线程中获取当前token
// JwtToken curentJwtToken = JwtUtil.getCurentJwtToken();
//
// // 根据appKey查询appid
// ImApplication imApplication = imApplicationService.getOneByAppKey(curentJwtToken.getAppKey());
//
// boolean onlineStatus = mangerChannelService.getOnlineStatus(imApplication.getAppKey(), clientId);
// ImOnlineStatusVo imOnlineStatusVo = new ImOnlineStatusVo();
// imOnlineStatusVo.setStatus(onlineStatus);
// return ApiResult.ok(imOnlineStatusVo);
// }
// /**
// * 添加终端表
// */
// @PostMapping("/add")
// @OperationLog(name = "添加终端表", type = OperationLogType.ADD)
// @ApiOperation(value = "添加终端表")
// public ApiResult<Boolean> addImClient(@Validated(Add.class) @RequestBody ImClient imClient) throws Exception {
// boolean flag = imClientService.saveImClient(imClient);
// return ApiResult.result(flag);
// }
//
// /**
// * 修改终端表
// */
// @PostMapping("/update")
// @OperationLog(name = "修改终端表", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改终端表")
// public ApiResult<Boolean> updateImClient(@Validated(Update.class) @RequestBody ImClient imClient) throws Exception {
// boolean flag = imClientService.updateImClient(imClient);
// return ApiResult.result(flag);
// }
//
// /**
// * 删除终端表
// */
// @PostMapping("/delete/{id}")
// @OperationLog(name = "删除终端表", type = OperationLogType.DELETE)
// @ApiOperation(value = "删除终端表")
// public ApiResult<Boolean> deleteImClient(@PathVariable("id") Long id) throws Exception {
// boolean flag = imClientService.deleteImClient(id);
// return ApiResult.result(flag);
// }
//
// /**
// * 获取终端表详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "终端表详情", type = OperationLogType.INFO)
// @ApiOperation(value = "终端表详情")
// public ApiResult<ImClientQueryVo> getImClient(@PathVariable("id") Long id) throws Exception {
// ImClientQueryVo imClientQueryVo = imClientService.getImClientById(id);
// return ApiResult.ok(imClientQueryVo);
// }
//
// /**
// * 终端表分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "终端表分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "终端表分页列表")
// public ApiResult<Paging<ImClientQueryVo>> getImClientPageList(@Validated @RequestBody ImClientPageParam imClientPageParam) throws Exception {
// Paging<ImClientQueryVo> paging = imClientService.getImClientPageList(imClientPageParam);
// return ApiResult.ok(paging);
// }
} }
...@@ -49,7 +49,7 @@ public class ImMessageController extends BaseController { ...@@ -49,7 +49,7 @@ public class ImMessageController extends BaseController {
@PostMapping("/withdraw") @PostMapping("/withdraw")
@ApiOperation(value = "消息撤回", notes = "只能撤回客户端自己发送的消息") @ApiOperation(value = "消息撤回", notes = "只能撤回客户端自己发送的消息")
public ApiResult<Boolean> withdrawMsg(@RequestBody ImMsgRecall imMsgRecall) throws Exception { public ApiResult<Boolean> withdrawMsg(@RequestBody ImMsgRecall imMsgRecall) throws Exception {
return imMessageService.withdrawMsg(imMsgRecall); return ApiResult.ok(imMessageService.withdrawMsg(null, imMsgRecall));
} }
/** /**
...@@ -62,9 +62,9 @@ public class ImMessageController extends BaseController { ...@@ -62,9 +62,9 @@ public class ImMessageController extends BaseController {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
if (CollectionUtils.isEmpty(param.getMsgIds())) { if (CollectionUtils.isEmpty(param.getMsgIds())) {
return ApiResult.fail("请选择要删除"); return ApiResult.fail("请选择要删除的消息id");
} }
return imMessageService.deleteMsg(param); return ApiResult.ok(imMessageService.deleteMsg(null, param));
} }
/** /**
...@@ -73,7 +73,7 @@ public class ImMessageController extends BaseController { ...@@ -73,7 +73,7 @@ public class ImMessageController extends BaseController {
@PostMapping("/updateMsgById") @PostMapping("/updateMsgById")
@ApiOperation(value = "修改消息体", notes = "只能修改客户端自己发送的消息") @ApiOperation(value = "修改消息体", notes = "只能修改客户端自己发送的消息")
public ApiResult<Boolean> updateMsgById(@RequestBody ImMsgUpdate imMsgUpdate) throws Exception { public ApiResult<Boolean> updateMsgById(@RequestBody ImMsgUpdate imMsgUpdate) throws Exception {
return imMessageService.updateMsgById(imMsgUpdate); return ApiResult.ok(imMessageService.updateMsgById(imMsgUpdate));
} }
/** /**
...@@ -92,7 +92,7 @@ public class ImMessageController extends BaseController { ...@@ -92,7 +92,7 @@ public class ImMessageController extends BaseController {
@PostMapping("/getHistoryMsg") @PostMapping("/getHistoryMsg")
@OperationLog(name = "查询某个会话历史消息分页列表", type = OperationLogType.PAGE) @OperationLog(name = "查询某个会话历史消息分页列表", type = OperationLogType.PAGE)
@ApiOperation(value = "查询某个会话历史消息分页列表") @ApiOperation(value = "查询某个会话历史消息分页列表")
public ApiResult<Paging<OfflineMsgDto>> getHistoryMsg(@Validated @RequestBody ImHistoryMessagePageParam imHistoryMessagePageParam) throws Exception { public ApiResult<Paging<OfflineMsgDto>> getHistoryMsg(@Validated @RequestBody ImHistoryMessagePageParam imHistoryMessagePageParam) {
Paging<OfflineMsgDto> paging = imMessageService.getHistoryMsgConversationId(imHistoryMessagePageParam); Paging<OfflineMsgDto> paging = imMessageService.getHistoryMsgConversationId(imHistoryMessagePageParam);
return ApiResult.ok(paging); return ApiResult.ok(paging);
} }
...@@ -103,7 +103,7 @@ public class ImMessageController extends BaseController { ...@@ -103,7 +103,7 @@ public class ImMessageController extends BaseController {
@PostMapping("/getReaders") @PostMapping("/getReaders")
@ApiOperation(value = "查询某个消息已读client列表和未读client") @ApiOperation(value = "查询某个消息已读client列表和未读client")
public ApiResult<ReaderList> getReaders(@Validated @RequestBody GetReadersParam param) { public ApiResult<ReaderList> getReaders(@Validated @RequestBody GetReadersParam param) {
ReaderList readerList = imMessageService.getReaders(param); ReaderList readerList = imMessageService.getReaders(null, param);
return ApiResult.ok(readerList); return ApiResult.ok(readerList);
} }
......
...@@ -40,9 +40,9 @@ public class ImClientBlacklist extends BaseEntity { ...@@ -40,9 +40,9 @@ public class ImClientBlacklist extends BaseEntity {
private Long fkAppid; private Long fkAppid;
@ApiModelProperty("拉黑者") @ApiModelProperty("拉黑者")
private Long fkClientIdPrevent; private String clientIdPrevent;
@ApiModelProperty("被拉黑") @ApiModelProperty("被拉黑")
private Long fkClientIdBePrevent; private String clientIdBePrevent;
} }
...@@ -72,4 +72,10 @@ public class ImConversationMembers extends BaseEntity { ...@@ -72,4 +72,10 @@ public class ImConversationMembers extends BaseEntity {
@ApiModelProperty("禁言开关 1-未禁言 2-禁言") @ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer muted; private Integer muted;
/**
* 客户方提供的唯一id
*/
@ApiModelProperty("客户方提供的唯一id")
private String clientId;
} }
package com.wecloud.im.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/2/23 13:44
* @Description 性别枚举
*/
public enum SexEnum implements BaseEnum {
/**
* 1 - 男
*/
MAN(1, "男"),
/**
* 2 - 女
*/
WOMAN(2, "女"),
/**
* 3 - 未知
*/
UNKNOWN(3, "未知");
SexEnum(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;
}
}
...@@ -104,7 +104,7 @@ public class ImFriendController extends BaseController { ...@@ -104,7 +104,7 @@ public class ImFriendController extends BaseController {
if(currentClient == null) { if(currentClient == null) {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null); return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
} }
List<ImFriendApplyDto> friendInfo = imFriendService.getUnsureFriends(currentClient); List<ImFriendApplyDto> friendInfo = imFriendService.getApplyFriends(currentClient);
return ApiResult.ok(friendInfo); return ApiResult.ok(friendInfo);
} }
...@@ -158,7 +158,7 @@ public class ImFriendController extends BaseController { ...@@ -158,7 +158,7 @@ public class ImFriendController extends BaseController {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null); return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
} }
Paging<ImFriendBaseDto> friends = imFriendService.getImFriendPageList(currentClient.getId(), pageParam); Paging<ImFriendBaseDto> friends = imFriendService.getImFriendPageList(currentClient.getClientId(), pageParam);
return ApiResult.ok(friends); return ApiResult.ok(friends);
} }
......
...@@ -19,7 +19,7 @@ import java.util.List; ...@@ -19,7 +19,7 @@ import java.util.List;
@Repository @Repository
public interface ImFriendMapper extends BaseMapper<ImFriend> { public interface ImFriendMapper extends BaseMapper<ImFriend> {
IPage<ImFriendBaseDto> getImFriendPageList(@Param("page") Page<ImFriendBaseDto> page, @Param("clientId") Long fkClientId); IPage<ImFriendBaseDto> getImFriendPageList(@Param("page") Page<ImFriendBaseDto> page, @Param("clientId") String clientId);
/** /**
* 获取待验证的好友列表 * 获取待验证的好友列表
...@@ -27,7 +27,7 @@ public interface ImFriendMapper extends BaseMapper<ImFriend> { ...@@ -27,7 +27,7 @@ public interface ImFriendMapper extends BaseMapper<ImFriend> {
* @param clientId * @param clientId
* @return * @return
*/ */
IPage<ImFriendApplyDto> getUnsureFriendPageList(@Param("page") Page<ImFriendApplyDto> page, @Param("clientId") String clientId); IPage<ImFriendApplyDto> getApplyFriendPageList(@Param("page") Page<ImFriendApplyDto> page, @Param("clientId") String clientId);
ImFriendApplyDto getFriendInfo(@Param("clientId") String clientId, @Param("friendClientId") String friendClientId); ImFriendApplyDto getFriendInfo(@Param("clientId") String clientId, @Param("friendClientId") String friendClientId);
......
...@@ -68,11 +68,11 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> { ...@@ -68,11 +68,11 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
* @param currentClient * @param currentClient
* @return * @return
*/ */
public List<ImFriendApplyDto> getUnsureFriends(ImClient currentClient) { public List<ImFriendApplyDto> getApplyFriends(ImClient currentClient) {
ImFriendPageParam pageParam = new ImFriendPageParam(); ImFriendPageParam pageParam = new ImFriendPageParam();
pageParam.setPageSize(1000L); pageParam.setPageSize(1000L);
Page<ImFriendApplyDto> page = new PageInfo(pageParam, OrderItem.desc(getLambdaColumn(ImFriend::getCreateTime))); Page<ImFriendApplyDto> page = new PageInfo(pageParam, OrderItem.desc(getLambdaColumn(ImFriend::getCreateTime)));
IPage<ImFriendApplyDto> pageList = imFriendMapper.getUnsureFriendPageList(page, currentClient.getClientId()); IPage<ImFriendApplyDto> pageList = imFriendMapper.getApplyFriendPageList(page, currentClient.getClientId());
return pageList.getRecords(); return pageList.getRecords();
} }
...@@ -208,7 +208,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> { ...@@ -208,7 +208,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
imFriendMapper.batchDeleteFriend(currentClient.getClientId(), currentClient.getFkAppid(), friendClientIds); imFriendMapper.batchDeleteFriend(currentClient.getClientId(), currentClient.getFkAppid(), friendClientIds);
} }
public Paging<ImFriendBaseDto> getImFriendPageList(Long currentClientId, ImFriendPageParam pageParam) { public Paging<ImFriendBaseDto> getImFriendPageList(String currentClientId, ImFriendPageParam pageParam) {
Page<ImFriendBaseDto> page = new PageInfo(pageParam, OrderItem.desc(getLambdaColumn(ImFriend::getFriendName))); Page<ImFriendBaseDto> page = new PageInfo(pageParam, OrderItem.desc(getLambdaColumn(ImFriend::getFriendName)));
IPage<ImFriendBaseDto> pageList = imFriendMapper.getImFriendPageList(page, currentClientId); IPage<ImFriendBaseDto> pageList = imFriendMapper.getImFriendPageList(page, currentClientId);
return new Paging<>(pageList); return new Paging<>(pageList);
......
...@@ -7,16 +7,37 @@ import com.wecloud.utils.JsonUtils; ...@@ -7,16 +7,37 @@ import com.wecloud.utils.JsonUtils;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
/** /**
* @Description TODO * @Description 聊天内容
* @Author lixiaozhong * @Author lixiaozhong
* @Date 2022/1/26 6:11 下午 * @Date 2022/1/26 6:11 下午
*/ */
public class ChatContentVo extends BaseRequest { public class ChatContentVo extends BaseRequest {
/**
* 客户端请求id
*/
String reqId;
/**
* 推送到通知栏对象
*/
PushVO push; PushVO push;
/**
* 会话id
*/
@NotNull @NotNull
Long toConversation; Long toConversation;
/**
* 消息类型
*/
@NotNull @NotNull
Integer type; Integer type;
/**
* 发送文本
*/
String text; String text;
public PushVO getPush() { public PushVO getPush() {
...@@ -51,4 +72,14 @@ public class ChatContentVo extends BaseRequest { ...@@ -51,4 +72,14 @@ public class ChatContentVo extends BaseRequest {
public void setText(String text) { public void setText(String text) {
this.text = text; this.text = text;
} }
@Override
public String getReqId() {
return reqId;
}
@Override
public void setReqId(String reqId) {
this.reqId = reqId;
}
} }
...@@ -20,11 +20,11 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist> ...@@ -20,11 +20,11 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
/** /**
* 当前客户端是否被拉黑 * 当前客户端是否被拉黑
* *
* @param currentClient 当前客户端 * @param currentClientId 当前客户端
* @param toClient 对方客户端 * @param toClientId 对方客户端
* @return * @return
*/ */
boolean isBeBlack(Long currentClient, Long toClient); boolean isBeBlack(String currentClientId, String toClientId);
/** /**
* 拉入黑名单 * 拉入黑名单
...@@ -44,53 +44,6 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist> ...@@ -44,53 +44,6 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
*/ */
ApiResult<Boolean> removeImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate) throws Exception; ApiResult<Boolean> removeImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate) throws Exception;
/**
* 保存
*
* @param imClientBlacklist
* @return
* @throws Exception
*/
boolean saveImClientBlacklist(ImClientBlacklist imClientBlacklist) throws Exception;
/**
* 修改
*
* @param imClientBlacklist
* @return
* @throws Exception
*/
boolean updateImClientBlacklist(ImClientBlacklist imClientBlacklist) throws Exception;
/**
* 删除
*
* @param id
* @return
* @throws Exception
*/
boolean deleteImClientBlacklist(Long id) throws Exception;
/**
* 根据ID获取查询对象
*
* @param id
* @return
* @throws Exception
*/
ImClientBlacklistQueryVo getImClientBlacklistById(Long id) throws Exception;
// /**
// * 获取分页对象
// *
// * @param imClientBlacklistPageParam
// * @return
// * @throws Exception
// */
// Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception;
/** /**
* 获取分页对象 * 获取分页对象
* *
......
package com.wecloud.im.service; package com.wecloud.im.service;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
...@@ -48,18 +49,19 @@ public interface ImMessageService extends BaseService<ImMessage> { ...@@ -48,18 +49,19 @@ public interface ImMessageService extends BaseService<ImMessage> {
ImMessage saveImMessage(ImClientSimpleDto client, long messageId, ChatContentVo data); ImMessage saveImMessage(ImClientSimpleDto client, long messageId, ChatContentVo data);
/** /**
* 消息撤回 只能撤回客户端自己发送的消息 * 消息撤回
* * @param imMsgRecall
* @param request
* @return * @return
*/ */
ApiResult<Boolean> withdrawMsg(ImMsgRecall imMsgRecall); Boolean withdrawMsg(ActionRequest request, ImMsgRecall imMsgRecall);
/** /**
* 删除消息 * 删除消息
* @param param * @param param
* @return * @return
*/ */
ApiResult<Boolean> deleteMsg(MsgDeleteParam param); Boolean deleteMsg(ActionRequest request, MsgDeleteParam param);
/** /**
* 修改消息体 * 修改消息体
...@@ -67,7 +69,7 @@ public interface ImMessageService extends BaseService<ImMessage> { ...@@ -67,7 +69,7 @@ public interface ImMessageService extends BaseService<ImMessage> {
* @param imMsgUpdate * @param imMsgUpdate
* @return * @return
*/ */
ApiResult<Boolean> updateMsgById(ImMsgUpdate imMsgUpdate); Boolean updateMsgById(ImMsgUpdate imMsgUpdate);
/** /**
* 查询某个会话历史消息分页列表 * 查询某个会话历史消息分页列表
...@@ -76,7 +78,7 @@ public interface ImMessageService extends BaseService<ImMessage> { ...@@ -76,7 +78,7 @@ public interface ImMessageService extends BaseService<ImMessage> {
* @return * @return
* @throws Exception * @throws Exception
*/ */
Paging<OfflineMsgDto> getHistoryMsgConversationId(ImHistoryMessagePageParam imHistoryMessagePageParam) throws Exception; Paging<OfflineMsgDto> getHistoryMsgConversationId(ImHistoryMessagePageParam imHistoryMessagePageParam);
/** /**
* 查询用户所有离线消息 * 查询用户所有离线消息
...@@ -127,6 +129,6 @@ public interface ImMessageService extends BaseService<ImMessage> { ...@@ -127,6 +129,6 @@ public interface ImMessageService extends BaseService<ImMessage> {
* @param param * @param param
* @return * @return
*/ */
ReaderList getReaders(GetReadersParam param); ReaderList getReaders(ActionRequest request, GetReadersParam param);
} }
...@@ -2,7 +2,6 @@ package com.wecloud.im.service.impl; ...@@ -2,7 +2,6 @@ package com.wecloud.im.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImClientBlacklist; import com.wecloud.im.entity.ImClientBlacklist;
...@@ -12,12 +11,12 @@ import com.wecloud.im.param.ImClientBlacklistQueryVo; ...@@ -12,12 +11,12 @@ import com.wecloud.im.param.ImClientBlacklistQueryVo;
import com.wecloud.im.param.add.ImClientBlacklistUpdate; import com.wecloud.im.param.add.ImClientBlacklistUpdate;
import com.wecloud.im.service.ImClientBlacklistService; import com.wecloud.im.service.ImClientBlacklistService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.exception.BusinessException; import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo; import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
import com.wecloud.utils.SnowflakeUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -42,10 +41,10 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl ...@@ -42,10 +41,10 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
private ImClientService imClientService; private ImClientService imClientService;
@Override @Override
public boolean isBeBlack(Long currentClient, Long toClient) { public boolean isBeBlack(String currentClientId, String toClientId) {
ImClientBlacklist one = this.getOne(new QueryWrapper<ImClientBlacklist>().lambda() ImClientBlacklist one = this.getOne(new QueryWrapper<ImClientBlacklist>().lambda()
.eq(ImClientBlacklist::getFkClientIdPrevent, currentClient) .eq(ImClientBlacklist::getClientIdPrevent, currentClientId)
.eq(ImClientBlacklist::getFkClientIdBePrevent, toClient)); .eq(ImClientBlacklist::getClientIdBePrevent, toClientId));
return one != null; return one != null;
} }
...@@ -67,8 +66,8 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl ...@@ -67,8 +66,8 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
imClientBlacklist.setId(SnowflakeUtil.getId()); imClientBlacklist.setId(SnowflakeUtil.getId());
imClientBlacklist.setCreateTime(new Date()); imClientBlacklist.setCreateTime(new Date());
imClientBlacklist.setFkAppid(client.getFkAppid()); imClientBlacklist.setFkAppid(client.getFkAppid());
imClientBlacklist.setFkClientIdPrevent(client.getId()); imClientBlacklist.setClientIdPrevent(client.getClientId());
imClientBlacklist.setFkClientIdBePrevent(beBlacker.getId()); imClientBlacklist.setClientIdBePrevent(beBlacker.getClientId());
this.save(imClientBlacklist); this.save(imClientBlacklist);
return ApiResult.ok(); return ApiResult.ok();
...@@ -91,41 +90,11 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl ...@@ -91,41 +90,11 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
} }
// 删除 // 删除
this.remove(new QueryWrapper<ImClientBlacklist>().lambda() this.remove(new QueryWrapper<ImClientBlacklist>().lambda()
.eq(ImClientBlacklist::getFkClientIdPrevent, client.getId()) .eq(ImClientBlacklist::getClientIdPrevent, client.getClientId())
.eq(ImClientBlacklist::getFkClientIdBePrevent, beBlacker.getId())); .eq(ImClientBlacklist::getClientIdBePrevent, beBlacker.getClientId()));
return ApiResult.ok(); return ApiResult.ok();
} }
@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveImClientBlacklist(ImClientBlacklist imClientBlacklist) throws Exception {
return super.save(imClientBlacklist);
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean updateImClientBlacklist(ImClientBlacklist imClientBlacklist) throws Exception {
return super.updateById(imClientBlacklist);
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean deleteImClientBlacklist(Long id) throws Exception {
return super.removeById(id);
}
@Override
public ImClientBlacklistQueryVo getImClientBlacklistById(Long id) throws Exception {
return imClientBlacklistMapper.getImClientBlacklistById(id);
}
// @Override
// public Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception {
// Page<ImClientBlacklistQueryVo> page = new PageInfo<>(imClientBlacklistPageParam, OrderItem.desc(getLambdaColumn(ImClientBlacklist::getCreateTime)));
// IPage<ImClientBlacklistQueryVo> iPage = imClientBlacklistMapper.getImClientBlacklistPageList(page, imClientBlacklistPageParam);
// return new Paging<ImClientBlacklistQueryVo>(iPage);
// }
@Override @Override
public ApiResult<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception { public ApiResult<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception {
......
...@@ -158,13 +158,18 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -158,13 +158,18 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
if (currentClient == null) { if (currentClient == null) {
throw new BusinessException("当前用户登录信息失效"); throw new BusinessException("当前用户登录信息失效");
} }
ClientInfoVo clientInfoVo = new ClientInfoVo();
if (param.getConversationId() != null) {
List<GetInfoListVo> infoList = imClientMapper.getInfoList(currentClient.getFkAppid(), param.getConversationId(), List<GetInfoListVo> infoList = imClientMapper.getInfoList(currentClient.getFkAppid(), param.getConversationId(),
Lists.newArrayList(param.getClientId())); Lists.newArrayList(param.getClientId()));
if (CollectionUtils.isEmpty(infoList)) { if (CollectionUtils.isEmpty(infoList)) {
throw new BusinessException("群内未查询到该用户信息"); throw new BusinessException("群内未查询到该用户信息");
} }
ClientInfoVo clientInfoVo = new ClientInfoVo();
BeanUtils.copyProperties(infoList.get(0), clientInfoVo); BeanUtils.copyProperties(infoList.get(0), clientInfoVo);
} else {
ImClient imClient = this.getCacheImClient(currentClient.getFkAppid(), param.getClientId());
BeanUtils.copyProperties(imClient, clientInfoVo);
}
clientInfoVo.setRelation(RelationEnum.STRANGER.getCode()); clientInfoVo.setRelation(RelationEnum.STRANGER.getCode());
// 查询该好友与自己关系: 陌生人、好友、被拉黑名单 // 查询该好友与自己关系: 陌生人、好友、被拉黑名单
ImFriend imFriend = imFriendService.getByKey(currentClient.getClientId(), clientInfoVo.getClientId()); ImFriend imFriend = imFriendService.getByKey(currentClient.getClientId(), clientInfoVo.getClientId());
...@@ -172,7 +177,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -172,7 +177,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
clientInfoVo.setRelation(RelationEnum.FRIEND.getCode()); clientInfoVo.setRelation(RelationEnum.FRIEND.getCode());
} }
// 查询是否被拉黑 // 查询是否被拉黑
if (imClientBlacklistService.isBeBlack(currentClient.getId(), clientInfoVo.getId())) { if (imClientBlacklistService.isBeBlack(currentClient.getClientId(), clientInfoVo.getClientId())) {
clientInfoVo.setRelation(RelationEnum.BE_BLACK.getCode()); clientInfoVo.setRelation(RelationEnum.BE_BLACK.getCode());
} }
return clientInfoVo; return clientInfoVo;
......
...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.OrderItem; ...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.entity.ImApiMessageOnlineSend; import com.wecloud.im.entity.ImApiMessageOnlineSend;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
...@@ -200,22 +201,32 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -200,22 +201,32 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> withdrawMsg(ImMsgRecall imMsgRecall) { public Boolean withdrawMsg(ActionRequest request, ImMsgRecall imMsgRecall) {
ImClient currentClient = imClientService.getCurentClient(); ImClient imClientSender;
ImApplication imApplication;
if (request != null) {
imClientSender = imClientService.getCacheImClient(request.getSenderClientId());
imApplication = imApplicationService.getCacheById(imClientSender.getFkAppid());
} else {
imClientSender = imClientService.getCurentClient();
// 查询imApplication // 查询imApplication
ImApplication imApplication = imApplicationService.getCacheById(currentClient.getFkAppid()); imApplication = imApplicationService.getCacheById(imClientSender.getFkAppid());
}
if (imClientSender == null) {
throw new BusinessException("查无发送用户信息");
}
if (imApplication == null) { if (imApplication == null) {
return ApiResult.fail("查无应用信息"); throw new BusinessException("查无应用信息");
} }
ImMessage messageById = this.getById(imMsgRecall.getMsgId()); ImMessage messageById = this.getById(imMsgRecall.getMsgId());
// 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置 // 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置
Boolean withdrawOther = true; Boolean withdrawOther = true;
if (!withdrawOther && !messageById.getSender().equals(currentClient.getId())) { if (!withdrawOther && !messageById.getSender().equals(imClientSender.getId())) {
return ApiResult.fail("不可撤回别人发送的消息"); throw new BusinessException("不可撤回别人发送的消息");
} }
if (messageById.getWithdraw()) { if (messageById.getWithdraw()) {
return ApiResult.ok(); return Boolean.TRUE;
} }
// 修改消息体 // 修改消息体
messageById.setWithdraw(Boolean.TRUE); messageById.setWithdraw(Boolean.TRUE);
...@@ -225,7 +236,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -225,7 +236,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
boolean saveOk = this.updateById(messageById); boolean saveOk = this.updateById(messageById);
ImClient msgOwner = imClientService.getCacheImClient(messageById.getSender()); ImClient msgOwner = imClientService.getCacheImClient(messageById.getSender());
if (msgOwner == null) { if (msgOwner == null) {
return ApiResult.fail("未查找到消息发送者"); throw new BusinessException("未查找到消息发送者");
} }
if (saveOk) { if (saveOk) {
...@@ -233,11 +244,11 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -233,11 +244,11 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
List<ImConversationMembers> membersList = imConversationMembersService.list( List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda() new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, messageById.getFkConversationId()) .eq(ImConversationMembers::getFkConversationId, messageById.getFkConversationId())
.notIn(ImConversationMembers::getFkClientId, currentClient.getId()) .notIn(ImConversationMembers::getFkClientId, imClientSender.getId())
); );
if (membersList.isEmpty()) { if (membersList.isEmpty()) {
log.info("membersList为空,toConversationId:" + messageById.getFkConversationId()); log.info("membersList为空,toConversationId:" + messageById.getFkConversationId());
return ApiResult.fail("该会话成员列表为空"); throw new BusinessException("该会话成员列表为空");
} }
// 遍历发送 // 遍历发送
for (ImConversationMembers conversationMembers : membersList) { for (ImConversationMembers conversationMembers : membersList) {
...@@ -267,7 +278,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -267,7 +278,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
BeanUtils.copyProperties(messageById, imMessageOnlineSend); BeanUtils.copyProperties(messageById, imMessageOnlineSend);
imMessageOnlineSend.setType(MsgTypeEnum.MSG_WITHDRAW.getUriCode()); imMessageOnlineSend.setType(MsgTypeEnum.MSG_WITHDRAW.getUriCode());
imMessageOnlineSend.setMsgId(messageById.getId()); imMessageOnlineSend.setMsgId(messageById.getId());
imMessageOnlineSend.setSender(currentClient.getClientId()); imMessageOnlineSend.setSender(imClientSender.getClientId());
Map<String, Object> contentMap = Maps.newHashMap(); Map<String, Object> contentMap = Maps.newHashMap();
contentMap.put("msgOwner", msgOwner.getClientId()); contentMap.put("msgOwner", msgOwner.getClientId());
imMessageOnlineSend.setContent(contentMap); imMessageOnlineSend.setContent(contentMap);
...@@ -292,31 +303,41 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -292,31 +303,41 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
asyncPush.push(pushVO, imClientReceiver, imApplication); asyncPush.push(pushVO, imClientReceiver, imApplication);
} }
return ApiResult.ok(); return Boolean.TRUE;
} else { } else {
return ApiResult.fail(); return Boolean.TRUE;
} }
} }
@Override @Override
public ApiResult<Boolean> deleteMsg(MsgDeleteParam param) { public Boolean deleteMsg(ActionRequest request, MsgDeleteParam param) {
ImClient currentClient = imClientService.getCurentClient(); ImClient imClientSender;
ImApplication imApplication;
if (request != null) {
imClientSender = imClientService.getCacheImClient(request.getSenderClientId());
imApplication = imApplicationService.getCacheById(imClientSender.getFkAppid());
} else {
imClientSender = imClientService.getCurentClient();
// 查询imApplication // 查询imApplication
ImApplication imApplication = imApplicationService.getCacheById(currentClient.getFkAppid()); imApplication = imApplicationService.getCacheById(imClientSender.getFkAppid());
}
if (imClientSender == null) {
throw new BusinessException("查无发送用户信息");
}
if (imApplication == null) { if (imApplication == null) {
return ApiResult.fail("查无应用信息"); throw new BusinessException("查无应用信息");
} }
// todo 单向撤回、双向撤回开关可配置 // todo 单向撤回、双向撤回开关可配置
Boolean deleteOther = true; Boolean deleteOther = true;
List<ImMessage> imMessageList = this.listByIds(param.getMsgIds()); List<ImMessage> imMessageList = this.listByIds(param.getMsgIds());
if (CollectionUtils.isEmpty(imMessageList)) { if (CollectionUtils.isEmpty(imMessageList)) {
return ApiResult.fail("查无消息"); throw new BusinessException("查无消息");
} }
for (ImMessage message : imMessageList) { for (ImMessage message : imMessageList) {
// 判断该消息是否是该客户端发送 // 判断该消息是否是该客户端发送
if (!deleteOther && !message.getSender().equals(currentClient.getId())) { if (!deleteOther && !message.getSender().equals(imClientSender.getId())) {
return ApiResult.fail("不可删除别人发送的消息"); throw new BusinessException("不可删除别人发送的消息");
} }
if (message.getIsDelete() == 2) { if (message.getIsDelete() == 2) {
continue; continue;
...@@ -327,7 +348,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -327,7 +348,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
boolean saveOk = this.updateById(message); boolean saveOk = this.updateById(message);
ImClient msgOwner = imClientService.getCacheImClient(message.getSender()); ImClient msgOwner = imClientService.getCacheImClient(message.getSender());
if (msgOwner == null) { if (msgOwner == null) {
return ApiResult.fail("未查找到消息发送者"); throw new BusinessException("未查找到消息发送者");
} }
if (saveOk) { if (saveOk) {
...@@ -335,11 +356,11 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -335,11 +356,11 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
List<ImConversationMembers> membersList = imConversationMembersService.list( List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda() new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, message.getFkConversationId()) .eq(ImConversationMembers::getFkConversationId, message.getFkConversationId())
.notIn(ImConversationMembers::getFkClientId, currentClient.getId()) .notIn(ImConversationMembers::getFkClientId, imClientSender.getId())
); );
if (membersList.isEmpty()) { if (membersList.isEmpty()) {
log.info("membersList为空,toConversationId:" + message.getFkConversationId()); log.info("membersList为空,toConversationId:" + message.getFkConversationId());
return ApiResult.fail("该会话成员列表为空"); throw new BusinessException("该会话成员列表为空");
} }
// 遍历发送 // 遍历发送
for (ImConversationMembers conversationMembers : membersList) { for (ImConversationMembers conversationMembers : membersList) {
...@@ -368,7 +389,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -368,7 +389,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
BeanUtils.copyProperties(message, imMessageOnlineSend); BeanUtils.copyProperties(message, imMessageOnlineSend);
imMessageOnlineSend.setType(MsgTypeEnum.MSG_DELETE.getUriCode()); imMessageOnlineSend.setType(MsgTypeEnum.MSG_DELETE.getUriCode());
imMessageOnlineSend.setMsgId(message.getId()); imMessageOnlineSend.setMsgId(message.getId());
imMessageOnlineSend.setSender(currentClient.getClientId()); imMessageOnlineSend.setSender(imClientSender.getClientId());
Map<String, Object> contentMap = Maps.newHashMap(); Map<String, Object> contentMap = Maps.newHashMap();
contentMap.put("msgOwner", msgOwner.getClientId()); contentMap.put("msgOwner", msgOwner.getClientId());
imMessageOnlineSend.setContent(contentMap); imMessageOnlineSend.setContent(contentMap);
...@@ -385,18 +406,18 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -385,18 +406,18 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
responseModel.setReqId(null); responseModel.setReqId(null);
channelSender.sendMsg(responseModel, imClientReceiver.getId()); channelSender.sendMsg(responseModel, imClientReceiver.getId());
} }
return ApiResult.ok(); return Boolean.TRUE;
} else { } else {
return ApiResult.fail("删除消息错误,稍后重试"); throw new BusinessException("删除消息错误,稍后重试");
} }
} }
return ApiResult.ok(); return Boolean.TRUE;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> updateMsgById(ImMsgUpdate imMsgUpdate) { public Boolean updateMsgById(ImMsgUpdate imMsgUpdate) {
// ImClient client = imClientService.getCurentClient(); // ImClient client = imClientService.getCurentClient();
...@@ -414,9 +435,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -414,9 +435,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessage.setContent(content); imMessage.setContent(content);
if (this.updateById(imMessage)) { if (this.updateById(imMessage)) {
return ApiResult.ok(); return Boolean.TRUE;
} else { } else {
return ApiResult.fail(); throw new BusinessException("修改消息错误");
} }
} }
...@@ -433,12 +454,17 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -433,12 +454,17 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
* @return * @return
*/ */
@Override @Override
public ReaderList getReaders(GetReadersParam param) { public ReaderList getReaders(ActionRequest request, GetReadersParam param) {
ImClient currentClient = imClientService.getCurentClient(); ImClient imClientSender;
if (currentClient == null) { if (request != null) {
throw new BusinessException("当前用户登录信息失效"); imClientSender = imClientService.getCacheImClient(request.getSenderClientId());
} else {
imClientSender = imClientService.getCurentClient();
}
if (imClientSender == null) {
throw new BusinessException("查无发送用户信息");
} }
List<ReaderVo> readerVos = imMessageMapper.getReaders(currentClient.getId(), param); List<ReaderVo> readerVos = imMessageMapper.getReaders(imClientSender.getId(), param);
if (CollectionUtils.isEmpty(readerVos)) { if (CollectionUtils.isEmpty(readerVos)) {
return null; return null;
} }
...@@ -458,7 +484,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -458,7 +484,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
} }
@Override @Override
public Paging<OfflineMsgDto> getHistoryMsgConversationId(ImHistoryMessagePageParam imHistoryMessagePageParam) throws Exception { public Paging<OfflineMsgDto> getHistoryMsgConversationId(ImHistoryMessagePageParam imHistoryMessagePageParam) {
Page<ImMessage> page = new PageInfo<>(imHistoryMessagePageParam, OrderItem.desc(getLambdaColumn(ImMessage::getCreateTime))); Page<ImMessage> page = new PageInfo<>(imHistoryMessagePageParam, OrderItem.desc(getLambdaColumn(ImMessage::getCreateTime)));
IPage<OfflineMsgDto> iPage = imMessageMapper.getHistoryMsgConversationId(page, imHistoryMessagePageParam); IPage<OfflineMsgDto> iPage = imMessageMapper.getHistoryMsgConversationId(page, imHistoryMessagePageParam);
......
package com.wecloud.im.user.controller;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.friend.param.ImFriendApplyDto;
import com.wecloud.im.friend.param.ImFriendBaseParam;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.user.param.FriendDto;
import com.wecloud.im.user.service.FriendService;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @Author wenzhida
* @Date 2022/2/22 23:09
* @Description 非sdk朋友相关控制器
*/
@Slf4j
@RestController
@RequestMapping("/friends")
@Api(value = "好友相关API", tags = {"好友"})
public class FriendController extends BaseController {
@Autowired
private ImClientService imClientService;
@Autowired
private FriendService friendService;
/**
* 查询好友信息,只有自己的好友才查得到
*/
@PostMapping("/info")
@ApiOperation(value = "查询好友信息,只有自己的好友才查得到")
public ApiResult<FriendDto> getFriendInfo(@RequestBody ImFriendBaseParam param) {
if(param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
return ApiResult.ok(friendService.getFriendInfo(param));
}
@PostMapping("/getFriends")
@ApiOperation(value = "全量获取好友列表")
public ApiResult<List<FriendDto>> getFriends() {
return ApiResult.ok(friendService.getFriends());
}
/**
* 好友请求列表,最多只返回1000个
*/
@PostMapping("/unsureFriends")
@ApiOperation(value = "获取好友请求列表,最多只返回1000个")
public ApiResult<List<FriendDto>> getUnsureFriends() {
List<FriendDto> applyFriends = friendService.getApplyFriends();
return ApiResult.ok(applyFriends);
}
}
...@@ -2,8 +2,16 @@ package com.wecloud.im.user.controller; ...@@ -2,8 +2,16 @@ package com.wecloud.im.user.controller;
import com.wecloud.im.user.param.ChangePhoneParam; import com.wecloud.im.user.param.ChangePhoneParam;
import com.wecloud.im.user.param.CheckPhoneParam; import com.wecloud.im.user.param.CheckPhoneParam;
import com.wecloud.im.user.param.FindUserParam;
import com.wecloud.im.user.param.GetUserParam;
import com.wecloud.im.user.param.LoginSuccessDto; import com.wecloud.im.user.param.LoginSuccessDto;
import com.wecloud.im.user.param.ModifyHeadPortraitParam;
import com.wecloud.im.user.param.ModifyLandouParam;
import com.wecloud.im.user.param.ModifyNicknameParam;
import com.wecloud.im.user.param.ModifySexParam;
import com.wecloud.im.user.param.RegisterSuccessDto;
import com.wecloud.im.user.param.ResetPasswordParam; import com.wecloud.im.user.param.ResetPasswordParam;
import com.wecloud.im.user.param.UserBaseDto;
import com.wecloud.im.user.param.UserLoginParam; import com.wecloud.im.user.param.UserLoginParam;
import com.wecloud.im.user.param.UserRegisterParam; import com.wecloud.im.user.param.UserRegisterParam;
import com.wecloud.im.user.service.UserService; import com.wecloud.im.user.service.UserService;
...@@ -45,12 +53,12 @@ public class UserController extends BaseController { ...@@ -45,12 +53,12 @@ public class UserController extends BaseController {
@PostMapping("/register") @PostMapping("/register")
@ApiOperation(value = "用户注册接口") @ApiOperation(value = "用户注册接口")
public ApiResult<LoginSuccessDto> register(@RequestBody @Validated UserRegisterParam param) { public ApiResult<RegisterSuccessDto> register(@RequestBody @Validated UserRegisterParam param) {
if (param == null) { if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
String userId = userService.registerUser(param); String userId = userService.registerUser(param);
return ApiResult.ok(new LoginSuccessDto(userId)); return ApiResult.ok(new RegisterSuccessDto(userId));
} }
@PostMapping("/login") @PostMapping("/login")
...@@ -59,8 +67,8 @@ public class UserController extends BaseController { ...@@ -59,8 +67,8 @@ public class UserController extends BaseController {
if (param == null) { if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
String userId = userService.loginUser(param); LoginSuccessDto loginUser = userService.loginUser(param);
return ApiResult.ok(new LoginSuccessDto(userId)); return ApiResult.ok(loginUser);
} }
@PostMapping("/resetPassword") @PostMapping("/resetPassword")
...@@ -83,5 +91,74 @@ public class UserController extends BaseController { ...@@ -83,5 +91,74 @@ public class UserController extends BaseController {
return ApiResult.ok(); return ApiResult.ok();
} }
@PostMapping("/myInfo")
@ApiOperation(value = "查找我的信息")
public ApiResult<UserBaseDto> myInfo() {
UserBaseDto user = userService.myInfo();
return ApiResult.ok(user);
}
@PostMapping("/findUser")
@ApiOperation(value = "查找用户")
public ApiResult<UserBaseDto> findUser(@RequestBody @Validated FindUserParam param) {
if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
UserBaseDto user = userService.findUser(param);
return ApiResult.ok(user);
}
@PostMapping("/getUserByUserId")
@ApiOperation(value = "根据用户id查找用户信息")
public ApiResult<UserBaseDto> getUserByUserId(@RequestBody @Validated GetUserParam param) {
if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
UserBaseDto user = userService.getUserByUserId(param);
return ApiResult.ok(user);
}
@PostMapping("/modifyHeadPortrait")
@ApiOperation(value = "修改头像")
public ApiResult<Boolean> modifyHeadPortrait(@RequestBody @Validated ModifyHeadPortraitParam param) {
if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
userService.modifyHeadPortrait(param);
return ApiResult.ok();
}
@PostMapping("/modifyNickname")
@ApiOperation(value = "修改昵称")
public ApiResult<Boolean> modifyNickname(@RequestBody @Validated ModifyNicknameParam param) {
if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
userService.modifyNickname(param);
return ApiResult.ok();
}
@PostMapping("/modifyLandouNo")
@ApiOperation(value = "修改蓝豆号")
public ApiResult<Boolean> modifyLandouNo(@RequestBody @Validated ModifyLandouParam param) {
if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
userService.modifyLandouNo(param);
return ApiResult.ok();
}
@PostMapping("/modifySex")
@ApiOperation(value = "修改性别")
public ApiResult<Boolean> modifySex(@RequestBody @Validated ModifySexParam param) {
if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
userService.modifySex(param);
return ApiResult.ok();
}
} }
package com.wecloud.im.user.controller; package com.wecloud.im.user.controller;
import com.wecloud.im.enums.FriendStateEnum;
import com.wecloud.im.enums.VerifySceneEnum; import com.wecloud.im.enums.VerifySceneEnum;
import com.wecloud.im.user.constant.RedisKeyPrefixConstant; import com.wecloud.im.user.constant.RedisKeyPrefixConstant;
import com.wecloud.im.user.param.SendVerifyCodeParam; import com.wecloud.im.user.param.SendVerifyCodeParam;
...@@ -47,7 +46,7 @@ public class VerifyCodeController extends BaseController { ...@@ -47,7 +46,7 @@ public class VerifyCodeController extends BaseController {
if (BaseEnum.valueOf(VerifySceneEnum.class, param.getVerifyScene()) == null) { if (BaseEnum.valueOf(VerifySceneEnum.class, param.getVerifyScene()) == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
// String verifyCode = this.generateVerifyCode(); // String verifyCode = RandomUtil.generateVerifyCode();
String verifyCode = "666666"; String verifyCode = "666666";
String key = new StringBuilder(RedisKeyPrefixConstant.VERIFY_CODE_PREFIX).append(param.getVerifyScene()).append(param.getPhone()).toString(); String key = new StringBuilder(RedisKeyPrefixConstant.VERIFY_CODE_PREFIX).append(param.getVerifyScene()).append(param.getPhone()).toString();
redisUtils.addKey(key, verifyCode, Duration.ofSeconds(3 * 60)); redisUtils.addKey(key, verifyCode, Duration.ofSeconds(3 * 60));
...@@ -55,15 +54,6 @@ public class VerifyCodeController extends BaseController { ...@@ -55,15 +54,6 @@ public class VerifyCodeController extends BaseController {
return ApiResult.ok(); return ApiResult.ok();
} }
/**
* 生成短信验证码
* @return
*/
private String generateVerifyCode() {
Integer verifyCode = (int) ((Math.random() * 9 + 1) * 100000);
return verifyCode.toString();
}
} }
...@@ -32,6 +32,9 @@ public class User extends BaseEntity { ...@@ -32,6 +32,9 @@ public class User extends BaseEntity {
@TableId(value = "id", type = IdType.INPUT) @TableId(value = "id", type = IdType.INPUT)
private Long id; private Long id;
@ApiModelProperty("蓝豆号")
private String idNumber;
@ApiModelProperty("手机号码") @ApiModelProperty("手机号码")
private String phone; private String phone;
......
package com.wecloud.im.user.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/2/23 11:14
* @Description 查找用户入参
*/
@Data
public class FindUserParam implements Serializable {
private static final long serialVersionUID = 5511914212981726139L;
/**
* 查询字符串
*/
@NotNull(message = "查询字符串不可为空")
@ApiModelProperty("查询字符串")
private String queryStr;
}
package com.wecloud.im.user.param;
import com.wecloud.im.friend.param.ImFriendBaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/2/22 23:20
* @Description 好友出参
*/
@Data
public class FriendDto extends ImFriendBaseDto {
private static final long serialVersionUID = 5580006330057637138L;
@ApiModelProperty("蓝豆号")
private String idNumber;
@ApiModelProperty("昵称")
private String nickname;
/**
* 头像路径url
*/
@ApiModelProperty("头像路径url")
private String headPortrait;
}
package com.wecloud.im.user.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/2/23 11:14
* @Description 查找用户入参
*/
@Data
public class GetUserParam implements Serializable {
private static final long serialVersionUID = 5511914212981726139L;
/**
* userId
*/
@NotNull(message = "userId不可为空")
@ApiModelProperty("userId")
private String userId;
}
package com.wecloud.im.user.param; package com.wecloud.im.user.param;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
/** /**
...@@ -13,7 +11,6 @@ import java.io.Serializable; ...@@ -13,7 +11,6 @@ import java.io.Serializable;
* @Description 用户登录成功dto * @Description 用户登录成功dto
*/ */
@Data @Data
@AllArgsConstructor
public class LoginSuccessDto implements Serializable { public class LoginSuccessDto implements Serializable {
private static final long serialVersionUID = 7813920366165375711L; private static final long serialVersionUID = 7813920366165375711L;
...@@ -24,4 +21,22 @@ public class LoginSuccessDto implements Serializable { ...@@ -24,4 +21,22 @@ public class LoginSuccessDto implements Serializable {
@ApiModelProperty("userId") @ApiModelProperty("userId")
private String userId; private String userId;
@ApiModelProperty("蓝豆号")
private String idNumber;
@ApiModelProperty("手机号码")
private String phone;
@ApiModelProperty("邮箱号码")
private String email;
@ApiModelProperty("性别")
private Integer sex;
@ApiModelProperty("头像")
private String headPortrait;
@ApiModelProperty("昵称")
private String nickname;
} }
package com.wecloud.im.user.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/2/23 15:20
* @Description 修改头像入参
*/
@Data
public class ModifyHeadPortraitParam implements Serializable {
private static final long serialVersionUID = -5394800929946659395L;
/**
* userId
*/
@NotNull(message = "userId不可为空")
@ApiModelProperty("userId")
private Long userId;
/**
* 头像url
*/
@NotNull(message = "头像url不能为空")
@ApiModelProperty("头像url")
private String headPortrait;
}
package com.wecloud.im.user.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/2/23 15:20
* @Description 修改昵称入参
*/
@Data
public class ModifyLandouParam implements Serializable {
private static final long serialVersionUID = -4266385433321572881L;
/**
* userId
*/
@NotNull(message = "userId不可为空")
@ApiModelProperty("userId")
private Long userId;
/**
* 蓝豆号
*/
@NotNull(message = "蓝豆号不能为空")
@ApiModelProperty("蓝豆号")
private String landouNo;
}
package com.wecloud.im.user.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/2/23 15:20
* @Description 修改昵称入参
*/
@Data
public class ModifyNicknameParam implements Serializable {
private static final long serialVersionUID = -4266385433321572881L;
/**
* userId
*/
@NotNull(message = "userId不可为空")
@ApiModelProperty("userId")
private Long userId;
/**
* 昵称
*/
@NotNull(message = "昵称不能为空")
@ApiModelProperty("昵称")
private String nickname;
}
package com.wecloud.im.user.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/2/23 15:20
* @Description 修改性别入参
*/
@Data
public class ModifySexParam implements Serializable {
private static final long serialVersionUID = -3340451953818782194L;
/**
* userId
*/
@NotNull(message = "userId不可为空")
@ApiModelProperty("userId")
private Long userId;
/**
* 性别
* @see com.wecloud.im.enums.SexEnum
*/
@NotNull(message = "性别不可为空不可为空")
@ApiModelProperty("性别 1-男 2-女 3-未知")
private Integer sex;
}
package com.wecloud.im.user.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/2/24 11:26
* @Description 用户注册成功dto
*/
@Data
@AllArgsConstructor
public class RegisterSuccessDto implements Serializable {
private static final long serialVersionUID = 7813920366165375711L;
/**
* userId
*/
@ApiModelProperty("userId")
private String userId;
}
package com.wecloud.im.user.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/2/23 11:27
* @Description 用户基本信息
*/
@Data
public class UserBaseDto implements Serializable {
private static final long serialVersionUID = -6070534424163538590L;
/**
* userId
*/
@ApiModelProperty("userId")
private String userId;
@ApiModelProperty("蓝豆号")
private String idNumber;
/**
* 性别
* @see com.wecloud.im.enums.SexEnum
*/
@ApiModelProperty("性别 1-男 2-女 3-未知")
private Integer sex;
@ApiModelProperty("昵称")
private String nickname;
/**
* 头像路径url
*/
@ApiModelProperty("头像路径url")
private String headPortrait;
/**
* 与我关系
* @see com.wecloud.im.enums.RelationEnum
*/
@ApiModelProperty("与我关系 1-陌生人 2-好友 3-被我拉黑")
private Integer relation;
}
package com.wecloud.im.user.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.friend.param.ImFriendApplyDto;
import com.wecloud.im.friend.param.ImFriendBaseDto;
import com.wecloud.im.friend.param.ImFriendBaseParam;
import com.wecloud.im.friend.param.ImFriendPageParam;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.user.entity.User;
import com.wecloud.im.user.mapper.UserMapper;
import com.wecloud.im.user.param.FriendDto;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author wenzhida
* @Date 2022/2/21 17:05
* @Description 用户服务接口
*/
@Service
public class FriendService extends BaseServiceImpl<UserMapper, User> {
@Autowired
private ImClientService imClientService;
@Autowired
private ImFriendService imFriendService;
@Autowired
private UserService userService;
public FriendDto getFriendInfo(ImFriendBaseParam param) {
ImClient currentClient = imClientService.getCurentClient();
if (currentClient == null) {
throw new BusinessException("当前登录用户未找到");
}
ImClient friendClient = imClientService.getCacheImClient(currentClient.getFkAppid(), param.getFriendClientId());
if (friendClient == null) {
throw new BusinessException("朋友信息未找到");
}
ImFriendApplyDto friendInfo = imFriendService.getFriendInfo(currentClient.getClientId(), friendClient.getClientId());
if (friendInfo == null) {
throw new BusinessException("朋友信息未找到");
}
User user = userService.getOne(
new QueryWrapper<User>().lambda()
.in(User::getId, friendInfo.getFriendClientId())
);
FriendDto friendDto = new FriendDto();
BeanUtils.copyProperties(friendInfo, friendDto);
if (user != null) {
friendDto.setIdNumber(user.getIdNumber());
friendDto.setHeadPortrait(user.getHeadPortrait());
friendDto.setNickname(user.getNickname());
}
return friendDto;
}
/**
* 全量获取好友列表
*/
public List<FriendDto> getFriends() {
ImClient currentClient = imClientService.getCurentClient();
if (currentClient == null) {
throw new BusinessException("当前登录用户未找到");
}
ImFriendPageParam pageParam = new ImFriendPageParam();
pageParam.setPageIndex(1L);
pageParam.setPageSize(Long.MAX_VALUE);
Paging<ImFriendBaseDto> pageFriends = imFriendService.getImFriendPageList(currentClient.getClientId(), pageParam);
List<FriendDto> friendDtoList = Lists.newArrayList();
if (pageFriends == null || CollectionUtils.isEmpty(pageFriends.getRecords())) {
return friendDtoList;
}
List<String> friendClientIds = pageFriends.getRecords().stream().map(ImFriendBaseDto::getFriendClientId).collect(Collectors.toList());
List<User> userList = userService.list(
new QueryWrapper<User>().lambda()
.in(User::getId, friendClientIds)
);
if (CollectionUtils.isEmpty(userList)) {
return friendDtoList;
}
Map<String, User> userMap = Maps.newHashMap();
for (User user : userList) {
userMap.put(user.getId().toString(), user);
}
for (ImFriendBaseDto record : pageFriends.getRecords()) {
FriendDto friendDto = new FriendDto();
BeanUtils.copyProperties(record, friendDto);
User user = userMap.get(record.getFriendClientId());
if (user != null) {
friendDto.setIdNumber(user.getIdNumber());
friendDto.setHeadPortrait(user.getHeadPortrait());
friendDto.setNickname(user.getNickname());
}
friendDtoList.add(friendDto);
}
return friendDtoList;
}
/**
* 获取好友列表申请
*/
public List<FriendDto> getApplyFriends() {
ImClient currentClient = imClientService.getCurentClient();
if (currentClient == null) {
throw new BusinessException("当前登录用户未找到");
}
List<ImFriendApplyDto> friendInfos = imFriendService.getApplyFriends(currentClient);
List<FriendDto> friendDtoList = Lists.newArrayList();
if (CollectionUtils.isEmpty(friendInfos)) {
return friendDtoList;
}
List<String> friendClientIds = friendInfos.stream().map(ImFriendBaseDto::getFriendClientId).collect(Collectors.toList());
List<User> userList = userService.list(
new QueryWrapper<User>().lambda()
.in(User::getId, friendClientIds)
);
if (CollectionUtils.isEmpty(userList)) {
return friendDtoList;
}
Map<String, User> userMap = Maps.newHashMap();
for (User user : userList) {
userMap.put(user.getId().toString(), user);
}
for (ImFriendApplyDto record : friendInfos) {
FriendDto friendDto = new FriendDto();
BeanUtils.copyProperties(record, friendDto);
User user = userMap.get(record.getFriendClientId());
if (user != null) {
friendDto.setIdNumber(user.getIdNumber());
friendDto.setHeadPortrait(user.getHeadPortrait());
friendDto.setNickname(user.getNickname());
}
friendDtoList.add(friendDto);
}
return friendDtoList;
}
}
package com.wecloud.im.user.service; package com.wecloud.im.user.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.protobuf.ServiceException;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.enums.FriendStateEnum;
import com.wecloud.im.enums.RelationEnum;
import com.wecloud.im.enums.VerifySceneEnum; import com.wecloud.im.enums.VerifySceneEnum;
import com.wecloud.im.friend.entity.ImFriend;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.service.ImClientBlacklistService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.user.constant.RedisKeyPrefixConstant; import com.wecloud.im.user.constant.RedisKeyPrefixConstant;
import com.wecloud.im.user.entity.User; import com.wecloud.im.user.entity.User;
import com.wecloud.im.user.mapper.UserMapper; import com.wecloud.im.user.mapper.UserMapper;
import com.wecloud.im.user.param.ChangePhoneParam; import com.wecloud.im.user.param.ChangePhoneParam;
import com.wecloud.im.user.param.CheckPhoneParam; import com.wecloud.im.user.param.CheckPhoneParam;
import com.wecloud.im.user.param.FindUserParam;
import com.wecloud.im.user.param.GetUserParam;
import com.wecloud.im.user.param.LoginSuccessDto;
import com.wecloud.im.user.param.ModifyHeadPortraitParam;
import com.wecloud.im.user.param.ModifyLandouParam;
import com.wecloud.im.user.param.ModifyNicknameParam;
import com.wecloud.im.user.param.ModifySexParam;
import com.wecloud.im.user.param.ResetPasswordParam; import com.wecloud.im.user.param.ResetPasswordParam;
import com.wecloud.im.user.param.UserBaseDto;
import com.wecloud.im.user.param.UserLoginParam; import com.wecloud.im.user.param.UserLoginParam;
import com.wecloud.im.user.param.UserRegisterParam; import com.wecloud.im.user.param.UserRegisterParam;
import com.wecloud.im.ws.utils.RedisUtils; import com.wecloud.im.ws.utils.RedisUtils;
import com.wecloud.utils.AesUtil; import com.wecloud.utils.AesUtil;
import com.wecloud.utils.RandomUtil;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.exception.BusinessException; import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -34,6 +49,15 @@ public class UserService extends BaseServiceImpl<UserMapper, User> { ...@@ -34,6 +49,15 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
@Autowired @Autowired
private RedisUtils redisUtils; private RedisUtils redisUtils;
@Autowired
private ImClientService imClientService;
@Autowired
private ImFriendService imFriendService;
@Autowired
private ImClientBlacklistService imClientBlacklistService;
/** /**
* 校验手机号码是否可使用 * 校验手机号码是否可使用
* @param param * @param param
...@@ -61,6 +85,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> { ...@@ -61,6 +85,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
} }
User user = new User(); User user = new User();
user.setId(SnowflakeUtil.getId()); user.setId(SnowflakeUtil.getId());
user.setIdNumber(this.getLandouNo());
user.setPhone(param.getPhone()); user.setPhone(param.getPhone());
user.setPassword(AesUtil.encrypt(param.getPassword())); user.setPassword(AesUtil.encrypt(param.getPassword()));
user.setCreateTime(new Date()); user.setCreateTime(new Date());
...@@ -73,13 +98,19 @@ public class UserService extends BaseServiceImpl<UserMapper, User> { ...@@ -73,13 +98,19 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
* 用户登录 * 用户登录
* @param param * @param param
*/ */
public String loginUser(UserLoginParam param) { public LoginSuccessDto loginUser(UserLoginParam param) {
User user = this.getOne(new QueryWrapper<User>().lambda() User user = this.getOne(new QueryWrapper<User>().lambda()
.eq(User::getPhone, param.getPhone())); .eq(User::getPhone, param.getPhone()));
if (user == null) {
throw new BusinessException("该手机号码还未注册");
}
if (!param.getPassword().equals(AesUtil.decrypt(user.getPassword()))) { if (!param.getPassword().equals(AesUtil.decrypt(user.getPassword()))) {
throw new BusinessException("账户或密码错误"); throw new BusinessException("账户或密码错误");
} }
return String.valueOf(user.getId()); LoginSuccessDto loginSuccessDto = new LoginSuccessDto();
BeanUtils.copyProperties(user, loginSuccessDto);
loginSuccessDto.setUserId(user.getId().toString());
return loginSuccessDto;
} }
/** /**
...@@ -124,11 +155,148 @@ public class UserService extends BaseServiceImpl<UserMapper, User> { ...@@ -124,11 +155,148 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
} }
/** /**
* 查找本人信息
*/
public UserBaseDto myInfo() {
ImClient currentClient = imClientService.getCurentClient();
User user = this.getOne(new QueryWrapper<User>().lambda()
.eq(User::getId, currentClient.getClientId()));
if (user == null) {
throw new BusinessException("账号不存在");
}
UserBaseDto userBaseDto = new UserBaseDto();
BeanUtils.copyProperties(user, userBaseDto);
userBaseDto.setUserId(user.getId().toString());
return userBaseDto;
}
/**
* 查找用户
* @param param
*/
public UserBaseDto findUser(FindUserParam param) {
User user = this.getOne(new QueryWrapper<User>().lambda()
.eq(User::getPhone, param.getQueryStr()));
if (user == null) {
throw new BusinessException("账号不存在");
}
UserBaseDto userBaseDto = new UserBaseDto();
BeanUtils.copyProperties(user, userBaseDto);
userBaseDto.setUserId(user.getId().toString());
userBaseDto.setRelation(RelationEnum.STRANGER.getCode());
// 查询该好友与自己关系: 陌生人、好友、被拉黑名单
ImClient currentClient = imClientService.getCurentClient();
ImFriend imFriend = imFriendService.getByKey(currentClient.getClientId(), user.getId().toString());
if (imFriend != null && FriendStateEnum.CONFORM.getCode().equals(imFriend.getState())) {
userBaseDto.setRelation(RelationEnum.FRIEND.getCode());
}
// 查询是否被拉黑
if (imClientBlacklistService.isBeBlack(currentClient.getClientId(), user.getId().toString())) {
userBaseDto.setRelation(RelationEnum.BE_BLACK.getCode());
}
return userBaseDto;
}
/**
* 查找用户
* @param param
*/
public UserBaseDto getUserByUserId(GetUserParam param) {
User user = this.getOne(new QueryWrapper<User>().lambda()
.eq(User::getId, param.getUserId()));
if (user == null) {
throw new BusinessException("账号不存在");
}
UserBaseDto userBaseDto = new UserBaseDto();
BeanUtils.copyProperties(user, userBaseDto);
userBaseDto.setUserId(user.getId().toString());
userBaseDto.setRelation(RelationEnum.STRANGER.getCode());
// 查询该好友与自己关系: 陌生人、好友、被拉黑名单
ImClient currentClient = imClientService.getCurentClient();
ImFriend imFriend = imFriendService.getByKey(currentClient.getClientId(), user.getId().toString());
if (imFriend != null && FriendStateEnum.CONFORM.getCode().equals(imFriend.getState())) {
userBaseDto.setRelation(RelationEnum.FRIEND.getCode());
}
// 查询是否被拉黑
if (imClientBlacklistService.isBeBlack(currentClient.getClientId(), user.getId().toString())) {
userBaseDto.setRelation(RelationEnum.BE_BLACK.getCode());
}
return userBaseDto;
}
/**
* 修改头像
* @param param
*/
public void modifyHeadPortrait(ModifyHeadPortraitParam param) {
User user = this.getById(param.getUserId());
if (user == null) {
throw new BusinessException("查无用户");
}
user.setHeadPortrait(param.getHeadPortrait());
this.updateById(user);
}
/**
* 修改昵称
* @param param
*/
public void modifyNickname(ModifyNicknameParam param) {
User user = this.getById(param.getUserId());
if (user == null) {
throw new BusinessException("查无用户");
}
user.setNickname(param.getNickname());
this.updateById(user);
}
/**
* 修改昵称
* @param param
*/
public void modifyLandouNo(ModifyLandouParam param) {
User user = this.getById(param.getUserId());
if (user == null) {
throw new BusinessException("查无用户");
}
User userByLando = this.getByLandouNo(param.getLandouNo());
if (userByLando == null) {
throw new BusinessException("该蓝豆号已被使用,请更换");
}
user.setIdNumber(param.getLandouNo());
this.updateById(user);
}
/**
* 修改性别
* @param param
*/
public void modifySex(ModifySexParam param) {
User user = this.getById(param.getUserId());
if (user == null) {
throw new BusinessException("查无用户");
}
user.setSex(param.getSex());
this.updateById(user);
}
/**
* 根据蓝豆号获取用户
* @param landouNo
* @return
*/
public User getByLandouNo (String landouNo) {
return this.getOne(new QueryWrapper<User>().lambda()
.eq(User::getIdNumber, landouNo));
}
/**
* 校验短信验证码 * 校验短信验证码
* @param verifyCode * @param verifyCode
* @param redisKey * @param redisKey
*/ */
public void verifySMSVerifyCode(String verifyCode, String redisKey) { private void verifySMSVerifyCode(String verifyCode, String redisKey) {
String verifyCodeInRedis = redisUtils.getKey(redisKey); String verifyCodeInRedis = redisUtils.getKey(redisKey);
if (verifyCodeInRedis == null || !verifyCodeInRedis.equals(verifyCode)) { if (verifyCodeInRedis == null || !verifyCodeInRedis.equals(verifyCode)) {
throw new BusinessException("短信验证码不正确"); throw new BusinessException("短信验证码不正确");
...@@ -136,4 +304,20 @@ public class UserService extends BaseServiceImpl<UserMapper, User> { ...@@ -136,4 +304,20 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
redisUtils.delKey(redisKey); redisUtils.delKey(redisKey);
} }
/**
* 获取可使用蓝豆号
* @return
*/
private String getLandouNo () {
String landouNo;
do {
landouNo = RandomUtil.generateRandomStr(8);
User user = this.getByLandouNo(landouNo);
if (user == null) {
break;
}
} while (true);
return landouNo;
}
} }
...@@ -142,16 +142,13 @@ public class RtcServiceImpl extends UserStateListener implements RtcService { ...@@ -142,16 +142,13 @@ public class RtcServiceImpl extends UserStateListener implements RtcService {
@Override @Override
public ApiResult<Boolean> reject(RejectRtcChannelParam rejectRtcChannelParam) { public ApiResult<Boolean> reject(RejectRtcChannelParam rejectRtcChannelParam) {
ImClient client = imClientService.getCurentClient(); ImClient client = imClientService.getCurentClient();
// 修改缓存
mangerRtcCacheService.leave(client.getId(), rejectRtcChannelParam.getChannelId());
//获取频道内所有client //获取频道内所有client
List<String> clientListByRtcChannelId = mangerRtcCacheService.getClientListByRtcChannelId(rejectRtcChannelParam.getChannelId()); List<String> clientListByRtcChannelId = mangerRtcCacheService.getClientListByRtcChannelId(rejectRtcChannelParam.getChannelId());
// 移除自己
clientListByRtcChannelId.remove(client.getId().toString());
for (String toClientId : clientListByRtcChannelId) { for (String toClientId : clientListByRtcChannelId) {
// ws向接收方发送通知 // ws向接收方发送通知
RtcClientRejectResponse rtcClientRejectResponse = new RtcClientRejectResponse(); RtcClientRejectResponse rtcClientRejectResponse = new RtcClientRejectResponse();
...@@ -160,6 +157,16 @@ public class RtcServiceImpl extends UserStateListener implements RtcService { ...@@ -160,6 +157,16 @@ public class RtcServiceImpl extends UserStateListener implements RtcService {
rtcClientRejectResponse.setTimestamp(System.currentTimeMillis()); rtcClientRejectResponse.setTimestamp(System.currentTimeMillis());
wsRtcWrite.clientReject(rtcClientRejectResponse, Long.valueOf(toClientId)); wsRtcWrite.clientReject(rtcClientRejectResponse, Long.valueOf(toClientId));
} }
// 判断频道内是否无其他人了
if (CollectionUtils.isEmpty(clientListByRtcChannelId)) {
// 移除频道信息
mangerRtcCacheService.delChannelInfo(rejectRtcChannelParam.getChannelId());
} else if (clientListByRtcChannelId.size() == 1){
// 频道内只有一个人了 -- 删除频道 并将这个人设为离开
mangerRtcCacheService.leave(Long.valueOf(clientListByRtcChannelId.get(0)), rejectRtcChannelParam.getChannelId());
mangerRtcCacheService.delChannelInfo(rejectRtcChannelParam.getChannelId());
}
return ApiResult.ok(true); return ApiResult.ok(true);
} }
......
package com.wecloud.utils;
/**
* @Author wenzhida
* @Date 2022/2/23 14:57
* @Description 随机工具类
*/
public class RandomUtil {
/**
* 生成短信验证码
* @return
*/
public static String generateVerifyCode() {
Integer verifyCode = (int) ((Math.random() * 9 + 1) * 100000);
return verifyCode.toString();
}
/**
* 生成随机字符串
* @param length 字符串长度
* @return
*/
public static String generateRandomStr(int length) {
String src = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] m = src.toCharArray();
StringBuilder strSb = new StringBuilder();
for (int j = 0; j < length; j++) {
char c = m[(int) (Math.random() * 36)];
strSb.append(c);
}
return strSb.toString();
}
}
...@@ -23,13 +23,13 @@ ...@@ -23,13 +23,13 @@
where friend.client_id = #{clientId} and friend.state = 2 where friend.client_id = #{clientId} and friend.state = 2
</select> </select>
<select id="getUnsureFriendPageList" resultType="com.wecloud.im.friend.param.ImFriendApplyDto"> <select id="getApplyFriendPageList" resultType="com.wecloud.im.friend.param.ImFriendApplyDto">
select select
friend.id, client.client_id as friendClientId, friend.friend_name, claimer.client_id as claimerClientId, friend.id, client.client_id as friendClientId, friend.friend_name, claimer.client_id as claimerClientId,
friend.reject_remark, friend.request_remark, friend.state, friend.create_time friend.reject_remark, friend.request_remark, friend.state, friend.create_time
from im_friend friend inner join im_client client on friend.client_id_friend = client.client_id from im_friend friend inner join im_client client on friend.client_id_friend = client.client_id
inner join im_client claimer on friend.client_id_claimer = claimer.client_id inner join im_client claimer on friend.client_id_claimer = claimer.client_id
where friend.client_id = #{clientId} and friend.state = 1 where friend.client_id = #{clientId} and friend.client_id_claimer != #{clientId}
</select> </select>
<select id="filterNegativeFriends" resultType="java.lang.String"> <select id="filterNegativeFriends" resultType="java.lang.String">
......
-- 在feature-cluster 2021年12月22日之后,需要执行的的sql增量脚本 -- 在feature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
...@@ -73,16 +73,20 @@ ALTER TABLE im_conversation ADD COLUMN muted tinyint NOT NULL DEFAULT '1' COMMEN ...@@ -73,16 +73,20 @@ ALTER TABLE im_conversation ADD COLUMN muted tinyint NOT NULL DEFAULT '1' COMMEN
ALTER TABLE im_conversation_members 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-禁言';
ALTER TABLE im_conversation_members ADD COLUMN `client_id` varchar(200) DEFAULT NULL COMMENT '客户方提供的唯一id';
ALTER TABLE im_client_blacklist CHANGE fk_client_id_prevent client_id_prevent varchar(32) DEFAULT NULL COMMENT '拉黑者';
ALTER TABLE im_client_blacklist CHANGE fk_client_id_be_prevent client_id_be_prevent varchar(32) DEFAULT NULL COMMENT '被拉黑';
CREATE TABLE `im_user` CREATE TABLE `im_user`
( (
`id` bigint NOT NULL COMMENT '主键id', `id` bigint NOT NULL COMMENT '主键id',
`id_number` varchar(32) NOT NULL COMMENT '蓝豆号',
`phone` varchar(32) DEFAULT NULL COMMENT '手机号码', `phone` varchar(32) DEFAULT NULL COMMENT '手机号码',
`id_card_no` varchar(32) DEFAULT NULL COMMENT '身份证号码', `id_card_no` varchar(32) DEFAULT NULL COMMENT '身份证号码',
`email` varchar(32) DEFAULT NULL COMMENT '邮箱号码', `email` varchar(32) DEFAULT NULL COMMENT '邮箱号码',
`password` varchar(32) DEFAULT NULL COMMENT '密码', `password` varchar(32) DEFAULT NULL COMMENT '密码',
`sex` tinyint DEFAULT NULL COMMENT '性别 1-男 2-女', `sex` tinyint DEFAULT 3 COMMENT '性别 1-男 2-女 3-未知',
`head_portrait` varchar(1000) DEFAULT NULL COMMENT '头像', `head_portrait` varchar(1000) DEFAULT NULL COMMENT '头像',
`nickname` varchar(30) DEFAULT NULL COMMENT '昵称', `nickname` varchar(30) DEFAULT NULL COMMENT '昵称',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
......
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