chenhj
2026-04-24 e21fe957e156bd5c3207c6a5be1c955ff0194d24
APK文件上传
已添加1个文件
已修改7个文件
152 ■■■■ 文件已修改
src/main/java/com/ruoyi/basic/enums/ApplicationTypeEnum.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/utils/FileUtil.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/other/controller/PdaVersionController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/other/dto/PdaVersionDTO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/other/pojo/PdaVersion.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/other/service/PdaVersionService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/other/service/impl/PdaVersionServiceImpl.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/enums/ApplicationTypeEnum.java
@@ -4,7 +4,8 @@
    IMAGE("image"),
    FILE("file"),
    AFTER_FILE("after_file"),
    BEFORE_FILE("before_file");
    BEFORE_FILE("before_file"),
    APK("apk");
    private final String type;
src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
@@ -2,7 +2,8 @@
public enum RecordTypeEnum {
    SHIPPING_INFO("shipping_info"),
    INSPECTION_TASK("inspection_task");
    INSPECTION_TASK("inspection_task"),
    PDA_VERSION("pda_version");
    private final String type;
    RecordTypeEnum(String type) { this.type = type; }
src/main/java/com/ruoyi/basic/utils/FileUtil.java
@@ -481,6 +481,68 @@
        return res;
    }
    /**
     * é€šè¿‡æ–‡ä»¶å…³è”id获取文件预览地址
     *
     * @param application åº”用
     * @param recordType  è®°å½•类型
     * @param recordId    è®°å½•id
     */
    public List<String> getFilePreviewURLByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum application, RecordTypeEnum recordType, Long recordId) {
        List<StorageAttachment> storageAttachments = getStorageAttachmentsByApplicationAndRecordTypeAndRecordId(application, recordType, recordId);
        if (CollectionUtils.isEmpty(storageAttachments)) {
            return new ArrayList<>();
        }
        return getFilePreviewURLByStorageAttachmentIds(storageAttachments.stream().map(StorageAttachment::getId).collect(Collectors.toList()));
    }
    /**
     * é€šè¿‡æ–‡ä»¶å…³è”id获取文件预览地址存在过期时间
     *
     * @param application åº”用
     * @param recordType  è®°å½•类型
     * @param recordId    è®°å½•id
     * @param expired     è¿‡æœŸæ—¶é—´ï¼ˆåˆ†é’Ÿï¼‰
     */
    public List<String> getFilePreviewURLByApplicationAndRecordTypeAndRecordIdAndExpired(ApplicationTypeEnum application, RecordTypeEnum recordType, Long recordId, BigDecimal expired) {
        List<StorageAttachment> storageAttachments = getStorageAttachmentsByApplicationAndRecordTypeAndRecordId(application, recordType, recordId);
        if (CollectionUtils.isEmpty(storageAttachments)) {
            return new ArrayList<>();
        }
        return getFilePreviewURLByStorageAttachmentIds(storageAttachments.stream().map(StorageAttachment::getId).collect(Collectors.toList()), expired);
    }
    /**
     * é€šè¿‡æ–‡ä»¶å…³è”id获取文件下载地址
     *
     * @param application åº”用
     * @param recordType  è®°å½•类型
     * @param recordId    è®°å½•id
     */
    public List<String> getFileDownloadURLByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum application, RecordTypeEnum recordType, Long recordId) {
        List<StorageAttachment> storageAttachments = getStorageAttachmentsByApplicationAndRecordTypeAndRecordId(application, recordType, recordId);
        if (CollectionUtils.isEmpty(storageAttachments)) {
            return new ArrayList<>();
        }
        return getFileDownloadURLByStorageAttachmentIds(storageAttachments.stream().map(StorageAttachment::getId).collect(Collectors.toList()));
    }
    /**
     * é€šè¿‡æ–‡ä»¶å…³è”id获取文件下载地址存在过期时间
     *
     * @param application åº”用
     * @param recordType  è®°å½•类型
     * @param recordId    è®°å½•id
     * @param expired     è¿‡æœŸæ—¶é—´ï¼ˆåˆ†é’Ÿï¼‰
     */
    public List<String> getFileDownloadURLByApplicationAndRecordTypeAndRecordIdAndExpired(ApplicationTypeEnum application, RecordTypeEnum recordType, Long recordId, BigDecimal expired) {
        List<StorageAttachment> storageAttachments = getStorageAttachmentsByApplicationAndRecordTypeAndRecordId(application, recordType, recordId);
        if (CollectionUtils.isEmpty(storageAttachments)) {
            return new ArrayList<>();
        }
        return getFileDownloadURLByStorageAttachmentIds(storageAttachments.stream().map(StorageAttachment::getId).collect(Collectors.toList()), expired);
    }
    public String buildSignedPreviewUrl(StorageBlobVO storageBlob) {
        return buildSignedUrl(storageBlob, "/preview/", properties.getExpired());
    }
