package com.ym.controller; import com.alibaba.fastjson.JSON; import com.google.common.collect.Lists; import com.microsvc.toolkit.middleware.common.http.ImageUtil; import com.microsvc.toolkit.middleware.im.ImPluginContext; import com.microsvc.toolkit.middleware.im.impl.RongCloudImPlugin; import com.microsvc.toolkit.middleware.im.message.ETencentMessage; import com.microsvc.toolkit.middleware.im.message.MessageWrapper; import com.microsvc.toolkit.middleware.im.message.TencentRequest; import com.ym.mec.common.entity.ImMessageDto; import com.ym.service.MessageService; import io.rong.messages.FileMessage; import io.rong.messages.ImgMessage; import io.rong.messages.TxtMessage; import io.rong.messages.UserInfo; import io.rong.models.message.PrivateMessage; import io.rong.models.message.RecallMessage; import io.rong.models.message.TemplateMessage; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; /** * Created by weiqinxiao on 2019/2/25. */ @Slf4j @RestController @RequestMapping("/private") public class PrivateController { @Autowired MessageService messageService; @Autowired private ImPluginContext imPluginContext; @RequestMapping(value = "/send", method = RequestMethod.POST) public Object send(@RequestBody ImMessageDto imMessageDto) throws Exception { // 消息对象 MessageWrapper.PrivateMessage build = MessageWrapper.PrivateMessage.builder() .senderId(imMessageDto.getSenderId()) .targetIds(Lists.newArrayList(imMessageDto.getTargetIds())) .objectName(imMessageDto.getObjectName()) //.rongCloueMessage(txtMessage) .pushExt("") .includeSender(1) .cloudCustomData(imMessageDto.getExtra()) .syncOtherMachine(1) // 1:消息同步到 From_Account 在线终端和漫游上;2:消息不同步至 From_Account .build(); String objectName = imMessageDto.getObjectName(); if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) { // 融云消息体 PrivateMessage privateMessage = new PrivateMessage(); UserInfo userInfo = new UserInfo(); if(imMessageDto.getUserInfo() != null){ BeanUtils.copyProperties(imMessageDto.getUserInfo(),userInfo); } if("RC:ImgMsg".equals(objectName)){ ImgMessage imgMessage = new ImgMessage(imMessageDto.getMessageContent(),imMessageDto.getExtra(),imMessageDto.getFileUrl()); imgMessage.setUser(userInfo); privateMessage.setContent(imgMessage); }else if("RC:FileMsg".equals(objectName)){ FileMessage imgMessage = new FileMessage(imMessageDto.getFileName(),imMessageDto.getFileSize(),imMessageDto.getFileUrl(),imMessageDto.getExtra()); privateMessage.setContent(imgMessage); }else { TxtMessage txtMessage = new TxtMessage(imMessageDto.getMessageContent(),imMessageDto.getExtra()); txtMessage.setUser(userInfo); privateMessage.setContent(txtMessage); } privateMessage.setTargetId(imMessageDto.getTargetIds()); privateMessage.setSenderId(imMessageDto.getSenderId()); privateMessage.setObjectName(imMessageDto.getObjectName()); privateMessage.setIsIncludeSender(1); //messageService.privateSend(privateMessage); build.rongCloueMessage(privateMessage.getContent()); } else { // 腾讯云消息体 if("RC:ImgMsg".equals(objectName)){ // 图片消息 ImageUtil.ImageInfo imageReq = ImageUtil.ImageInfo.builder() .imgUrl(imMessageDto.getFileUrl()) .suffix(imMessageDto.getFileUrl().substring(imMessageDto.getFileUrl().lastIndexOf(".") + 1)) .build(); // 获取图片基本信息 ImageUtil.imageToBase64(imageReq); // 图片消息 build.objectName(ETencentMessage.TIMImageElem.name()) .tencentMessage(TencentRequest.getTIMImageElem(imageReq)); } else if ("RC:FileMsg".equals(objectName)) { // 文件消息 build.objectName(ETencentMessage.TIMFileElem.name()) .tencentMessage(TencentRequest.getTIMFileElem(imMessageDto.getFileUrl(), imMessageDto.getFileSize().intValue(), imMessageDto.getFileName())); } else { // 文本消息 build.objectName(ETencentMessage.TIMTextElem.name()) .tencentMessage(TencentRequest.MessageBody.builder() .msgType(ETencentMessage.TIMTextElem.name()) .msgContent(TencentRequest.TextMessageBody.builder().text(imMessageDto.getMessageContent()).build()) .build()); // 普通文本消息,若是超链接地址,则需要转换成腾讯云的消息格式 if (imMessageDto.getMessageContent().startsWith("http") && StringUtils.isBlank(imMessageDto.getExtra())) { // 自动填充为拓展消息内容 build.setCloudCustomData(imMessageDto.getMessageContent()); } } } String ret = imPluginContext.getPluginService().sendPrivateMessage(build); log.info("privateMessage send ret:{}, service={}, content={}", ret, imPluginContext.defaultService(), JSON.toJSONString(build)); return true; } /*@RequestMapping(value = "/sendCustom", method = RequestMethod.POST) public Object sendCustom(@RequestBody ImGroupMessage imGroupMessage) throws Exception { GroupMessage groupMessage = new GroupMessage(); ImTxtMessage content = (ImTxtMessage)imGroupMessage.getContent(); CustomMessage customMessage = new CustomMessage(content.getContent(),content.getExtra()); customMessage.setTYPE(imGroupMessage.getType()); groupMessage.setContent(customMessage); groupMessage.setTargetId(imGroupMessage.getTargetId()); groupMessage.setSenderId(imGroupMessage.getSenderId()); groupMessage.setObjectName(imGroupMessage.getType()); return messageService.groupSend(groupMessage); }*/ @RequestMapping(value = "/recall", method = RequestMethod.POST) public Object recall(@RequestBody RecallMessage recallMessage) throws Exception { return messageService.privateRecall(recallMessage); } @RequestMapping(value = "/sendTemplate", method = RequestMethod.POST) public Object sendTemplate(@RequestBody TemplateMessage templateMessage) throws Exception { return messageService.privateSendTemplate(templateMessage); } }