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; /** *

* 前端控制器 *

* * @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 successFiles = new ArrayList<>(); List 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 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; } }