src/main/java/com/ruoyi/other/controller/PdaVersionController.java
@@ -2,12 +2,12 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.other.dto.PdaVersionDTO;
import com.ruoyi.other.pojo.PdaVersion;
import com.ruoyi.other.service.PdaVersionService;
import io.swagger.v3.oas.annotations.Operation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping("/app")
@@ -22,10 +22,10 @@
        return R.ok(pdaVersionService.getAllVersion(page, pdaVersion));
    }
    @Operation(summary = "上传apk")
    @PostMapping("/uploadApk")
    public R uploadApk(@RequestParam("file") MultipartFile file, String name, String version) {
        return R.ok(pdaVersionService.uploadApk(file, name, version));
    @Operation(summary = "添加版本")
    @PostMapping("/add")
    public R add(@RequestBody PdaVersionDTO pdaVersion) {
        return R.ok(pdaVersionService.add(pdaVersion));
    }
}
src/main/java/com/ruoyi/other/dto/PdaVersionDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.other.dto;
import com.ruoyi.basic.dto.StorageBlobDTO;
import com.ruoyi.basic.dto.StorageBlobVO;
import com.ruoyi.other.pojo.PdaVersion;
import lombok.Data;
import java.util.List;
@Data
public class PdaVersionDTO extends PdaVersion {
    private List<StorageBlobDTO> storageBlobDTOList;
    private List<StorageBlobVO> storageBlobVOList;
    private String downloadURL;
}
src/main/java/com/ruoyi/other/pojo/PdaVersion.java
@@ -2,14 +2,12 @@
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.sales.pojo.CommonFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
@TableName("pda_version")
@@ -50,9 +48,6 @@
    @Schema(description = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    @TableField(exist = false)
    private List<CommonFile> commonFileList;
    @TableField(fill = FieldFill.INSERT)
    private Long deptId;
src/main/java/com/ruoyi/other/service/PdaVersionService.java
@@ -3,11 +3,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.other.dto.PdaVersionDTO;
import com.ruoyi.other.pojo.PdaVersion;
import org.springframework.web.multipart.MultipartFile;
public interface PdaVersionService extends IService<PdaVersion> {
    IPage<PdaVersion> getAllVersion(Page<PdaVersion> page, PdaVersion pdaVersion);
    IPage<PdaVersionDTO> getAllVersion(Page<PdaVersion> page, PdaVersion pdaVersion);
    boolean uploadApk(MultipartFile file, String name, String version);
    boolean add(PdaVersionDTO pdaVersion);
}
src/main/java/com/ruoyi/other/service/impl/PdaVersionServiceImpl.java
@@ -1,20 +1,24 @@
package com.ruoyi.other.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.basic.enums.ApplicationTypeEnum;
import com.ruoyi.basic.enums.RecordTypeEnum;
import com.ruoyi.basic.utils.FileUtil;
import com.ruoyi.other.dto.PdaVersionDTO;
import com.ruoyi.other.mapper.PdaVersionMapper;
import com.ruoyi.other.pojo.PdaVersion;
import com.ruoyi.other.service.PdaVersionService;
import com.ruoyi.other.service.TempFileService;
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
@Service
@RequiredArgsConstructor
@@ -23,38 +27,34 @@
    private final PdaVersionMapper pdaVersionMapper;
    private final TempFileService tempFileService;
    private final CommonFileServiceImpl commonFileService;
    private final FileUtil fileUtil;
    @Override
    public IPage<PdaVersion> getAllVersion(Page<PdaVersion> page, PdaVersion pdaVersion) {
    public IPage<PdaVersionDTO> getAllVersion(Page<PdaVersion> page, PdaVersion pdaVersion) {
        LambdaQueryWrapper<PdaVersion> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByDesc(PdaVersion::getCreateTime);
        Page<PdaVersion> pdaVersionPage = pdaVersionMapper.selectPage(page, queryWrapper);
        Page<PdaVersionDTO> pdaVersionDTOPage = new Page<>(page.getCurrent(), page.getSize());
        List<PdaVersionDTO> pdaVersionDTOList = new ArrayList<>();
        pdaVersionPage.getRecords().forEach(item ->{
            item.setCommonFileList(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.APP.getValue()));
            PdaVersionDTO pdaVersionDTO = new PdaVersionDTO();
            BeanUtil.copyProperties(item, pdaVersionDTO);
            pdaVersionDTO.setStorageBlobVOList(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.APK, RecordTypeEnum.PDA_VERSION, item.getId()));
            String downloadURL = fileUtil.getFileDownloadURLByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.APK, RecordTypeEnum.PDA_VERSION, item.getId()).get(0) == null ?
                    "" : fileUtil.getFileDownloadURLByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.APK, RecordTypeEnum.PDA_VERSION, item.getId()).get(0);
            pdaVersionDTO.setDownloadURL(downloadURL);
            pdaVersionDTOList.add(pdaVersionDTO);
        });
        return pdaVersionPage;
        pdaVersionDTOPage.setRecords(pdaVersionDTOList);
        return pdaVersionDTOPage;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean uploadApk(MultipartFile file, String name, String version) {
    public boolean add(PdaVersionDTO pdaVersion) {
        // å‚数校验
        Assert.notNull(file, "文件不能为空");
        Assert.hasText(version, "版本号不能为空");
        try {
            PdaVersion pdaVersion = new PdaVersion();
            pdaVersion.setName(name);
            pdaVersion.setVersion(version);
        Assert.hasText(pdaVersion.getVersion(), "版本号不能为空");
            pdaVersionMapper.insert(pdaVersion);
            tempFileService.uploadByCommon(file, FileNameType.APP.getValue(), pdaVersion.getId());
        fileUtil.saveStorageAttachment(ApplicationTypeEnum.APK, RecordTypeEnum.PDA_VERSION, pdaVersion.getId(), pdaVersion.getStorageBlobDTOList());
            return true;
        } catch (Exception e) {
            throw new RuntimeException("上传APK失败: " + e.getMessage());
        }
    }
}