|
|
@@ -15,17 +15,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.dromara.system.domain.vo.SysOssVo;
|
|
|
import org.dromara.system.service.ISysOssService;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
import org.w3c.dom.Document;
|
|
|
|
|
|
import java.net.URLEncoder;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Collection;
|
|
|
+import java.util.*;
|
|
|
+import java.util.concurrent.CompletableFuture;
|
|
|
|
|
|
/**
|
|
|
* App版本管理Service业务层处理
|
|
|
@@ -203,4 +204,131 @@ public class AppVersionManagementServiceImpl implements IAppVersionManagementSer
|
|
|
return urlDownload;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SysOssVo uploadAppFileSync(MultipartFile file) {
|
|
|
+ try {
|
|
|
+ // 上传文件到 OSS
|
|
|
+ return ossService.uploadInputstream(file);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("文件上传失败", e);
|
|
|
+ throw new RuntimeException("文件上传失败", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void triggerAsyncUpdate(SysOssVo sysOssVo, MultipartFile file) {
|
|
|
+ // 启动异步任务更新版本信息
|
|
|
+ updateAppVersionAsync(sysOssVo, file);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean generateAppDownLoadFile(Long id) {
|
|
|
+ AppVersionManagementVo appVersionManagementVo = baseMapper.selectAllAppVersionsById(id);
|
|
|
+ if(appVersionManagementVo!=null){
|
|
|
+ SysOssVo sysOssVo = ossService.getById(Long.valueOf(appVersionManagementVo.getOssId()));
|
|
|
+ AppVersionManagementBo bo = createUpdateBo(appVersionManagementVo,sysOssVo.getFileName(),appVersionManagementVo.getUpdatePackageSize(),sysOssVo);
|
|
|
+ // 执行更新
|
|
|
+ boolean success = updateByBo(bo);
|
|
|
+ if (success) {
|
|
|
+ log.info("{} 版本信息更新成功", bo.getOsType());
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ log.error("{} 版本信息更新失败", bo.getOsType());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Async
|
|
|
+ public CompletableFuture<Void> updateAppVersionAsync(SysOssVo sysOssVo, MultipartFile file) {
|
|
|
+ try {
|
|
|
+ // 根据文件扩展名确定平台类型
|
|
|
+ String platform = determinePlatformFromFileName(file.getOriginalFilename());
|
|
|
+ if (platform == null) {
|
|
|
+ log.warn("无法识别文件类型: " + file.getOriginalFilename());
|
|
|
+ return CompletableFuture.completedFuture(null);
|
|
|
+ }
|
|
|
+ // 获取对应平台的版本信息
|
|
|
+ AppVersionManagementVo version = baseMapper.selAppVersionInfoMaxNew(platform);
|
|
|
+ if (version != null) {
|
|
|
+ // 创建更新对象
|
|
|
+ AppVersionManagementBo bo = createUpdateBo(version, sysOssVo.getFileName(), file.getSize(), sysOssVo);
|
|
|
+
|
|
|
+ if(platform.equals("Android")){
|
|
|
+ // 执行更新
|
|
|
+ boolean success = updateByBo(bo);
|
|
|
+ if (success) {
|
|
|
+ log.info("{} 版本信息更新成功", platform);
|
|
|
+ } else {
|
|
|
+ log.error("{} 版本信息更新失败", platform);
|
|
|
+ }
|
|
|
+ }else if(platform.equals("iOS")){
|
|
|
+ // 执行更新
|
|
|
+ boolean success = updateByBo(bo);
|
|
|
+ if (success) {
|
|
|
+ log.info("{} 版本信息更新成功", platform);
|
|
|
+ } else {
|
|
|
+ log.error("{} 版本信息更新失败", platform);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.warn("未找到 {} 平台的版本信息", platform);
|
|
|
+ }
|
|
|
+ log.info("App版本信息异步更新完成");
|
|
|
+ return CompletableFuture.completedFuture(null);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("updateAppVersionAsync 异步更新失败", e);
|
|
|
+ return CompletableFuture.completedFuture(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据文件名确定平台类型
|
|
|
+ */
|
|
|
+ private String determinePlatformFromFileName(String fileName) {
|
|
|
+ if (fileName == null || fileName.isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ String lowerCaseName = fileName.toLowerCase();
|
|
|
+
|
|
|
+ // 检查 Android APK 文件
|
|
|
+ if (lowerCaseName.endsWith(".apk") || lowerCaseName.endsWith(".aab")) {
|
|
|
+ return "Android";
|
|
|
+ }
|
|
|
+ // 检查 iOS IPA 文件
|
|
|
+ else if (lowerCaseName.endsWith(".ipa")) {
|
|
|
+ return "iOS";
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果无法确定,返回 null
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ private AppVersionManagementBo createUpdateBo(AppVersionManagementVo source, String fileName,
|
|
|
+ long fileSize, SysOssVo sysOssVo) {
|
|
|
+ AppVersionManagementBo bo = new AppVersionManagementBo();
|
|
|
+ bo.setId(source.getId());
|
|
|
+ bo.setDownloadLink("https://oss.hunanpt.cn/"+fileName);
|
|
|
+ bo.setUpdatePackageSize(fileSize);
|
|
|
+ bo.setUpdateTime(new Date());
|
|
|
+ bo.setStatus(source.getStatus());
|
|
|
+ bo.setVersionCode(source.getVersionCode());
|
|
|
+ bo.setVersionName(source.getVersionName());
|
|
|
+ bo.setOsType(source.getOsType());
|
|
|
+ bo.setOsSupport(source.getOsSupport());
|
|
|
+ bo.setForceUpdate(source.getForceUpdate());
|
|
|
+ bo.setUpdateContent(source.getUpdateContent());
|
|
|
+ bo.setKnownIssues(source.getKnownIssues());
|
|
|
+ bo.setCreatedAt(source.getCreatedAt());
|
|
|
+ bo.setUpdatedAt(new Date());
|
|
|
+ bo.setOssId(String.valueOf(sysOssVo.getOssId()));
|
|
|
+ return bo;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|