群消息回调保存,文件上传大小变更

This commit is contained in:
高保安
2025-12-17 20:44:42 +08:00
parent 01ea7e15fa
commit a9b1ef4f58
11 changed files with 193 additions and 49 deletions

View File

@@ -19,12 +19,12 @@ import java.util.List;
*/
@Slf4j
@RestController
@RequestMapping("/cloud_api/file")
@RequestMapping("/cloud_api/file")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class CloudFileController {
private final CloudFileService cloudFileService;
/**
* 批量上传云端文件
*/
@@ -33,19 +33,19 @@ public class CloudFileController {
@RequestPart("files") List<MultipartFile> files,
@RequestParam("path") String path,
@RequestParam("type") String type,
@RequestParam(value = "team_id", required = false) String teamId) {
@RequestParam(value = "team_id", required = false) String teamId,String accessToken) {
CloudFileUploadReq request = new CloudFileUploadReq();
request.setPath(path);
request.setType(type);
request.setTeamId(teamId);
request.setAccessToken(accessToken);
// TODO: 从Session或Token获取当前用户ID
String userId = "current_user_id";
String userId = "0";
return Result.success(cloudFileService.batchUpload(files, request, userId));
}
/**
* 通过URL批量上传云端文件
*/
@@ -53,10 +53,10 @@ public class CloudFileController {
public Result<CloudFileOperationVo> batchUploadByUrl(@RequestBody CloudFileUploadByUrlReq request) {
// TODO: 从Session或Token获取当前用户ID
String userId = "current_user_id";
return Result.success(cloudFileService.batchUploadByUrl(request, userId));
}
/**
* 下载文件
*/
@@ -64,7 +64,7 @@ public class CloudFileController {
public Result<CloudFileDownloadVo> downloadFile(@RequestBody CloudFileDownloadReq request) {
return Result.success(cloudFileService.downloadFile(request));
}
/**
* 查看文件列表
*/
@@ -72,7 +72,7 @@ public class CloudFileController {
public Result<CloudFileListVo> listFiles(@RequestBody CloudFileListReq request) {
return Result.success(cloudFileService.listFiles(request));
}
/**
* 删除文件
*/

View File

@@ -0,0 +1,18 @@
package com.realtime.mappers;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.realtime.model.pojo.SmartMessage;
import com.realtime.vo.SmartMessageVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SmartMessageMapper extends BaseMapper<SmartMessage> {
List<SmartMessageVo> findAllByContactId(@Param("contactId") Long contactId);
}

View File

@@ -0,0 +1,37 @@
package com.realtime.model.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@Data
public class SmartMessage implements Serializable {
/**
*
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
*
*/
private String message;
/**
*
*/
private LocalDateTime createdTime;
/**
*
*/
private Long contactId;
}

View File

@@ -17,7 +17,7 @@ public class AutoSoftwareHandler extends SimpleChannelInboundHandler<AutoSoftwar
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, AutoSoftwarePacket connectPacket) throws Exception {
String url = connectPacket.getUrl();
}

View File

@@ -0,0 +1,20 @@
package com.realtime.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.realtime.model.pojo.SmartMessage;
import java.time.LocalDateTime;
import java.util.List;
public interface SmartMessageService extends IService<SmartMessage> {
default void saveMessage(String msg, Long contactId) {
SmartMessage smartMessage = new SmartMessage();
smartMessage.setMessage(msg);
smartMessage.setContactId(contactId);
smartMessage.setCreatedTime(LocalDateTime.now());
save(smartMessage);
}
}

View File

@@ -28,136 +28,136 @@ import java.util.List;
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class CloudFileServiceImpl implements CloudFileService {
private final CloudApiConfig cloudApiConfig;
private final RestTemplate restTemplate;
private final ObjectMapper objectMapper;
@Override
public CloudFileOperationVo batchUpload(List<MultipartFile> files, CloudFileUploadReq request, String userId) {
if (files == null || files.isEmpty()) {
throw new BusinessException("文件列表不能为空");
}
try {
String url = cloudApiConfig.getBaseUrl() + "/file/upload";
// 构建multipart请求
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
// 添加文件
for (MultipartFile file : files) {
body.add("files", file.getResource());
}
// 添加其他参数
body.add("access_token", request.getAccessToken());
body.add("path", request.getPath());
body.add("type", request.getType());
if (request.getTeamId() != null) {
body.add("team_id", request.getTeamId());
}
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
// 调用外部API
ResponseEntity<CloudFileOperationVo> response = restTemplate.postForEntity(
url, requestEntity, CloudFileOperationVo.class);
return response.getBody();
} catch (Exception e) {
log.error("批量上传文件失败", e);
throw new BusinessException("批量上传文件失败: " + e.getMessage());
}
}
@Override
public CloudFileOperationVo batchUploadByUrl(CloudFileUploadByUrlReq request, String userId) {
if (request.getUrls() == null || request.getUrls().isEmpty()) {
throw new BusinessException("URL列表不能为空");
}
try {
String url = cloudApiConfig.getBaseUrl() + "/file/upload/url";
// 构建请求
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<CloudFileUploadByUrlReq> requestEntity = new HttpEntity<>(request, headers);
// 调用外部API
ResponseEntity<CloudFileOperationVo> response = restTemplate.postForEntity(
url, requestEntity, CloudFileOperationVo.class);
return response.getBody();
} catch (Exception e) {
log.error("批量URL上传文件失败", e);
throw new BusinessException("批量URL上传文件失败: " + e.getMessage());
}
}
@Override
public CloudFileDownloadVo downloadFile(CloudFileDownloadReq request) {
try {
String url = cloudApiConfig.getBaseUrl() + "/file/download";
// 构建请求
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<CloudFileDownloadReq> requestEntity = new HttpEntity<>(request, headers);
// 调用外部API
ResponseEntity<CloudFileDownloadVo> response = restTemplate.postForEntity(
url, requestEntity, CloudFileDownloadVo.class);
return response.getBody();
} catch (Exception e) {
log.error("生成下载链接失败", e);
throw new BusinessException("生成下载链接失败: " + e.getMessage());
}
}
@Override
public CloudFileListVo listFiles(CloudFileListReq request) {
try {
String url = cloudApiConfig.getBaseUrl() + "/file/list";
// 构建请求
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<CloudFileListReq> requestEntity = new HttpEntity<>(request, headers);
// 调用外部API
ResponseEntity<CloudFileListVo> response = restTemplate.postForEntity(
url, requestEntity, CloudFileListVo.class);
return response.getBody();
} catch (Exception e) {
log.error("查询文件列表失败", e);
throw new BusinessException("查询文件列表失败: " + e.getMessage());
}
}
@Override
public CloudFileOperationVo deleteFile(CloudFileDeleteReq request) {
try {
String url = cloudApiConfig.getBaseUrl() + "/file/delete";
// 构建请求
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<CloudFileDeleteReq> requestEntity = new HttpEntity<>(request, headers);
// 调用外部API
ResponseEntity<CloudFileOperationVo> response = restTemplate.postForEntity(
url, requestEntity, CloudFileOperationVo.class);
return response.getBody();
} catch (Exception e) {
log.error("删除文件失败", e);

View File

@@ -0,0 +1,19 @@
package com.realtime.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.realtime.mappers.SmartMessageMapper;
import com.realtime.model.pojo.SmartMessage;
import com.realtime.service.SmartMessageService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class SmartMessageServiceImpl extends ServiceImpl<SmartMessageMapper, SmartMessage>
implements SmartMessageService {
}

View File

@@ -0,0 +1,29 @@
package com.realtime.vo;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class SmartMessageVo {
/**
*
*/
private Long id;
/**
*
*/
private String message;
/**
*
*/
private LocalDateTime createdTime;
/**
*
*/
private Long contactId;
}

View File

@@ -15,8 +15,8 @@ file:
spring:
servlet:
multipart:
max-request-size: 100MB
max-file-size: 100MB
max-request-size: 1GB
max-file-size: 1GB
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://8.134.75.237:3309/real_time?serverTimezone=Asia/Shanghai

View File

@@ -4,6 +4,11 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.realtime.mappers.GroupMessageMapper">
<resultMap id="getGroupListVo" type="groupListMessagesVo">
<collection property="groupId" column="groupId"
select="com.realtime.mappers.SmartMessageMapper.findAllByContactId"/>
</resultMap>
<sql id="Base_Column_List">
id
@@ -11,7 +16,7 @@
sender,create_time,message_type
</sql>
<select id="getGroupList" resultType="groupListMessagesVo">
<select id="getGroupList" resultMap="getGroupListVo">
select g.id, g.sender, g.message, g.create_time, g.group_id, g.message_type,g.content_json
from group_message g
<where>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.realtime.mappers.SmartMessageMapper">
<sql id="Base_Column_List">
id,message,created_time,
contact_id
</sql>
<select id="findAllByContactId" resultType="smartMessageVo">
select <include refid="Base_Column_List"/> from smart_message sm where sm.contact_id = #{contactId}
</select>
</mapper>