123333
This commit is contained in:
@@ -1,19 +1,37 @@
|
||||
package com.ruoyi.cai.manager;
|
||||
|
||||
import cn.hutool.core.lang.UUID;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.ruoyi.cai.domain.Account;
|
||||
import com.ruoyi.cai.domain.User;
|
||||
import com.ruoyi.cai.domain.UserChatRecord;
|
||||
import com.ruoyi.cai.dto.app.query.im.ImMessageDTO;
|
||||
import com.ruoyi.cai.dto.app.query.im.SaveSendImImgReq;
|
||||
import com.ruoyi.cai.dto.app.vo.ImResp;
|
||||
import com.ruoyi.cai.enums.GenderEnum;
|
||||
import com.ruoyi.cai.dto.commom.im.ImgContentDTO;
|
||||
import com.ruoyi.cai.enums.ChatTypeEnum;
|
||||
import com.ruoyi.cai.enums.GenderEnum;
|
||||
import com.ruoyi.cai.enums.UserMemberTypeEnum;
|
||||
import com.ruoyi.cai.enums.im.ImImgStatusEnum;
|
||||
import com.ruoyi.cai.mq.AmqpProducer;
|
||||
import com.ruoyi.cai.mq.handleDelay.dto.SaveSendImImgDelayDto;
|
||||
import com.ruoyi.cai.service.*;
|
||||
import com.ruoyi.cai.util.FileUtils;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.system.domain.vo.SysOssVo;
|
||||
import com.ruoyi.system.service.ISysOssService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class ImService {
|
||||
|
||||
@Autowired
|
||||
@@ -28,6 +46,12 @@ public class ImService {
|
||||
private UserChatRecordService userChatRecordService;
|
||||
@Autowired
|
||||
private InnerUserFilter innerUserFilter;
|
||||
@Autowired
|
||||
private UserBlacklistService userBlacklistService;
|
||||
@Autowired
|
||||
private AmqpProducer amqpProducer;
|
||||
@Autowired
|
||||
private ISysOssService sysOssService;
|
||||
|
||||
public ImResp sendMessage(Long fromUserId, ImMessageDTO message) {
|
||||
ChatTypeEnum typeEnum = ChatTypeEnum.getByType(message.getType());
|
||||
@@ -135,9 +159,6 @@ public class ImService {
|
||||
return resp;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private UserBlacklistService userBlacklistService;
|
||||
|
||||
private Long getByImPrice(Long userId){
|
||||
UserMemberTypeEnum userMemberType = userMemberService.checkUserIsMember(userId);
|
||||
if(userMemberType == null){
|
||||
@@ -151,4 +172,97 @@ public class ImService {
|
||||
}
|
||||
return 10L;
|
||||
}
|
||||
|
||||
public void saveSendImImg(SaveSendImImgReq saveSendImImgReq) {
|
||||
if(StringUtils.isBlank(saveSendImImgReq.getImageUrl())){
|
||||
throw new ServiceException("图片url地址不存在");
|
||||
}
|
||||
if(saveSendImImgReq.getRecordId() == null){
|
||||
throw new ServiceException("记录不存在");
|
||||
}
|
||||
UserChatRecord userChatRecord = userChatRecordService.getById(saveSendImImgReq.getRecordId());
|
||||
if(userChatRecord == null){
|
||||
throw new ServiceException("记录不存在");
|
||||
}
|
||||
if(!ChatTypeEnum.IMAGE.getImType().equals(userChatRecord.getType())){
|
||||
throw new ServiceException("记录不是图片类型");
|
||||
}
|
||||
if(!ImImgStatusEnum.NO.getCode().equals(userChatRecord.getImgStatus())){
|
||||
return;
|
||||
}
|
||||
ImgContentDTO content = new ImgContentDTO();
|
||||
content.setServerId(saveSendImImgReq.getServerId());
|
||||
content.setMessageId(saveSendImImgReq.getMessageId());
|
||||
content.setTime(saveSendImImgReq.getTime());
|
||||
content.setImageUrl(saveSendImImgReq.getImageUrl());
|
||||
boolean update = userChatRecordService.update(Wrappers.lambdaUpdate(UserChatRecord.class)
|
||||
.eq(UserChatRecord::getId, userChatRecord.getId())
|
||||
.eq(UserChatRecord::getImgStatus, ImImgStatusEnum.NO.getCode())
|
||||
.set(UserChatRecord::getImgStatus, ImImgStatusEnum.INIT.getCode())
|
||||
.set(UserChatRecord::getContent, JSON.toJSONString(content)));
|
||||
if(!update){
|
||||
log.warn("保存图片消息 忽略,重复调用 record={}",JSON.toJSONString(userChatRecord));
|
||||
return;
|
||||
}
|
||||
SaveSendImImgDelayDto dto = new SaveSendImImgDelayDto();
|
||||
dto.setRecordId(saveSendImImgReq.getRecordId());
|
||||
amqpProducer.sendCommonDelayMq(dto,5);
|
||||
}
|
||||
|
||||
|
||||
public void saveSendImImgDeal(Long recordId) {
|
||||
UserChatRecord userChatRecord = userChatRecordService.getById(recordId);
|
||||
if(userChatRecord == null){
|
||||
log.warn("保存图片消息 忽略,记录不存在 recordId={}",recordId);
|
||||
return;
|
||||
}
|
||||
if(!ChatTypeEnum.IMAGE.getImType().equals(userChatRecord.getType())){
|
||||
log.warn("保存图片消息 忽略,记录不是图片类型 recordId={}",recordId);
|
||||
return;
|
||||
}
|
||||
if(ImImgStatusEnum.DOWNLOAD.getCode().equals(userChatRecord.getImgStatus())){
|
||||
log.warn("保存图片消息 忽略,状态错误 已经下载了 recordId={}",recordId);
|
||||
return;
|
||||
}
|
||||
String contentStr = userChatRecord.getContent();
|
||||
if(StringUtils.isBlank(contentStr)){
|
||||
log.warn("保存图片消息 忽略,状态错误 内容为空 recordId={}",recordId);
|
||||
return;
|
||||
}
|
||||
ImgContentDTO content = JSON.parseObject(contentStr, ImgContentDTO.class);
|
||||
if(content == null || StringUtils.isBlank(content.getImageUrl())){
|
||||
throw new ServiceException("图片url地址不存在");
|
||||
}
|
||||
ImImgStatusEnum imImgStatusEnum = ImImgStatusEnum.DOWNLOAD_FAIL;
|
||||
File imgeFile = null;
|
||||
try {
|
||||
File tempFile = FileUtils.getTempFile();
|
||||
imgeFile = getSaveSendImImgTempFile(tempFile, content.getImageUrl());
|
||||
FileUtils.downloadPath(content.getImageUrl(),imgeFile);
|
||||
SysOssVo upload = sysOssService.upload(imgeFile);
|
||||
content.setOssImage(upload.getUrl());
|
||||
imImgStatusEnum = ImImgStatusEnum.DOWNLOAD;
|
||||
}catch (Exception e){
|
||||
log.error("更新聊天图片失败",e);
|
||||
} finally {
|
||||
FileUtils.deleteFile(imgeFile);
|
||||
}
|
||||
userChatRecordService.update(Wrappers.lambdaUpdate(UserChatRecord.class)
|
||||
.eq(UserChatRecord::getId, recordId)
|
||||
.set(UserChatRecord::getImgStatus, imImgStatusEnum.getCode())
|
||||
.set(UserChatRecord::getContent, JSON.toJSONString(content)));
|
||||
}
|
||||
|
||||
private File getSaveSendImImgTempFile(File parentFile,String imageUrl){
|
||||
String day = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
||||
File tempFile = new File(parentFile,day);
|
||||
if (!tempFile.exists()) {
|
||||
tempFile.mkdirs();
|
||||
}
|
||||
String suffix = StringUtils.substring(imageUrl, imageUrl.lastIndexOf("."), imageUrl.length());
|
||||
String fileName = UUID.fastUUID() + "." + suffix;
|
||||
return new File(tempFile,fileName);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@ import com.ruoyi.cai.enums.forbid.ForbidTimeEnum;
|
||||
import com.ruoyi.cai.enums.forbid.ForbidTypeEnum;
|
||||
import com.ruoyi.cai.mq.AmqpProducer;
|
||||
import com.ruoyi.cai.mq.CommonDelayTypeEnum;
|
||||
import com.ruoyi.cai.mq.dto.CommonDelayDto;
|
||||
import com.ruoyi.cai.mq.handleDelay.CommonDelayDto;
|
||||
import com.ruoyi.cai.mq.handleDelay.dto.ForbidDelayDto;
|
||||
import com.ruoyi.cai.service.*;
|
||||
import com.ruoyi.cai.util.CaiDateUtil;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
@@ -251,9 +252,8 @@ public class UserForbidManager {
|
||||
// < 12小时
|
||||
long between = CaiDateUtil.diff(userForbid.getEndTime(),LocalDateTime.now());
|
||||
if(between > 0 && between < 60*60*12){
|
||||
CommonDelayDto dto = new CommonDelayDto();
|
||||
ForbidDelayDto dto = new ForbidDelayDto();
|
||||
dto.setForbidId(expireId);
|
||||
dto.setType(CommonDelayTypeEnum.USER_FORBID.getCode());
|
||||
amqpProducer.sendCommonDelayMq(dto,(int)between+5);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user