package com.hxzk.gps.controller.ThreeModel;
|
|
import cn.dev33.satoken.annotation.SaCheckLogin;
|
import com.hxzk.gps.controller.Map.Results.MarsResult;
|
import com.hxzk.gps.controller.Map.dto.MarsTreeTableDto;
|
import com.hxzk.gps.controller.ThreeModel.Results.ThreeModelResult;
|
import com.hxzk.gps.controller.ThreeModel.deo.ThreeModelDeo;
|
import com.hxzk.gps.entity.Map.TbMarsHomeset;
|
import com.hxzk.gps.entity.ThreeModel.TbThreemodel;
|
import com.hxzk.gps.service.ThreeModel.TbThreemodelService;
|
import com.hxzk.gps.util.Result.ReturnMessage;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.IOException;
|
import java.nio.file.Files;
|
import java.nio.file.InvalidPathException;
|
import java.nio.file.Path;
|
import java.nio.file.Paths;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* <p>
|
* 前端控制器
|
* </p>
|
*
|
* @author YuZhiTong
|
* @since 2025-09-03
|
*/
|
@RestController
|
@RequestMapping("/Threemodel")
|
public class TbThreemodelController {
|
@Autowired
|
TbThreemodelService tbThreemodelService;
|
@Value("${upload.dir-Map-ThreeJS}")
|
private String dirMapThree;
|
@SaCheckLogin
|
@ApiOperation(value = "平台用三维模型列表接口", notes = "该接口提供了平台三维地图配置的信息查询功能")
|
@PostMapping("FindThreemodel")
|
public ThreeModelResult FindThreemodel(@RequestBody ThreeModelDeo threeModelDeo){
|
return tbThreemodelService.FindThreemodel(threeModelDeo);
|
}
|
|
|
@SaCheckLogin
|
@ApiOperation(value = "平台三维模型配置新增接口", notes = "该接口提供了平台三维模型配置新增功能")
|
@PostMapping("add")
|
public ReturnMessage add(@RequestBody TbThreemodel tbThreemodel){
|
return tbThreemodelService.add(tbThreemodel);
|
}
|
|
@SaCheckLogin
|
@ApiOperation(value = "平台三维模型配置修改接口", notes = "该接口提供了平台三维模型配置修改功能")
|
@PostMapping("update")
|
public ReturnMessage update(@RequestBody TbThreemodel tbThreemodel){
|
return tbThreemodelService.update(tbThreemodel);
|
}
|
|
@PostMapping("upload")
|
public ReturnMessage upload(
|
@RequestParam("files") MultipartFile[] files, // 修改这里
|
@RequestParam(value = "departmentId", required = false) String departmentId,
|
@RequestParam(value = "filename", required = false) String filename,
|
@RequestParam(value = "id", required = false) String id,
|
HttpServletRequest request) {
|
|
ReturnMessage result = new ReturnMessage();
|
|
try {
|
// 检查是否有文件上传
|
if (files == null || files.length == 0) {
|
result.setCode(400);
|
result.setMsg("未找到上传的文件");
|
return result;
|
}
|
|
// 创建上传目录
|
String uploadDir = dirMapThree;
|
if (filename != null && !filename.trim().isEmpty()) {
|
uploadDir = uploadDir + "//" + filename.trim();
|
}
|
|
Path uploadPath = Paths.get(uploadDir);
|
if (!Files.exists(uploadPath)) {
|
Files.createDirectories(uploadPath);
|
}
|
|
List<String> successFiles = new ArrayList<>();
|
List<String> failedFiles = new ArrayList<>();
|
|
// 处理所有上传的文件
|
for (MultipartFile file : files) {
|
String originalFilename = file.getOriginalFilename();
|
|
if (originalFilename == null || originalFilename.isEmpty()) {
|
failedFiles.add("无名文件: 文件名不能为空");
|
continue;
|
}
|
|
try {
|
String safeFilename = Paths.get(originalFilename).getFileName().toString();
|
Path filePath = uploadPath.resolve(safeFilename);
|
|
// 保存文件
|
file.transferTo(filePath.toFile());
|
successFiles.add(originalFilename);
|
|
} catch (IOException e) {
|
failedFiles.add(originalFilename + ": " + e.getMessage());
|
} catch (InvalidPathException e) {
|
failedFiles.add(originalFilename + ": 文件名包含非法字符");
|
}
|
}
|
|
// 构建返回结果
|
Map<String, Object> data = new HashMap<>();
|
data.put("successFiles", successFiles);
|
data.put("failedFiles", failedFiles);
|
data.put("uploadPath", uploadDir);
|
|
|
if (failedFiles.isEmpty()) {
|
result.setCode(200);
|
result.setMsg("所有文件上传成功,共 " + successFiles.size() + " 个文件");
|
} else if (successFiles.isEmpty()) {
|
result.setCode(500);
|
result.setMsg("所有文件上传失败,共 " + failedFiles.size() + " 个文件");
|
} else {
|
result.setCode(206);
|
result.setMsg("部分文件上传成功,成功: " + successFiles.size() + ", 失败: " + failedFiles.size());
|
}
|
|
} catch (Exception e) {
|
result.setCode(500);
|
result.setMsg("服务器处理请求时发生错误: " + e.getMessage());
|
System.out.println("文件上传错误: " + e.getMessage());
|
}
|
|
return result;
|
}
|
/**
|
* 获取文件扩展名
|
*/
|
// 生成唯一文件名的辅助方法
|
private String generateUniqueFilename(String originalFilename) {
|
int dotIndex = originalFilename.lastIndexOf('.');
|
String baseName = (dotIndex > 0) ? originalFilename.substring(0, dotIndex) : originalFilename;
|
String extension = (dotIndex > 0) ? originalFilename.substring(dotIndex) : "";
|
|
// 使用时间戳和随机数确保唯一性
|
String timestamp = String.valueOf(System.currentTimeMillis());
|
String random = String.valueOf((int)(Math.random() * 1000));
|
|
return baseName + "_" + timestamp + "_" + random + extension;
|
}
|
}
|