huliguo
3 天以前 5a7486e9893a706ed464e3197c9711286b077896
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -39,14 +39,23 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
@@ -557,7 +566,7 @@
        if (result == null || result.get("total_points") == null) {
            userStatistics.setTotalScore(0L);
        }else {
            userStatistics.setTotalScore((Long) result.get("total_points"));
            userStatistics.setTotalScore(((BigDecimal) result.get("total_points")).longValue());
        }
        //条件构造  消费积分现金支付金额
        queryWrapper.clear();
@@ -622,7 +631,7 @@
     * @param file
     * @return
     */
    @PostMapping("/upload")
 /*   @PostMapping("/upload")
    public R upload(MultipartFile file){
        String s = null;
        try {
@@ -631,9 +640,77 @@
            throw new RuntimeException(e);
        }
        return R.ok(s);
    }*/
    private static final String FILE_DIRECTORY = "/var/files/ldf_files"; // Linux路径
//    private static final String FILE_DIRECTORY = "E://ldf_files"; // Linux路径
    @PostMapping("/upload")
    public R handleFileUpload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return R.fail("请选择一个文件上传");
        }
        try {
            // 1. 构建日期目录路径(格式:/年/月/日)
            LocalDate today = LocalDate.now();
            String datePath = String.format("/%d/%02d/%02d",
                    today.getYear(), today.getMonthValue(), today.getDayOfMonth());
            // 2. 完整目标目录路径
            String fullDirPath = FILE_DIRECTORY + datePath;
            File targetDir = new File(fullDirPath);
            // 3. 自动创建目录(如果不存在)
            if (!targetDir.exists()) {
                targetDir.mkdirs(); // 递归创建所有父目录
            }
            String UUID= java.util.UUID.randomUUID().toString();
            // 4. 保存文件
            String filePath = fullDirPath + "/" +UUID+ file.getOriginalFilename();
            File targetFile = new File(filePath);
            file.transferTo(targetFile);
            // 5. 返回可访问的URL(修正路径分隔符为Web格式)
            return R.ok("http://zjrqxny.com/account/app-user/download" + datePath + "/" + UUID+file.getOriginalFilename());
        } catch (IOException e) {
            e.printStackTrace();
            return R.fail("上传文件失败");
        }
    }
    @GetMapping("/download/{year}/{month}/{day}/{fileName:.+}")
    @ResponseBody
    public ResponseEntity<org.springframework.core.io.Resource> downloadFile( @PathVariable String year,
                                                                              @PathVariable String month,
                                                                              @PathVariable String day,
                                                                              @PathVariable String fileName) {
        System.out.println("下载文件名:"+fileName);
        try {
            // 1. 解码文件名
            String decodedFileName = URLDecoder.decode(fileName, "UTF-8");
            java.nio.file.Path filePath = java.nio.file.Paths.get(FILE_DIRECTORY, year, month, day, decodedFileName).normalize();
            org.springframework.core.io.Resource resource = new org.springframework.core.io.UrlResource(filePath.toUri());
            if (resource.exists() || resource.isReadable()) {
                // 5. 设置下载头(兼容所有浏览器)
                String contentDisposition = "attachment; filename=\"" + decodedFileName + "\"; " +
                        "filename*=UTF-8''" + URLEncoder.encode(decodedFileName, "UTF-8").replace("+", "%20");
                return ResponseEntity.ok()
                        .contentType(MediaType.APPLICATION_OCTET_STREAM)
                        .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
                        .body(resource);
            } else {
                return ResponseEntity.notFound().build();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
            return ResponseEntity.status(500).build();
        }
    }
    /**
     * 清空绑定门店的用户门店数据